Mundo de Wumpus
Mundo de Wumpus
Mundo de Wumpus
Ingeniera en Sistemas.
Inteligencia Artificial.
Ing. Hugo Daz
Ing. Samuel Recinos
PROYECTO
MUNDO DE WUMPUS
Integrantes:
Hugo Eduardo Morn M. 0900-08-9561
Hugo Alexander Muoz Garca 0900-07-53
Byron Duarte 0900-09-12461
Efrain Paredes 0900-07-3598
AGENTE BASADO EN
MUNDO DE WUMPUS).
CONOCIMIENTOS
(SOLUCIN
la
la
a
la
Representacin y funcionamiento
Si el agente cazador es un agente basado en conocimiento, su
comportamiento estar determinado por la base de conocimiento de que
dispone.
La base de conocimiento contendr un conocimiento inicial, pero su
contenido ira variando con el funcionamiento del agente.
El bucle de funcionamiento bsico ser:
1. Percibir y aadir la informacin obtenida a la base de conocimiento.
2. Deducir que accin llevar a cabo, de acuerdo con el conocimiento
disponible.
3. Llevar a cabo la accin seleccionada y aadir esta informacin en la
base de conocimiento.
Conocimiento y modelos posibles
Dada una base de conocimiento K, hay que considerar tres clases
De modelos:
1. Los modelos lgicos de K.
2. Los modelos que representan entornos reales.
3. El modelo que representa al entorno en el que est el agente.
SOLUCION
Se procedi a crear un programa utilizando el lenguaje java para tratar
de crear un agente basado en conocimientos que lograr simular un
movimiento inteligente, donde sin ayuda del usuario pueda resolver el
problema, eligiendo cuidadosamente qu camino seguir en
consideracin a su base de conocimientos, logrando as alcanzar el
objetivo de alcanzar el oro o bien seguir con vida.
A continuacin presentaremos el cdigo fuente generado para este
programa, donde se explicar que realiza cada una de las
funcionalidades del cdigo.
import java.awt.Image;
// r =riesgo
import java.awt.*;
// m = muerte
import java.awt.event.*;
// s = segura
//Para imagen
import java.util.Random;
//Variables de resultados
//variables de manipulacin
String error_mensaje;
//Constantes
return i;
return -1;
int
int
Color
amarillo
}
=
azul
final Color
Color(232,232,232);
gris
new
return r.nextInt(rango) +
min;
new
Font f;
//Resto de variables a usar
Button b_iniciar;
Random r = new
Random();
}
//Crea botones y agrega su
Action Listener
public Button crear_boton( String
nombre_boton, int x, int y){
Button boton;
boton
Button( nombre_boton );
new
boton.setActionCommand(nom
bre_boton);
boton.setBounds(x, y, 100, 25);
campo_texto = new
TextField(tamano);
campo_texto.setForeground(a
zul);
campo_texto.setBackground(
color);
campo_texto.setBounds(x, y,
tamano, 25);
add( boton );
boton.addActionListener(this);
if(pass)
return boton;
campo_texto.setEchoChar(
'*');
add(campo_texto);
return campo_texto;
}
public void init()
{
img=getImage(getCodeBase(),
"http://www.produccioneschapinas.n
et/images/miniluffy.jpg");
img2=getImage(getCodeBase(
),"http://www.produccioneschapinas
.net/images/wumpu.jpg");
img3=getImage(getCodeBase(
),"http://www.produccioneschapinas
.net/images/tesoro.jpg");
img4=getImage(getCodeBase(
),"http://www.produccioneschapinas
.net/images/oyo.jpg");
//Configuracion lienso y
double buffer
setSize(700,550);
offscreenImage=createImage(
getSize().width,getSize().height);
offscreeng=offscreenImage.ge
tGraphics();
offscreeng.setColor(naranja);
setBackground(naranja);
setLayout(null);
txt_p_o1.setText("5");
l_instruccion1 =
crear_etiqueta(" Oyo 1",azul,25,125,
50, 105);
txt_p_o2 =
crear_campo_texto(40, 10, 135,
blanco, false);
txt_p_o2.setText("8");
//Creando objetos de
etiqueta
f = new
("verdana",Font.BOLD,30);
Font
l_instruccion1 =
crear_etiqueta(" Oyo 2",azul,25,125,
50, 135);
txt_p_o3 =
10, 165,
l_titulo = crear_etiqueta("ONE
PIECE WUMPUS WORLD",marron,
40,450, 150, 0);
crear_campo_texto(40,
blanco, false);
f = new
("verdana",Font.BOLD,12);
Font
//Manejadores de espacio
l_instruccion1 =
crear_etiqueta(" Oyo 3",azul,25,200,
50, 165);
l_instruccion1 =
crear_etiqueta("PARAMETROS:",negr
o,25,400, 10, 40);
txt_p_o
=
crear_campo_texto(40, 10, 195,
blanco, false);
f = new
("verdana",Font.PLAIN,10);
Font
//Manejadores de variables
crear_campo_texto(40,
blanco, false);
txt_p_w
=
10,
75,
txt_p_w.setText("1");
l_instruccion1 =
crear_etiqueta("
Posicion
Wumpu",azul,25,200, 50, 75);
txt_p_o1 =
crear_campo_texto(40, 10, 105,
blanco, false);
txt_p_o3.setText("12");
txt_p_o.setText("4");
l_instruccion1 =
crear_etiqueta("Oro",azul,25,200,
50, 195);
//Integrantes
f = new
("verdana",Font.BOLD,12);
Font
l_instruccion1 =
crear_etiqueta("Hugo Morn 090008-9561
(HEMM)",marron,25,200,
450, 50);
l_instruccion1 =
crear_etiqueta("Byron Duarte 090009-12461",marron,25,200, 450, 70);
notify();
}
}
l_instruccion1 =
crear_etiqueta("Alex Muoz 090007-53",marron,25,200, 450, 90);
l_instruccion1 =
crear_etiqueta("Efran
Paredez
0900-07-3598",marron,25,200, 450,
110);
}
}
//Declaro las acciones que
deseo realizar
public
void
actionPerformed(ActionEvent ev)
//Creando botones de
control
b_iniciar
crear_boton( "Iniciar",50,225);
{
//Comparando
viendo el evento
botones
if
("Iniciar".equals(ev.getActionComm
and())) {
this.limpiar_tablero();
error = false;
if(iniciar){
iniciar = false;
if ( t == null ) {
t = new Thread( this );
b_iniciar.setLabel("Iniciar"
);
this.limpiar_tablero();
t.setPriority( Thread.MIN_PRIO
RITY );
}else{
threadSuspended = false;
iniciar = true;
t.start();
b_iniciar.setLabel("Detene
r");
}
else {
if ( threadSuspended ) {
threadSuspended = false;
synchronized( this ) {
try{
//Obteniendo los
valores de posicin
p_w =
Integer.parseInt(txt_p_w.getText());
p_o1 =
Integer.parseInt(txt_p_o1.getText());
p_o2 =
Integer.parseInt(txt_p_o2.getText());
iniciar = false;
b_iniciar.setLabel("Inici
ar");
}
p_o3 =
Integer.parseInt(txt_p_o3.getText());
nums[2] = p_o1;
p_o =
Integer.parseInt(txt_p_o.getText());
if(buscar_arreglo(nums,p_
o2) != -1 || p_o2 <1 || p_o2 >16 ){
error = true;
}catch(Exception err){
error = true;
error_mensaje =
"Problemas
con
los
datos
ingresados recuerde deben ser
numericos";
error_mensaje = "Error
en la posicin del Oyo 2";
iniciar = false;
b_iniciar.setLabel("Inici
ar");
nums[3] = p_o2;
if(buscar_arreglo(nums,p_
o3) != -1 || p_o3 <1 || p_o3 >16 ){
error = true;
error = true;
error_mensaje = "Error
en la posicion del Wumpu ";
error_mensaje = "Error
en la posicin del Oyo 3";
iniciar = false;
iniciar = false;
b_iniciar.setLabel("Inici
ar");
b_iniciar.setLabel("Inici
ar");
}
}
nums[1] = p_w;
if(buscar_arreglo(nums,p_
o1) != -1 || p_o1 <1 || p_o1 >16 ){
error = true;
error_mensaje = "Error
en la posicin del Oyo 1";
nums[4] = p_o3;
if(buscar_arreglo(nums,p_
o) != -1 || p_o <1 || p_o >16 ){
error = true;
error_mensaje = "Error
en la posicin del Oro";
iniciar = false;
tablero[i]
b_iniciar.setLabel("Inici
[j].agregar_miembro("t");
ar");
vec = tablero[i]
[j].vec;
}
int[] oyos
={p_o1,p_o2,p_o3};
this.agregar_elem
ento(vec,"r");
}
int[][] vec;
}
//Asignamos la
ubicacion
if(buscar_arreglo(oyo
s,tablero[i][j].p)!= -1){
repaint();
tablero[i]
[j].agregar_miembro("o");
}
vec = tablero[i]
[j].vec;
this.agregar_elem
ento(vec,"b");
p_w){
tablero[i]
[j].agregar_miembro("w");
da[0] = mx+50*pos;
vec = tablero[i]
[j].vec;
}
this.agregar_elem
ento(vec,"h");
}
if(tablero[i][j].p ==
p_o){
da[1] = my;
da[0] = mx+50*(pos-4);
da[1] = my+50;
pos++;
if(i ==0){
da[0] = mx+50*(pos-8);
vec[0][0] = -1;
da[1] = my+100;
vec[0][1] = -1;
}else{
vec[0][0] = i-1 ;
vec[0][1] = j ;
da[0] = mx+50*(pos-12);
da[1] = my+150;
if((j+1)==4){
vec[1][0] = -1;
da[2] = pos;
vec[1][1] = -1;
return da;
}else{
vec[1][0] = i ;
vec[1][1] = j+1 ;
}
if((i+1)==4){
xa =3;
vec[2][0] = -1;
ya =0;
vec[2][1] = -1;
}else{
int[] par;
vec[2][0] = i+1 ;
int[][] vec ;
vec[2][1] = j ;
//Nuevo procesos
if(j ==0){
vec[3][0] = -1;
vec[3][1] = -1;
}else{
offscreeng.setColor(negro);
vec[3][0] = i ;
//Rayando el cuadro
vec[3][1] = j-1 ;
offscreeng.drawLine(250,300,2
50,500);
offscreeng.drawLine(300,300,3
00,500);
par =
this.get_parametro(pos);
offscreeng.drawLine(350,300,3
50,500);
tablero[i][j] = new
casilla(par,vec, "p");
offscreeng.drawLine(200,350,4
00,350);
offscreeng.drawLine(200,400,4
00,400);
offscreeng.drawLine(200,450,4
00,450);
}
}
dibuja_tablero();
if(iniciar)
//Importante
aca
se
dibujando cada uno de
elementos del sistema
va
los
movimiento_agente();
/*
dibuja_cpu();
dibuja_procesados();
f
=
new
Font("verdana",Font.PLAIN,11);
offscreeng.setFont(f);
offscreeng.setColor(naranja);
offscreeng.fillRect(0,0,700,550
);
//Dibujando contorno
offscreeng.setColor(blanco);
dibuja_bloqueados();*/
}
public
void
agregar_elemento(int[][] vec,String
e) {
for(int i =0; i<4;i++){
if(vec[i][0]!=-1){
tablero[vec[i][0]][vec[i]
[1]].agregar_elemento(e);
offscreeng.fillRect(200, 300,
200, 200);
int n2=0;
int n3=0;
int n4=0;
int n5=0;
int n6=0;
for(int i =0; i<4;i++){
if(vec[i][0]!=-1){
if(tablero[vec[i][0]][vec[i]
[1]].get_estado().equals("p")
||
tablero[vec[i][0]][vec[i]
[1]].get_estado().equals("?"))
if(tablero[i]
[j].get_estado().equals("s"))
tablero[vec[i][0]][vec[i]
[1]].cambiar_estado(e);
if(tablero[i]
[j].get_estado().equals("?"))
n++;
n2++;
d[0] = n;
d[1] = n2;
for(int i =0; i<4;i++){
if(vec[i][0]!=-1){
if(tablero[vec[i][0]][vec[i]
[1]].get_estado().equals("v"))
n3++;
if(tablero[vec[i][0]][vec[i]
[1]].get_estado().equals("?"))
n4++;
}
public int[] memoria(int[][] vec){
int[] d= new int[6];
int n=0;
if(tablero[vec[i][0]][vec[i]
[1]].get_estado().equals("s"))
n5++;
if(tablero[vec[i][0]][vec[i]
[1]].get_estado().equals("m"))
}
}
n6++;
}
//System.out.println(xa+"
d[2] = n3;
"+ya);
if(tablero[xa][ya].bandera1){
d[3] = n4;
d[4] = n5;
if(tablero[xa]
[ya].get_miembro().equals("a")){
d[5] = n6;
tablero[xa]
[ya].eliminar_miembro();
return d;
int vec[][];
int a =0;
String s="";
vec=tablero[xa][ya].vec;
int[] mem =
this.memoria(vec);
if(n>0){
for(int i =0; i<4;i++){
if(vec[i][0]!=-1 &&
tablero[vec[i][0]][vec[i]
[1]].get_estado().equals(e)){
if(mem[3]==1 &&
mem[5]==0){
this.agregar_muerto(ve
c);
this.dibuja_tablero();
fila++;
if(fila == n){
mem =
this.memoria(vec);
xa=vec[i][0];
ya=vec[i][1];
}
}
else if(mem[3] == 1 &&
mem[5] == 1)
{
this.agregar_estado(ve
}
}
c,"s");
this.dibuja_tablero();
mem =
this.mover_agente(vec,
a, s);
this.memoria(vec);
}
if(mem[4]> 0){
}
a = mem[4];
s = "s";
// this.mover_agente(vec,
a, s);
else if(mem[0]> 0 &&
}else{
mem[2]> 0){
error = true;
a = mem[2];
s = "v";
}
else if(mem[3] >0)
{
a = mem[3];
s = "?";
}
else if(mem[2]>0){
a = mem[2];
s = "v";
}
//
System.out.println(mem[0]+"-"+me
m[1]+"-"+mem[2]+"-"+mem[3]+"-"
+mem[4]+"-"+mem[5]);
if(a == 1)
error_mensaje
="HAS CAIDO EN LA TRAMPA DEL
PEOR WUMPU en la posicin:"+pos;
tablero[xa]
[ya].agregar_miembro("a");
}
offscreeng.drawImag
e(img2, 400, 200, this);
}
public void dibuja_tablero(){
offscreeng.drawString(Int
eger.toString(tablero[i][j].p),
tablero[i][j].x, tablero[i][j].y);
}else{
pcx= tablero[i][j].x+5;
tablero[xa][ya].paso=true;
tablero[xa]
[ya].cambiar_estado("v");
ey = pcy= tablero[i]
[j].y+5;
mx= tablero[i][j].x+10;
int vec[][];
my= tablero[i][j].y+10;
vec=tablero[xa][ya].vec;
e1x= tablero[i][j].x+10;
if((tablero[xa][ya].bandera3
|| tablero[xa][ya].bandera2) && !
tablero[xa][ya].bandera4){
e2x = e1x+10;
e3x = e2x+10;
this.agregar_estado(vec,
"?");
e3y=e2y = e1y=
tablero[i][j].y+10;
ex= pcx+25;
}else{
this.agregar_estado(vec,
"s");
if(!tablero[i]
[j].get_estado().equals("v")){
}
if(tablero[i]
[j].get_estado().equals("p"))
offscreeng.drawIm
age(img, mx, my, this);
offscreeng.setColor(
negro);
if(tablero[i]
else if(tablero[i]
[j].get_estado().equals("s"))
offscreeng.setColor(
verde);
else if(tablero[i]
[j].get_estado().equals("m"))
[j].bandera2){
offscreeng.setColo
r(azul);
offscreeng.drawSt
ring("B", e1x,e1y);
}
offscreeng.setColor(r
ojo);
if(tablero[i]
[j].bandera3){
else if(tablero[i]
[j].get_estado().equals("?"))
offscreeng.setColor(
amarillo);
offscreeng.setColo
r(rojo);
offscreeng.drawSt
ring("H", e2x,e2y);
offscreeng.fillRect(pcx,
if(tablero[i]
[j].bandera4){
offscreeng.setColo
}else{
r(marron);
if(tablero[i]
[j].bandera1
&&
(!tablero[i]
[j].get_miembro().equals("a"))){
offscreeng.drawSt
ring("R", e3x,e3y);
}
offscreeng.setColor(
azul);
offscreeng.drawStrin
g(tablero[i][j].get_miembro(),
mx,my);
}
}else{
}
if(tablero[i]
[j].bandera1){
try {
while (true) {
if(iniciar){
dibuja_fondo(g);
if ( threadSuspended )
if(error){
synchronized( this ) {
while
f = new
Font("verdana",Font.BOLD,14);
( threadSuspended ) {
offscreeng.setFont(f);
wait();
}
}
offscreeng.setColor(azul);
offscreeng.drawString(error_
mensaje, 10, 540);
}
repaint();
t.sleep(quantum); //
Intervalo o velocidad del programa
}
}
}
g.drawImage(offscreenImage,0
,0,this);
}
}
public class casilla {
catch (InterruptedException e) {
private
miembro="";
}
String
boolean
bandera1
=false,bandera2 =false, bandera3
= false, bandera4=false;
boolean paso = false;
//Aplicamos implicito
estado,
}
public String get_miembro(){
return miembro;
x = par[0];
y =par[1];
p = par[2];
vec = vecinos;
estado = est;
bandera1=false;
//Obteniendo datos
miembro = "";
}
estado = est;
public
void
agregar_elemento(String ele){
System.out.print(vec[k]
[l]);
if(ele.equals("b"))
bandera2=true;
System.out.println("-----");
else if(ele.equals("h"))
bandera3=true;
else if(ele.equals("r"))
bandera4=true;
}
public
void
agregar_miembro(String mie){
bandera1=true;
miembro = mie;
}
}
Paso 2:
Paso 3:
Paso 5:
Paso 2:
Conclusin:
En este proyecto se logro el objetivo de crear un ente inteligente que
trabajara con base de conocimientos. Este juego El mundo de Wumpus
ilustra de una manera prctica y entretenida como la inteligencia
artificial puede llevarse a cabo en situaciones de tomas de decisin sin
ejercer ningn contacto por medio del usuario, realizando la maquina el
razonamiento y toma de decisiones en base a el conocimiento adquirido
por cada una de las experiencias obtenidas por las acciones que realiza
en el trayecto. Esperamos que este trabajo pueda ser de ayuda para
explicar el tema de los sistemas basados en conocimientos y que pueda
cumplir con las expectativas de los catedrticos.