[pyar] Buscar máximo

fisa fisadev en gmail.com
Vie Ene 17 20:29:13 ART 2014


No requiere saber si es izquierda o derecha. En cada iteración de ese
while, se queda con el x que mejor f(x) tenga, y luego mira a los
costados de ese nuevo x.
Imaginemos una función donde el máximo está en x=10, y usamos el rango
a=0, b=50.

Actual arranca valiendo 25.

Primera iteración:

Vecinos serían 24.999 y 25.001.
Mejor vecino sería 24.999, porque f crece hacia ese lado (máximo en x=10)
f(mejor_vecino) es mayor que f(actual) (porque f(24.999) > f(25), f
sube hacia la izquierda)
Por lo que pasa a tener actual=24.999

Segunda iteración:

Vecinos serían 24.998 y 25.
Mejor vecino sería 24.998
f(mejor_vecino) es mayor que f(actual) (porque f(24.998) > f(24.999))
Entonces actual=24.998

Y así sucesivamente.
Nunca necesitamos el concepto de "izquierda o derecha". Simplemente
vamos quedándonos con el mejor x, y descubriendo nuevos x a partir de
ese mejor, sucesivamente.
Es un algoritmo probado, no es invento mío :)



El día 17 de enero de 2014, 20:12, Angel Java Lopez
<ajlopez2000 en gmail.com> escribió:
> Ah, con respecto a hill_climbing, la direccionalidad se pierde si
> hill_climbing devuelve el punto medio de a y b. No se sabe si el maximo
> queda a la izquierda o a la derecha de ese punto.
>
>
> 2014/1/17 Angel Java Lopez <ajlopez2000 en gmail.com>
>>
>> Si, pero parece que con vecinos(...), se pierde la direccionalidad. Al
>> final, no se sabe si el maximo esta a la izquierda o a la derecha del
>> resultado de hill_climbing. No veo claro como seguir explorando luego
>>
>>
>> 2014/1/17 fisa <fisadev en gmail.com>
>>>
>>> El resultado de hill_climbing ya es un x cercano al x con máximo f(x),
>>> no es que ese resultado deba usarse en futuras iteraciones.
>>> Se llama solo una vez a hill_climbing, con a y b en los límites
>>> definidos del problema :)
>>>
>>> El día 17 de enero de 2014, 20:05, Angel Java Lopez
>>> <ajlopez2000 en gmail.com> escribió:
>>> > Hmmm... pero que se hace con el resultado de la funcion hill_climbing?
>>> > como
>>> > se usa ese resultado en la proxima iteracion? Cuales son los a y b en
>>> > la
>>> > proxima iteracion?
>>> >
>>> >
>>> > 2014/1/17 fisa <fisadev en gmail.com>
>>> >>
>>> >> El día 17 de enero de 2014, 19:46, Alejandro Santos
>>> >> <listas en alejolp.com> escribió:
>>> >> > 2014/1/17 fisa <fisadev en gmail.com>:
>>> >> >> Ah! leí mal. Si no puede tener varios máximos locales, entonces
>>> >> >> hago
>>> >> >> un hill climbing normal, que es suficiente :)
>>> >> >>
>>> >> >
>>> >> > Es la primera vez que escucho del Hill Climbing. ¿Cómo sería en
>>> >> > código?
>>> >> > :D
>>> >> >
>>> >>
>>> >> Algo así (versión amoldada a este problema en especial):
>>> >>
>>> >> def hill_climbing():
>>> >>     actual = (a + b) / 2  # medio entre a y b
>>> >>     while True:
>>> >>         mejor_vecino = vecino con f más alto en vecinos(actual)
>>> >>         if f(actual) > f(mejor_vecino):
>>> >>             return actual
>>> >>         else:
>>> >>             actual = mejor_vecino
>>> >>
>>> >> def vecinos(x):
>>> >>     return (x + 0.001, x - 0.001)
>>> >>
>>> >> Como decía, elegiría esto nomás por gusto. No es una solución exacta,
>>> >> ni el algoritmo más eficiente. Pero es entretenido y simple, y en
>>> >> muchos casos "good enough" :)
>>> >> Básicamente lo que hace es moverse de costado por el eje x, para el
>>> >> lado que ve que sube el valor de f(x), hasta que encuentra un punto
>>> >> donde para ninguno de los dos costados sube el valor de f (mirando de
>>> >> a saltos de 0.001 en x).
>>> >>
>>> >> Saludos!
>>> >>
>>> >> --
>>> >> fisa  -  Juan Pedro Fisanotti
>>> >> _______________________________________________
>>> >> pyar mailing list pyar en python.org.ar
>>> >> http://listas.python.org.ar/listinfo/pyar
>>> >>
>>> >> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>> >>
>>> >> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> >> Argentina - http://www.usla.org.ar
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > pyar mailing list pyar en python.org.ar
>>> > http://listas.python.org.ar/listinfo/pyar
>>> >
>>> > PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>> >
>>> > La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> > Argentina - http://www.usla.org.ar
>>>
>>>
>>>
>>> --
>>> fisa  -  Juan Pedro Fisanotti
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>
>>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar



-- 
fisa  -  Juan Pedro Fisanotti


More information about the pyar mailing list