For the complete documentation index, see llms.txt. This page is also available as Markdown.

Criando estruturas de dados com Arrays

Arrays são estruturas de dados que permitem modelar vetores ou matrizes. Elas são particularmente úteis para a modelagem, pois conseguem incorporar rapidamente ao modelo novas dimensões ou categorias, por exemplo: os clientes da Startup poderiam ser divididos entre jovens e adultos, gênero, renda familiar etc.

Um problema clássico de dinâmica de sistemas é a previsão do crescimento populacional. Na sua versão mais simples, ele apenas considera a população atual, a taxa de fertilidade e a taxa de mortalidade. Uma representação possível do diagrama de estoque e fluxo para o problema, seria:

Em 2007, por exemplo, a população mundial era de 6,6 bilhões de pessoas, a taxa de natalidade era de 21 pessoas/1.000 habitantes e a taxa de mortalidade era de 9 pessoas/habitantes. A pergunta que se coloca: e se a taxa de mortalidade for diferente entre homens e mulheres?

Para compreendermos a estrutura de Array, devemos ir além do modelo básico: considere que as taxas de mortalidade são diferentes para cada gênero (masculino/feminino).

Crie um modelo no AnyLogic com o nome Populacao e com unidade de tempo years:

Com o que você já sabe do AnyLogic, construa o modelo básico, sem considerar ainda a questão de gênero. Adote:

  • População = 6600000 (Nota: mais 3 zeros neste número e o AnyLogic apresentaria erro de tamanho de número inteiro. Para contornar este problema, coloque o número com o “ponto” indicativo de ponto flutuante, isto é: 6600000000.0);

  • Fertilidade = 0,021;

  • Mortalidade = 0,009.

Contruído no AnyLogic, o modelo deve ficar como o da figura:

Simule o seu modelo e compare com o resultado a seguir:

Considere que a taxa de mortalidade seja diferente quando capturada por gênero, sendo de 0.0085 para mulheres e 0.0095 para homens, respectivamente 8,5 mortes/1.000 habitantes e 9,5 mortes/1.000 habitantes.

Para lidar com diferentes categorias (ou índices) o AnyLogic possui o elemento Dimension, disponível na paleta de dinâmica de sistemas. Crie uma “dimensão” denominada Genero, clicando e arrastando o elemento Dimension para a tela:

Modifique o parâmetro mortalidade para refletir a diferença de gênero:

  • Selecione a opção de System dynamic array no parâmetro;

  • Selecione a Dimension desejada (Genero no caso);

  • Atualize os valores default (caso desejado) por meio do botão Edit ou mesmo digitando diretamente o Array “{valor1, valor2}”.

Todas as equações precisam refletir a dimensão Genero. Comece pelo Stock Populacao:

Como o Stock Populacao e o parâmetro mortalidade já estão com a dimensão definida, você pode agora atualizar a equação no Flow mortes. Nesta parte, o AnyLogic é bem democrático nas opções, permitindo que você trabalhe individualmente com cada categoria ou genericamente com as duas, bastando utilizar o subscrito correto - [Masculino], [Feminino] ou [Genero].

No fluxo mortes, comece selecionando a opção Array e definindo o Array dimensions para Genero:

Agora, vem a melhor parte: defina uma equação para cada gênero, note como o AnyLogic facilita a escolha de cada categoria:

Como resultado, as propriedades do fluxo mortes devem ficar assim:

Chegamos à derradeira e última etapa: a equação de nascimentos. Neste caso, a fertilidade é a mesma para homens e mulheres (50/50) e a equação seria, portanto, a mesma. Você pode, como no caso anterior, criar um equação para cada gênero ou segurar a ansiedade e utilizar o subscrito [Genero] que equivale a aplicar a mesma equação para ambas categorias:

Como resultado, o fluxo nascimentos fica:

Já pode simular!

Repare como dentro de cada bloco (Stock, Flow e parameter) os resultados já estão separados por gênero, com o AnyLogic encarregando-se de compor todo o equacionamento do modelo. Do ponto de vista de prática de modelagem, existe uma consequência natural deste recurso no AnyLogic: foque, inicialmente no modelo, estoques e fluxos. Com algo funcional em mão, dedique-se a eventual necessidade de uso de índices para categorizar fluxos específicos via Arrays.

Atualizado