El objetivo principal del programa es encontrar el máximo de una función; es decir, buscar para qué valores x, e y dentro de un rango [a:b,c:d], el valor de una función dada f(x,y) es mayor.
En nuestro ejemplo lo podríamos expresar como: «math xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mi»m«/mi»«mi»§#225;«/mi»«mi»x«/mi»«mo»§#160;«/mo»«mi»f«/mi»«mo»(«/mo»«mi»x«/mi»«mo»,«/mo»«mi»y«/mi»«mo»)«/mo»«mo»§#160;«/mo»«mi»d«/mi»«mi»o«/mi»«mi»n«/mi»«mi»d«/mi»«mi»e«/mi»«mo»§#160;«/mo»«mi»x«/mi»«mo»§#8712;«/mo»«mfenced open=¨[¨ close=¨]¨»«mrow»«mo»-«/mo»«mn»1«/mn»«mo».«/mo»«mn»8«/mn»«mo»:«/mo»«mn»2«/mn»«mo».«/mo»«mn»9«/mn»«/mrow»«/mfenced»«mo»§#160;«/mo»«mo»§#160;«/mo»«mi»y«/mi»«mo»§#8712;«/mo»«mo»[«/mo»«mo»§#160;«/mo»«mo»-«/mo»«mn»1«/mn»«mo».«/mo»«mn»2«/mn»«mo»:«/mo»«mn»2«/mn»«mo».«/mo»«mn»3«/mn»«mo»]«/mo»«/math»
El código implementa dos métodos de optimización que busca mejorar el rendimiento del programa: método montecarlo y Hill climbing. El método montecarlo selecciona puntos de partida aleatorios para cada una de las mc rutas que hayamos especificado, y el hill climbing trazará rutas buscando los puntos vecinos con mayor valor hasta que no haya ningún punto más alto. El problema es que puede ocurrir que nos encontremos máximos locales, y no el máximo global. Si nos fijamos en el gráfico, las cruces corresponderían a estos máximos locales, y la estrella es el máximo global encontrado por una de las 12 rutas.