Você está na página 1de 29

Universidad Mariano Glvez

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 Inteligencia Artificial empez como resultado de la investigacin en


psicologa cognitiva y lgica matemtica. Se ha encaminado sobre
explicacin del trabajo mental y construccin de algoritmos de solucin
problemas de propsito general. Punto de vista que favorece la abstraccin y
generalidad.

la
la
a
la

La Inteligencia Artificial es una mezcla de la ciencia del computador, fisiologa y


filosofa, tan general y amplio como eso, es que rene varios campos (robtica,
sistemas expertos, por ejemplo), todos los cuales tienen en comn la creacin
de mquinas que pueden "pensar"
Es as como los sistemas de administracin de base de datos cada vez ms
sofisticados, la estructura de datos y el desarrollo de algoritmos de insercin,
anulado y traspaso de datos, as como el ensayo de introducir mquinas
capaces de realizar tareas que son pensadas como tpicas del mbito de la
inteligencia humana, batieron el trmino Inteligencia Artificial en 1956
Disciplina cientfico-tcnica que trata de introducir sistemas artificiales capaces
de conductas que, de ser ejecutados por seres humanos, se expresara que
solicitan inteligencia.
Estudio de los dispositivos de la inteligencia y las tecnologas que lo
mantienen.
Desde sus comienzos hasta la actualidad, la Inteligencia Artificial ha tenido que
hacer frente a una serie de problemas.
Sistemas Basados en Conocimiento.
Los procedimientos generales desarrollados para la resolucin de dificultades y
tcnicas de bsqueda al inicio de la era de la Inteligencia Artificial demostraron
no ser bastantes para resolver los problemas encaminados a las aplicaciones,
ni fueron capaces de satisfacer las difciles exigencias de la investigacin.
A este conjunto de mtodos, procedimientos y tcnicas, se lo presenta como
Inteligencia Artificial Dbil. La principal conclusin que se procedi de este
trabajo inicial fue que los problemas difciles slo lograran ser resueltos con el
auxilio del conocimiento especfico acerca del dominio del problema.
Experiencia, Habilidades y Conocimiento.
Los ejemplos de experiencia que son de inters en los mtodos basados en
conocimiento, pueden ser clasificados en tres categoras: asociativa, motora y
terica.
Los sistemas basados en conocimiento son excelentes para simbolizar
conocimiento asociativo. Este ejemplo de experiencia refleja la destreza

heurstica o el conocimiento que es logrado mayoritariamente, a travs de la


investigacin.
Puede ser que no se perciba puntualmente lo que sucede al interior de un
sistema (caja negra), pero se pueden asociar entradas o estmulos con salidas
o respuestas, para solucionar problemas que han estado previamente
conocidos.
La prctica motora es ms fsica que cognitiva. La destreza se logra
esencialmente a travs del ejercicio y la prctica fsica constante
La experiencia terica y el conocimiento profundo permite que los humanos
logren solucionar problemas que no se han visto antes, es decir, no existe una
posibilidad asociativa.
El diseo de un sistema basado en conocimiento de alguna manera manifiesta
la estructura cognitiva y los procesos humanos. La primera parte es la memoria
de largo plazo, en la que guarda los casos (Base de Hechos) y los
conocimientos (Base de Conocimientos) acerca del dominio en el que tiene
experiencia.
Tecnologa de los Sistemas Basados en Conocimiento.
Desde el punto de vista tecnolgico, los Sistemas Basados en Conocimiento
logran mostrar varias formas de aplicacin:
Aislada: un Sistema Basado en Conocimiento nico se relaciona con el entorno.
Integrada: varios Sistemas Basados en Conocimiento interrelacionados a bases
de conocimiento comunes
Embebida: un Sistema Basado en Conocimiento est compuesto con otros
sistemas y no se lo distingue.
Componentes: software de interfaz, base de datos, programa computacional.
1) El software de interfaz, mediante el cual el usuario expresa preguntas a
ste, el sistema experto pide ms informacin a partir del usuario y ste le
expone al usuario la causa de razonamiento utilizado para alcanzar a una
respuesta.
2) La base de datos, llamada la base de conocimiento que consiste de axiomas
(hechos) y reglas para hacer inferencias a partir de esos hechos acerca del
dominio del sistema.
3) El programa computacional, llamado el motor de inferencia, elabora el
proceso de hacer inferencias, interpreta y evala los hechos en la base de
conocimiento para proveer una respuesta.

PROBLEMA MUNDO DE WUMPUS

Descripcin del agente


Percepciones (restringidas a la casilla que ocupa):
I El agente percibe si en su casilla se encuentra el wumpus
I En los cuadros adyacentes al wumpus, percibe su hedor
I En los cuadros adyacentes a un pozo, percibe la brisa
I Donde est el oro, percibe su brillo
La percepcin es representable por tres smbolos
(Hedor, brisa, brillo)
Acciones:
I Avanzar,
I Girar 90o grados a izq. o der.,
I El agente muere si entra en un pozo, u ocupa una casilla en la
Que esta un wumpus vivo
Objetivo: encontrar el oro y seguir con vida.

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

//Librera para el Random

//Para imagen

import java.util.Random;

Image img, img2, img3, img4;

//Ac la clase principal que se


extiende pero ojo, implementa
dos interfaces
public
class
wumpus
extends
java.applet.Applet
implements
Runnable,ActionListener {
//Manejo de procesos
guardando 0 tiempo 1 estado del
proceso 2 resto
//Estados 1-4 siendo 4 el ltimo
// d = desconocido

String[][] memoria = new


String[4][4];
//Creo el hilo y su manejador
Thread t = null;
boolean threadSuspended;
//Variables de Paint
Image offscreenImage;
Graphics offscreeng;

//Declara variable de manejo


de repaint que son default
boolean error = false;

Label l_instruccion1, l_titulo;


TextField campo_texto, txt_p_w,
txt_p_o1, txt_p_o2,txt_p_o3, txt_p_o;

boolean iniciar = false;

//Variables de resultados

//variables de manipulacin

String error_mensaje;

int p_w, p_o1,p_o2, p_o3, p_o;


int p_a = 13, total_movimiento
=0,xa=3, ya=0;
int quantum =2500;
//Manejador de casilla
casilla[][] tablero = new casilla
[4][4];

//Permite buscar informacin


dentro de arreglo
private
static
buscar_arreglo(int[]
nums,
element) {

for (int i = 0; i < nums.length;


i++) {
if(nums[i] == element){

//Constantes

return i;

final Color rojo = Color.red;

final Color verde = Color.green;

final Color blanco = Color.white;

return -1;

final Color negro = Color.BLACK;


final
Color.YELLOW;

int
int

Color

amarillo

}
=

public int alea(int min, int max) {


max++;

final Color marron = new


Color(140,63,51);
final Color naranja = new
Color(249,152,47);
final Color
Color(39,45,105);

azul

final Color
Color(232,232,232);

gris

int rango = max - min;

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);

//Crear Etiquitas con posicion


y color
public Label crear_etiqueta(String
nombre, Color color,int alto, int
ancho, int x, int y){
Label etiqueta;
etiqueta = new
Label(nombre);
etiqueta.setForeground(color)
;
etiqueta.setFont(f);
etiqueta.setBounds(x, y,
ancho, alto);
add(etiqueta);
return etiqueta;
}
//Metodo crea text area con
posicion
public
TextField
crear_campo_texto(int tamano, int
x, int y, Color color, boolean pass){

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);

//Construyendo tablero con


opciones

{
//Comparando
viendo el evento

botones

if
("Iniciar".equals(ev.getActionComm
and())) {

this.limpiar_tablero();

error = false;

if(iniciar){

public void start() {

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");

int[] nums = {p_a,


p_o1,p_o2,p_o3, p_o};
if(buscar_arreglo(nums,p_
w) != -1 || p_w <1 || p_w >16 ){

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

for(int i =0; i<4;i++){


for(int j =0; j<4;j++){

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");

public int[] get_parametro(int pos)


{

int my=311,mx = 150;


if(tablero[i][j].p ==

p_w){
tablero[i]

int[] da = new int[3];


if(pos <=4){

[j].agregar_miembro("w");

da[0] = mx+50*pos;

vec = tablero[i]
[j].vec;

}
this.agregar_elem

ento(vec,"h");

else if(pos <= 8)


{

}
if(tablero[i][j].p ==
p_o){

da[1] = my;

da[0] = mx+50*(pos-4);
da[1] = my+50;

vec =new int[4][2];

else if(pos <= 12)

pos++;

if(i ==0){
da[0] = mx+50*(pos-8);

vec[0][0] = -1;

da[1] = my+100;

vec[0][1] = -1;

}else{

else if(pos <= 16)

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 ;

public void limpiar_tablero(){


error =false;

}
if((i+1)==4){

xa =3;

vec[2][0] = -1;

ya =0;

vec[2][1] = -1;

int pos =0;

}else{

int[] par;

vec[2][0] = i+1 ;

int[][] vec ;

vec[2][1] = j ;

tablero = new casilla[4][4];

//Nuevo procesos

if(j ==0){

for(int i =0; i<4;i++){


for(int j =0; j<4;j++){

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();
/*

public void dibuja_fondo(Graphics


g){

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;

public void agregar_estado(int[][]


vec,String e) {
for(int i =0; i<4;i++){

int n5=0;
int n6=0;
for(int i =0; i<4;i++){

if(vec[i][0]!=-1){

for(int j =0; j<4;j++){

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++;

public void agregar_muerto(int[][]


vec) {
for(int i =0; i<4;i++){
if(vec[i][0]!=-1){
if(tablero[vec[i][0]][vec[i]
[1]].get_estado().equals("?"))
tablero[vec[i][0]][vec[i]
[1]].cambiar_estado("m");
}
}

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++;
}

public void movimiento_agente()


{

//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="";

public void mover_agente(int[][]


vec,int n,String e) {

vec=tablero[xa][ya].vec;

int fila =0;

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);
}

else if(a > 1){


this.mover_agente(vec,
this.alea(0, a), s);

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)

int pos = tablero[xa]


[ya].p;
if(tablero[xa]
[ya].get_miembro().equals("t")){
error_mensaje ="Luffy
eres el ms pilas lo encontraste en
la posicin:"+pos;
offscreeng.drawImage(i
mg3, 400, 200, this);
}else{
if(tablero[xa]
[ya].get_miembro().equals("o")){
error_mensaje
="Luffy has tomado una MALA
decision caiste en el oyo de la
posicin:"+pos;
offscreeng.drawImag
e(img4, 400, 200, this);
}
else{

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(){

int ex, ey, pcx,pcy,


e1x,e1y,e2x,e2y,e3x,e3y,mx,my;
for(int i =0; i<4;i++){

for(int j =0; j<4;j++){


offscreeng.setColor(negro
);

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,

pcy, 35, 30);

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){

public void update(Graphics g){


paint(g);

public void run(){

try {

public void paint(Graphics g)

while (true) {

if(iniciar){

dibuja_fondo(g);

if ( threadSuspended )

//Manejo error o mensaje

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 {

public int x, y,p;

catch (InterruptedException e) {

public int[][] vec = new int[4][2];

private
miembro="";
}

String

boolean
bandera1
=false,bandera2 =false, bandera3
= false, bandera4=false;
boolean paso = false;

//Aplicamos implicito

estado,

//margenes de casilla con su


respectivo

}
public String get_miembro(){

public casilla(int[] par, int[][]


vecinos, String est){

return miembro;

x = par[0];

y =par[1];

public String get_estado(){


return estado;

p = par[2];
vec = vecinos;

estado = est;

public void eliminar_miembro(){

bandera1=false;

//Obteniendo datos

miembro = "";
}

public void cambiar_estado(String


est){

public void ver_vec(){

estado = est;

for(int k =0;k <4;k++){

for(int l =0;l <2;l++)

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;

}
}

Programa en ejecucin (Prueba1)


Paso1: Asignamos los parmetros de las posiciones de cada uno de tres
los hoyos que se colocaran en las casillas del mundo, asi como la
posicin donde se encontrara el oro y el Wumpus.

Paso2: Luego de definir correctamente los lugares en donde se colocaran


las percepciones del mundo de wumpus procedemos a presionar el
botn de inicio. Debemos tomar en cuenta que cuando presionemos el
botn, automticamente iniciara el ente a trabajar y realizara las
decisiones aleatoriamente, donde en cada accin que tome se estar
aumentando su base de conocimientos respecto al mundo en su
actualidad.

Paso3: En el caso que encuentre casillas seguras elegir aleatoriamente


cualquiera de estas ya que cualquiera de las opciones es una decisin
correcta.

Paso 4: Cuando encuentre una casilla No segura a causa de alguna Brisa


o Hedor, regresara a la otra casilla segura que exista, cuando ya no
encuentre
ninguna
casilla
segura,
entonces
deber
elegir
aleatoriamente que casilla de las no seguras ser su camino a seguir,
arriesgndose a perder o ganar.

En la decisin aleatoria que se debe tomar, se est expuesto a caer en el


hoyo o seguir su camino, en esta ocasin se fallo y se termina el juego
sin ningn premio.

Programa en ejecucin (Prueba2)


Paso 1:

Paso 2:

Paso 3:

Paso 4: En este caso en la decisin aleatoria eligi de una manera


correcta para poder continuar con el juego.

Paso 5:

Paso6: En este caso el ente logro su objetivo encontrando el oro y


ganando el juego.

Programa en ejecucin (Prueba3)


Paso1:

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.

Você também pode gostar