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.
El modelo propuesto es muy simple:
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.
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:
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:
En el bloque Delay, debe establecer la duración de la estancia en 15 días y el número de camas para 10:
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.
Necesitamos disparar un evento siempre que la condición sea verdadera:
cargaViral > = 800
Arrastrar un bloque Event la paleta Agent en el modelo:
Modifica tu propiedad Trigger type para condition:
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:
Listo… ¡Simula!
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).
Atualizado
Isto foi útil?