Subido por Vanesa Arteaga Vargas

Proyecto Planificación con JADE

Anuncio
Universidad Mayor de San Simón
Facultad de Ciencias y Tecnología
Carrera de Ingeniería Informática e Ingeniería de Sistemas
INFORME PROYECTO DE
PLANIFICACIÓN CON JADE
Planificación y acción en el mundo real
Inteligencia Artificial (I)
Fecha de entrega: 29 de Diciembre
Grupo 6
Integrantes:
Ali Rodriguez Julio Grover
Cabrera Bustamante Jose Ignacio
Leaño Salles Mauricio
Torrico Quispe Génesis Almendra
Contenido
Contenido
1
1. Descripción del problema
1
2. Planificación
1
3. Implementación de agentes
3.1 Civil
3.2 Arquitecto
3.3 Maquinaria Pesada
3.4 Albañil
3.5 Electricista
3.6 Plomero
3.7 Carpintero
3.8 Pintor
3
3
4
7
9
12
13
15
16
4. Resultados y pruebas del software
17
5. Conclusiones
18
1. Descripción del problema
El presente proyecto consiste en simular las actividades de una empresa
constructora de casas y/o edificios a través de agentes que cumplan el rol de
trabajadores involucrados en las diferentes acciones necesarias para llevar a cabo
la construcción de una casa.
Una constructora tiene varias personas con diferentes profesiones trabajando en la
empresa, como ser arquitectos, civiles, albañiles, carpinteros, plomeros, etc. En el
proyecto estas personas se verán reflejadas por la implementación de agentes, para
lo cual se hará empleo de la librería JADE, con el objetivo de mostrar cómo trabajan
los agentes en sus diferentes actividades, a medida que van construyendo una
casa.
En este sistema se optimiza el trabajo de cada agente de manera que se lleve a
cabo la construcción de la casa en un tiempo óptimo, lo cual evite que la empresa
pierda recursos económicos.
2. Planificación
En la planificación realizada se identificaron los siguientes planes, objetivos y
agentes basados en el análisis realizado.
1
2
3. Implementación de agentes
3.1 Civil
❏ Descripción
El agente Civil cumple las acciones correspondientes al estudio de suelos y diseño
estructural. Al finalizar el estudio de suelos, el agente debe proporcionar la
certificación de este, permitiendo de esta forma, que el agente Arquitecto inicie la
fase de diseño arquitectónico. Dado que se cumplan estas acciones, el agente Civil
podrá realizar su siguiente acción, la cual corresponde al diseño estructural, lo cual
dará como resultado el plano estructural.
❏ Código
package agents;
import
import
import
import
import
jade.core.AID;
jade.core.Agent;
jade.core.behaviours.CyclicBehaviour;
jade.core.behaviours.OneShotBehaviour;
jade.lang.acl.ACLMessage;
public class Civil extends Agent{
protected void setup() {
System.out.println("hello
" + getLocalName());
addBehaviour(new Listen(this));
addBehaviour(new EstudioSuelos(this));
}
}
class EstudioSuelos extends OneShotBehaviour {
private final Agent a;
public EstudioSuelos(Agent a) {
super(a);
this.a = a;
}
public void action() {
System.out.println("Se realizó el estudio de suelos");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("arquitecto", AID.ISLOCALNAME));
msg.setLanguage("English");
3
msg.setOntology("Weather-forecast-ontology");
msg.setContent("suelos");
a.send(msg);
}
}
class Listen extends CyclicBehaviour {
private final Agent a;
public Listen(Agent a) {
super(a);
this.a = a;
}
public void action() {
ACLMessage rec = a.receive();
if(rec != null)
switch(rec.getContent()){
case "Plano Arquitectonico":
DiseñoEstruc();
break;
}
else block();
}
public void DiseñoEstruc(){
System.out.println("diseño estructural");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("maquinariaPesada",
AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Plano Estructural");
a.send(msg);
}
}
3.2 Arquitecto
❏ Descripción
El agente Arquitecto. Su comportamiento y las acciones que realiza están en función
al estudio de suelos(precondición) que se realiza por el agente Civil para poder
realizar el diseño arquitectónico, la conclusión de esta acción o efecto de la acción
4
será tener el “diseño arquitectónico” para la posterior ejecución de los agentes que
se ocuparan de los diseños estructurales, eléctricos e hidrosanitarios.
❏ Código
package agents;
import
import
import
import
jade.core.AID;
jade.core.Agent;
jade.core.behaviours.CyclicBehaviour;
jade.lang.acl.ACLMessage;
public class Arquitecto extends Agent{
protected void setup() {
System.out.println("hello
" + getLocalName());
addBehaviour(new Listen(this));
}
class Listen extends CyclicBehaviour{
private final Agent a;
public Listen (Agent a){
super(a);
this.a = a;
}
public void action(){
ACLMessage rec = a.receive();
if(rec!=null){
switch(rec.getContent()){
case "suelos":
DiseñoArqui();
break;
case "Plano Arquitectonico":
DiseñoElec();
DiseñoHidro();
break;
}
}
else block();
}
public void DiseñoArqui() {
System.out.println("Diseño Arquitectonico");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
5
msg.addReceiver(new AID("arquitecto",
AID.ISLOCALNAME));
msg.addReceiver(new AID("civil", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Plano Arquitectonico");
a.send(msg);
}
public void DiseñoElec(){
System.out.println("Diseño Electrico");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("albañil", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Plano Electrico");
a.send(msg);
ACLMessage msg2 = new ACLMessage(ACLMessage.INFORM);
msg2.addReceiver(new AID("maquinariaPesada",
AID.ISLOCALNAME));
msg2.setLanguage("English");
msg2.setOntology("Weather-forecast-ontology");
msg2.setContent("Plano Electrico");
a.send(msg2);
}
public void DiseñoHidro(){
System.out.println("Diseño Hidrosanitario");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("albañil", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Plano Hidrosanitario");
a.send(msg);
ACLMessage msg2 = new ACLMessage(ACLMessage.INFORM);
msg2.addReceiver(new AID("maquinariaPesada",
AID.ISLOCALNAME));
msg2.setLanguage("English");
msg2.setOntology("Weather-forecast-ontology");
msg2.setContent("Plano Hidrosanitario");
a.send(msg2);
}
}
}
6
3.3 Maquinaria Pesada
❏ Descripción
Agente Maquinaria Pesada. Este agente realiza la acción de movimiento de tierras y
excavaciones en función al plano estructural (precondición para el agente
Maquinaria Pesada) provisto por el agente Civil. Como resultado o efecto de la
acción se tendrá el suelo listo.
❏ Código
package agents;
import
import
import
import
jade.core.AID;
jade.core.Agent;
jade.core.behaviours.CyclicBehaviour;
jade.lang.acl.ACLMessage;
public class MaquinariaPesada extends Agent{
protected void setup() {
System.out.println("hello
" + getLocalName());
addBehaviour(new trabajar(this));
}
class trabajar extends CyclicBehaviour {
private final Agent a;
private boolean moverTierra = false;
private boolean electrico = false;
private boolean hidrosanitario = false;
private boolean sueloListo = false;
private ACLMessage rec;
public trabajar (Agent a){
super(a);
this.a = a;
}
public void action(){
this.rec = a.receive();
if((this.electrico && this.hidrosanitario) &&
this.sueloListo) Fundacion();
if(this.rec == null){
block();
}
7
else{
switch(rec.getContent()){
case "Plano Estructural":
this.moverTierra= true;
moverTierra();
break;
case "Plano Electrico" :
this.electrico = true;
break;
case "Plano Hidrosanitario":
this.hidrosanitario = true;
break;
case "Suelo Listo":
this.sueloListo = true;
break;
}
}
}
public void moverTierra() {
if (this.moverTierra) {
System.out.println("Movimiento de tierras y
excavación");
moverTierra = false;
ACLMessage msg = new
ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("albañil",
AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Suelo Listo");
a.send(msg);
ACLMessage msg2 = new
ACLMessage(ACLMessage.INFORM);
msg2.addReceiver(new AID("maquinariaPesada",
AID.ISLOCALNAME));
msg2.setLanguage("English");
msg2.setOntology("Weather-forecast-ontology");
msg2.setContent("Suelo Listo");
a.send(msg2);
}
}
public void Fundacion() {
8
if(this.electrico && this.hidrosanitario &&
this.sueloListo) {
this.electrico =false;
this.hidrosanitario =false;
this.sueloListo = false;
System.out.println("Fundaciones-Maquinaria");
ACLMessage msg = new
ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("albañil",
AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Fundaciones-Maquinaria");
a.send(msg);
}
}
}
}
3.4 Albañil
❏ Descripción
El agente Albañil cumple gran parte de las acciones incluidas en el plan de
construcción, estas son las fundaciones(hormigón, muros de contención), la
realización de la estructura correspondiente a losas, columnas y gradas, la
albañilería(actividades correspondientes a la obra gruesa), al igual que los revoques
y revestimientos.
Para llevar a cabo las fundaciones se debe tener el suelo listo (precondición) de lo
cual se encarga el agente Maquinaria Pesada, al cumplirse esto las fundaciones se
implementaran lo cual tendrá como resultado los cimientos listos (precondición),
esto permitirá al agente Albañil proseguir con su siguiente acción, la cual refiere a la
construcción de losas, columnas y gradas, esto dará como efecto la estructura
terminada (precondición), dada esta situación el albañil podrá comenzar la fase de
albañilería y concluida ésta dará lugar a los agentes Electricista y Plomero para
realizar sus respectivas acciones de instalacion electrica y plomeria.
Al concluir la fase de instalación eléctrica y de plomería, el agente Albañil podrá
continuar con la implementación de revoques, y consecuentemente los
revestimientos.
9
❏ Código
import
import
import
import
jade.core.AID;
jade.core.Agent;
jade.core.behaviours.CyclicBehaviour;
jade.lang.acl.ACLMessage;
public class Albañil extends Agent{
protected void setup() {
System.out.println("hello
" + getLocalName());
addBehaviour(new Listen(this));
}
class Listen extends CyclicBehaviour{
private final Agent a;
private boolean electrico = false;
private boolean hidrosanitario = false;
private boolean sueloListo = false;
private boolean EstrucAlba = false;
private boolean EstrucMaqui = false;
private boolean plomeria = false;
private boolean electricidad = false;
private ACLMessage msg;
public Listen (Agent a){
super(a);
this.a = a;
this.msg = null;
}
public void action(){
if((this.electrico && this.hidrosanitario) &&
this.sueloListo) Fundaciones();
if(this.electricidad && this.plomeria) Revoques();
if(EstrucAlba && EstrucMaqui) Estructura();
this.msg = a.receive();
if (this.msg != null){
switch(this.msg.getContent()){
case "Plano Electrico" :
this.electrico = true;
break;
case "Plano Hidrosanitario":
this.hidrosanitario = true;
break;
case "Suelo Listo":
this.sueloListo = true;
break;
10
case "Fundaciones-Albañil":
this.EstrucAlba = true;
break;
case "Fundaciones-Maquinaria":
this.EstrucMaqui = true;
break;
case "Estructura":
Albañileria();
break;
case "Plomeria":
this.plomeria = true;
break;
case "instalacion electrica":
this.electricidad = true;
break;
case "Revoques":
Revestimientos();
break;
}
}else block();
}
public void Fundaciones(){
System.out.println("Fundaciones-Albañil");
this.electrico =false;
this.hidrosanitario=false;
this.sueloListo=false;
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("albañil", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Fundaciones-Albañil");
a.send(msg);
}
public void Estructura(){
this.EstrucAlba = false;
this.EstrucMaqui = false;
System.out.println("Losas,Columnas y Gradas");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("albañil", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Estructura");
a.send(msg);
}
11
public void Albañileria(){
System.out.println("tabiques y ladrillos");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("electricista",
AID.ISLOCALNAME));
msg.addReceiver(new AID("plomero", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Obra Gruesa");
a.send(msg);
}
public void Revoques(){
System.out.println("Revoques");
this.electricidad = false;
this.plomeria = false;
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("albañil", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Revoques");
a.send(msg);
}
public void Revestimientos(){
System.out.println("Revestimientos");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("carpintero",
AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Revestimientos");
a.send(msg);
}
}
}
3.5 Electricista
❏ Descripción
El agente Electricista tiene como acción realizar la instalación eléctrica, para poder
llevar a cabo esto, es necesario tener la obra gruesa concluida(precondición), si es
12
así, el agente Electricista podrá proseguir con la instalación, lo cual dará como
efecto la conclusión de la instalación eléctrica.
❏ Código
package agents;
import
import
import
import
jade.core.AID;
jade.core.Agent;
jade.core.behaviours.CyclicBehaviour;
jade.lang.acl.ACLMessage;
public class Electricista extends Agent{
protected void setup(){
System.out.println("hello " + getLocalName());
addBehaviour(new Listen(this));
}
class Listen extends CyclicBehaviour{
private ACLMessage rec;
private Agent a;
public Listen(Agent a){
super(a);
this.a = a;
this.rec = null;
}
public void action(){
this.rec = this.a.receive();
if(rec ==null)block();
else
switch(rec.getContent()){
case "Obra Gruesa":
instalacionElectrica();
break;
}
}
public void instalacionElectrica(){
System.out.println("instalacion electrica");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("albañil", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("instalacion electrica");
a.send(msg);
}
13
}
}
3.6 Plomero
❏ Descripción
El agente Plomero. Su comportamiento y las acciones que realiza están en función
a la albañilería (precondición) que se realiza por el agente Albañil, la conclusión de
esta acción o efecto de la acción será tener la “Instalación de Plomería Terminada”
para la posterior ejecución de los agentes que se ocuparan de los Revoques
❏ Código
package agents;
import
import
import
import
jade.core.AID;
jade.core.Agent;
jade.core.behaviours.CyclicBehaviour;
jade.lang.acl.ACLMessage;
public class Plomero extends Agent{
protected void setup(){
System.out.println("hello " + getLocalName());
addBehaviour(new Listen(this));
}
class Listen extends CyclicBehaviour{
private ACLMessage rec;
private Agent a;
public Listen(Agent a){
super(a);
this.a = a;
this.rec = null;
}
public void action(){
this.rec = this.a.receive();
if(rec ==null)block();
else
switch(rec.getContent()){
case "Obra Gruesa":
Plomeria();
break;
}
}
14
public void Plomeria(){
System.out.println("Plomeria");
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("albañil", AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Plomeria");
a.send(msg);
}
}
}
3.7 Carpintero
❏ Descripción
Agente Carpintero. Este agente realiza la acción de colocado de puertas y ventanas
por políticas de la empresa estas se colocan después de los revestimientos, por lo
que la precondición para este agentes es “revestimiento terminado” por parte del
agente albañil. Como resultado o efecto de la acción se tendrá “instalación de
puertas y ventanas concluido”.
❏ Código
package agents;
import
import
import
import
jade.core.AID;
jade.core.Agent;
jade.core.behaviours.CyclicBehaviour;
jade.lang.acl.ACLMessage;
public class Carpintero extends Agent{
protected void setup(){
System.out.println("hello "+ getLocalName());
addBehaviour(new Listen(this));
}
class Listen extends CyclicBehaviour{
private Agent a;
private ACLMessage msg;
public Listen(Agent a){
this.a = a;
}
15
public void action(){
this.msg = this.a.receive();
if(this.msg!=null &&
"Revestimientos".equals(this.msg.getContent())){
System.out.println("Puertas y ventanas");
ACLMessage msg = new
ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("pintor",
AID.ISLOCALNAME));
msg.setLanguage("English");
msg.setOntology("Weather-forecast-ontology");
msg.setContent("Puertas y Ventanas");
a.send(msg);
}
}
}
}
3.8 Pintor
❏ Descripción
Agente Pintor. Este agente realiza la acción de colocado de pintado después de la
instalación de puertas y ventanas, por lo que la precondición para este agente es
“instalación de puertas y ventanas concluido” por parte del agente Carpintero. Como
resultado o efecto de la acción se tendrá “Pintado concluido” y por ser este la última
acción la casa queda terminada.
❏ Código
package agents;
import jade.core.Agent;
import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.ACLMessage;
public class Pintor extends Agent{
protected void setup(){
System.out.println("hello "+ getLocalName());
addBehaviour(new Listen(this));
}
class Listen extends CyclicBehaviour{
16
private Agent a;
private ACLMessage msg;
public Listen(Agent a){
this.a = a;
}
public void action(){
this.msg = this.a.receive();
if(this.msg != null &&
this.msg.getContent().equals("Puertas y Ventanas")){
System.out.println("Pintura");
System.out.println("CASA CONSTRUIDA
CORRECTAMENTE");
}
}
}
4. Resultados y pruebas del software
17
18
5. Conclusiones
Después de realizar la planificación correspondiente se logró implementar cada
agente con su respectivo comportamiento, tomando en cuenta las precondiciones,
las acciones y los efectos de cada agente. Una vez realizada la implementación de
los agentes pudimos entender su comportamiento e interacción, a la vez vimos que
es importante tener una buena planificación para que los agentes realicen las
acciones que les corresponde.
19
20
Descargar