Antes de la implementación, se definirá el nuevo problema de búsqueda. Para la definición de estados y operadores se seguirán las indicaciones expresadas en la descripción del problema, y se definirán dos heurísticas para A*.
busqueda.c curses.c estado.c heuristica.c nodos.c operadores.c puzzle.c
busqueda.h estado.h heuristica.h nodos.h operadores.h puzzle.h
La explicacion del contenido de estos ficheros se puede encontrar en
http://www.dc.fi.udc.es/ai/people/barreiro/iadocen/puzzle8-98/indiceheaders.html
El diseño del programa facilita su adaptación a otros problemas ya que sólo se necesitarán cambiar ciertos aspectos sin necesidad de modificar los algoritmos de búsqueda.
typedef struct
{ int filaEspacioBlanco, colEspacioBlanco; ficha** tablero; } estado; |
operador listaOperadores[NUM_OPERADORES] =
{ {aplicableMoverNorte, moverNorte}, {aplicableMoverSur, moverSur}, {aplicableMoverEste, moverEste}, {aplicableMoverOeste, moverOeste} }; estado* moverNorte(estado);
|
estado* moverNorte(estado einicial)
{ estado *pefinal; int filaEB = einicial.filaEspacioBlanco; int colEB = einicial.colEspacioBlanco; pefinal = crearEstado();
pefinal->filaEspacioBlanco = filaEB - 1; return pefinal;
bool aplicableMoverNorte(estado e)
|
En el problema bumper cars, los operadores son aplicables si al menos uno de los coches puede moverse.
heuristica listaHeuristicas[] =
{ heuristicaDistancias, heuristicaAciertos, heuristicaAnchura }; coste heuristicaAciertos(estado e, estado emeta);
|
coste heuristicaAciertos(estado e, estado emeta)
{ int f, c, result; result = 0;
return result;
|
Hay que definir al menos dos heurísticas para el nuevo dominio.