API del motor
El motor es un módulo ES independiente (js/engine.js). Las horas se expresan en horas simuladas y las tasas son por hora.
Acceso desde la consola
Con el simulador abierto, la consola del navegador expone un objeto de solo lectura:
MMM.engine // instancia activa de QueueEngine (o null) MMM.stats // equivale a MMM.engine.getStats()
Constructor
Los valores inválidos (vacíos, negativos, NaN) se corrigen al rango permitido.
import { QueueEngine } from './js/engine.js';
const e = new QueueEngine({
mode: 'standard', // 'standard' | 'psych'
lambda: 40, // llegadas/h (0–1000)
mu: 15, // atención/h (0.1–1000)
servers: 5, // servidores (1–20)
queues: 3, // colas generales (1–10)
hours: 8, // jornada (1–24)
vipCount: 1, // cajas VIP (0–servers)
vipPercent: 30, // % clientes VIP (0–100)
ticket: 25, // ingreso/cliente
costInsumo: 2.5, // costo/cliente
patience: 15, // min (psych) (1–240)
tolerance: 10 // clientes/cola (psych) (1–100)
});
while (e.advance(1)) {} // corre la jornada completa
console.log(e.getStats());
Métodos
| Método | Descripción |
|---|---|
| advance(hours) | Avanza hours horas en sub-pasos de 0.004 h. Devuelve false cuando la jornada y la cola terminaron. |
| step(dt) | Un solo paso de dt horas (uso avanzado; prefiere advance). |
| updateLive(p) | Aplica en caliente μ, vipPercent, ticket, costInsumo, patience, tolerance y hours. |
| setLambda(v) | Cambia λ (por ejemplo, para hora pico). |
| getStats() | Devuelve el resumen de métricas (ver abajo). |
| getTotalQueueSize() | Personas en espera ahora. |
| hayGente() | true si hay alguien en cola o en servicio. |
getStats()
{
prefQ: 0, genQ: 3, // en cola ahora (VIP / general)
atendidos: 324, abandonos: 0, rechazos: 0,
esperaTotal: 1.2, // horas acumuladas
maxQueueLength: 4,
utilization: 0.51, // 0–1
avgWait: 0.2, // minutos
overtime: 0.10, // horas extra
ticket: 25, cost: 2.5
}
Propiedades y esquemas
| Objeto | Campos |
|---|---|
| engine | now, reloj, tiempoExtra, abierto, trabajando, servidores, qPref, qGen, history |
| Cliente | t (llegada, h), type ('PREF'|'GEN'), patience (h) |
| Servidor | id, type, busy, timer (h), clientType, totalBusyTime |
| history[i] | t (h), q (en cola), busy (servidores ocupados); una muestra cada 0.05 h |
Los módulos ES no se cargan al abrir el archivo con doble clic (
file://): sirve la carpeta con un servidor local, por ejemplo python3 -m http.server.