En la practica 4 se programara un sistema adaptativo relacionado con agentes inteligentes.
Agentes cooperativos: para que un agente pueda ser auto suficiente y conocedor del entorno en el que se encuentra, debe coordinarse y cooperar con cada uno de los otros agentes. Existen varias formas para hacer esto.
Tomando en cuenta El problema de el dilema del prisionero el agente i logrará tomar una decisión
Objetivo.
El objetivo de este problema es programar
los agentes para los prisioneros y que estos puedan decir que se tiene que contestar.
- Se les dice lo siguiente:
- Si uno confiesa y el otro no, al que confesó se le dejará libre y al otro se le encerrará por 3 años.
- Si ambos confiesan, los encierran por 2 años.
- Si ninguno confiesa, los encierran por 1 año
Justificación
Programaremos este sistema para poner así en práctica lo visto en clase, y utilizaremos precisamente un ejemplo visto ahí, que es “El dilema del prisionero” y veremos lo sucedido después de que ambos tomen su decisión. Al realizar esta práctica nosotros ya seremos capaces de realizar y comprender el mundo de los multi-agentes, lo cual nos ayudara de gran manera a ampliar nuestros conocimientos en los sistemas adaptativos. Quisimos empezar con algo no tan complejo, como una toma de decisión, en la que influye otro agente para su ganancia. De igual forma, esta práctica nos ayudara de manera considerable para la realización de nuestros proyectos finales.
Desarrollo
El programa consiste en una sola clase llamada multiagente. En ella se crean dos objetos, que son los prisioneros que están en la cárcel. Ambos agentes inician con una utilidad de 0. Si uno tomará una decisión, se le asigna el único método de la clase el cual se llama acción. Donde el agente, Evalúa cada una de las posibilidades de su decisión y la de su compañero. Si la utilidad es mayor a la que conserva actualmente. Opta por quedarse con la decisión que le proporcione mas utilidad, si es caso contrario, la descarta y pasa a la siguiente posibilidad.
Código
class Multiagente: def __init__(self): self.accion1="confiesa" # ambos objetos tienen dos opciones, confesar o no confesar self.accion2="no confiesa" self.utilidad=0 def accion(self): # el agente pasa por el metodo accion donde evalua las posibles convinaciones y # solo toma en cuenta la accion donde la utilidad sea mayor desde donde comenzo # en este caso, 0 if agentei.accion1 and agentej.accion1: # si ambos confiesan ambos tienen una utilidad de 2 utilidadnueva=2 if utilidadnueva>self.utilidad: print "si el agente i : ", agentei.accion1 print "y el agente j: ", agentej.accion1 self.utilidad=utilidadnueva if agente == "i": print "El agente", agente, "tiene una utilidad de : ", agentei.utilidad print "Entonces el agente ", agente, agentei.accion1 if agente == "j": print "El agente", agente, "tiene una utilidad de : ", agentej.utilidad print "Entonces el agente ", agente, agentej.accion1 #si ambos no confiensan obtienen utilidades iguales de 3 if agentei.accion2 and agentej.accion2: utilidadnueva=3 if utilidadnueva > self.utilidad: print "si el agente i : ", agentei.accion2 print "y el agente j: ", agentej.accion2 self.utilidad=utilidadnueva if agente == "i": print "El agente", agente, "tiene una utilidad de : ", agentei.utilidad print "Entonces el agente ", agente,agentei.accion2 if agente == "j": print "El agente", agente, "tiene una utilidad de : ", agentej.utilidad print "Entonces el agente ", agente, agentej.accion2 #utilidad 5 agente i if agentei.accion1 and agentej.accion2: # si el agente confiesa y el otro no, la utilidad que recibira es 5 utilidadnueva=5 if agente =="j": utilidadnueva=0 if utilidadnueva>self.utilidad: print "si el agente i : ", agentei.accion1 print "y el agente j: ", agentej.accion2 self.utilidad=utilidadnueva if agente == "i": print "El agente", agente, "tiene una utilidad de : ", agentei.utilidad print "Entonces el agente ", agente, agentei.accion1 if agente == "j": print "El agente", agente, "tiene una utilidad de : ", agentej.utilidad print "Entonces el agente ", agente, agentej.accion1 if agentei.accion2 and agentej.accion1: # si el agente decide no confiesar, pero el otro si, se le asigna utilidad de 0 utilidadnueva=0 if agente =="j": utilidadnueva=5 if utilidadnueva> self.utilidad: print "si el agente i : ", agentei.accion2 print "y el agente j: ", agentej.accion1 self.utilidad=utilidadnueva if agente == "i": print "El agente", agente, "tiene una utilidad de : ", agentei.utilidad print "Enonces el agente ", agente, agentei.accion2 if agente == "j": print "El agente", agente, "tiene una utilidad de : ", agentej.utilidad print "Entonces el agente ", agente,agentej.accion1 #utilidad 5 agente j print "El mejor caso seria el ultimo donde la utilidad seria: " , self.utilidad agentei = Multiagente() # se el objeto agente i agentej = Multiagente()# se crea el objeto agente j utilidad=0 agente =str(raw_input(" Ingrese el agente que debe tomar la desicion ( i o j ): ")) while agente != "i" and agente != "j": # se recibe el agente que tomara la decision agente =str(raw_input(" Ingrese el agente que debe tomar la desicion ( i o j ): ")) print "La utilidad del agente", agente, "comienza en: ", utilidad # las utilidades de los agentes comienzan en 0 print if agente == "i": # el agente i tomara la decision agentei.accion() elif agente=="j": # el agente j tomara la decision agentej.accion()
Resultados.
A continuación se presentan los resultados. Donde el agente seleccionado toma la decisión que le conviene Tomo dos veces la decisión confesar... y la ultima le convendría más, ya que esa sería la mayor utilidad que podría llegar a obtener.
Video:
practica4
Conclusiones:
En esta practica se relaciono con el tema visto en clase de multiagentes. Se "simulo", la situación del problema ya descrito.
Los agentes Continuamente están realizando procesos, las preferencias de los agentes se basan en su función de utilidad. Algunas mejoras futuras, seria crear un sistema de multiagentes que interactuen entre sí y puedan realizar mas de una tarea o decisión.
OK. Sí se va por utilidades, pero falta poner más en claro la estructura de decisión. Teniendo la matriz en cuenta, ¿finalmente qué decisión toma el agente? Si no hay estrategia dominante, ¿cómo resuelve la situación?
ResponderEliminar