Você está na página 1de 31

30/09/22

Introdução à Inteligência
Artificial (IIA)
2022/23

Avaliação IIA
● Exame escrito - 12 Valores

● Trabalhos Práticos - 8 Valores


○ TP I – 2 valores
■ Sistema de agentes: linguagem Netlogo
■ Entrega: 30 de Outubro
■ Defesas: aulas de 4 e 11 de Novembro
○ TP2 II – 6 valores
■ Problema de otimização, algoritmos: linguagem C
■ Entrega: 08 de Janeiro
■ Defesas: 9 – 13 Janeiro

Os trabalhos devem ser realizados em grupos de 2 alunos. Trabalhos individuais apenas


com justificação válida
2

1
30/09/22

Plano aulas práticas


Ficha 1 Introdução ao NetLogo NetLogo

Ficha 2 Agentes reativos NetLogo

Ficha 3 Agentes reativos com memória NetLogo

Ficha 4 Trilho de Santa Fé NetLogo

Ficha 5 Agentes adaptativos - estudo experimental NetLogo

Ficha 6 Pesquisa no espaço de estados Papel e lápis

Ficha 7 – 2 aulas Pesquisa local C

Ficha 8 – 3 aulas Computação Evolucionária C

Ficha 1
Introdução ao NetLogo

2
30/09/22

1. Introdução ao NetLogo

Link
Para obter o software, tutoriais, manual de utilizador, entre outras informações
sobre o NetLogo, aceder a:

http://ccl.northwestern.edu/netlogo

Instalar NetLogo

3
30/09/22

O que é?

● O NetLogo é um ambiente de programação para


modelação de sistemas multiagente
● Tem um ambiente 2D
○ Que é uma grelha dividida em células (patches)
○ Cada célula dessa grelha tem uma identificação única
● Esse ambiente 2D pode modificar-se ao longo do
tempo

Agentes

● O NetLogo é baseado no conceito de agente (turtle)


● Um agente é uma entidade autónoma com
comportamento próprio
● É o programador do NetLogo que define as
características e o comportamento dos agentes
● Durante a simulação existem interações entre os
agentes e o ambiente, que são devidas ao
comportamento dos agentes

4
30/09/22

Funcionamento
● Utiliza-se o NetLogo para
○ Simulação de modelos existentes
○ Desenvolvimento de novos modelos de simulação
● O NetLogo tem três tipos de elementos
○ Turtles
■ Agentes que se movem no ambiente 2D
○ Patches
■ Células que constituem o ambiente 2D
○ Observador
■ Observa o mundo e pode atuar sobre ele (pessoa que usa e analisa a
simulação no NetLogo)

2. Linguagem de programação NetLogo

10

5
30/09/22

Programação básica no Netlogo


● Exemplos de instruções de inicialização:
○ clear-turtles ou ct (apaga todos os agentes);
○ clear-patches ou cp (limpa o ambiente 2D);
○ clear-all ou ca (apaga os agentes, variáveis e limpa o ambiente 2D);
○ create-turtles n ou crt n (cria n agentes);
○ set var value (atribui um valor à variável var).

● Exemplo de instrução de desativação:


○ die (destrói o agente).

11

Programação básica no Netlogo


● Exemplos de instruções de movimentação de agentes (turtles):

○ forward n ou fd n (o agente avança n unidades segundo a


orientação que tem);
○ back n ou bk n (o agente recua n unidades segundo a
orientação que tem);
○ left n ou lt n (o agente vira n graus, no sentido contrário ao
ponteiro do relógio, a partir da orientação que tem);
○ right n ou rt n (o agente vira n graus, no sentido do ponteiro
do relógio, a partir da orientação que tem).

12

6
30/09/22

Programação básica no Netlogo


● Exemplos de instruções de movimentação de agentes (turtles):

○ jump n (o agente salta de uma só vez n unidades segundo a orientação


que tem);
○ move-to agent (o agente é movido até à posição do agente de nome
agent);
○ setxy x y (o agente fica com a posição nas coordenadas x e y – ex: setxy
random-xcor random-ycor, o agente fica numa posição aleatória).

13

Programação básica no Netlogo


● Instrução ask:
○ Permite que os agentes (turtles) ou as patches executem instruções a
pedido do observador:
■ ask agentes [comandos]
○ Exemplos:
■ ask turtles [fd 1] (todos os agentes avançam uma unidade);
■ ask patches [set pcolor red] (todas as patches são pintadas de
vermelho);
■ ask turtle 4 [rt 90] (apenas o agente com o identificador 4 vira 90º à
direita).

14

7
30/09/22

Programação básica no Netlogo

● Criação de procedimentos:

to NomeProc [parametro1 parametro2]


locals [local1 local2 ...]
Comando1 Exemplo:
to go
Comando2
ask turtles [
Comando3 fd 1
... rt random 10
end lt random 10
]
15
end

Programação básica no Netlogo

● Criação de funções (permite devolver um valor):

to-report NomeFunc [param1 param2]


Comando1
Exemplo
Comando2
Comando3 to-report absN[num]
... ifelse num >= 0
report valor [report num]
end [report -num]
end
16

8
30/09/22

Programação básica no Netlogo

● Declaração de variáveis:
○ O Netlogo permite que a declaração de variáveis possa ser feita das
seguintes formas:
■ patches-own [var1 …] (variáveis específicas a cada patch);
■ turtles-own [var1 …] (variáveis específicas a cada agente);
■ globals [global1 …] (variáveis globais);
■ locals [local1 …] (variáveis temporárias definidas dentro de um
procedimento ou função).

17

Programação básica no Netlogo

● O Netlogo permite alterar ou comandar apenas alguns agentes.

● Para isso usa o comando with, conforme se pode ver nos exemplos
abaixo:
○ ask turtles with [sexo = 1] (todos os agentes com a variável sexo igual a 1);
○ ask turtles with [xcor > 0] (todos os agentes com a coordenada x maior que
zero);
○ ask patches with [pycor > 0] (todas as patches com a coordenada y maior que
zero).

18

9
30/09/22

Programação básica no Netlogo

● Um exemplo mais completo pode o seguinte:

ask turtles with [color = red]


[
set color blue
]

que altera a cor de todos os agentes de cor vermelha para a azul.

19

Programação básica no Netlogo

● Criação de várias espécies de agentes:


○ Em vez de trabalhar apenas com agentes do tipo turtle, o Netlogo permite
especificar espécies com outros nomes através do comando breed, conforme se
pode ver nos exemplos seguintes:

breed [males male] (cria agentes do tipo male);


breed [ants ant] (cria agentes do tipo ant).
breed [boxes box] (cria agentes do tipo box).

20

10
30/09/22

Programação básica no Netlogo

● Criação de várias espécies de agentes:


○ Ao criar as espécies, o Netlogo permite usar comandos para:
■ Todas as espécies de agentes criados no modelo:
ask turtles [set color blue]
(todos os agentes – todas as espécies - são pintados de azul);

■ Especificamente para uma das espécie do modelo:


ask male 3 [fd 1] (o agente male 3 avança uma unidade);
ask males [set color green] (todos os males são pintados de verde);
ask ants [set color red] (todas as ants são pintados de vermelho);

21

Programação básica no Netlogo

● Instruções de controlo:
○ if condição [comandos]
■ Se a condição for verdadeira executa os comandos.
○ ifelse condição [comandos1][comandos2]
■ Se a condição for verdadeira executa comandos1, caso contrário
executa comandos2.
○ while [condicao][comandos]
■ Enquanto a condição for verdadeira executa comandos.

22

11
30/09/22

Programação básica no Netlogo

● Instruções de controlo:
○ Se a patch onde está o agente for verde, põe a patch a preto e
aumenta energia dele:
ask turtles
[
if pcolor = green
[
set pcolor black
set energy (energy + 10)
]
]

23

Programação básica no Netlogo

● Instruções de controlo:
○ Movimenta o agente 2 (turtle) até encontrar uma patch sem agentes:

ask turtle 2
[
while [any? other turtles-here]
[
fd 1
]
]

24

12
30/09/22

Programação básica no Netlogo


● Qualquer simulação tem sempre que inicializar o modelo, atribuindo
valores iniciais às variáveis e características de arranque às patches
e agentes.
● Exemplo: to setup
clear-all
create-turtles 10
Nome do ask turtles[
procedimento set shape “star"
set color yellow
]
end
25

Programação básica no Netlogo


● Associação de procedimento a botão:
○ Para aceder a esta janela, selecionar o botão e escolher a opção Edit.

Nome do procedimento
a executar

Label do
botão

26

13
30/09/22

3. Utilização do NetLogo

27

Aceder a modelo existente


● Iniciar o NetLogo
● No menu principal, escolher a opção File -> Models Library
● Na subjanela que aparecerá, selecionar a pasta Biology
● Selecionar o modelo Wolf Sheep Predation e pressionar no botão Open

28

14
30/09/22

Wolf Sheep Predation

Botões (para a
especificação de
parâmetros do
modelo a simular e Área de simulação
para a execução (ambiente onde se
de certos
vão movimentar os
procedimentos)
agentes definidos no
modelo)
Gráficos e
monitores (para
apresentação de
resultados)

29

Ambientes

Interface: ambiente gráfico, onde Info: ambiente de documentação, Code: ambiente de codificação,
se encontra a área de simulação, se onde se pode ver e escrever onde se pode ver e implementar
adicionam botões, gráficos e
monitores, entre outras coisas, e informações sobre o modelo. Para código, escrito em linguagem Logo,
onde se pode visualizar o progresso se escrever essas informações que irá controlar a simulação ou o
da simulação deve-se pressionar o botão Edit comportamento do modelo
30

15
30/09/22

Área de simulação
● Ambiente em que se movimentam os agentes
● Constituído por uma grelha bidimensional de
células
● Para configurar as dimensões:
○ Pressionar o botão direito do rato sobre a grelha
○ Selecionar a opção Edit
○ Alterar as coordenadas máximas para o eixo dos XX
(max-pxcor) e dos YY (max-pycor)
● A origem é a célula central, que tem
coordenadas (0, 0)

31

Simulação
● Realizar a simulação do modelo Wolf Sheep
Predation, efetuando os seguintes passos
○ Pressionar o botão setup, de forma a inicializar o
modelo (definir quantas ovelhas e quantos lobos
existem inicialmente no ambiente, qual a sua taxa de
reprodução, limpar a área gráfica de simulação e
colocar-lhe as patches com e sem relva, as ovelhas e
os lobos, etc.)
○ Pressionar o botão go, de forma a ver como o
ambiente se vai transformando ao longo do tempo
○ Voltar a pressionar o botão go quando pretender parar
a simulação
○ Voltar a pressionar o botão go (continua do ponto onde
foi parada) e deixar que a simulação termine por si

32

16
30/09/22

Recolha e apresentação de dados


Em qualquer simulação a fazer, a recolha e
apresentação de resultados da simulação do modelo é
muito importante.

O NetLogo permite que os resultados vão sendo


atualizados ao longo da simulação.

Para isso, usa normalmente duas maneiras simples:

● monitores
● gráficos

Nos gráficos aparece a evolução dos valores ao longo


do tempo, enquanto que nos monitores aparecem os
valores atuais
33

Parametrização
● A parametrização do modelo é feita mexendo em certos botões existentes na área Interface.
● O NetLogo permite alterar os parâmetros associados a esses botões e que controlam o
funcionamento dos modelos (antes e durante a simulação).
● No modelo do exemplo existem:
○ Switches (interruptores) – que ativam/desativam um determinado parâmetro do modelo definido
○ Sliders (cursores) – que atribuem um valor (de entre uma gama de valores possíveis) a um determinado
parâmetro do modelo criado

● Para se confirmar o que foi dito acima:


○ Identificar os parâmetros que podem ser configuráveis no modelo (consultar a área Info para esclarecer
eventuais dúvidas)
○ Efetuar alterações nos parâmetros e verificar quais os efeitos nos resultados da simulação
○ Procurar encontrar conjuntos de parâmetros que garantam o equilíbrio do ecossistema

34

17
30/09/22

Equilíbrio

35

Centro de comando
● ask patches [set pcolor yellow]

● ask turtles [set color 95]

● setup

● ask sheep [set color pink]

● ask turtles [die] 36

18
30/09/22

Análise detalhada de agentes


É possível consultar as características de um agente através do seu monitor
individual

37

Análise do código
● Tentar encontrar no código as instruções que fazem as seguintes tarefas
○ Criar dois tipos de turtles, 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?
○ Fazer crescer a relva de tempos a tempos
○ No separador Interface edite o gráfico e analise as instruções que permitem atualizar os
dados durante a execução do modelo

38

19
30/09/22

Análise do código
● Criar dois tipos de turtles, lobos e ovelhas

● Criação de várias espécies de agentes


○ Em vez de trabalhar apenas com agentes do tipo turtle, o NetLogo permite especificar
espécies com outros nomes através do comando breed, conforme se pode ver nos
exemplos seguintes
■ breed [males male] (cria agentes do tipo male)
■ breed [ants ant] (cria agentes do tipo ant)
■ breed [boxes box] (cria agentes do tipo box)

39

Análise do código
● Criar o número de lobos e ovelhas estipulados nas variáveis correspondentes

setxy x y

o agente fica com a


posição nas
coordenadas x e y

ex: setxy random-xcor


random-ycor, o agente
fica numa posição
aleatória
40

20
30/09/22

Análise do código
● Reprodução dos lobos: como se cria o 2º lobo, qual a energia com que fica?

right n ou rt n (o agente vira n graus, forward n ou fd n (o agente avança n


no sentido do ponteiro do relógio, a unidades segundo a orientação que
partir da orientação que tem) tem)
41

Análise do código
● Morte dos lobos ou ovelhas

42

21
30/09/22

Análise do código
● Comer a erva, o que acontece à energia de quem come, o que acontece à
patch onde estava a relva?

43

Análise do código
● Fazer crescer a relva de tempos a tempos

44

22
30/09/22

Análise do código
● No separador Interface edite o gráfico e analise as instruções que permitem
atualizar os dados durante a execução do modelo

45

4. Exercício
Criação de um modelo básico

46

23
30/09/22

Modelo básico
● Com os conceitos adquiridos na aula, siga o tutorial da Ficha 1 e implemente
o modelo netlogo proposto

47

Criação de um modelo básico


● Criar um novo ficheiro (File -> New) e gravar (File -> Save)
● Alterar as propriedades da grelha bidimensional (botão Settings) para que
esta tenha max-pxcor igual a 12, max-pycor igual a 12 e patch size igual a
15

● No separador Interface, crie o botão


Setup e o botão Go (botão Add ao lado
do tipo de botão a criar), ativando a
opção forever para o botão Go, e
associando a cada um dos botões os
comandos (ou procedimentos) com o
respetivo nome

48

24
30/09/22

Modelo básico
● No separador Code, escrever o código dos procedimentos associados a cada
um dos botões

49

Modelo básico
● Ir para o separador Interface e executar a simulação do modelo,
pressionando primeiro no botão Setup (que inicializa o modelo) e depois no
Go
● Alterar a posição e a orientação inicial das pessoas (turtles), acrescentando
o código no procedimento Setup

This is a built-in turtle variable. It


indicates the direction the turtle
is facing. This is a number
greater than or equal to 0 and
less than 360. 0 is north, 90 is
east, and so on. You can set this
variable to make a turtle turn. 50

25
30/09/22

Modelo básico
● Executar novamente a simulação do
modelo e ver o resultado desta mudança
de código (pode diminuir a velocidade de
visualização no slider da barra principal
para ver melhor os efeitos do código
introduzido)
● No código do procedimento Setup, alterar
o parâmetro de orientação de movimento,
o heading, de 90 para 0 e ver a diferença
ao executar a simulação do modelo
● Colocar as pessoas num movimento
aleatório, alterando a sua orientação
(heading) para random 360

51

Modelo básico
● Acrescentar um Slider para controlar o número de pessoas
○ Na janela que aparece aquando da criação do Slider, definir uma variável global, de nome
pessoas, que tenha possa ter valores entre 0 e 10 e com o valor inicial de 5
○ Alterar no código do procedimento Setup de maneira a que o número de turtles a criar
corresponda ao valor da variável pessoas, inicializada no slider

52

26
30/09/22

Modelo básico
● A energia de uma turtle
normalmente está ligada às tarefas
que faz (por exemplo, perde
energia ao se movimentar e ganha
energia ao se alimentar).
Acrescentar energia às pessoas
● Inicializar cada pessoa com um
valor de energia aleatória positiva,
de valor máximo 100

53

Modelo básico
● Colocar energia de cada pessoa a
diminuir uma unidade a cada
movimento que fazem, a pessoa a
morrer quando a sua energia for
menor ou igual a zero e marcar a
vermelho o local onde as pessoas
morreram patch-here (analisa
● Parar a simulação do modelo quando célula onde o agente
está)
não existirem pessoas (parar o botão
forever)
● Executar a simulação do modelo e
verificar todas as alterações
54

27
30/09/22

Modelo básico
● Alimentação das pessoas (este alimento será
representado por patches verdes e dará energia
às pessoas que chegam a essas patches. Essa
energia serve para se conseguirem movimentar
durante mais tempo), fazer o seguinte:
○ Acrescentar no procedimento Setup o código que
manda executar um novo procedimento chamado
Setup-patches
○ Acrescentar o procedimento Setup-patches ao código
já existente, o qual coloca, de forma aleatória, algumas
patches a cor verde, na área de simulação
○ Acrescentar no final do procedimento Go o código que
manda executar um novo procedimento chamado
Comer
○ d«Acrescentar o procedimento Comer ao código já
existente, o qual deteta a cor da patch e, se esta for
verde, passa-a a preto e aumenta a energia da pessoa

55

Modelo básico
● Adicionar um Monitor para ver o número de pessoas que se encontram vivas
ao longo da execução da simulação do modelo

56

28
30/09/22

Modelo básico
● A informação do monitor pode
ser vista em forma de gráfico
○ Acrescentar um Plot
○ Atualização do gráfico ao longo do
tempo
■ No fim do procedimento em
Go, acrescentar a instrução
tick
■ No início do procedimento
Setup, após a instrução clear-
all, adicionar a instrução reset-
ticks

57

Modelo básico
● A instrução breed permite criar vários tipos
de turtles. Criar dois tipos de pessoas,
homens e mulheres,
○ É necessário criar termos para a utilização da breed
no plural (ex: homens) e no singular (ex: homem)
○ Comentar a linha create-turtles pessoas e set color
yellow, no procedimento Setup
○ Editar o Slider que mostra o número de pessoas e
alterar a variável global para nmulheres
○ Criar mais um Slider na interface gráfica, similar ao
anterior, para definir o número de mulheres, com a
variável global nhomens

58

29
30/09/22

Modelo básico
● No procedimento em Setup, adicionar
código de modo a atribuir às mulheres
a cor vermelha e tamanho 1.5 e dar
aos homens cor azul e tamanho 1

59

Modelo básico
● Altere o procedimento Go de forma a
que as mulheres e os homens
gastem, respectivamente, 2 e 1
unidades de energia, quando se
movimentarem, e que, quando
morrerem, as mulheres deixem uma
patch vermelha e os homens uma
azul

60

30
30/09/22

Modelo básico
● Editar o gráfico e alterá-lo para que tenha duas canetas, uma para registar o
número de homens e outra para registar o número de mulheres

61

31

Você também pode gostar