Introdução à Inteligência Artificial Licenciatura em Engenharia Informática: 2º ano - 1º semestre 2012/2013 Aulas Laboratoriais Ficha 1: Introdução ao NetLogo 1. O que é o NetLogo? O NetLogo (http://ccl.northwestern.edu/netlogo) é um ambiente de programação adequado à modelação de sistemas multi-agente. Permite realizar simulações de diferentes tipos, como por exemplo de ecossistemas ou de fenómenos sociais. O NetLogo é baseado no conceito de agente: uma entidade autónoma, com características e regras próprias que especificam o seu comportamento. Tem a capacidade para interagir com o ambiente em que está inserido e as tomar decisões que lhe permitam atingir os seus objectivos. O programador tem total liberdade para definir quais as características do agente, ao nível das percepções, acções ou estrutura interna (por exemplo, se tem ou não memoria). As características principais do NetLogo são: - Os agentes actuam individualmente ao longo do tempo, tendo a capacidade de alterar o seu comportamento; - Podem ser estabelecidas interacções directas ou indirectas entre os agentes; - O ambiente é completamente definido pelo programador/utilizador. - Possui ferramentas poderosas para estudo e análise dos resultados de simulação (durante e/ou no final das experiências); Existem dois níveis de utilização do NetLogo: - Interacção com modelos já existentes: o ambiente permite que um utilizador efectue simulações com modelos já existentes. Normalmente é possível especificar/alterar alguns parâmetros do modelo e verificar quais os efeitos produzidos ao nível de resultados - Concepção e desenvolvimento de modelos de simulação. O NetLogo possui três tipos de agentes (operando em simultâneo): - Patches: Células que permitem criar um ambiente 2D; - Turtles: Agentes que se movem no ambiente 2D criado pelas patches; - Observador: Agente que observa o ambiente de simulação constituído pelas turtles e pelas patches e que pode actuar sobre ele. 1 2. Simulação de Modelos existentes na biblioteca A biblioteca do NetLogo disponibiliza uma grande quantidade de modelos de simulação, prontos a utilizar. Podem também ser alterados, de acordo com as necessidades do utilizador. Modelo a utilizar: wolf sheep predation (Tutorial# 1 do manual do NetLogo [ver moodle]). Passo 1: Aceder ao modelo - Iniciar o NetLogo - Menu File → Models Library → Pasta Biology - Seleccionar o modelo wolf sheep predation Surge o modelo constituído por várias componentes: - A área de simulação (o ambiente onde se vão movimentar os agentes); - Botões e sliders de vários tipos para especificação de parâmetros; - Gráficos e outros monitores para apresentação de resultados. Existem 3 vistas no ambiente de desenvolvimento: - Interface: Vista do ambiente 2D, onde se adicionam botões, gráficos, etc e de vizualiza o progresso da simulação; - Information: Documentação sobre o modelo - Procedures/Code: código, escrito em lnguagem Logo, que controla o comportamento da simulação Passo 2: Efectuar simulações Os botões existentes têm uma acção associada e permitem controlar o modelo. Existem 2 tipos de botões: - Once: executam uma acção e terminam; - Forever: executam uma acção repetidamente. Para terminar a execução é necessário voltar a carregar no botão. Os botões forever têm duas setas no canto inferior direito. 2 Para realizar a simulação do modelo efectuar os seguintes passos: 1. Pressionar o botão setup 2. Pressionar o botão go 3. Voltar a pressionar o botão go quando pretender terminar a simulação. Passo 3: Recolher resultados O NetLogo apresenta resultados de duas maneiras simples: através de gráficos ou de monitores. Os resultados vão sendo actualizados ao longo da simulação: Nos gráficos aparece a evolução dos valores ao longo do tempo, enquanto nos monitores aparecem os valores actuais. Passo 4: Parametrização do modelo O NetLogo permite alterar alguns dos parâmetros que controlam o funcionamento dos modelos (antes e durante a simulação). No modelo do exemplo existem: - Switches (interruptores) que activam/desactivam uma determinada característica; - Sliders (cursores) que atribuem um valor (de entre uma gama de valores possíveis) a uma determinada característica. 3 Exercício: 1. Identifique os parâmetros que podem ser configuráveis no modelo (consulte a área Information para esclarecer eventuais dúvidas). 2. Efectue alterações nos parâmetros e verifique quais os efeitos nos resultados da simulação. 3. Procure encontrar conjuntos de parâmetros que garantam o equilíbrio do ecossistema. Passo 5: Alterar as dimensões do ambiente O ambiente em que se movimentam os agentes é constituído por uma grelha de células (2D). É possível configurar as suas dimensões seleccionando o botão Settings na barra superior. Por defeito, a origem é a célula central que tem coordenadas (0, 0). É possível especificar a coordenada máxima para o eixo dos xx e dos yy. 4 Exercício: Altere as dimensões do ambiente e verifique quais os efeitos no resultado da simulação. As características e os comportamentos dos componentes do modelo são programados através de um conjunto de procedimentos (funções). É, no entanto, possível recorrer ao centro de comando para efectuar pequenos ajustes durante a simulação. Os comandos podem ser dirigidos a qualquer tipo de agente. Inicie uma simulação e execute os seguintes comandos (um de cada vez). Os comandos devem ser escritos na linha que está por baixo da janela principal do command center: ask patches [set pcolor yellow] ask turtles [set color 95] setup ask sheep [set color pink] ask turtles [die] Tente interpretar os comandos que foram efectuados, nomeadamente no que diz respeito aos agentes que são afectados por eles. Passo 7: Análise detalhada de um agente É possível consultar detalhadamente as características de um agente através do seu monitor individual. O monitor de um agente (pode ser um patch ou uma turtle) pode ser obtido clicando directamente sobre ele com o botão direito do rato. 5 Nesta janela as características do agente podem ser consultadas e alteradas. Passo 8: Análise do código implementado Posicione-se no separador PROCEDURES e analise o código implementado e tente decifrar o que faz cada procedimento/instrução. Anote as instruções que achar mais interessantes para utilização em futuros exercícios. Exercício Consegue encontrar no código as instruções que fazem as seguintes tarefas? a) b) c) d) e) Criar dois tipos de turtles, neste caso lobos e ovelhas; Criar o número de lobos e ovelhas estipulados nas variáveis correspondentes; Reprodução dos lobos: como se cria o 2º lobo, qual a energia com que fica? Morte dos lobos ou ovelhas; Comer a erva, o que acontece à energia de quem come, o que acontece à patch onde estava a relva; f) Fazer crescer a relva de tempos a tempos; g) Construir e actualizar o gráfico. Exercício - Criar um exemplo simples 1. Crie um novo ficheiro em FILE – NEW e grave-o na sua conta. 2. Alterar propriedades da grelha bidimensional de forma a esta começar em (-12,12) e a terminar em (12,-12). Coloque o patch size = 15 3. Crie dois botões: o botão SETUP e o botão GO. Active a opção forever para o botão GO. 4. Associe a cada um dos botões os procedimentos setup e go (que se vão implementar a seguir) 5. Ir para o separador PROCEDURES e escrever o código para cada botão: to setup clear-‐all create-‐turtles 10 ask turtles[ set shape "person" set color yellow ] end to go ask turtles[ forward 1 ] end 6 6. Ir para o interface e executar 7. Alterar as coordenadas e a orientação das turtles: acrescente o código a vermelho: to setup clear-‐all create-‐turtles 10 ask turtles[ setxy random-‐xcor random-‐ycor set heading 90 set shape "person" set color yellow ] end 8. Execute o modelo, pode diminuir a velocidade de visualização no slider da barra principal para ver melhor os efeitos do código introduzido. 9. Alterar o heading para 0 e executar 10. Altere a orientação (heading) para que seja aleatória: set heading random 360 11. Acrescentar um slider para controlar o número de pessoas. Use uma variável de nome pessoas 12. Alterar no código do procedimento setup. O nº de turtles a criar corresponde ao valor da variável pessoa inicializada no slider que introduziu anteriormente. create-‐turtles pessoas 13. Acrescentar energia às turtles. Coloque esta linha de código no topo do ficheiro: turtles-‐own [energia] 14. Inicializar energia (acrescente o código a vermelho no procedimento setup) to setup clear-‐all create-‐turtles 10 ask turtles[ set energia random 100 setxy random-‐xcor random-‐ycor set heading random 360 set shape "person" set color yellow ] end 15. Colocar energia a diminuir e pessoas a morrer, altere o procedimento go: to go ask turtles[ forward 1 set energia energia -‐ 1 if energia <= 0 [ die] ] end 7 16. Marcar as células que morrem a vermelho: to go ask turtles[ forward 1 set energia energia -‐ 1 if energia <= 0 [ ask patch-‐here [set pcolor red] die ] ] end 17. Executar e ver as alterações 18. Como parar a simulação quando não há pessoas? Acrescente o código a vermelho. to go ask turtles[ forward 1 set energia energia -‐ 1 if energia <= 0 [ ask patch-‐here [set pcolor red] die] ] if (count turtles = 0) [stop] end 19. Vamos agora colocar comida no ambiente: células verdes. Acrescente o código a vermelho no procedimento setup e crie um novo procedimento setup-patches: to setup clear-‐all setup-‐patches create-‐turtles 10 ask turtles[ set energia random 100 setxy random-‐xcor random-‐ycor set heading random 360 set shape "person" set color yellow ] end O procedimento setup-patches coloca de forma aleatória algumas patches com a cor verde: to setup-‐patches ask patches[ let x random 100 ;nº aleatório entre 0 1 100 if x < 10 [ Isto é um comentário: set pcolor green colocar um ; antes do ] comentário ] end 8 20. Como aumentar energia se a pessoa comer? criar o procedimento comer e chamá-lo no procedimento go. O procedimento comer detecta a cor da patche e se esta for verde, passa-a a preto e aumenta a energia da turtle. to go ask turtles[ forward 1 set energia energia -‐ 1 if energia <= 0 [ ask patch-‐here [set pcolor red] die] comer ] if (count turtles = 0) [stop] end to comer if pcolor = green [ set pcolor black set energia (energia + 100) ] end 21. Acrescentar um monitor para ver o nº de pessoas 22. Acrescentar um plot para ver o nº de pessoas 9 23. Criar o procedimento que actualize o gráfico: to grafico set-‐current-‐plot-‐pen "pessoas" plot count turtles end 24. Chamar o procedimento em go: to go ask turtles[ forward 1 set energia energia -‐ 1 if energia <= 0 [ ask patch-‐here [set pcolor red] die] comer ] if (count turtles = 0) [stop] grafico end 25. Use a instrução breed para criar dois tipos de pessoas: homens e mulheres breed[homens homem] breed[mulheres mulher] 26. Coloque dois sliders no interface gráfico para definir o nº de homens e o nº de mulheres a criar. 27. Altere o procedimento setup da seguinte forma: a. Criar o nº de homens e mulheres correcto, de acordo com o estipulado nos sliders (create-‐homens x e create-‐mulheres y) b. Atribuir cor azul aos homens e vermelha às mulheres e colocar as mulheres com tamanho 1 e os homens com tamanho 1.5 ask mulheres[. . .] ask homens[ . . . ] ask turtles[. . . ] ;;para o que é comum aos dois 28. Altere o procedimento go da seguinte forma: a. As mulheres gastam 1 de energia quando se movimentam e os homens gastam 2 de energia quando se movimentam b. As mulheres quando morrem deixam a patch a vermelho, os homens quando morrem deixam a patch a azul 29. Edite o gráfico e altere-o para que tenha duas canetas, uma para registar o nº de homens e outra para registar o nº de mulheres 30. Altere o procedimento grafico para que coloque uma linha de contagem de mulheres e outra linha de contagem de homens. 10