# Misturando as coisas: dinâmica de sistemas e eventos discretos e agentes

O AnyLogic é um único software de simulação que permite a construção de **modelos híbridos** que misturam as três técnicas de simulação.&#x20;

Com este recurso, é possível, dentre outros exemplos:

* Modelar a previsão de vendas com dinâmica de sistemas e a distribuição de produtos como um modelo de agentes;
* Encapsular modelos de dinâmica de sistemas dentro de agentes (procure o exemplo **Population**, disponível no AnyLogic);
* Modelar o comportamento do fluido escoando de um tanque para outro;
* Representar estoques de produtos (lembre-se que o diferentes SKUs podem ser tratados como um Array);
* Etc.

A melhor maneira de conectar os métodos é por meio do bloco **Event** da paleta de comandos **Agent**.  Vamos praticar isso de duas maneiras, uma beeem simples e outra apenas simples.

Um exemplo beeem simples:

* Considere, por exemplo, que você foi infectado por um vírus que se propaga no seu corpo à taxa de 240 unid. ao dia (ou 10,0 unid/h);
* Quando atingir uma carga viral de, ao menos 800 unid., você é levado para um hospital e ocupa um dos seus leitos;
* O hospital tem apenas 10 leitos (e só existe você no mundo).

Crie um modelo chamado **Infectado** como a unidade de tempo em **horas**.

![](https://lh5.googleusercontent.com/N4WwUGoGq7TcMtfNag8n1NbNo4PsockftcF-U24PXXFA0eEKntK8TbCfg8bE80dIuXShOilXM2p5m0TgOJLPQKe-iK22DZ5umOMfZz9upIztwbxBjK-cO2uqRE0IrevCbx0mQ6VI)

O modelo proposto é beeem simplório:

![](https://lh5.googleusercontent.com/Nbrm1mk80ZkDKudeUC21559paw9Tdu-mqvRCgrnX8vxp11Afjkfa1zMxR2k0IIK_l5MWrkvBZsbaedhdC8GL3vMiLFkf8zp8z7tFT-gGt56IiwyPXQQ03N5noVeJyLq0InCy_fsV)

Agora vem a parte do hospital. Para quem não conhece a modelagem de processos (aka “eventos discretos”) do AnyLogic, sugiro a leitura do [Volume I deste tutorial](https://tutorial.anylogicbrasil.com.br/).&#x20;

O hospital será representado por um fluxo de entrada de pacientes, espera em fila por leito, ocupação do leito, permanência (recuperação do paciente) e liberação do paciente em alta.

No AnyLogic a representação envolve apenas 3 blocos da paleta de **Process Modelling**: **Source**, **Queue**, **Delay** e **Sink**:

![](https://lh3.googleusercontent.com/Z6_EyO3Z0jO2O_a153teC-55UKGshLAqfYjhTgTog_-Z6KQOXU5mHdVhV1n3GqscqHTmw0VHwlSqvLZz7EyPP1NHCzvPVM1bilF1pxeaSyraFXIE69m0knX0IxBQqhbNF9sbHE4S)

No bloco **Source**, troque a opção de chegadas de agentes, que atualmente está definida como uma taxa de chegadas (**Rate**), para a função **inject()** do AnyLogic, que injeta um novo agente cada vez que ela é executada:

![](https://lh3.googleusercontent.com/mGVmj2prh8Cdofp2MusT7x0V38FEo06ZPJ-cpk_ex13DXLicrdgo-A6GYLyAvB07eap8X7vfdeFLB2HQNigQoGRe9A8TcsWvFgv7U2NboAVO1k10T3C40DUH9s2wl_L35Y4JaM3D)

No bloco **Delay**, você precisa definir o tempo de internação em **15** dias e o número de leitos para **10**:

![](https://lh3.googleusercontent.com/bntZRnwh55cMZ6voP74XyX2lin4W6x4YACjF8oeLWMmcVZ9xWoEr314DjAxm9KmkH26w9MRbCs3RVpQFxtRipcldYey6BV-JfYVa5cFeCt8zkZ-fqECWlFAdK6JAZsZWgjB-pswb)

Para concluir, conecte os dois modelos criando um evento que dispara uma nova chegada no bloco **Source** sempre que a carga viral ultrapassa o valor de **800**. Para isto temos o bloco **Event** que dispara eventos baseado em critérios de tempo, taxas ou condições.&#x20;

Precisamos disparar um evento sempre que a condição for verdadeira:

`cargaViral > = 800`

Arraste um bloco **Event** da paleta **Agent** para o dentro do modelo:

![](https://lh5.googleusercontent.com/bj7xMxbIKjkYndQtYGdfPfTyV7VZlww9ATzsMN3348drfwipzDzSKEtGbUeFBXvUOBDMBhy6TMyYnCiQsKPaaisGibe-uSn-HGambkRVtHMvQj3yQVMQ2ih0FCyhtXEQdNbf6EFJ)

Modifique sua propriedade **Trigger type** para **condition**:

![](https://lh6.googleusercontent.com/HbepWSWlG3Qbq70QhAjoH3mHlAuG4AiyGAbit9umsrVz0Ss3Yq-qkNn-DTNqH2M1295kFZKemWkRwTvA6VOSWdQKgY_wrZgojYFQUEbIwQfqWzhAe5RFVO4Xt7m3Yf00soKODkk_)

Quando a condição anterior for verdadeira, queremos que o **Event** execute uma nova ação: *injetar um doente na fila do hospital*. Utilize a função **inject()** contida no bloco **Source**:

![](https://lh5.googleusercontent.com/s81Sdq0pEKDe8c5eIVHeOYV0aOMPs2mvYghnVBamERHZieIovUhzVIoj1PzkeEO3j4kafMDVOXMhTX8gdlMoM1PcZCojLXqllpZgzQnUc_43CQDylLLbRc4lebFXfgXrdBL5APGw)

Pronto… Simule!

![](https://images.unsplash.com/photo-1614728263952-84ea256f9679?crop=entropy\&cs=srgb\&fm=jpg\&ixid=MnwxOTcwMjR8MHwxfHNlYXJjaHwxMHx8cm9ja2V0fGVufDB8fHx8MTYzNDY0MjgwNw\&ixlib=rb-1.2.1\&q=85)

O problema poderia ser evoluído para considerar não apenas uma pessoa infectada, mas diversas pessoas ou uma população. Procure o exemplo **Epidemic and Clinic with Accumulating Concern**, disponível na lista de exemplos do AnyLogic, apresenta um modelo que considera agentes, eventos discretos e dinâmica de sistemas para estudo da ocupação de uma clínica durante uma pandemia.

Como exercício, estude o agente **Patient** disponível no modelo:

* Ele tem três estados possíveis (suscetível, infectado ou recuperado, respectivamente, as caixas amarela, vermelha e azul);
* Quando o paciente está no estado infectado, o fluxo (**flow**) começa a infectar o agente ao nível de **100 por unidade de tempo** (dias, no caso);
* Quando o paciente ultrapassa o nível de **300**, ele deve ir ao hospital. Note que o evento **DecisionToGoToClinic** é disparado (**Trigger type**) quando a condição (**Condition**) indica que o valo atual do **Stock Concern** ultrapassou a **300**. Nest caso, o evento dispara um novo agente no bloco **RequestTreatment** pelo comando **take** (que está no **Main** do modelo e leva o agente para o hospital).&#x20;

![](https://lh4.googleusercontent.com/bapIAWz728S8waUTnJVLhWh68oeX3hPVDAChRW5xBwuMIpIyRwAzd0OXF1hotFLPwpqphwB9FOp-BV7MuQwCD3fYvIzOonJm3cqIH2WUoRnPAlF_DRhsAkHMaSPja-_hKMhuh09V)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tutorial-ds.anylogicbrasil.com.br/misturando-as-coisas-dinamica-de-sistemas-e-eventos-discretos-e-agentes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
