Introducción y Desarrollo
En la presente práctica de laboratorio se implementó un sistema multi-agente con el protocolo ContractNet.
Se escoge al mejor, que tenga similitudes, y se envía un mensaje de aceptación.
En los juegos en linea se utiliza una herramienta para buscar otros jugadores que se encuentren jugando 'cierta partida' entonces similar al protocolo contract net donde el agente cierra un contrato al encontrar a otro agente similar(en este caso , su experiencia en nivel del juego).
A continuación se presenta un fragmento del código de la clase MatchMaking.java
public class MatchMaking extends Agent{ private boolean CrearPartida=false; private AgentAddress encontrado=null; public void activate(){ println("Matchmaking"); println("Buscando Jugadores..."); if(isGroup("Halo")){ println ("Existe, me uno"); CrearPartida=false; } else{ println ("No existe, voy a crearlo"); createGroup(true,"halo",null,null); CrearPartida=true; } requestRole("halo","jugador",null); } public void live(){ println("Buscando a otro jugador..."); do { exitImmediatlyOnKill(); pause(100); AgentAddress[] v = getAgentsWithRole("halo","jugador"); for (int i=0; i < v.length; i++){ AgentAddress agent = v[i]; if (! agent.equals(getAddress())) encontrado = agent; } } while (encontrado == null); println("El Jugador se ha unido :"+encontrado); // Si no soy el creador del grupo, envio la pelota primero. if (! CrearPartida) sendMessage(encontrado, new StringMessage("Se creo una partida.. ")); for (int i = 5; i > 0; i--){ Message m = waitNextMessage(); if(! m.getSender().equals(encontrado)){ while(true){ exitImmediatlyOnKill(); Message m2 = waitNextMessage(1000); if(m2==null){ encontrado = m.getSender(); i=5; println("El Creador del grupo se fue"); println("Encontre un nuevo jugador "+encontrado); break; } else if(m2.getSender().equals(encontrado)) break; } }
Video
Referencias
- En la pagina Madkit.org se encontraron referencias de las clases y de cómo crear y enviar mensajes (comunicación) entre los agentes.