Para esta última entrega damos por concluido nuestro proyecto el cual consistió como ya se había mencionado de un juego sencillo de guerra, las caracterísiticas principales del juego son:
Juego tipo Uniwars uno contra uno por turnos.
El objetivo del juego es destruir la base del rival.
El juego cuenta con un mapa.
Las unidades del juego son soldados.
Cada soldado tiene un porcentaje de vida del 100% dividido en cuatro partes que se restarán de 25% en 25%.
Tablero similar al de ajedrez pero constituido por montañas, bases etc.
La parte adaptativa consiste en que el rival se adapte a los movimientos y la forma de jugar del usuario. Que al momento de que el jugador termine su turno el agente haga su movimiento. El juego esta programado en Java junto con programación en Jade, se ha utilizado 7 clases principales que contienes lo que son menu, JFrames, JPanel encargados de la interfaz asi como tambien incluye el menu principal donde se incluye las librerias de Jade.
Módulos más relevantes
Hay tres clases mas que son importantes ia que refieren a los agentes, estos agentes se turnan en cierto tiempo para realizar sus funciones en el campo de juego.
Herramientas y Técnicas
JADE (Java Agent Development Framework)
Eclipse
Netbeans
Lógica y Ambiente del Juego
5 agentes para el funcionamiento del contrincante (máquina).
5 agentes para el funcionamiento del jugador. Matriz realizada de 15*8 Movimiento por medio de Cliks El juego consiste en conquistar la otra base y los movimientos seran a base de turnos.
Ingresa a http://en.wikipedia.org/wiki/Perceptron y modifica el código para el caso de “and”. Modifica los pesos iniciales, la tasa de aprendizaje y el umbral.
·Definir una clase Java que representa al agente (la cual debe heredar de
la clase jade.core.Agent).
·Implementar los comportamientos que va a manisfestar.
Un agente JADE cumple las siguientes
características:
El método protegido setup() sirve
para inicializar el agente incluyendo instrucciones que especificarán la
ontología a utilizar y los comportamientos asociados al agente. Se invoca
al comenzar la ejecución del agente.
El método protegido takeDown() sirve
para liberar recursos antes de la eliminación del agente. Este método es
invocado cuando se realiza una llamada al método doDelete(),
que es el que realmente da por finalizada la ejecución del agente.
Ambos métodos deben ser sobreescritos.
El ciclo de vida de un agente JADE sigue el ciclo
propuesto porFIPA, es decir, cumple con la
propuesta del estándar de interoperabilidad entre agentes más aceptado.
·Tiene un nombre único en el entorno de ejecución.
·Se implementa como un único hilo de ejecución (single-threaded).
·Tiene un metodo de inicio (setup) y otro de fin (takeDown).
·En su implementación se define una clase interna por cada uno de los
comportamientos asociados al agente. Estos comportamientos se utilizan
básicamente para el envío y recepción de mensajes, aunque también se pueden
utilizar para realizar otras tareas
Un
agente está sujeto a un ciclo de vida en el que se definen los estados en los
cuales se puede encontrar el agente, así como los cambios que se pueden
realizar entre los diferentes estados.
Estados de un Agente
Un agente puede estar en los siguientes estados:
·Iniciado: El objeto Agente está creado pero
todavía no se ha registrado en el AMS, no tiene nombre ni dirección y tampoco
se puede comunicar con otros agentes.
·Activo: El Agente está registrado en el AMS,
tiene un nombre, una dirección y puede acceder a todas las opciones de JADE.
·Suspendido: El Agente está parado. Su hilo de
ejecución está detenido y no ejecuta ningún Comportamiento.
·En espera: El Agente está bloqueado esperando
por algo. Su hilo de ejecución está dormido en un monitor de java y se
despertará cuando se cumpla una cierta condición (cuando reciba un mensaje).
·Desconocido: El Agente ha sido eliminado. El hilo
de ejecución ha terminado y se ha eliminado del registro del AMS.
·Tránsito: Un Agente móvil entra en este estado
mientras está migrando a una nueva localización. El sistema sigue guardando los
mensajes en el buffer hasta que el agente vuelve a estar activo.
SPADE
Es una
plataforma libre de sistemas multi-agente desarrollada en Python y basada en la
tecnología de mensajería instantánea XMPP(Extensible Messaging and Presence
Protocol, más conocido como XMPP(Protocolo
extensible de mensajería y comunicación de presencia)).
La plataforma
SPADE son: soporte de organizaciones virtuales, notificación de presencia,
compatible con FIPA e independencia del lenguaje y la plataforma. La plataforma
nació para probar la tecnología de la mensajería instantánea como
protocolo de transporte para los agentes inteligentes.
Características
Las principales
características de la plataforma SPADE son:
Soporte del
estándar FIPA mediante el protocolo de mensajería instantánea XMPP (Agentes AMS
y DF incluidos)
Notificación de
presencia entre agentes.
Procesadores de
lenguajes de contenido en SL0 y RDF.
Modelo de agente
BDI basado en Conocimiento, Deseos e Intenciones.
Modelo de
comportamientos: Cíclicos, Periódicos, Timeout, una ejecución, máquina de
estados finita y basado en eventos.
Interfaz gráfica
basada en web.
Interfaz Gráfica
La interfaz
gráfica está basada en HTTP
Las
características de la interfaz son las siguientes:
La plataforma y
los agentes exportan su propia interfaz web.
La interfaz es
configurable a través de plantillas.
Cada agente
exporta su identificador como un código QR.
Instrospector de
agente.
Visor de
mensajes enviados.
Búsqueda de
agentes y servicios.
MaDKit
MaDKit es un
código abierto plataforma Multiagentes modular y escalable escrito en Java y
construido sobre la AGR (agente / grupo / rol) modelo organizativo:
Agentes MaDKit
desempeñar funciones en grupos y así crear sociedades artificiales.
MaDKit es
software libre licenciado bajo la GNU GPL que incluye:
- Agentes de la
creación artificial y la gestión del ciclo de vida
- Una
infraestructura organizativa para la comunicación entre los agentes
- Alta
heterogeneidad en las arquitecturas de agentes: No hay un modelo predefinido
agente
- Multi-Agente
de simulación basado en simuladores y herramientas de autoría
- Multi-agente
distribuida basada en servicios de aplicaciones de edición
MaDKit 4 viene
con un conjunto completo de servicios y agentes para el lanzamiento, presentación,
desarrollando y seguimiento de los agentes y organizaciones.
El agente
diseñador es un buen punto de partida para iniciar un nuevo proyecto en MaDKit
.. Este agente es joven... Pero muy prometedor...
MaDKit viene con un conjunto de herramientas que
pueden ser utilizadas para ayudar al desarrollo de aplicaciones Multiagentes.
o
Agente Diseñador: ayudar a la creación de un nuevo proyecto.
Comience con ella, y luego construir su proyecto MadKit ...
o
Agentes del sistema: estas son las principales herramientas que
el uso revelador MadKit para explorar, poner en marcha, visualizar y localizar
los agentes.
o
Communicator: un agente que permite construir aplicaciones
distribuidas sin preocuparse por la distribución ..
o
NetCom: una versión más nueva, más flexibles y más adaptables del agente
Communicator. (documentación no está disponible aún)
o
ProjectBuilder: cómo crear, editar y crear un nuevo
proyecto en MadKit (esta función no está disponible aún)
o
jSynEdit editor: un "agentified" versión de un
pequeño editor con funciones coloreado de sintaxis que tiene la abeja integrada
en MadKit y puede ser usado para editar y ejecutar Java y agentes de secuencias
de comandos.
o
SEdit es a la vez un editor y animación de diagramas que se pueden utilizar
para ver y manipular la información representada en forma de gráficos. SEdit
está ahora totalmente integrado a MadKit y por lo tanto el manual necesita una
pequeña actualización .. Pero, aun así, ofrece una gran cantidad de información
útil.
o
PluginManager: MadKit viene con su propio instalador que
puede ser utilizado para instalar, actualizar y MadKit taylor a sus
necesidades.
El modelo AGR
esta basado en las nociones de Agente, Grupo y Rol.
Agente
Es una entidad
capaz de comunicar atreves de los roles que juegan en los diferentes grupos
Grupo
Role
ESTRUCTURA GENERAL DE LA PLATAFORMA
El componente
principal es el Kernel (o micro-kernel). El kernel provee soporte para:
Control de grupos y roles locales
Manejo del ciclo de vida de los Agentes
Despacho de Mensajes locales
RoboCup Soccer Simulation League
La RoboCup es una iniciativa de investigación y educación en torno a una competición en la que pueden integrarse diferentes tecnologías. Promueve la investigación en robótica e inteligencia artificial.
Tal y como puede leerse en laweb oficialde este proyecto " El objetivo último del proyecto es desarrollar para la RoboCup 2050 un equipo de robots humanoides completamente autónomos que sean capaces de ganar al equipo humano campeón del mundo de fútbol."
RoboCup Fútbol
La RoboCup fútbol es una competición de fútbol entre robots. Esta se desarrolla en diferentes categorías:
Liga en simulador: una plataforma de investigación para sistemas multiagente e inteligencia artificial
Liga en tamaño pequeño: dos equipos de 5 pequeños robots (han de caber en una circunferencia de 180 mm de diámetro) se enfrentan utilizando cámaras sobre el mismo robot o sobre el campo.En esta categoría los sobots pueden comunicarse con un ordenador externo.
Liga en tamaño medio: robots de tamaño medio con funcionamiento totalmente autónomo
Liga con plataforma estándar: todos los equipos utilizan robots idénticos. Actualmente la plataforma es el robot NAO de Aldebaran.
Liga humanoide: robots humanoides 100% autónomos con tamaños comprendidos entre 30 y 160 cm.
RoboCup Rescate
Liga en simulador: El rescate en simulador es una nueva área de experimentación en la RoboCup. Su objetivo principal es proporcionar soporte en situaciones de emergencia por medio de la integración de información sobre desastres, predicción, planificación y la interfaz humana.
Liga de robots: Esta prueba de rescate con robots tiene como objeto fomentar la investigación en torno a la respuesta a situaciones de emergencia.
RoboCup Junior
RoboCup Junior es un proyecto educativo dirigido a jóvenes estudiantes de hasta 19 años de edad. Su objeto es educativo y está diseñado para introducir la RoboCup en la enseñanza primaria y secundaria. En los diferentes retos hay dos categorías, la primera hasta 14 años y la segunda de 14 a 19. En esta modalidad de la RoboCup hay tres retos diferentes:
Genera un programa que obtenga la distribución de grado y la densidad de la red. Gráfica la distribución de grado (esto puede ser de manera manual). Hint: Utilizar lenguajes script puede facilitar la programación. Extra: agrupa la red.
Codificación - Python
Primero se obtiene la distribución de grado de la red, para ello sacamos el grado de cada reglón o columna:
linea[l] = f.readlines()[l]
numeros = [int(x) for x in linea[l].split()]
for i in numeros[1:]:
total[l] = total[l] + i
print"EL grado de la linea ", l+1, "es: ", total[l]
Esto se realizo desde un archivo de texto, el cual contiene la matriz.
Los resultados obtenidos fueron:
Después de obtener el grado de cada reglón o columna, agruparemos los vértices que tengan el mismo valor de grado, para poder realizar la distribución:
for i in range(0,33):
for j in range(0,33):
if total[i] == j:
K[j] = K[j] + 1
Después se obtiene la distribución de grado dividiendo la agrupación de los grados en la parte anterior entre el numero total de conexiones, esto se realizo en la siguiente fracción de código.
for i in range(0,33):
distribucion[i] = K[i]/33.0
for i in range(0,33):
if K[i] != 0:
print "K= %.f"%K[i], "la distribucion de grado Pr(K) es:",float(distribucion[i])
y el resultado es:
Densidad Para obtener la densidad de la Red se aplica la formula:
Con este código se busca primero las variables a usar en la formula, en este caso n ya esta definida por el total de columnas que es 33.
for i in total:
m = m + i
Luego calculamos la densidad aplicando la formula ya conocida, e imprimiendo el valor obtenido.
D = (2 * m) / (n*(n-1))
print "La densidad es: ", float(D)
El Resultado es el siguiente:
Gráfica de la Distribución de grado
Aquí se muestra la gráfica de los resultados de la distribución de grados, con la tabla de la agrupación de cada grado que se obtuvo.
REPORTE 1 - Ventilador Para el desarrollo del programa del ventilador. Se realizo este código que muestra corridas donde se ve el auto-ajuste. Objetivo: Nuestro objetivo en esta practica sera hacer una recreación de un ventilador que se auto ajustara según la temperatura del ambiente Desarrollo: Aquí se muestra Código dispensable para el funcionamiento Clase Ventilador Muestra el inicio del programa y que contendra el main
public class Ventilador {
public static void main(String[] args) {
SimTemp.main(args);
}
Clase SimTemp En esta Clase concentra los hilos temp y termo, iniciara el hilo termo con su función .start();
public class SimTemp{
public static void main(String[] args){
HiloTemperatura temp=new HiloTemperatura();
HiloTermometro termo =new HiloTermometro();
termo.start();
}
}
Clase HiloTermometro Clase que dirigirá e iniciara los números aleatorios en la temperatura tendrá un inicio desde -2 hasta 50 grados que llega la zona de monterrey, también asignara un cierto tiempo antes de que se produzca un numero aleatorio entre otros, y se ubica el contenido del hilo HiloTermometro.
public void run(){
try{
while(true){
Termometro=generaNumAleatorio(-10,50);
SensacionTermica();
System.out.println("\nLa temperatura es: "
+Termometro+"\nSe siente "
+LETRERO[termo]);
HiloTemperatura ht = new HiloTemperatura();
ht.ajustaEstadoVenti(termo,Termometro);
sleep(4000);
}
}
catch(InterruptedException e){
System.out.println("Exception: "+e.getMessage());
}
}
Clase HiloTemperatura
La ultima Clase utilizada se enfoca en asignar y preparar la función del abanico en encendido y apagado así como también su velocidad de funcionamiento.