Hay problemas en los cuales el camino desde el estado inicial hasta la solución no es relevante. Son problemas en los cuales se puede establecer la condición que debe cumplir un estado para ser el estado final y que el sólo hecho de expresarlo ya es solución al problema. Por ejemplo en el juego de las 8 reinas, que consisten poner 8 reinas en un tablero de ajedrez sin que se puedan comer entre sí, no importa como se llega a la disposición de las mismas ya que esta disposición es la solución en sí. Si pudiéramos mostrar o dibujar el estado final no habría problema. Otro problema que tiene estas características es el de disponer las áreas de un chip VLSI. Para este tipo de problemas los algoritmos de mejoramiento iterativo son muy útiles. Se basa en disponer una configuración y luego ir cambiándola para mejorar su calidad hasta llegar a la solución óptima (o en muchos casos subóptima). La optimización de funciones puede encararse con este tipo de algoritmos.
Hillclimbing (Escalada a la cima)
Este método también es denominado disminución de gradiente. Este algoritmo sólo mantiene un nodo y a partir de pequeños cambios va mejorando. Básicamente consiste en utilizar el criterio de único sucesor (en la etapa de refinamiento se mantiene sólo un nodo) y exigiendo que la función heurística sea estrictamente decreciente. Tiene la hipótesis de que al ir hacia mínimos locales se puede alcanzar un mínimo global. Se presenta el riesgo de quedar atrapado por mínimos locales (o máximo si se considera la función de evaluación como costo en vez de calidad). Otro riesgo es el de llegar a una planicie donde no haya variaciones, es decir lugares donde el espacio de estado tenga a la función de evaluación plana.
Para evitar esos problemas se puede aplicar la estrategia de restart aleatorio (reinicio aleatorio). Es decir realizar varias búsquedas con estado de inicio aleatorio hasta parar o hasta que no haya avance significativo. El algoritmo de la figura tiene dos ciclos: uno itera hasta llegar a un optimo local, el otro comienza una nueva búsqueda. Se deben guardar los resultados de cada iteración para obtener el mejor.
Endurecimiento Simulado (Simulated Annealing)
El endurecimiento (o recocido, o fusión) simulado consiste en que: en vez de empezar otra vez cuando se llega a un máximo local, se retrocede algunos pasos (para escapar del máximo local). El algoritmo es similar al Hillclimbing, pero en vez de optar por el mejor sucesor se elige uno al azar, si éste es mejor se avanza, pero sino se avanza con una probabilidad determinada (menor que uno). La probabilidad disminuye exponencialmente con lo malo que sea el nuevo estado.
Para eso se utiliza un parámetro T (temperatura) que a medida que disminuye es menos probable que se acepten los estados malos. Esta técnica se basa en una analogía con el proceso de llegar al equilibrio termal mediante el enfriamiento gradual. En el algoritmo, la función de evaluación correspondería a energía del sistema en ese estado.
A continuación se ve un pseudocódigo del algoritmo:
Simulated annealing
vc:= estado_inicial
inicializar temperatura T
repetir
repetir
vn := seleccionar un sucesor de vc
∆E := h(vn) – h(vc)
si ∆E > 0 entonces
vc := vn
sino
si random(0,1) < e ∆E / T entonces vc := vn fin si
fin si
hasta que (condición de terminación)
T := g(T,t)
t:= t +1
hasta que (criterio se parada)
El algoritmo de simulated annealing presentado tiene varias iteraciones, la función random(0,1) retorna un número al azar entre 0 y 1, la temperatura disminuye mediante la función g(T,t) (g(T,t) <T para todo t). El agoritmo termina para algún valor pequeño de T establecido en el criterio de parada.
Actividad
-
Realizar el árbol de búsqueda para el ejemplo de ir de A hasta E y para el puzzle de las 8 fichas.
-
Realizar los árboles de búsqueda para el grafico del ejemplo pero tomando como partida y final distintas ciudades