> For the complete documentation index, see [llms.txt](https://tutorial-ds.anylogicbrasil.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tutorial-ds.anylogicbrasil.com.br/espanol/misturando-as-coisas-dinamica-de-sistemas-e-eventos-discretos-e-agentes.md).

# Mezclando cosas: dinámica del sistema para eventos y agentes discretos

AnyLogic es un software de simulación único que permite la construcción de **modelos híbridos** que combinan las tres técnicas de simulación.

Con este recurso es posible, entre otros ejemplos:

* Modelo de previsión de ventas con dinámica de sistemas y distribución de productos como modelo de agente;
* Encapsule modelos de dinámica de sistemas dentro de los agentes (busque el ejemplo de Población, disponible en AnyLogic);
* Modele el comportamiento del fluido que fluye de un tanque a otro;
* Representar inventarios de productos (recuerde que los diferentes SKU pueden tratarse como un Array);
* Etc.

La mejor manera de conectar los métodos es a través del bloque **Event** desde la paleta de comandos **Agent**. Practiquemos esto de dos maneras, una muy simple y la otra simple:

* Considere, por ejemplo, que está infectado con un virus que se propaga en su cuerpo a razón de 240 unidades. por día (o 10,0 unidades/h);
* Cuando alcanzas una carga viral de al menos 800 unidades, te llevan a un hospital y ocupas una de sus camas;
* El hospital tiene solo 10 camas (y solo estás tú en el mundo).

Crea un modelo llamado **Infectado** on la unidad de tiempo en **horas**.

<img src="https://lh5.googleusercontent.com/N4WwUGoGq7TcMtfNag8n1NbNo4PsockftcF-U24PXXFA0eEKntK8TbCfg8bE80dIuXShOilXM2p5m0TgOJLPQKe-iK22DZ5umOMfZz9upIztwbxBjK-cO2uqRE0IrevCbx0mQ6VI" alt="" width="563">

El modelo propuesto es muy simple:

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

Ahora viene la parte del hospital. Para aquellos que no están familiarizados con los procesos de modelado (también conocidos como "eventos discretos") de AnyLogic, sugiero leer el [Volumen I tiene un tutorial](https://tutorial.anylogicbrasil.com.br/).&#x20;

El hospital estará representado por un flujo de entrada de pacientes, espera en fila por cama, ocupación de la cama, estancia (recuperación del paciente) y alta del paciente dado de alta.

En AnyLogic la representación involucra solo 3 bloques de la paleta de **Process Modelling**: **Source**, **Queue**, **Delay** e **Sink**:

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

En el bloque **Source**, tcambie la opción de llegadas de agentes, que actualmente está establecida en una tasa de llegadas (**Rate**), para la función **inject()** de AnyLogic, que inyecta un nuevo agente cada vez que se ejecuta:

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

En el bloque **Delay**, debe establecer la duración de la estancia en **15 días** y el número de camas para **10**:

<img src="https://lh3.googleusercontent.com/bntZRnwh55cMZ6voP74XyX2lin4W6x4YACjF8oeLWMmcVZ9xWoEr314DjAxm9KmkH26w9MRbCs3RVpQFxtRipcldYey6BV-JfYVa5cFeCt8zkZ-fqECWlFAdK6JAZsZWgjB-pswb" alt="" width="563">

Para concluir, simplemente conecte los dos modelos creando un evento que desencadene una llegada al bloque **Source** siempre que la carga viral exceda **800**. Para esto tenemos el bloque **Event** que desencadena **Events** basados ​​en criterios de tiempo, tasas o condiciones.&#x20;

Necesitamos disparar un evento siempre que la condición sea verdadera:

`cargaViral > = 800`

Arrastrar un bloque **Event** la paleta **Agent** en el modelo:

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

Modifica tu propiedad **Trigger type** para **condition**:

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

Cuando la condición anterior es verdadera, queremos que el **Event** ejecute una nueva: *inyectar a un paciente en la cola del hospital*. Utilice la función **inject()** contenida en el bloque **Source**:

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

Listo… ¡Simula!

<figure><img src="https://images.unsplash.com/photo-1614728263952-84ea256f9679?crop=entropy&#x26;cs=srgb&#x26;fm=jpg&#x26;ixid=MnwxOTcwMjR8MHwxfHNlYXJjaHwxMHx8cm9ja2V0fGVufDB8fHx8MTYzNDY0MjgwNw&#x26;ixlib=rb-1.2.1&#x26;q=85" alt="" width="375"><figcaption></figcaption></figure>

El problema podría evolucionar para considerar no solo una persona infectada, sino varias personas o una población. El ejemplo **Epidemic and Clinic with Accumulating Concern**, disponible en la lista de ejemplos de AnyLogic, presenta un modelo que considera agentes, eventos discretos y dinámicas de sistemas para estudiar la ocupación de una clínica durante una pandemia.

Como ejercicio, estudie al agente **Patient** disponible en modelo:

* Tiene tres estados posibles (susceptible, infectado o recuperado, respectivamente, los recuadros amarillo, rojo y azul));
* Cuando el paciente está en el estado infectado, el flujo (**flow**) comienza a infectar al agente a un nivel de **100 por unidad de tiempo** (días, en este caso);
* Cuando el paciente supera el **nivel de 300**, debe ir al hospital. Tenga en cuenta que el evento de **DecisionToGoToClinic** se dispara (**Trigger type**) cuando la condición (**Condition**) indica que el valor actual de **Stock Concern** ha superado los **300**. En este caso, el evento desencadena un nuevo agente en el bloque de **RequestTreatment** por el comando **take** (que está en el **Main** y lleva al agente al hospital).&#x20;

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