Criando estruturas de dados com Arrays
Atualizado
Atualizado
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.