Caso aplicado · simulación discreta + API

Gemelo digital minero con AnyLogic y una API de decisión

Manual abierto para construir un modelo educativo donde los camiones llegan al sistema, consultan una API externa y se asignan dinámicamente a la Pala A o Pala B según el estado de las colas y del camión.

Mate MathPlay · Referencia libre para clase, práctica y experimentación · Minería 2026

AnyLogic PLEJava HTTPAPI externaEventos discretosDespacho educativo

Idea central: una simulación permite probar decisiones sin tocar la operación real. En este caso, el modelo representa camiones, colas y palas; la API representa una lógica externa de despacho que puede empezar como regla simple y luego evolucionar hacia optimización o Machine Learning.

Qué se construye

El sistema tiene un generador de camiones, un bloque de decisión y dos rutas posibles: Pala A y Pala B. Cada camión lleva variables propias, como identificador y combustible. Cuando llega al punto de decisión, AnyLogic envía un mensaje JSON a una API. La API responde una recomendación y el modelo dirige el camión por la ruta correspondiente.

Sourcegenera camiones
→
SelectOutputconsulta API
→
Queue A/Bespera
→
Delay A/Bcarguío
→
Sinksalida

Por qué AnyLogic es útil

1
Procesos

Representa flujos, esperas, tiempos de servicio y salidas.

2
Agentes

Modela camiones, equipos, personas o entidades con estado propio.

3
Experimentos

Permite comparar escenarios antes de intervenir una operación real.

AnyLogic permite combinar simulación de eventos discretos, agentes y dinámica de sistemas. Para este caso usamos eventos discretos porque los camiones llegan, esperan, pasan por una pala y salen. Cada cambio importante ocurre como evento en el tiempo.

Conceptos base

ConceptoQué representaEjemplo del caso
AgenteEntidad con identidad y variables propias.Camion.
Variable de estadoDato que describe una condición del agente o sistema.idCamion, combustible, tamaño de cola.
ColaAcumulación de entidades esperando atención.colaPalaA y colaPalaB.
DelayTiempo de procesamiento o servicio.Tiempo de carguío en cada pala.
APIServicio externo que recibe datos y responde una decisión.Endpoint /dispatch.
JSONFormato ligero para enviar datos.truck_id, fuel_level, queue_shovel_A, queue_shovel_B.

Paso 1: crear el proyecto

  1. Abre AnyLogic PLE y selecciona Create a model.
  2. Asigna el nombre GemeloDigitalMina.
  3. Cambia Model time unit a minutes.
  4. Luego crea un nuevo tipo de agente con File > New > Agent Type.
  5. Nombra el agente como Camion.
Por qué minutos: en un sistema de carguío y colas, los eventos relevantes suelen medirse en minutos: llegada, espera, carguío y salida. Elegir bien la unidad evita confusión al interpretar tasas y demoras.
Captura paso 1 del modelo AnyLogic
Referencia visual del inicio del modelo en AnyLogic.

Paso 2: variables del agente Camion

El agente Camion necesita variables para que la simulación pueda diferenciar cada unidad y enviar su estado a la API.

VariableTipoValor inicialUso
idCamionintasignado al salir del SourceIdentificar cada camión.
combustibledouble85.0Enviar condición del camión a la API.
Variables del agente Camion
Variables mínimas para que cada camión tenga identidad y estado.

Paso 3: función consultarGemelo

En Main, crea una función llamada consultarGemelo. La función recibe el estado actual del camión y del sistema, arma un JSON, lo envía por HTTP POST y devuelve la respuesta como texto.

ArgumentoTipoQué envía
truckIdintIdentificador del camión.
fueldoubleNivel de combustible.
queueAintTamaño actual de la cola de Pala A.
queueBintTamaño actual de la cola de Pala B.
try { String urlEndpoint = "https://TU_API_PUBLICA_O_DEMO/dispatch"; java.net.URL url = new java.net.URL(urlEndpoint); java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/json; utf-8"); conn.setDoOutput(true); String jsonInput = String.format( "{\"truck_id\": %d, \"fuel_level\": %.1f, \"queue_shovel_A\": %d, \"queue_shovel_B\": %d}", truckId, fuel, queueA, queueB ); try(java.io.OutputStream os = conn.getOutputStream()) { byte[] input = jsonInput.getBytes("utf-8"); os.write(input, 0, input.length); } java.io.BufferedReader br = new java.io.BufferedReader( new java.io.InputStreamReader(conn.getInputStream(), "utf-8") ); StringBuilder response = new StringBuilder(); String line; while ((line = br.readLine()) != null) { response.append(line.trim()); } return response.toString(); } catch (Exception e) { return "{\"error\":\"" + e.getMessage() + "\"}"; }
Nota pública: reemplaza la URL por tu propio endpoint. No publiques claves, endpoints privados ni datos sensibles en materiales abiertos.

Paso 4: diagrama de flujo

Desde la Process Modeling Library, arrastra estos bloques al lienzo de Main y conéctalos en dos rutas posibles.

BloqueNombreRol en el modelo
SourcegeneradorCamionesCrea camiones con una tasa de llegada.
Select OutputselectOutputDecide si el camión va a Pala A o Pala B.
QueuecolaPalaAEspera antes de Pala A.
DelaypalaATiempo de carguío en Pala A.
QueuecolaPalaBEspera antes de Pala B.
DelaypalaBTiempo de carguío en Pala B.
SinksalidaCamionesSalida del sistema.
Diagrama de flujo en AnyLogic
Flujo básico: llegada, decisión, cola, atención y salida.

Paso 5: parámetros principales

Source: generadorCamiones

agent.idCamion = (int) uniform_discr(100, 999);

SelectOutput: selectOutput

El bloque llama a la API y revisa si la respuesta contiene Pala_A. Si contiene ese texto, el camión usa la salida verdadera. Si no, toma la otra ruta.

consultarGemelo( agent.idCamion, agent.combustible, colaPalaA.size(), colaPalaB.size() ).contains("Pala_A")

Delay: palaA y palaB

triangular(3, 5, 8)

La distribución triangular representa un tiempo mínimo, un tiempo más probable y un tiempo máximo. Es útil cuando no tenemos suficientes datos históricos, pero sí tenemos criterio experto.

Paso 6: ejecución y verificación

  1. Presiona F5 o el botón verde Run.
  2. Haz clic en Play en la ventana de simulación.
  3. Observa que los camiones se dirigen a la Pala A o Pala B según la respuesta de la API.
  4. Revisa si las colas cambian y si el bloque selectOutput envía unidades por ambas rutas.
Si el modelo corre, la arquitectura ya funciona: simulación, estado operacional, API externa y decisión dinámica.

Galería de referencia

Las siguientes capturas sirven como apoyo visual para ubicar ventanas, propiedades y pasos de configuración dentro de AnyLogic.

Captura paso 4Paso visual 04
Captura paso 5Paso visual 05
Captura paso 6Paso visual 06
Captura paso 7Paso visual 07
Captura paso 8Paso visual 08
Captura paso 9Paso visual 09
Captura paso 10Paso visual 10
Captura paso 11Paso visual 11
Captura paso 12Paso visual 12
Captura paso 13Paso visual 13
Captura paso 14Paso visual 14
Captura paso 15Paso visual 15
Captura paso 16Paso visual 16
Captura paso 17Paso visual 17
Captura paso 18Paso visual 18
Captura paso 19Paso visual 19
Captura paso 20Paso visual 20
Captura paso 21Paso visual 21
Captura paso 22Paso visual 22
Captura paso 23Paso visual 23
Captura paso 24Paso visual 24
Captura paso 25Paso visual 25
Captura paso 26Paso visual 26
Captura paso 27Paso visual 27
Captura paso 28Paso visual 28
Captura paso 29Paso visual 29
Captura paso 30Paso visual 30
Captura paso 31Paso visual 31
Captura paso 32Paso visual 32

Extensiones posibles

Regla de despacho

La API puede elegir la pala con menor cola o menor tiempo esperado.

Modelo predictivo

La API puede estimar congestión, espera o probabilidad de atraso.

Optimización

El servicio externo puede comparar escenarios y elegir la alternativa de menor costo.

Registro histórico

Cada consulta puede guardarse para analizar decisiones y desempeño.

Errores comunes

ProblemaPosible causaRevisión
La función devuelve error.Endpoint mal escrito o API apagada.Probar la URL con una solicitud externa.
Todos los camiones van a una sola ruta.La respuesta no contiene exactamente Pala_A.Revisar texto devuelto por la API.
No compila el código Java.Comillas mal escapadas en JSON.Copiar el bloque completo y revisar llaves.
Las colas crecen demasiado.Llegan más camiones de los que las palas atienden.Ajustar tasa de llegada o tiempo de servicio.

Cierre

Este caso muestra una arquitectura sencilla pero poderosa: una simulación de eventos discretos genera estados, una API analiza esos estados y el modelo cambia su flujo según la respuesta. Esa misma lógica puede adaptarse a despacho, mantenimiento, seguridad, planta, logística o energía.

La simulación convierte una decisión riesgosa en un experimento controlado.
Volver a Mate MathPlayVer caso de flotación