lProblema de la aspiradora:
»Se dispone de una aspiradora con acceso a dos habitaciones y con la capacidad de aspirar basura
- »8 posibles estados
- –2 estados objetivo
- »3 posibles acciones
- »Mundo: 2 posibles posiciones
- –Sucio - limpio
lEstado inicial: multiestado
lCada operador obtiene un multiestado a partir de otro multiestado.
Solución:
package com.carlos.algoritmo;
/**
*
* @author principal
*/
//Se define el nodo de un arbol, este tiene un valor y puede tener 1 nodo derecho y/o 1 nodo izquierdo
public class Estado {
private boolean suciedadHabitacionIzq; //se define true si esta sucio en la habitacion
private boolean suciedadHabitacionDer;
private int posAspiradora; // si es 0 habitacion izq. si es 1 esta en habitaciòn der.
//public Estado() { //constructor
//}
public Estado() { //Se define un estado segun los valores
this.suciedadHabitacionIzq = true;
this.suciedadHabitacionDer = true;
this.posAspiradora = 0;
}
public Estado(boolean suciedadHabitacionIzq, boolean suciedadHabitacionDer, int posAspiradora) { //Se define un estado segun los valores
this.suciedadHabitacionIzq = suciedadHabitacionIzq;
this.suciedadHabitacionDer = suciedadHabitacionDer;
this.posAspiradora = posAspiradora;
}
public void setSuciedadHI(boolean sucio){ //Def. suciedad habitaciòn inquierda
this.suciedadHabitacionIzq=sucio;
}
public void setSuciedadHD(boolean sucio){
this.suciedadHabitacionDer=sucio;
}
public boolean getSuciedadHI() {
return suciedadHabitacionIzq;
}
public boolean getSuciedadHD() {
return suciedadHabitacionDer;
}
public void setPosAspiradora(int valor) {
this.posAspiradora = valor;
}
public void succiona(){ //succiona la posicion actual
if (this.posAspiradora==0)
{ this.suciedadHabitacionIzq=false; //limpia habitacion izquierda
System.out.println("Limpia habitaciòn izquierda");
}
else
{ this.suciedadHabitacionDer=false; //limpia hab. derecha
System.out.println("Limpia habitaciòn derecha");
}
}
public void insertar() //q es esl estado inicial
{
System.out.println("Comienza metodo insertar");
while((this.suciedadHabitacionIzq==true)||(this.suciedadHabitacionDer==true)){ //Mientras no sea estado final
if (this.posAspiradora==0) { //si esta en la habitacion 0-izquierda
if (this.suciedadHabitacionIzq==true) { //si esta sucia la habitacion izquierda..
this.succiona(); //limpia habitacion
//mover hacia la derecha
this.setPosAspiradora(1);
System.out.println("Aspiradora se mueva a la habitaciòn de la derecha");
//this.insertar();
}
}
else {
if (this.suciedadHabitacionDer==true) { //si esta sucia la habitacion derecha..
this.succiona(); //limpia habitacion
//mover hacia la izquierda
//mover hacia la derecha
this.setPosAspiradora(0);
System.out.println("Aspiradora se mueva a la habitaciòn de la izquierda");
//this.insertar();
}
}
} //fin while
System.out.println("Se ha llegado al estado final, las habitaciones estan limpias");
}
}
/**
*
* @author principal
*/
//Se define el nodo de un arbol, este tiene un valor y puede tener 1 nodo derecho y/o 1 nodo izquierdo
public class Estado {
private boolean suciedadHabitacionIzq; //se define true si esta sucio en la habitacion
private boolean suciedadHabitacionDer;
private int posAspiradora; // si es 0 habitacion izq. si es 1 esta en habitaciòn der.
//public Estado() { //constructor
//}
public Estado() { //Se define un estado segun los valores
this.suciedadHabitacionIzq = true;
this.suciedadHabitacionDer = true;
this.posAspiradora = 0;
}
public Estado(boolean suciedadHabitacionIzq, boolean suciedadHabitacionDer, int posAspiradora) { //Se define un estado segun los valores
this.suciedadHabitacionIzq = suciedadHabitacionIzq;
this.suciedadHabitacionDer = suciedadHabitacionDer;
this.posAspiradora = posAspiradora;
}
public void setSuciedadHI(boolean sucio){ //Def. suciedad habitaciòn inquierda
this.suciedadHabitacionIzq=sucio;
}
public void setSuciedadHD(boolean sucio){
this.suciedadHabitacionDer=sucio;
}
public boolean getSuciedadHI() {
return suciedadHabitacionIzq;
}
public boolean getSuciedadHD() {
return suciedadHabitacionDer;
}
public void setPosAspiradora(int valor) {
this.posAspiradora = valor;
}
public void succiona(){ //succiona la posicion actual
if (this.posAspiradora==0)
{ this.suciedadHabitacionIzq=false; //limpia habitacion izquierda
System.out.println("Limpia habitaciòn izquierda");
}
else
{ this.suciedadHabitacionDer=false; //limpia hab. derecha
System.out.println("Limpia habitaciòn derecha");
}
}
public void insertar() //q es esl estado inicial
{
System.out.println("Comienza metodo insertar");
while((this.suciedadHabitacionIzq==true)||(this.suciedadHabitacionDer==true)){ //Mientras no sea estado final
if (this.posAspiradora==0) { //si esta en la habitacion 0-izquierda
if (this.suciedadHabitacionIzq==true) { //si esta sucia la habitacion izquierda..
this.succiona(); //limpia habitacion
//mover hacia la derecha
this.setPosAspiradora(1);
System.out.println("Aspiradora se mueva a la habitaciòn de la derecha");
//this.insertar();
}
}
else {
if (this.suciedadHabitacionDer==true) { //si esta sucia la habitacion derecha..
this.succiona(); //limpia habitacion
//mover hacia la izquierda
//mover hacia la derecha
this.setPosAspiradora(0);
System.out.println("Aspiradora se mueva a la habitaciòn de la izquierda");
//this.insertar();
}
}
} //fin while
System.out.println("Se ha llegado al estado final, las habitaciones estan limpias");
}
}
/////FIN CLASE
////
package com.carlos.algoritmo;
/**
*
* @author Carlos
*/
public class Algoritmo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Estado estadoinicial= new Estado(); //crea un nuevo estado con las habitaciones sucias
System.out.println("Creado el estado incial");
estadoinicial.insertar();
}
}
SALIDA POR PANTALLA:
/**
*
* @author Carlos
*/
public class Algoritmo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Estado estadoinicial= new Estado(); //crea un nuevo estado con las habitaciones sucias
System.out.println("Creado el estado incial");
estadoinicial.insertar();
}
}
SALIDA POR PANTALLA:
bueno solo que no funciona cuando pongo true, false 1
ResponderEliminar