NETLOGO: Modelação com Agentes em Projetos

Transcrição

NETLOGO: Modelação com Agentes em Projetos
NETLOGO: Modelação com Agentes em
Projetos de Investigação
joinresearch.pt
Um desafio: Ambiente de programação em que agentes ( pessoas, entidades, outros seres vivos) com as suas motivações, características próprias, diferentes, interagem e geram a complexidade presente no mundo real. José Cascalho @2016
[email protected]
1
Calendarização
TOTAL: 8 horas
Abril, 11, 2ª feira
8h30-12h30: Ambiente, Agentes, Ligações e Patches.
Estruturas de dados e composições iterativas, sequenciais e
alternativas.
Abril, 12. 3ª feira
8h30-12h30: Exemplos simples de programas baseados nos
trabalhos de investigação em ecologia/biologia
2
Introdução ao Netlogo @cascalho2016
Tópicos abordados
●
Identificar relativamente aos objetos do Netlogo
(Ambiente, Agentes e observador):
●
●
●
●
●
Patch (placa) e conjunto de patches; Turtle (tartaruga) e
conjunto de tartaturagas e Link (ligação) e conjunto de links;
Conjuntos de agentes, tartarugas ou links (AgentSets);
Utilização de contextos para dialogar com ambiente e agentes
(“ask”);
Exemplos (variáveis; crt (criação); movimento; geração
aleatória de valores);
Bases da linguagem de programação que permitem
criar modelos:
●
Estrutura de dados: listas, Comandos iterativos (ciclo “while”),
Comandos alternativos (“if”)s
3
Introdução ao Netlogo Cascalho@2016
Organização da apresentação
●
Interace
–
Ambiente, Comandos na Interface
–
Janela de Comand Center
●
Objetos do ambiente de programação: Patches, Tartarugas, Ligações;
●
Contextos de programação
●
Primeiro exemplo
●
Linguagem de programação
–
Variáveis e comandos para Tartarugas
–
Variáveis e comandos para Patches
–
Estrutura de dados
●
Definição e manipulção de uma Lista
–
Comandos iterativos, alternativos
–
Exemplos de código baseado em exemplos
4
Organização da apresentação
●
Interace
–
Ambiente, Comandos na Interface
–
Janela de Comand Center
●
Objetos do ambiente de programação: Patches, Tartarugas, Ligações;
●
Contextos de programação
●
Primeiro exemplo
●
Linguagem de programação
–
Variáveis e comandos para Tartarugas
–
Variáveis e comandos para Patches
–
Estrutura de dados
●
–
●
Definição e manipulção de uma Lista
Comandos iterativos, alternativos
Exemplos de código baseado em exemplos
5
Ambiente Interface
●
Botão configurar (“setup”):
to setup
...
end
●
Botão executar (“go”):
to go
...
end
●
●
●
Monitorizar valores de variáveis;
Modificar valores de variáveis através de botão
deslizante;
Modificar valores de variáveis através de interruptor;
6
Janelas na interface
●
Painel do Mundo:
Inspeccionar uma placa do painel (“patch”);
– Modificar as características do “mundo
virtual”: relação entre “patches” e “pixels”;
Janela de comandos (JC):
–
●
–
–
Instruções através da janela de comandos;
Diferentes perspetivas;
7
Introdução ao Netlogo Cascalho@2013
Comand Center
●
●
Usar o apoio da biblioteca de comandos do Netlogo →
https://ccl.northwestern.edu/netlogo/docs/dictionary.html
Modificar a cor de “patches”
–
Entrar no espaço de Patches:
●
–
Entrar no espaço de “Observer”:
●
●
●
Várias tartarugas, modificar as suas dimensões, forma e cor, usar a caneta;
●
pendown, shape, size, ...
Dar instruções para movimentar tartarugas:
●
●
ask patch 1 – 1 [ set pcolor … ]
ask patches [ set pcolor ...]
Criar agentes:
–
●
set pcolor ...
fd, rd, lf, …
Criar ligações entre tartarugas
–
Ligar todas as tartarugas
●
ask turtle 1 [create-links-with-other]
8
Introdução ao Netlogo Cascalho@2013
Pesquisa de comandos
https://ccl.northwestern.edu/netlogo/docs/dictionary.html
9
Introdução ao Netlogo Cascalho@2013
Patches
10
Introdução ao Netlogo Cascalho@2013
Tartarugas
11
Introdução ao Netlogo Cascalho@2013
Ligações
12
Introdução ao Netlogo Cascalho@2013
Contextos de programação
ask patches [...]
ask turtles [...]
Observador
ask links [...]
ask circulos [...]
breed[circulo circulos]
breed[floresta florestas]
breed[caminho caminhos]
13
Introdução ao Netlogo Cascalho@2013
Contextos de programação
●
Cada linha de comandos está associada a um contexto.
–
●
Cada comando é executado dentro de um módulo ou
função
–
●
Quase sempre, parte-se do contexto do observador e executase instrução para entrar num contexto do ambiente (patches),
de agentes (circulos, turtles) ou de ligações (links)
Os “botões” do espaço de interação correspondem a uma
função no programa
É possível atribuir a uma função a execução em ciclo
infinito
14
Exemplo
Beetles que se alimentam para
ganhar energia
breed [ beetles beetle ]
to setup
clear-all
create-beetles 100 [ setxy random-xcor random-ycor ]
reset-ticks
end
to go
move-agents
tick
end
to move-agents
ask beetles [
right random 360
forward 1
]
end
15
Introdução ao Netlogo Cascalho@2013
Exemplo
to setup
clear-all
setup-patches
setup-agents
reset-ticks
end
beetles-own [energy]
to go
move-agents
eat-grass
tick
end
to setup-patches
ask patches [ set pcolor green ]
end
to setup-agents
create-beetles 100
ask beetles [ set energy 100 setxy randomxcor random-ycor ]
end
to eat-grass
ask beetles [
if pcolor = green [
set pcolor black
set energy energy + 10
]
]
end
to move-agents
ask beetles [
right random 360
forward 1
set energy energy - 1
;;eat-grass
]
end
E se evocasse­mos eat­grass aqui?
16
Introdução ao Netlogo Cascalho@2013
Exemplo
●
●
Monitorizar o número de tartarugas (“count
beetles”) e o número de placas verdes (“count
patches with ...”);
Interruptor para mostrar/não mostrar energia
de cada tartaruga;
to eat-grass
ask beetles [
if pcolor = green [
set pcolor black
set energy energy + 10
]
ifelse show-energy?
[ set label energy ]
[ set label "" ]
]
end
17
Introdução ao Netlogo Cascalho@2013
Exemplo
●
Reprodução, morte, erva volta a crescer;
to go
move-agents
eat-grass
reproduce
check-death
regrow-grass
tick
end
to reproduce
ask beetles [
if energy > 50 [
set energy energy - 50
hatch 1 [ set energy 50 ]
]
]
end
to check-death
ask beetles [
if energy <= 0 [ die ]
]
end
to regrow-grass
ask patches with [ pcolor != green ][
if random 100 < 3 [ set pcolor green ]
]
end
18
Introdução ao Netlogo Cascalho@2013
Exemplo
●
Reorganização do código
–
Separar o que é dos agentes para rotina só sobre
agentes do que é do ambiente
●
●
Criar rotina agentes com subrotinas move-agents, eatgrass, reproduce, check-death
Contextualizar essas rotinas para beetles
–
Ganha-se clareza no código
–
Perde-se aleatoriedade na execução das tarefas
●
Cada agente executa sequencialmente todas as subrotinas
vs Cada agente executa uma subrotina
Selecionar
aleatoriamente
agente
19
Exemplo
●
Monitorizar variáveis de um programa
–
Introdução de gráfico na janela de interface
verdes
tartarugas
–
●
Introdução de monitor de variável (verdes e tartarugas)
Guardar dados das variáveis
–
Num momento
●
Regista num ficheiro “csv”, os dados relativos a todos os objetos
–
–
export-world (word "resultados " date-and-time ".csv"))
Como experiência
●
Regista os dados ao longo da execução da tarefa
–
BehaviorSpace
20
Introdução ao Netlogo Cascalho@2013
Exemplo
21
Exemplo
22
Exemplo
●
Arrumar os agentes, ambiente e dados
to setup
clear-all
setup-agents
setup-environment
reset-ticks
setup-data
end
to setup-agents
create-beetles 100 [ setxy
random-xcor random-ycor set
energy initial-energy]
end
to setup-environment
setup-patches
end
to setup-data
set mean-energy 0
end
23
Exemplo
●
Arrumar os agentes, ambiente e dados
to go
;agents
agents
;environment
environment
colect-data
tick
end
to agents
ask beetles [
move-agents
eat-grass
if random 100 > 50
[reproduce] ;random
reproduction
check-death
]
end
to environment
regrow-grass
end
to colect-data
ifelse ( count beetles > 0 ) [ set meanenergy mean [energy] of beetles ] [ set
mean-energy 0 ]
end
24
Questionário
1. Objectos no Netlogo:
–
Quais são os objetos?
–
Que comando permite aceder a determinado contexto? Quantos contextos existem?
–
Qual o papel dos “breeds” no contexto dos agentes?
–
Para quê utilizar as “ligações” entre tartarugas?
2. Programação
–
Para que servem os botões habituais de setup e go configurar (setup) e executar
(go) ?
–
Como se consegue tornar a execução de uma rotina de forma permanente através
da interface?
–
Quais os comandos para uma tartaruga se movimentar? E para um patch?
3. Monitorização e dados
–
É possível monitorizar valor de variáveis do programa? Como?
–
É possível guardar dados de uma simulação? Como?
–
É possível gerar muitas simulações com variação do valor de variáveis em intervalos
definidos? Como?
25
Introdução ao Netlogo Cascalho@2013
Linguagem de programação
●
Tipos de dados
–
Números reais e inteiros
●
–
Cadeia de caracteres (strings)
●
–
Combinar carateres
Listas
●
●
●
Comandos para gerar números aleatórios
Criar lista
Adicionar, ler e remover elementos, etc.
Comandos básicos
–
Sequência
–
Alternativos
–
Iterativos
26
Introdução ao Netlogo Cascalho@2013
Variáveis
●
Definição e manipulação de variável
–
GLOBAL
– globals
–
[ list-colors]
– set list-colors []; set list-colors 123 list-colors
LOCAIS (numa rotina)
– let
●
list-colors []; set list-colors 123 list-colors
Variáveis pré-definidas
–
Tartarugas
–
xcor; ycor
● breed; color; heading; hidden?; label; labe-color; shape; size
● pen-down?
● Who
Links
●
●
Patches
●
●
pxcolor; pycolor
pcolor; plabel; plabel-color
27
Introdução ao Netlogo Cascalho@2013
Comandos para os objetos
●
Tartaruga
–
–
Actuam sobre uma tartaruga
●
forward (fd); right(rt); left(lt)
●
set towards (turtle 22); towards x y
●
distance (turtle 1); distance x y
●
[who] of turtles
●
other-turtles-here
Retornam um grupo de tartarugas (AgentSet)
●
●
●
–
turtles with […]; in-radius; other-turtles-here
any; max-one-of; min-one-of; random-one-of; one-of;
ask turtles
Referir-se a si próprio num contexto AgentSet dentro de outro contexto AgentSet
●
●
ask turtles [ … ask turtles with [ color = [color] of myself] [set size size + 1]... ]
ask turtles [ if [color] of self = [color] of myself] [set size size + 1]
1
2
3
4
5
6
1
2
3
4
5
6
28
Introdução ao Netlogo Cascalho@2013
Comandos para os objetos
●
Tartaruga
–
–
Actuam sobre uma tartaruga
●
forward (fd); right(rt); left(lt)
●
set towards (turtle 22); towards x y
●
distance (turtle 1); distance x y
●
[who] of turtles
●
other-turtles-here
Retornam um grupo de tartarugas (AgentSet)
●
●
●
–
turtles with […]; in-radius; other-turtles-here
any; max-one-of; min-one-of; random-one-of; one-of;
ask turtles
Referir-se a si próprio num contexto AgentSet dentro de outro contexto AgentSet
●
●
ask turtles [ … ask turtles with [ color = [color] of myself] [set size size + 1]... ]
ask turtles [ if [color] of self = [color] of myself] [set size size + 1]
1
2
3
4
5
6
1
2
3
4
5
6
29
Introdução ao Netlogo Cascalho@2013
Comandos para os objetos
●
Tartaruga
–
–
Actuam sobre uma tartaruga
●
forward (fd); right(rt); left(lt)
●
set towards (turtle 22); towards x y
●
distance (turtle 1); distance x y
●
[who] of turtles
●
other-turtles-here
Retornam um grupo de tartarugas (AgentSet)
●
●
●
–
turtles with […]; in-radius; other-turtles-here
any; max-one-of; min-one-of; random-one-of; one-of;
ask turtles
Referir-se a si próprio num contexto AgentSet dentro de outro contexto AgentSet
●
●
ask turtles [ … ask turtles with [ color = [color] of myself] [set size size + 1]... ]
ask turtles [ if [color] of self = [color] of myself] [set size size + 1]
1
[1,5]
2
3
4
1
2
5
6
[2,3]
3
4
5
6
30
Introdução ao Netlogo Cascalho@2013
Comandos para objetos
●
Patches
–
Execução de comandos
ask patch 0 0 [set pcolor red]
Representam o estado do mundo
●
●
patches-own [energy]
São úteis para representar obstáculos
●
–
●
If ( [pcolor = “brown” ] of patch-here ) [...]
Podem difundir característica pelos vizinhos com diferentes
“intensidades”
●
Podem fazer nascer tartarugas;
●
31
Introdução ao Netlogo Cascalho@2013
Comandos para os objetos
●
Tartaruga
–
Actuam sobre uma tartaruga
–
forward (fd); right(rt); left(lt)
● set towards (turtle 22); towards x y
● distance (turtle 1); distance x y
● [who] of turtles
● Other-turtles-here
Retornam um grupo de tartarugas (AgentSet)
●
●
●
●
–
turtles with […]; in-radius; other-turtles-here
any; max-one-of; min-one-of; random-one-of; one-of;
ask turtles
Referir-se a si próprio num contexto AgentSet
●
ask turtles with [ color = [color] of myself] [set size size + 1]
32
Introdução ao Netlogo Cascalho@2013
Listas
●
Criar uma lista, adicionar e remover
elementos
●
●
●
●
●
let list-colors []
set list-colors lput 122 list-colors
set list-colors fput 132 list-colors
set list-colors remove-item 0 list-colors
set list-colors remove 132 list-colors
33
Alguns comandos para listas
●
foreach
●
●
Executa um ciclo com base nos elementos de uma lista
filter
Retorna uma nova lista apenas com alguns membros
da lista inicial
●
filter [? < 3] [1 2 3]
–
●
Sentence
●
●
retorna apenas elementos menores que 2, [1 2]
Combina elementos de duas listas
Sort
●
Ordena uma lista
34
Introdução ao Netlogo Cascalho@2013
Exemplo
breed [beetles beetle]
globals [equal-colours-list]
to setup
clear-all
create-beetles 50 [ set xcor random-xcor set ycor random-ycor ]
set equal-colours-list []
end
to go
ask beetles [
let common-colours [who] of beetles with [color = [color] of myself]
if length common-colours >= same-colour [
set size size + 1
set equal-colours-list
sentence remove-duplicates common-colours equal-colours-list
set equal-colours-list
remove-duplicates equal-colours-list
]
]
end
35

Documentos relacionados