SAB2017 – Modelos Baseados em Agentes

A minha apresentação sobre o uso de Modelos Baseados em Agentes em Arqueologia, em 11 de setembro de 2017, durante o XIX Congresso da Sociedade de Arqueologia Brasileira, em Teresina, no glorioso Estado do Piauí. Foi gravada com os meios do bordo. Logo, treme e perde o som. Mas o essencial está aí.

CAA 2017 em Atlanta


Estarei de 13 a 17 em Atlanta, na Georgia, para o Computer Applications in Archaeology 2017, com dois trabalhos:

  • Networks as a theoretical framework for rock art studies in Northeast Brazil, na sessão Archaeological Networks: Uncertainty, Missing Data, and Statistical Inference;
  • The dynamics of Brazilian rock art landscape: an agent-based modelling approach to theories na sessão Data, Theory, Methods, and Models. Approaching Anthropology and Archaeology through Computational Modeling.


ABM for Brazilian rock art studies

As part of a research project on computer applications in archaeology, we are proposing to use agent-based modelling for Brazilian rock art studies. Here, we want to analyze the mechanisms of landscape construction, when there are various independent agents. The basic idea is that, when a hunter reaches a rockshelter, a random number below a certain threshold results in a new painting on this particular site. At the end of a certain time lapse, we can study the whole dynamics according to simple rules.


ABM allows us to test a set of hypothesis proposed in the Brazilian literature to explain why some sites are chosen and not others. Brazilian rock art being predominantly an open-air phenomenon, the archaeological literature balances between two tendencies: the first one is purely factual and sees the environment as the main driver for human choices between two individual rockshelters, in terms of geological structure, location or stone quality. Meanwhile the second one is more relativist and considers culture as the main parameter: here, social definition is the motto. For our purpose, we consider the first one defined by [exogenous|global] parameters, and the other as defined by [endogenous|local] criteria.


The three first versions of our model were dedicated to define these variables. Put together in a single model, they allow us to visualize each specific scenarii and compare the results:

  • In the first one, all shelters hold an equally fixed threshold. As such, it means they all offer equal possibilities for the actors. In this case, the landscape is just like a large set of generic sites;
  • In the second one, the threshold is defined exogenously and globally. Practically, a random value is defined for each shelter, within certain limits, once and for all the hunters. This way, the landscape is scaled between “awsomely-fit” and “definitely-not-fit” sites;
  • Finally, in the third one, an endogenous and local random threshold, still within limits, is defined by each individual hunter for each individual shelter. In this scenario, each hunters is able to define what (s)he considers being fit or not, independently of the others.

With netLogo, we can program a whole set of simple rules and let it runs each specific scenario, or even a combination of them. According to the selected hypothesis, a threshold is defined on a base 100 at the beginning of the run. This value has a direct impact on the interaction between hunters and shelters, producing paintings or not, and we can study the evolution of the graphical landscape.

Generally speaking, a low threshold value makes it slow and complicated for hunters to produce new figures, while a high one isn’t so much of a problem. It is important to note that the exact content or meaning of the threshold is not defined. We only consider broad categories of parameters. It means that an exogenous and global threshold isn’t linked to any specific variable, be it rains, animal migration or rock weathering. Similarly, using a cultural threshold doesn’t mean we favour ritual over social hierarchy or anything. The mechanisms we are studying are determined by the origin: the external environment or the social group itself. In any case, we are studying the landscape construction dynamics, and not to particular set of proposals.

With these definitions, we can analize the distribution of paintings in a set of shelters, both quantitatively and qualitatively. Using tests against random movement and random values, we have an opportunity to study if, where and when non-random distributions occur. The results can then be compared to a series of known archaeological contexts.

Running the first tests, we decided to stop the simulation as soon as a shelter reaches 100 paintings. For each hypothesis, the results show different patterns.

  • In the first case, a generic landscape of equal shelters leads to a normal bell-shaped distribution of figures among these. Both the minimum number of motives and the overal mean are high, indicating that hunters were able to make new paintings in all the shelters. The only differences depend on initial positions and movement.
  • In the second case, the shelters are given a randomly set variable, set from the beginning of each run and acknowledged by all hunters. As a result, shelters being given a low threshold have minimal chances of receiving any figures at all. Considering these parameters, we expected the results to be far more clustered around those shelters with high value, regardless the initial positions and movements. Runs showed that the expected dynamics were correct, and the resulting clustering largely depends on the original geographical configuration and distribution.
  • Finally, the third scenario showed mixed situations. In this case, each hunter had an individual cognitive map, through which he was able to attribute a random value for each shelter at the beginning of each run. Considering the whole population, chances were that each shelter had a different threshold for each hunter. Due to this diversity, the model generally resulted in normal bell-shaped distributions similar to the first scenario: the greater the number of hunters, the closest to random the general distribution of paintings on shelter. This can be explained by probability: as each shelter is visited by every hunter many times during a run, the low threshold on one’s cognitive map is balanced by another’s high value. It should be noted, though, that in all these three cases, the construction of landscape through time followed a linear progression.

While rock art is attested in many parts of Brazil, a few larger sets have been defined with more or less precise geographic boundaries. Among these, a group of figurative collective representations has been characterized in the 1980s in an area stretching east of the São Francisco and Parnaíba river valleys to the northeastern Atlantic coastline. Despite such a large region and a cruel lack of data for the intermediary zones, three main clusters have been identified in the Serra da Capivara (Piauí), Seridó (Rio Grande do Norte) and Chapada Diamantina (Bahia). Between them, hundreds of kilometers only show a limited number of poorly documented sites. Yet, even considering the limits of available archaeological data, clustering seems to be an important behaviour.


Using clustering as a marker, the second scenario only was able to show adequate behaviour, when the act of painting is a result of the shelters natural properties. Environmental determinism was particulary influencial in Brazilian archaeology during the 1950s, when a National Program of Archaeological Research (Pronapa) was created under the umbrella of Betty Meggers. Yet, another specific situation could be derived from the results of the third scenario. If we consider that cognitive maps are transmitted from group to group, and from one generation to the other, a conjunction of high random value on specific sites would also be able to create clusters. This very particular mechanism has given birth to the concept of Tradition in the 1960s. According to this idea, an initial definition of basic graphic representation principles was generated, probably in these areas where the oldest cases where attested. It would then have expanded to new regions, through gradual new developments, with population growth.

Such a transmission has been identified in the occurrence of complex figurative scenes envolving the same graphic elements in all the main regional clusters. These emblematic scenes have first been attested in the Serra da Capivara and in the Seridó, and later in the Chapada Diamantina.

As a general mechanism, the Tradition has also been used to map the presence of Nordeste motives on many sites. Yet, if we consider population growth and distance, we should also expect a accompanying growth of social and cultural constraints, limiting the development of new and unforseen characteristics. To this day, there is no archaeological evidence of such burdens as hierarchy or political structures. We may then ask ourselves if another mechanism could have been at work.

The ABM model allows us to propose an alternative perspective, one that wouldn’t be altered by population growth and geographical distance. If we consider the rules set for each hypothesis, they were placed on only two elements of the rock art creation process: shelters and hunters. A third element went dramatically neglected, the motives themselves. A new hypothesis could be created that defines the threshold on the presence of previous paintings. In such a non-linear framework, one particular shelter would be more and more attractive as it gets more and more paintings, as a kind of cumulative effect.


This new hypothesis starts with a minimal threshold for every shelter, in order to allow the probability of the very first motive. The initial conditions would then be very similar to the first hypothesis of complete randomness. As soon as a shelter receives its first paintings, though, it would gain a small benefit added to its threshold value. The larger the number of paintings, the larger the benefit would be, on a regular base. On the model, this was stated through a single rule: the benefit would be equal to the actual number of paintings multiplied by a magnifier between 0.0 and 2.0. A slider was then created to control this value.

The new hypothesis showed interesting results. First, despite initial conditions similar to our most random tests, the magnifier value is able to modify the dynamics. Below 0.5, its effects aren’t sufficient to change the general distribution of paintings in the landscape. Around 0.7, it show a growing clustering of new figures on some specific shelters. Above 1.0, the tendency is inverting, and the benefits of each new paintings become so high that virtually every visit of a hunter in a shelter results in a new figure – even when there is only one single motive on the site. Second, population doesn’t seem to have an effect on the results. In fact, its growth seems to be directly linked to a third effect: the speed at which the landscape is constructed (or at least, at which a first shelter reaches 100 paintings).


Of course, not every run shows the same results. The initial position of both shelters and hunters, as well as the movements of the latter, are important if we want to understand why a specific site receives paintings. Anyway, this was not our objective, as the model cannot be expected to reproduce real situations. What it clearly shows, though, is that a cumulative effect is able to result in clustering, even when hunters have completely different cognitive maps, and when their number grows larger.

The next question is this: if this really were to have been an effective mechanism, what should we then expect to find on archaeological ground?

This work will be presented at the VIth meeting of the Associação Brasileira de Arte Rupestre, on september 14.

Modelos baseados em agentes para a arqueologia (parte 3)

Para acompanhar a discussão desde o início, clique aqui.

O desenvolvimento de um modelo baseado em agentes para o estudo do fenômeno da arte rupestre alcançou questões sobre a definição da cultura. Ou melhor, sobre a definição das culturas. E de fato, usar números para traduzir estas ideias sempre desperta tensões atômicas em qualquer círculo de ciências humanas.

Poderiamos fazer longos comentários, perto da lareira, taça de vinho na mão, sobre o que é e o que não é cultura. Mas não é o ponto. Não procuramos definir valores mais ou menos altos para os abrigos, nem defendemos que alguns abrigos são realmente melhores que outros. O nosso objetivo é sim analisar o comportamento de uma variável simples (a quantidade de pinturas nos abrigo) quando há uma clique de agentes postos em frente à um contexto diversificado.

O problema ao qual tinhamos chegado era o seguinte: cada abrigo tinha um valor de qualidade, mas este valor era dado para todos os caçadores. Logo, sejam estes 2 ou 20, eles se comportavam da exata mesma maneira, e o resultado final acompanhava simplesmente a distribuição inicial da variável qualidade. Entretanto, nos realmente precisamos ter agentes diferentes: é, afinal, a ideia atrás do slider controlando o número de caçadores.

Logo, a variável de qualidade deve ser atribuída por cada caçador para cada abrigo. Quer dizer, cada agente deve ter um código diferente quanto aquilo que é ou não um abrigo adequado. Tudo isto, completamente aleatório. Assim, para cada abrigo seriam vinculados um número x de valores relativos à sua qualidade – x sendo igual ao número de caçadores. Como fazer isso?

Demorei bastante tempo para encontrar uma solução. Pelo que percebi, a dificuldade é a seguinte: um agente de um breed não pode receber uma variável para cada agente de outro breed. A solução encontrada envolve passar por um intermediário.

Basicamente, cada caçador possui um mapa cognitivo do mundo, composto por uma matriz do mesmo tamanho preenchida com valores aleatórios. Nesta matriz, o local de cada abrigo está portanto relacionado com um determinado valor, que é diferente para cada caçador.

Primeiro, chamamos uma extensão no cabeçalho do arquivo e reformulamos a distribuição das variáveis. A qualidade não está mais vinculada aos abrigos, mas aos patches onde estão localizados.

extensions [matrix]
breed [hunters hunter]
breed [shelters shelter]
patches-own [xpatch ypatch quality]
shelters-own [paintings]
hunters-own [hunter-matrix]

Em seguida, adaptamos também o perfil dos caçadores e dos abrigos. Os primeiros criam o mapa cognitivo do tamanho do mundo (33×33) e preenchem-lo de valores aleatórios. Já os abrigos aparecem em certo número de patches.

create-hunters number-hunters [ set color black set size 1 setxy random-xcor random-ycor
set hunter-matrix matrix:make-constant 33 33 random 10]
ask n-of number-shelters patches [
sprout-shelters 1 [ set color one-of base-colors set size 1 set xpatch xcor set ypatch ycor] ]

Finalmente, o procedimento para a realização da pintura deve também ser adaptado. Cada caçador que encontra um abrigo deve extrair do seu mapa cognitivo o valor do local correspondendo a sua localização. Se o valor aleatório for inferior, uma nova pintura é acrescida à quantidade do abrigo.

to paint-shelter
ask patches [
ask hunters-here [set quality matrix:get hunter-matrix xpatch ypatch]
if any? hunters-here and any? shelters-here [
if random 10 < quality [ask shelters-here [set paintings paintings + 1]]

E para deixar as coisas mais simples de serem visualizadas, acrescentamos uma regra: o tamanho de cada abrigo deve crescer a medida que são acrescidas novas pinturas.

to grow-shelter
ask shelters [
set size (1 + (paintings / 50))]

Resumindo, temos uma série de caçadores evoluindo num território onde existem abrigos. Cada um possui um mapa cognitivo único para esta região. Quando eles encontram um abrigo adequado, eles realizam uma pintura. Observamos a distribuição de todas as pinturas em todos os abrigos no final do teste – arbitrariamente, quando um abrigo atinge 100 pinturas. Rodamos diversas vezes esta versão do modelo. O que podemos ver?


Ao contrário do modelo anterior, os resultados apresentam novamente uma distribuição gaussiana ou, pelo menos, uma média e uma quantidade total muito elevadas. Como entender isso, se as quantidades finais são dadas pela qualidade do abrigo?

No modelo anterior, havia apenas um valor de qualidade, definido desde o início para cada abrigo. Ao contrário, agora, temos para cada abrigo uma lista de valores correspondendo ao número de caçadores. Com 20 caçadores, um único abrigo possui 20 valores de qualidade diferentes. E como estes são definidos aleatoriamente, torna-se difícil obter 20 valores nulos. Logo, sempre há algum caçador para achar que um abrigo é conveniente e realizar uma pintura. Entretanto, o crescimento demográfico e a diferenciação das culturas – simbolizados por um número maior de caçadores com mapas cognitivos diferentes – não parecem ter um papel importante na distribuição final das pinturas.

Por mais curioso que seja este comportamento, ele não auxilia muito a problemática que levantamos, porque o modelo não se comporta como o contexto arqueológico. A menos de considerar que 90% dos sítios já desapareceu por obra do intemperismo, por exemplo. Caso contrário, procuramos identificar um modelo que possa resultar em uma situação pelo menos semelhante à realidade tal como a conhecemos na paisagem. Embora tenhamos introduzido a noção de pluraldade cultural graças aos mapas cognitivos aleatórios, não alcançamos os resultados esperados.

O que poderia ter faltado? É o que veremos no próximo episódio. Por enquanto, podem baixar o modelo shelters0-3.nlogo.

Modelos baseados em agentes para a arqueologia (parte 2)

Este post continua o projeto iniciado aqui.

Obtivemos um pequeno modelo simples, no qual caçadores se deslocam num espaço onde há abrigos nos quais podem ou não realizar pinturas. Observamos a maneira com a qual as pinturas são distribuídas no espaço. O primeiro modelo não dava resultados satisfatórios, porque não correspondem àquilo que pode ser observado nos vestígios.

Primeiro, devemos controlar a quantidade de caçadores e de abrigos que são dispostos no mundo. Para isto, vamos incluir dois “sliders” que definem as quantidades iniciais. São criados na interface gráfica, e depois inseridos no código.


to setup
set-default-shape shelters "pentagon"
create-shelters number-shelters [set color brown set size 1 set paintings 0 setxy random-xcor random-ycor]
set-default-shape hunters "person"
create-hunters number-hunters [set color white set size 1 setxy random-xcor random-ycor]

Um teste rápido com 10 caçadores mostra que a distribuição geral não é alterada. Simplesmente, o modelo é muito mais rápido: de 90.000 ticks com 2 caçadores, passamos para 15.000 com 10. Mesmo assim, vamos manter esta modificação: ela poderá ser útil mais tarde.

Um outro aspecto que deve ser considerado é o fato de todos os abrigos não possuirem características iguais. Até o momento, todos são semelhantes, e a escolha entre pintar ou não pintar é dada por um número aleatório. Portanto, precisamos inserir uma nova variável para os abrigos, que corresponde à sua qualidade. Ela pode ser dada aleatoriamente, com um valor de 0 a 10.

Primeiro, a variável é criada no cabeçalho:

shelters-own [quality paintings]

Segundo, é quantificada na fase de parametros:

create-shelters number-shelters [set color brown set size 1 set paintings 0 set quality random 10 setxy random-xcor random-ycor]

E para acompanhar a distribuição da qualidade, inserimos também um histograma na interface gráfica. Para funcionar corretamente, ele precisa ter um código especial, inserido em “Plot update commands” (clique direito no gráfico e selecionar “Edit”):

ask shelters [
create-temporary-plot-pen (word who)
set-plot-pen-mode 1
set-plot-pen-color color
plotxy who quality

Assim, ao clicar no setup, observamos que cada abrigo recebeu um valor para sua qualidade, que deve dar conta da diversidade encontrada no ambiente.


Em seguida, alteramos também a forma com a qual a escolha da pintura é realizada. Desta vez, o valor aleatório deverá ser inferior à qualidade do abrigo para levar à realização de uma nova pintura.

to paint-shelter
ask shelters [
if any? hunters-on patch-here [
if random 10 < quality [set paintings paintings + 1]

Agora, o nosso pequeno modelo apresenta uma distribuição final das pinturas que acompanha a diversidade da qualidade. Basicamente, um abrigo com baixa qualidade recebe menos pinturas que outro com alta qualidade. Nos dois casos extremas, um abrigo com qualidade 0 não vai receber nenhuma, enquanto um abrigo com qualidade 10 vai ter uma nova pintura a cada passagem de caçador.


É bom perceber que, como o deslocamento dos caçadores é aleatório, o abrigo com maior qualidade não é sempre aquele que tem 100 pinturas no final. Dependendo da situação, ele pode ser apenas segundo ou terceiro. Isso não invalida a observação geral, de que a qualidade é diretamente ligada à quantidade de pinturas.

Entretanto, persiste uma crítica mais importante, que é feita para todos os modelos teóricos e para todas as aplicações informáticas em arqueologia. Basicamente, não sabemos como era definida a qualidade pelos grupos que realizaram estas pinturas. Talvez valiam as características geológicas, ou a localização em relação a outras feições, ou ainda um histórico de acontecimentos passados. Pior, talvez era uma mistura de vários elementos com peso diferente.

Esta crítica não desconfigura o fato que algum tipo de qualidade era necessariamente atribuído. Se todos fossem iguais, como vimos no primeiro modelo, a distribuição final seria em forma de sino, o que não é observado na realidade. Portanto, devemos ir mais longe ainda.

Porque nos limitar a uma definição única da qualidade? Quem pode dizer que, um abrigo que é adequado do ponto de vista de um grupo, é também adequado do ponto de vista de outro grupo? Porque todos deveriam ver a geologia, a história ou outro como uma única variável para determinar a qualidade? Se devemos integrar o fim das certezas neste modelo, vamos integrá-lo.

É exatamente o que faremos no próximo post.

Modelos beaseados em agentes para a arqueologia (parte 1)

Modelos baseados em agentes (MBA) envolvem uma série de atores independentes definidos por regras simples que, coletivamente, apresentam dos comportamentos mais simples aos mais complexos. netLogo é uma das ferramentas que permite programar este tipo de coisas.


O uso de modelos baseados em agentes em arqueologia é muito recente. Na sua aplicação mais básica, ele permite testar uma série de propostas teóricas e observar eventuais resultados de caráter aleatórios. Assim, se torna um tipo de teste estatístico contra uma distribuição randômica, desenvolvido em três etapas:

  1. Observamos um contexto arqueológico A;
  2. Sintetizamos um contexto B teórico e aleatório;
  3. Analisamos as eventuais diferenças.

Diferente dos modelos teóricos que eram feitos no auge do processualismo, estes são muito mais analíticos que preditivos. Se eles compartilham o fato de recorrer a formulas matemâticas para sintetizar o comportamento humano, a aleatoriedade é uma característica fundamental dos modelos baseados em agentes. Logo, esta se aplica sobre leis de Mickey Mouse: se o povoado cresce com a população, analisamos a forma com a qual se desenvolve (o termo foi proposto por Kent Flannery para descrever conclusões teóricas inúteis para o avanço da pesquisa arqueológica).

A questão que nos ocupa aqui é, portanto, arqueológica. Sabemos que afloramentos e paredões rochosos são formados naturalmente na paisagem, por uma imensa série de forças (gravidade, peso, terremotos, água…). Por razões que nos escapam, certos grupos humanos decidiram realizar neles grafismos, por gravura ou por pintura. Assim, na linguagem do netLogo, temos dois breeds. Os abrigos possuem também uma variável, correspondendo à quantidade de grafismos:

breed [shelters shelter]
breed [hunters hunter]
shelters-own [paintings]

Definimos para cada um, desde o início do teste, uma forma visualmente reconhecível. Os abrigos serão pentágonos e os caçadores, antropomorfos. Todos são dispostos aleatoriamente na paisagem.

to setup
set-default-shape shelters "pentagon"
create-shelters 10 [set color brown set size 1 set paintings 0 setxy random-xcor random-ycor]
set-default-shape hunters "person"
create-hunters 2 [set color white set size 1 setxy random-xcor random-ycor]

Enquanto os primeiros são fixos na paisagem, os segundos são móveis. É preciso definir a maneira com a qual eles vão se deslocar. O programa vai tirar aleatoriamente um número entre 1 e 10 (na verdade, entre 0 e 9) e, dependendo do resultado, o caçador vai se virar para esquerda ou para direita e avançar.

to move-hunters
ask hunters [
ifelse random 10 < 5 [ right random 360 ] [ left random 360 ]
forward 1

Em seguida, procuramos se há um caçador em algum abrigo. Se for o caso, o programa tira novamente um valor entre 1 e 10. Se o resultado for superior a 5, uma pintura é realizada.

to paint-shelter
ask shelters [
if any? hunters-on patch-here [
if random 10 < 5 [set paintings paintings + 1]

Finalmente, organizamos as ações com um botão go. Para simplificar, resolvemos limitar o modelo no tempo: quando algum abrigo atinge 100 grafismos, o programa para automaticamente.

to go
if any? shelters with [paintings >= 100] [ stop ]

Pronto, o código está preparado. Na interface gráfica, inserimos botões para a configuração (setup) e para o início (go). Precisamos também analisar os resultados finais. Para isto, acrescentamos um monitor indicando a quantidade de grafismos por abrigo (monitor).


Com a quantidade de variáveis aleatórias que foram inseridas no código, os resultados nunca aparecem duas vezes iguais. As regras mínimas são, elas, presentes: caçadores percorrem a paisagem de realizam grafismos em suportes rochosos. Maior o tempo, maior o número de grafismos, até um abrigo atingir 100 (quando o programa para).

Este pequeno modelo ainda é muito simples. Os seus resultados são, eles também, muito simples. Como os dados de entrada são aleatórios, com uma distribuição gaussiana normal, as quantidades finais obtidas são também em formato de sino. A média de grafismos por abrigo é expressiva e, na verdade, não corresponde exatamente à realidade que pode ser observada em campo, quando poucos abrigos agrupam muitas pinturas e outros, nenhuma.

Talvez seria necessário, para isso, mudar a quantidade de abrigos, ou a quantidade de caçadores? Talvez seria necessário inserir uma nova variável correspondendo à qualidade de cada abrigo para a realização de pinturas? De fato, certos suportes são particularmente adequados – textura, firmeza, exposição solar, etc – e outros não.

É o que veremos no próximo post.

O arquivo .netlogo utilizado para este teste por ser baixado aqui.