31
Universidad Mariano Gálvez Ingeniería en Sistemas. Inteligencia Artificial. Ing. Hugo Díaz Ing. Samuel Recinos PROYECTO MUNDO DE WUMPUS Integrantes: Hugo Eduardo Morán M. 0900-08-9561 Hugo Alexander Muñoz García 0900-07-53 Byron Duarte 0900-09-12461 Efrain Paredes 0900-07-3598

Mundo de Wumpus

  • Upload
    everto

  • View
    89

  • Download
    9

Embed Size (px)

Citation preview

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-53Byron Duarte 0900-09-12461Efrain Paredes 0900-07-3598 AGENTE BASADO EN CONOCIMIENTOS (SOLUCIN MUNDO DE WUMPUS).La Inteligencia Artificial empez como resultado de la investigacin en la psicologa cognitiva y lgica matemtica. Se ha encaminado sobre la explicacin del trabajo mental y construccin de algoritmos de solucin a problemas de propsito general. Punto de vista que favorece la abstraccin y la generalidad.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 1956Disciplina 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 constanteLa 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 comunesEmbebida: 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 agentePercepciones (restringidas a la casilla que ocupa):I El agente percibe si en su casilla se encuentra el wumpusI En los cuadros adyacentes al wumpus, percibe su hedorI En los cuadros adyacentes a un pozo, percibe la brisaI 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 laQue 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 posiblesDada una base de conocimiento K, hay que considerar tres clasesDe 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.

SOLUCIONSe 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;import java.awt.*;import java.awt.event.*;//Librera para el Randomimport java.util.Random;//Ac la clase principal que se extiende pero ojo, implementa dos interfacespublic 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 // r =riesgo // m = muerte // s = segura //Para imagen Image img, img2, img3, img4; 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; boolean iniciar = false; //variables de manipulacin 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]; //Constantes final Color rojo = Color.red; final Color verde = Color.green; final Color blanco = Color.white; final Color negro = Color.BLACK; final Color amarillo = Color.YELLOW; final Color marron = new Color(140,63,51); final Color naranja = new Color(249,152,47); final Color azul = new Color(39,45,105); final Color gris = new Color(232,232,232); Font f; //Resto de variables a usar Button b_iniciar; Label l_instruccion1, l_titulo; TextField campo_texto, txt_p_w, txt_p_o1, txt_p_o2,txt_p_o3, txt_p_o; //Variables de resultados String error_mensaje; //Permite buscar informacin dentro de arreglo private static int buscar_arreglo(int[] nums, int element) { for (int i = 0; i < nums.length; i++) { if(nums[i] == element){ return i; } } return -1; } public int alea(int min, int max) { max++; Random r = new Random(); int rango = max - min; return r.nextInt(rango) + min; } //Crea botones y agrega su Action Listener public Button crear_boton( String nombre_boton, int x, int y){ Button boton; boton = new Button( nombre_boton ); boton.setActionCommand(nombre_boton); boton.setBounds(x, y, 100, 25); add( boton ); boton.addActionListener(this); return boton; } //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){ campo_texto = new TextField(tamano); campo_texto.setForeground(azul); campo_texto.setBackground(color); campo_texto.setBounds(x, y, tamano, 25); if(pass) campo_texto.setEchoChar('*'); add(campo_texto); return campo_texto; } public void init() { img=getImage(getCodeBase(),"http://www.produccioneschapinas.net/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.getGraphics(); offscreeng.setColor(naranja); setBackground(naranja); setLayout(null); //Creando objetos de etiqueta f = new Font ("verdana",Font.BOLD,30); l_titulo = crear_etiqueta("ONE PIECE WUMPUS WORLD",marron, 40,450, 150, 0); f = new Font ("verdana",Font.BOLD,12); //Manejadores de espacio l_instruccion1 = crear_etiqueta("PARAMETROS:",negro,25,400, 10, 40); f = new Font ("verdana",Font.PLAIN,10); //Manejadores de variables txt_p_w = crear_campo_texto(40, 10, 75, blanco, false); 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_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"); l_instruccion1 = crear_etiqueta(" Oyo 2",azul,25,125, 50, 135); txt_p_o3 = crear_campo_texto(40, 10, 165, blanco, false); txt_p_o3.setText("12"); l_instruccion1 = crear_etiqueta(" Oyo 3",azul,25,200, 50, 165); txt_p_o = crear_campo_texto(40, 10, 195, blanco, false); txt_p_o.setText("4"); l_instruccion1 = crear_etiqueta("Oro",azul,25,200, 50, 195); //Integrantes f = new Font ("verdana",Font.BOLD,12); l_instruccion1 = crear_etiqueta("Hugo Morn 0900-08-9561 (HEMM)",marron,25,200, 450, 50); l_instruccion1 = crear_etiqueta("Byron Duarte 0900-09-12461",marron,25,200, 450, 70); l_instruccion1 = crear_etiqueta("Alex Muoz 0900-07-53",marron,25,200, 450, 90); l_instruccion1 = crear_etiqueta("Efran Paredez 0900-07-3598",marron,25,200, 450, 110); //Creando botones de control b_iniciar = crear_boton( "Iniciar",50,225); //Construyendo tablero con opciones this.limpiar_tablero(); } public void start() { if ( t == null ) { t = new Thread( this ); t.setPriority( Thread.MIN_PRIORITY ); threadSuspended = false; t.start(); } else { if ( threadSuspended ) { threadSuspended = false; synchronized( this ) { notify(); } } } } //Declaro las acciones que deseo realizar public void actionPerformed(ActionEvent ev) {//Comparando botones y viendo el evento if ("Iniciar".equals(ev.getActionCommand())) { error = false; if(iniciar){ iniciar = false; b_iniciar.setLabel("Iniciar"); this.limpiar_tablero(); }else{ iniciar = true; b_iniciar.setLabel("Detener"); 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()); p_o3 = Integer.parseInt(txt_p_o3.getText()); p_o = Integer.parseInt(txt_p_o.getText()); }catch(Exception err){ error = true; error_mensaje = "Problemas con los datos ingresados recuerde deben ser numericos"; } int[] nums = {p_a, p_o1,p_o2,p_o3, p_o}; if(buscar_arreglo(nums,p_w) != -1 || p_w 16 ){ error = true; error_mensaje = "Error en la posicion del Wumpu "; iniciar = false; b_iniciar.setLabel("Iniciar"); } nums[1] = p_w; if(buscar_arreglo(nums,p_o1) != -1 || p_o1 16 ){ error = true; error_mensaje = "Error en la posicin del Oyo 1"; iniciar = false; b_iniciar.setLabel("Iniciar"); } nums[2] = p_o1; if(buscar_arreglo(nums,p_o2) != -1 || p_o2 16 ){ error = true; error_mensaje = "Error en la posicin del Oyo 2"; iniciar = false; b_iniciar.setLabel("Iniciar"); } nums[3] = p_o2; if(buscar_arreglo(nums,p_o3) != -1 || p_o3 16 ){ error = true; error_mensaje = "Error en la posicin del Oyo 3"; iniciar = false; b_iniciar.setLabel("Iniciar"); } nums[4] = p_o3; if(buscar_arreglo(nums,p_o) != -1 || p_o 16 ){ error = true; error_mensaje = "Error en la posicin del Oro"; iniciar = false; b_iniciar.setLabel("Iniciar"); } int[] oyos ={p_o1,p_o2,p_o3}; int[][] vec; //Asignamos la ubicacion for(int i =0; i