Agentes e Inteligência Artificial Distribuída Sistema Multi-Agente para automação inteligente de uma casa Dezembro de 2006 Trabalho realizado por: André Lessa (ei02017) - [email protected] Índice 1. Objectivo.......................................................................... 3 2. Descrição.......................................................................... 4 2.1. Funcionalidades ......................................................... 4 2.2. Estrutura do Programa................................................ 4 2.2.1. Módulo Agente Central........................................ 5 2.2.2. Módulos de Decisão............................................. 5 2.2.3. Módulos Actuadores ............................................ 7 2.2.4. Regras em JESS ................................................... 7 2.3. Detalhes de Implementação ....................................... 8 2.4. Ambiente de Desenvolvimento .................................. 8 3. Conclusão....................................................................... 10 4. Melhoramentos............................................................... 11 5. Bibliografia .................................................................... 12 6. Apêndices....................................................................... 13 6.1. Manual do Utilizador ............................................... 13 6.2. Exemplo de uma Execução ...................................... 13 2 1. Objectivo Este trabalho tem como objectivo a implementação de um sistema multi-agente que permita simular a gestão automática de recursos habitacionais, como aquecimento e iluminação, definindo para isso regras de actuação para a manipulação de diferentes dispositivos. Assim, haverá agentes distribuídos fisicamente que representam dispositivos (lâmpadas, persianas, janelas, luzes) e que podem receber comandos com vista à alteração do seu estado. Outros funcionam como sensores (de iluminação, de temperatura), permitindo ao sistema obter informações sobre o ambiente. O sistema possui uma unidade central que recebe informação e que decide, com base em regras predefinidas, acções a executar, enviando-as para os agentes actuadores correspondentes. 3 2. Descrição 2.1. Funcionalidades Este projecto encontra-se dividido em duas componentes de implementação. Uma consiste na implementação dos agentes em JADE e a outra das regras em JESS. O sistema possui uma unidade central que recebe informação e que decide, com base em regras predefinidas, acções a executar, enviando-as para os agentes actuadores correspondentes. São definidos inicialmente os valores de número de pessoas, temperatura exterior, temperatura interior, luminosidade exterior, luminosidade interior, bem como os valores que os utilizadores querem para a temperatura e luminosidade. 2.2. Estrutura do Programa O projecto encontra-se dividido em 4 módulos essenciais: • Módulo Central; • Módulo de Decisão (temperatura e luminosidade); • Módulo Actuador (um para cada agente actuador); • Regras definidas em JESS. 4 Módulo de Decisão Luminosidade Módulo Actuador Lâmpadas Módulo Actuador Persianas Módulo Central Regras em JESS Módulo Actuador Janelas Módulo de Decisão Temperatura Módulo Actuador Ar Condicionado 2.2.1. Módulo Agente Central Este Módulo recebe informação das decisões tomadas pelos Módulos de Decisão, de luminosidade e temperatura respectivamente. 2.2.2. Módulos de Decisão Estes Módulos recebem os valores iniciais, enviam-nos para o ficheiro em JESS e recebem a decisão tomada. Posteriormente enviam esta decisão tanto para o Módulo Central, bem como a cada Módulo Actuador. 2.2.2.1. Módulo Temperatura Função mais relevante, responsável por enviar os valores para o JESS e receber a decisão, enviando-a também aos Agentes Actuadores: 5 void temperatura(String template, String temp_in, String temp_out, String temp_user, String ac, String janelas, String mov) Variáveis, tal como definidas no “template” do ficheiro JESS: String template – neste caso vai receber “temperatura”; String temp_in – valor para a temperatura interior; String temp_out – valor para a temperatura exterior; String temp_user – valor para a temperatura desejada; String ac – estado do ar condicionado; String janelas – estados das janelas; String mov – existe ou não movimento. Decisões Tomadas: Esta função irá receber do JESS os novos estados do ar condicionado e janelas, enviando-os para os Agentes respectivos e Módulo Central. 2.2.2.2. Módulo Luminosidade Função mais relevante, responsável por enviar os valores para o JESS e receber a decisão, enviando-a também aos Agentes Actuadores: void luminosidade(String template, String luz_in, String luz_out, String luz_user, String persianas, String lampadas, String mov) Variáveis, tal como definidas no “template” do ficheiro JESS: String template – neste caso vai receber “luminosidade”; String luz_in – valor para a luz interior; 6 String luz_out – valor para a luz exterior; String luz_user – valor para a luminosidade desejada; String persianas – estado das persianas; String lampadas – estados das lâmpadas; String mov – existe ou não movimento. Decisões Tomadas: Esta função irá receber do JESS os novos estados das persianas e lâmpadas, enviando-os para os Agentes respectivos e Módulo Central. 2.2.3. Módulos Actuadores Estes Agentes recebem a decisão vinda dos Módulos de Decisão. Foram implementados os seguintes Agentes Actuadores: Ar Condicionado – recebe a nova temperatura; Janelas – recebe o novo estado (abertas, fechadas) Persianas – recebe o novo estado (abertas, entre-abertas, fechadas) Lâmpadas – recebe o novo estado (ligadas, desligadas) 2.2.4. Regras em JESS Foram definidas regras em JESS para a temperatura e luminosidade. As regras prevêem todos os casos possíveis de luminosidade e temperatura interior, exterior e desejada pelo utilizador, bem como a existência ou não de pessoas dentro da casa. Neste último caso, as regras devolvem o melhor caso com poupança de energia. Por exemplo 7 se a luz exterior for abundante ele abre as persianas mas nunca irá acender as lâmpadas se não tiver ninguém em casa. Para a luminosidade são devolvidos os novos estados das lâmpadas e persianas, e para a temperatura, os novos estados do ar condicionado e janelas. 2.3. Detalhes de Implementação A comunicação entre os Agentes foi implementada usando unicamente a performativa INFORM. Para facilitar a comunicação e definição de regras em JESS, foi utilizada uma escala numérica, que posteriormente seria traduzida desta forma: Temperaturas: graus centígrados; Luminosidade: 0, 1 e 2 que corresponde a nenhuma, média e alta, respectivamente; Janelas: 0 e 1 que corresponde a abertas e fechadas, respectivamente; Persianas: 0, 1 e 2 correspondendo a abertas, entre-abertas, fechadas, respectivamente; Ar Condicionado: graus centígrados; Lâmpadas: 0 para desligadas e 1 para ligadas. 2.4. Ambiente de Desenvolvimento O trabalho foi realizado numa máquina com as seguintes características: Processador: ~2.53GHz Memória: 1.00GB 8 O sistema operativo utilizado foi o Windows XP Professional Edition. Foi também utilizada a versão de Java jdk1.5.0_10, a versão 3.4.1 de JADE e a versão 7.0 de JESS. O desenvolvimento do projecto foi efectuado no software Eclipse SDK 3.2.1. 9 3. Conclusão Este trabalho revela-se muito interessante uma vez que sendo uma simulação de uma situação real e pertinente, permite estudar como seria eficaz a o controlo inteligente e automatizado de uma casa, sendo a domótica uma área em bastante desenvolvimento e expansão. A utilização dos agentes permite que seja implementado um sistema distribuído mostrando o seu comportamento e interacções. A utilização do JADE (Java Agent Development Framework) simplifica a implementação de um sistema multi-agente através de um middleware que opera com especificações FIPA e possui um conjunto de ferramentas de debugging. Os agentes podem desta forma ser distribuídos por máquinas e controlados remotamente. JESS consiste num motor de regras escrito totalmente para Java. Ao utilizarmos esta plataforma podemos criar software em Java com a capacidade de “racionalizar”, utilizando a base de conhecimento que introduzimos sob a forma de regras declarativas. A plataforma JESS utiliza uma versão optimizada do algoritmo Rete para execução de regras. Rete é um mecanismo bastante eficiente na resolução do problema de atribuição “muitos para muitos”. A plataforma JESS apresenta-se assim como ideal para a definição das regras necessárias à domótica sobre a qual se baseia este projecto. 10 4. Melhoramentos Seria possível uma série de melhoramentos a este projecto. Eu considero que o mesmo não ficou concluído, faltando uma Interface Gráfica e uma melhor comunicação entre os Agentes. Também poderiam ser implementados uma série de novos Agentes, tornando este projecto mais complexo. Tal não foi possível, ficando este grupo de trabalho, reduzido a metade dos elementos, o que afectou em grande escala o bom desenvolvimento do projecto. 11 5. Bibliografia • Site da disciplina de AIAD http://paginas.fe.up.pt/~eol/AIAD/aiad0607.html • Site da Plataforma JADE http://jade.tilab.com/ • Site do Eclipse http://www.eclipse.org/ • Documentação sob a plataforma JADE http://qos.tecnolink.com.br/doc/Jade.htm • Tutoriais sobre JADE http://www.iro.umontreal.ca/~vaucher/Agents/Jade/JadePrimer.html • Site da Plataforma JESS http://herzberg.ca.sandia.gov/ 12 6. Apêndices 6.1. Manual do Utilizador Correr os executáveis: ¾ run.bat ¾ run2.bat Ou numa janelas de comandos: ¾ java jade.Boot –gui ¾ java jade.Boot -container central:Central temperatura:Temp luz:Luz arcondicionado:ArCondicionado lampadas:Lampadas persianas:Persianas 6.2. Exemplo de uma Execução Execução do ficheiro run.bat. Este ficheiro inicializa o JADE. 13 janelas:Janelas De seguida executa-se o ficheiro run2.bat: Os valores de entrada para obter estes resultados foram os seguintes: Pessoas: 1 Temperatura Interior: 10º Temperatura Exterior: 20º Temperatura Desejada: 22º Luminosidade Interior: 1 (média) Luminosidade Exterior: 1 (média) Luminosidade Desejada: 2 (alta) 14