You are on page 1of 5

Teste modelo de Simulação de Sistemas Sociais Abril 2012 Duração: 40 minutos.

O teste é com consulta (de quaisquer documentos, não é permitida a consulta de computadores ou telemóveis). O teste vale 20% da avaliação da UC -Considere o modelo das colectividades dado nas aulas, com a seguinte especificação: Os agentes são inicialmente distribuídos aleatoriamente e não têm memória da sua posição ou da posição anterior dos outros agentes Cada agente faz o seguinte: Conta quantos agentes existem na sua vizinhança, de acordo com o parâmetro local-radius Se o número de agentes for maior que um dado limiar, o agente orienta-se numa direcção oposta ao agente com mais vizinhos dentro do seu raio de visão, movendo-se depois uma distância aleatória Se o número de agentes for menor que um dado limiar, o agente orienta-se na direcção do agente com mais vizinhos dentro do seu raio de visão, movendose depois uma distância aleatória Em anexo apresenta-se uma possível solução de implementação. Considere agora as seguintes alterações ao modelo. Neste novo modelo, o conceito de vizinhança de um agente passa a não ser baseada na localização e distância (raio) espacial, mas antes na existência de ligações (links) entre agentes (o parâmetro local-radius deixa, desta forma, de ser usado): Inicialmente os agentes são distribuídos aleatoriamente e cada agente liga-se até outros 5 agentes, escolhidos aleatoriamente Cada agente faz o seguinte: Os vizinhos de um agente são os agentes a ele ligados directamente Em cada iteração o agente perde uma das suas ligações escolhida aleatoriamente, e ganha uma nova ligação para um qualquer agente escolhido aleatoriamente e dentro do seu raio de visão Se o número de vizinhos for maior que um dado limiar, o agente orienta-se numa direcção oposta ao agente com mais vizinhos dentro do seu raio de visão, movendo-se depois uma distância aleatória

Se o número de vizinhos for menor que um dado limiar, o agente orienta-se na direcção do agente com mais vizinhos dentro do seu raio de visão, movendose depois uma distância aleatória Seguidamente apresenta-se uma implementação parcial do novo modelo. No projector apresenta-se a visualização da execução do modelo (no teste modelo não é fornecido a visualização da execução). Complete o programa nos sítios assinalados.
breed [agents agent] agents-own [visible around] to setup clear-all ask patches [set pcolor white] create-agents 300 [ set color green set size 2 setxy random-pxcor random-pycor set heading random 360 ;; garantir que cada agente está no seu próprio patch while [any? other agents-here] [fd 1] ] ;; criar até 5 links aleatórios por agente ask agents [ let r random 5 // completer o código ] end to go if ticks >= 500 [stop] ask agents [count-those-around] ask agents [move] tick end to count-those-around set around my-links set visible agents with [self != myself] in-radius visible-radius ;; o agente perde uma das suas ligações (se existirem) // completar ;; criar um link para algum agente dentro do seu raio de visão (se existir algum dentro do raio de visão) // completar end to move if any? visible [ ifelse my-links > threshold [ face-away set color red ] [ face-towards set color green] fd random speed

;; certificar-se que para num patch vazio while [any? other agents-here] [fd 1] ] end ;; orientar-se para o agente com o maior número de agentes na vizinhança to face-towards face max-one-of visible [around] end ;; orientar-se na direcção oposta ao agente com o maior número de agentes na vizinhança to face-away set heading towards max-one-of visible [around] - 180 end

Anexo – Implementação do modelo original
;; - Gilbert, Nigel. (2007). A generic model of collectivities. ;; Cybernetics and Systems: An International Journal, 38 (7), 695-706. ;; - Code from Agent-Based Models, Nigel Gilbert, Sage Publications, 2008.

breed [agents agent] agents-own [around visible] to setup clear-all ask patches [set pcolor white] create-agents 500 [ set color green set size 2 setxy random-pxcor random-pycor set heading random 360 ;; garantir que cada agente está no seu próprio patch while [any? other agents-here] [fd 1] ] end to go if ticks >= 500 [stop] ask agents [count-those-around] ask agents [move] tick end ;; memorizar o número de agentes na vizinhança dentro de local-radius a ;; os outros agentes que se podem ver dentro de visible-radius to count-those-around set around count agents with [self != myself] in-radius local-radius set visible agents with [self != myself] in-radius visible-radius end to move if any? visible [ ifelse around > threshold [ face-away set color red ] [face-towards set color green] fd random speed ;; certificar-se que para num patch vazio while [any? other agents-here] [fd 1] ] end ;; orientar-se para o agente com o maior número de agentes na vizinhança to face-towards face max-one-of visible [around] end

;; orientar-se na direcção oposta ao agente com o maior número de agentes na vizinhança to face-away set heading towards max-one-of visible [around] - 180 end