No al cierre de webs
Proyectos::IAIC::Implementación
Permalink: http://www.treeweb.es/u/524/ 11/11/2010

Implementación

Juego de las garrafas de agua - JuegoGarrafas.java

Para hacer el espacio de estados hemos utilizado tan sólo dos números enteros. Cada uno de ellos representa el número de litros que contiene cada una de las garrafas. Todas las operaciones de este juego se van a basar en leer y escribir sobre dos variables enteras, luego es un juego sumamente veloz en ejecución. Las operaciones que manejamos en la implementación del juego son seis, dos para llenar cada una de las jarras, dos para vaciar cada una de las jarras y dos para traspasar el contenido de una de las jarras a la otra. El costeG del juego es la variación del número de litros de ambas jarras respecto al estado inicial del juego. El costeH es el número de litros que le quedan a la jarra de mayor volumen para llegar a los 2 litros pedidos como solución del juego. El estado inicial del juego es tener ambos atributos inicializados a cero. El estado final del juego es tener un dos en algún atributo.

Juego de los caníbales y los misioneros

Para hacer este juego hemos empleado cuatro atributos enteros. Cada uno de ellos representa la orilla del rio en la que se encuentra el lobo, la cabra, la col y el granjero respectivamente. Las que valen cero representan estar en la orilla derecha y las que valen uno representan estar en la orilla izquierda. Las operaciones que utilizamos son cuantro, y son las mínimas para poder ejecutar el juego. El costeG de cada operación es constante, valiendo 1 cuando se cruza sólo al granjero a la otra orilla, y valiendo 2 cuando se cruza al granjero con alguien (animales y col) más a la otra orilla. El costeH del juego es el número de animales (incluida la col) que faltan por transportar a la orilla destino del juego. El estado inicial del juego tiene todos los atribrutos inicializados a cero. El estado final del juego tiene todos los atributos puestos a uno.

Juego de los caníbales y los misioneros - JuegoMisionerosYCanibales.java

El espacio de estados de este juego está implementado con tres enteros. Dos de ellos representan el número de canibales y misioneros en la orilla izquierda del rio. El otro representa la orilla del rio en la que se encuentra la barca. Los tres atributos cuentan el número de individuos que hay en la orilla izquierda del rio, ya sean canibales, misioneros o la barca. Las operaciones que manejamos en la implementación del juego son cinco. El costeG de cada operacion es constante con valor 2 debido a que en cada desplazamiento se desplazan dos individuos, teniendo que cambiar dos atributos del estado. El costeH del juego es el número de misioneros y el número de canibales que hay en la orilla izquierda del rio. El estado inicial del juego es (3,3,1). El estado final del juego es (0,0,0).

Juego de las torres de Hanoi - JuegoTorresDeHanoi.java

Este juego tiene un espacio de estados compuesto por siete atributos. Tres de ellos son pilas que representan el montón de fichas de Hanoi que hay en cada una de las tres barillas. Otros tres representan la cima de cada una de las pilas. El entero que queda es el número de fichas de Hanoi que contiene la barilla uno iniciálmente. Las operaciones que manejamos son seis, y son todas aquellas combinaciones de fichas que se pueden pasar de una en una de una barilla a otra. El costeG de cada operación es constante, siendo de uno cuando se pasa una ficha a la barilla 2, y de dos cuando se pasa a una barilla no central. El costeH del juego es el número de fichas que faltan para pasar las fichas de la barilla 1 a la barilla 3. El estado inicial del juego se identifica por tener la pila 1 con todas las fichas de Hanoi. El estado final del juego se identifica por tener la pila 3 con todas las fichas de Hanoi.

Juego del 8-Puzzle - JuegoOchoPuzzle.java

Para hacer el espacio de estados de este juego nos hemos basado en una matriz de 3x3, que es el puzzle própiamente dicho, y en dos atributos que representan las coordenadas del hueco dentro del array bidimensional. Las operaciones que manejamos en la implementación del juego son cuatro. Mover a la derecha, a la izquiera, arriba y abajo el hueco dentro del puzzle. El costeG de cada operación es constante de valor 1, que es lo que cuesta mover el hueco una posición. El costeH del juego es el número total de movimientos de todas las piezas del puzzle desde que se empezó a jugar hasta que se terminó. El estado inicial del juego se identifica con cualquier posición de las fichas dentro del puzzle, siempre y cuando no sea la solución. El estado final del juego se identifica con el hueco en el centro de el puzzle, y las fichas ordenadas de menor a mayor entorno a la posición (X,Y) como en un reloj de manillas.

Juego de la huida del laberinto tenebroso - JuegoLaberinto.java

Este juego tiene un espacio de estados compuesto por tres atributos. Dos enteros denotan las coordenadas en las que nos encontramos dentro del laberinto y un array bidimensional que conforma el laberinto própiamente dicho. El array bidimensional está compuesto por celdas que a su vez tienen 4 atributos buleanos, que corresponden a la posibilidad de movernos hacia arriba, abajo, derecha, izquierda, o de no poder al haber muro de ladrillos. Las operaciones que manejamos con esta implementación del laberinto son 4, y corresponen a movernos una posición en el laberinto, siendo a la derecha, a la izquierda, hacia arriba y hacia abajo respectivamente. El costeG de casa una de las operaciones es constante de valor uno al suponer no más que cambiar el atributo de dirección correspondiente. El costeH del juego viene determinado por la distancia entre la salida del laberinto y el punto en el que estamos en el momento actual de juego El estado inicual del laberinto lo hemos fijado en una posición, pero podria ser cualquier otra, y el final lo hemos hecho igual.

Juego de familia japonesa - JuegoFamiliaJaponesa.java

Hemos utilizado para este juego un espacio de estados con siete atributos buleanos que indican las posiciones de cada individuo respecto del rio, y de la barca. Las operaciones que manejamos en esta implementación son once, correspondientes a cada viaje distinto en barca con los dos tripulantes que puede llevar: Para hacer este juego hemos utilizado un espacio de estados constituido por siete atributos buleanos que indican en qué orilla está cada individuo:
  • Cruza el policia
  • Cruza la madre.
  • Cruza el padre con el hijo.
  • Cruza el padre.
  • Cruza la madre con la hija.
  • Cruza la madre con el padre.
  • Cruza el ladron con el policia.
  • Cruza el policia y la hija.
  • Cruza el policia y el padre
  • Cruza el policia y el hijo.
  • Cruza el policia y la madre.
El costeG de cada operación es constante igual a uno cuando sólo se cruza a un individuo, pero cuando se cruzan dos individuos el coste es constante igual a cuatro al tener que hacer cuatro cambios en los atributos para poder realizar la operación. El costeH del juego es el número de individuos que quedan por cruzar para llegar a la orilla destino en tierra firme. El estado inicial del juego será (false,false,false,false,false,false,false). El estado final del juego será (true,true,true,true,true,true,true).

Juego del 9-Puzzle Swaping

Para hacer el espacio de estados de este juego nos hemos basado en una matriz de 3x3, que es el puzzle própiamente dicho. Las operaciones que manejamos en la implementación del juego son doce, y corresponden a todos los posibles intercambios de fichas adyacentes en el puzzle. El costeG de cada operación es constante de valor 1, que es lo que cuesta intercambiar de puesto dos fichas adyacentes. El costeH del juego es el número total de movimientos de todas las piezas del puzzle desde que se empezó a jugar hasta que se terminó. El estado inicial del juego se identifica con cualquier posición de las fichas dentro del puzzle, siempre y cuando no sea la solución. El estado final del juego se identifica con las fichas ordenadas de menor a mayor según el criterio de escritura en una hoja de papel.

Juego del laberinto 3D - JuegoLaberinto3D.java

Este juego tiene un espacio de estados compuesto por cuatro atributos. Tres enteros denotan las coordenadas en las que nos encontramos dentro del laberinto y un array tridimensional que conforma el laberinto própiamente dicho. El array tridimensional está compuesto por celdas que a su vez tienen 6 atributos buleanos, que corresponden a la posibilidad de movernos hacia el norte, sur, este, oeste, arriba o abajo o de no poder movernos al haber muro de ladrillos en esas direcciones. Las operaciones que manejamos con esta implementación del laberinto son 6, y corresponden a movernos una posición en el laberinto, siendo al norte, al sur, al este, al oestem hacia arriba y hacia abajo respectivamente. El costeG de cada una de las operaciones es constante de valor uno al suponer no más que cambiar el atributo de dirección correspondiente. El costeH del juego viene determinado por la distancia entre la salida del laberinto y el punto en el que estamos en el momento actual de juego El estado inicual del laberinto lo hemos fijado en una posición, pero podria ser cualquier otra, y el final lo hemos hecho igual.

Juego de la banana y el mono - JuegoMono.java

Hemos utilizado para este juego un espacio de estados basado en cuatro atributos. Dos de ellos son strings, que denotan la posición del mono y de la caja dentro de la habitación. Otro atributo es un entero que denota si el mono está subido a la caja o no, valiendo 0 si no está subido y 1 si ciertamente lo está. Por último tenemos un atributo buleano que denota si el mono ha cogido la banana o si por el contrario todavia no lo ha cogido. Las operaciones que utilizamos en la implementación son nueve. Cuatro de ellas para desplazar al mono por la habitación, una para coger la banana, y otras para subirse a la caja y moverla. El costeG de cada operación es contante, valiendo uno si el mono se mueve de un punto adyacente a otro de la sala o dos si no son adyacentes y tiene que pasar por un punto intermedio. El costeH del juego es el número de operaciones que quedan para que el mono sea capaz de coger la banana. El estado inicial del juego se identifica de esta manera: ("Puerta",0,"Ventana",false), significando que el juego comienza estando el mono en la puerta, sin haberse subido a la caja, la caja estando al lado de la ventana y sin haber cogido la banana el mono. El estado final del juego se identifica de esta manera: (_,_,_,true), significando que el juego termina cuando el mono haya cogido la banana.

Juego de la casita pintada - JuegoCasa.java

Para hacer el espacio de estados lo hemos hecho de una manera muy eficiente, basándonos en un array de ocho posiciones y en un número entero. El estado costa de dos atributos, uno es un array de ocho posiciones, que almacena para cada posición el número de veces que se ha pintado cada arista de la casita. El otro es un número entero que representa el último vertice pintado, es decir, el punto sobre el que se encuentra el lápiz con el que estamos pintando la casita. De esta manera todas las operaciones se van a basar en recorrer un array de ocho posiciones, hacer accesos al mismo y acceder al dato del vértice en que nos encontramos. Cada posición del array de 8 posiciones está reservada para una univoca arista de la casita (tal y como se muestra en la figura de la descripción). Las operaciones que manejamos en la implementación del juego son dieciseis, dos por cada arista (cada una para cada sentido de pintado de la arista). El costeG de cada operación es constante (concretamente es dos) ya que tenemos dos atributos sobre los cuales hay que hacer una operación de coste constante para cada uno. El costeH del juego es el número de aristas que lleva pintadas hasta el momento de la casita. El estado inicial del juego se identifica por su array inicializado todo a ceros y comenzando en el vértice 1 ó 2. El estado final del juego se identifica por su array completado todo con unos en cada posición.