Calculadora Erlang C
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
background-color: #f4f7f6;
margin: 0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
}
.erlang-calc-container {
background-color: #ffffff;
padding: 30px;
border-radius: 10px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
max-width: 700px;
width: 100%;
margin-bottom: 30px;
}
h1, h2 {
color: #004a99;
text-align: center;
margin-bottom: 20px;
}
.input-group {
margin-bottom: 20px;
display: flex;
flex-direction: column;
}
.input-group label {
font-weight: bold;
margin-bottom: 8px;
color: #004a99;
}
.input-group input[type="number"] {
padding: 12px;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
width: 100%;
box-sizing: border-box; /* Include padding and border in the element's total width and height */
}
.input-group input[type="number"]:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
}
button {
background-color: #28a745;
color: white;
border: none;
padding: 12px 25px;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s ease;
width: 100%;
margin-top: 10px;
}
button:hover {
background-color: #218838;
}
.result-section {
margin-top: 30px;
padding: 25px;
background-color: #e9ecef;
border-radius: 8px;
text-align: center;
}
.result-section h2 {
margin-bottom: 15px;
color: #004a99;
}
#erlangCResult {
font-size: 2.5em;
font-weight: bold;
color: #004a99;
word-wrap: break-word; /* Ensures long results break */
}
#blockingProbability {
font-size: 1.5em;
font-weight: bold;
color: #28a745;
margin-top: 10px;
word-wrap: break-word;
}
.article-content {
max-width: 700px;
width: 100%;
background-color: #ffffff;
padding: 30px;
border-radius: 10px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
text-align: justify;
}
.article-content h2 {
text-align: left;
margin-bottom: 15px;
}
.article-content p, .article-content ul {
margin-bottom: 15px;
}
.article-content code {
background-color: #eef1f4;
padding: 2px 5px;
border-radius: 3px;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
}
@media (min-width: 600px) {
.input-group {
flex-direction: row;
align-items: center;
}
.input-group label {
width: 40%;
margin-bottom: 0;
margin-right: 10px;
}
.input-group input[type="number"] {
width: 60%;
}
button, .result-section {
width: auto;
display: inline-block;
}
.erlang-calc-container {
display: grid;
grid-template-columns: 1fr;
gap: 20px;
}
.button-container {
text-align: center;
}
}
Calculadora Erlang C
Resultados
Esperando entrada…
¿Qué es la Fórmula Erlang C y Cómo Funciona?
La fórmula Erlang C es una herramienta matemática fundamental en la teoría de colas, utilizada para predecir el rendimiento de un sistema de servicio con múltiples agentes (o recursos) y un número potencialmente ilimitado de clientes (o solicitudes). Es particularmente útil en centros de llamadas, centros de soporte técnico y cualquier entorno donde los clientes esperan ser atendidos por un grupo de servidores disponibles.
La Importancia de Erlang C
La fórmula Erlang C ayuda a las organizaciones a tomar decisiones críticas sobre la dotación de personal. Permite estimar:
- La probabilidad de que un cliente tenga que esperar (Probabilidad de Bloqueo o Probabilidad de Cola).
- El tiempo medio de espera en la cola.
- La longitud media de la cola.
Al comprender estas métricas, las empresas pueden optimizar el número de agentes para equilibrar los costos operativos (tener demasiados agentes) con la satisfacción del cliente (tener muy pocos agentes y largas esperas).
Los Parámetros Clave
Para utilizar la fórmula Erlang C, se necesitan tres parámetros principales:
- Tasa de Llegada (λ – lambda): El número promedio de clientes que llegan al sistema por unidad de tiempo. Por ejemplo, 50 llamadas por hora.
- Tasa de Servicio por Agente (μ – mu): El número promedio de clientes que un solo agente puede atender por unidad de tiempo, asumiendo que el agente está ocupado. Por ejemplo, 10 llamadas por hora por agente.
- Número de Agentes (c): La cantidad total de agentes disponibles para atender a los clientes. Por ejemplo, 6 agentes.
La Tensión: Intensidad del Tráfico (a)
Antes de aplicar la fórmula, calculamos la intensidad del tráfico, a menudo denotada como 'a' o 'Erlangs'. Esta medida representa la carga de tráfico total que el sistema debe manejar:
a = λ / μ
Por ejemplo, si λ = 50 llegadas/hora y μ = 10 servicios/hora/agente, entonces a = 50 / 10 = 5 Erlangs. Esto significa que la carga total que el sistema necesita procesar es equivalente a 5 agentes trabajando a tiempo completo.
La Fórmula Erlang C (C)
La fórmula Erlang C (C), que representa la probabilidad de que un cliente entrante tenga que esperar (es decir, todos los agentes están ocupados), es la siguiente:
C = [ (a^c / c!) * (c / (c - a)) ] / [ Σ(a^n / n!) para n desde 0 hasta c-1 + (a^c / c!) * (c / (c - a)) ]
Donde:
a es la intensidad del tráfico en Erlangs.
c es el número de agentes.
n! denota el factorial de n (n * (n-1) * … * 1).
Σ representa la sumatoria.
Nota Importante: La fórmula requiere que la intensidad del tráfico (a) sea menor que el número de agentes (c). Si a ≥ c, la cola crecerá indefinidamente y la probabilidad de espera se acercará a 1 (o 100%).
Cálculo Paso a Paso
La calculadora implementa esta fórmula, calculando primero la intensidad del tráfico y luego la probabilidad de que un cliente tenga que esperar. Maneja los cálculos de factoriales y sumatorias necesarios.
Casos de Uso
- Centros de Llamadas: Determinar el número óptimo de agentes para cumplir con los objetivos de nivel de servicio (SLA), como el porcentaje de llamadas atendidas en X segundos.
- Soporte Técnico: Planificar la cantidad de técnicos necesarios para gestionar las solicitudes de soporte entrantes.
- Gestión de Tráfico Web: Estimar la capacidad del servidor necesaria para manejar solicitudes concurrentes.
- Logística: Optimizar la cantidad de personal en mostradores o puntos de servicio.
Limitaciones
Es importante recordar que Erlang C se basa en varias suposiciones:
- Las llegadas de los clientes siguen un proceso de Poisson (aleatorias e independientes).
- Los tiempos de servicio siguen una distribución exponencial.
- Hay un número infinito de posibles clientes esperando.
- Los agentes están disponibles inmediatamente cuando se les necesita.
- El número de agentes es fijo.
En escenarios del mundo real, estas suposiciones pueden no cumplirse perfectamente, pero Erlang C sigue siendo una herramienta de estimación muy valiosa.
function factorial(n) {
if (n < 0) {
return NaN; // Factorial is not defined for negative numbers
}
if (n === 0 || n === 1) {
return 1;
}
var result = 1;
for (var i = 2; i <= n; i++) {
result *= i;
}
return result;
}
function calculateErlangC() {
var arrivalRate = parseFloat(document.getElementById("arrivalRate").value);
var serviceRate = parseFloat(document.getElementById("serviceRate").value);
var numAgents = parseInt(document.getElementById("numAgents").value);
var resultDiv = document.getElementById("erlangCResult");
var blockingProbDiv = document.getElementById("blockingProbability");
// Clear previous results
resultDiv.innerHTML = "Calculando…";
blockingProbDiv.innerHTML = "";
// Input validation
if (isNaN(arrivalRate) || isNaN(serviceRate) || isNaN(numAgents) ||
arrivalRate < 0 || serviceRate <= 0 || numAgents = number of agents)
if (trafficIntensity >= numAgents) {
resultDiv.innerHTML = "Intensidad de Tráfico ≥ Número de Agentes";
blockingProbDiv.innerHTML = "La cola crecerá indefinidamente. Probabilidad de espera ≈ 100%.";
return;
}
// Calculate sum term: Σ(a^n / n!) for n from 0 to c-1
var sumTerm = 0;
for (var n = 0; n =0
resultDiv.innerHTML = "Error en cálculo de factorial.";
return;
}
sumTerm += Math.pow(trafficIntensity, n) / nFactorial;
}
// Calculate the term for c agents: (a^c / c!) * (c / (c – a))
var cFactorial = factorial(numAgents);
if (isNaN(cFactorial)) {
resultDiv.innerHTML = "Error en cálculo de factorial para 'c'.";
return;
}
var cTerm = (Math.pow(trafficIntensity, numAgents) / cFactorial) * (numAgents / (numAgents – trafficIntensity));
// Calculate Erlang C probability (C)
var erlangC = cTerm / (sumTerm + cTerm);
// Display results
resultDiv.innerHTML = "Probabilidad de Espera (Erlang C):";
blockingProbDiv.innerHTML = (erlangC * 100).toFixed(3) + "%"; // Display as percentage
}