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