Repositório do projeto de "Agentes e Inteligência Artificial Distribuída", unidade curricular do 4º ano do Mestrado Integrado em Engenharia Informática e Computação da Faculdade de Engenharia da Universidade do Porto
- Descrição
- Estratégias
- Estratégia 1
- Estratégia 2
- Comunicação
- Documentação
- Developers
Pretende-se implementar um sistema de distribuição de correio no qual vários carteiros negociam com o posto de correios que correspondência vão entregar, tendo estes um limite de correspondência que podem transportar. Os carteiros recebem um valor por cada entrega feita. Assim os Carteiros tentam receber o máximo possível, tentando minimizar as despesas em viagens a locais mais distantes. O Posto de Correio pretende que as entregas sejam feitas com a menor possibilidade de atraso possível e com o menor preço possível. Há portanto carteiros que irão assegurar uma probabilidade maior de entrega sem atrasos do que outros e carteiros que por serem mais competentes irão cobrar mais ao Posto de Correios.
Numa primeira fase os carteiros fazem uma oferta fixa, por exemplo, cada serviço custa 5 unidades monetárias e o carteiro tem uma capacidade máxima de 10 serviços.
Numa segunda fase pretende-se que os carteiros sejam mais competitivos. Logo, incluiremos outras variáveis como o tempo que demoram a ir buscar e entregar um pacote, um preço por km, entre outros. Tudo isto começa com um valor fixo, por exemplo, 1 unidade monetária por km.
Um outro exemplo seria um carteiro que aceitou um serviço e agora só aceitará as entregas que ficarem a x distância do primeiro serviço.
Uma outra opção seria um carteiro que já aceitou um serviço e agora para um novo serviço na mesma zona, apresentará um preço mais baixo tornando-se mais competitivo.
Postman | PostOffice | |
---|---|---|
[Subscribe] Handshake | > | Guarda ID e nome do sender |
Guarda Posição do PostOffice | < | [Confirm] Handshake |
Espera uma order | Gera uma order | |
Calcula a sua oferta | < | [Propagate] Order |
[Propose] Proposal | > | Guarda o proposta |
Aguarda resposta | Calcula a melhor proposta | |
Analisa resposta | < | [ACCEPT_PROPOSAL] Decision ou [REJECT_PROPOSAL] * Decision* |
... | ... | |
Atualiza o seu estado | < | [QUERY_IF] Alive |
[Confirm] Alive | > | Verifica a atividade dos postmen |
... | ... | |
[INFORM] DeliveryDone | > | Marca a order como entregue |
Enviar mensagem(exemplo):
send(new HandshakeMessage(name, postOffice).toACL());
ACLMessage{
performative: subscribe;
sender: PostMan;
receiver: Postoffice;
ontology: Handshake;
reply-with: Handshake;
content: null
}
ACLMessage{
performative: confirm;
sender: PostOffice;
receiver: PostMan;
ontology: Handshake;
reply-with: null;
content: position-x position-y
}
ACLMessage{
performative: propagate;
sender: PostOffice;
receiver: PostMen;
ontology: Order;
reply-with: Proposal;
content: position-x position-y estimated-time
}
ACLMessage{
performative: propose;
sender: PostMan;
receiver: PostOffice;
ontology: Proposal;
reply-with: Decision;
content: position-x position-y estimated-time
}
ACLMessage{
performative: accept_proposal;
sender: PostOffice;
receiver: PostMan;
ontology: Decision;
reply-with: null;
content: orderID
}
ACLMessage{
performative: reject_proposal;
sender: PostOffice;
receiver: PostMan;
ontology: Decision;
reply-with: null;
content: null
}
ACLMessage{
performative: query_if;
sender: PostOffice;
receiver: PostMen;
ontology: Alive;
reply-with: Alive;
content: null
}
ACLMessage{
performative: confirm;
sender: PostMan;
receiver: PostOffice;
ontology: Alive;
reply-with: null;
content: null
}
Handler mensagem:
ACLMessage reply = Handler.parse(msg, instance);
- David Falcão @davidrsfalcao
- Pedro Miranda @pmiranda07
- Verónica Fradique @veronicafradique