[ Foro de C# ]
Las personas que traen cartuchos vacíos, en cambio, van al sector de servicio técnico. Allí dejan el
cartucho, y se les otorga un remito, con la fecha en la que deben retirar el cartucho. Esto demora 4
minutos, pero si el técnico está hablando por teléfono, la persona debe esperar a que la llamada
termine. Hay llamadas cada 10 minutos, y tienen una duración de 3 minutos
private double ActulizarLlegadaLlamada()
{
if (tiempo == 0)
{
double proxima_llegada = 10;
proxima_llegada_llamada = tiempo + proxima_llegada;
return proxima_llegada;
}
//Se activa cuando llega una llamada calcula la proxima llegada
if (proxima_llegada_llamada == tiempo)
{
double proxima_llegada = 10;
idsCliente++;
var cliente = new Clientes();
cliente.id = idsCliente + 1;
cliente.tiempo_llegada = tiempo;
proxima_llegada_llamada = tiempo + proxima_llegada;
if (tecnico_1)
{
cliente.estado = " SA1 ";
clientes_llamada.Add(cliente);
nombre_de_evento += cliente.id.ToString() + " SA1 ";
return proxima_llegada;
}
if (!tecnico_1 && fin_atencion_cartucho1>0)
{
cliente.estado = " SA ";
nombre_de_evento += cliente.id.ToString() + " SA ";
clientes_llamada.Add(cliente);
return proxima_llegada;
}
if(!tecnico_1 && fin_atencion_cartucho1 == 0)
{
cliente.estado = " EA ";
clientes_llamada.Add(cliente);
nombre_de_evento += cliente.id.ToString() + " EA ";
}
}
return 0;
}
private double ActualizarLleagadaCartucho()
{
if (tiempo == 0)
{
double proxima_llegada = GenerarRandomsPoisson() +0.02;
// double proxima_llegada = 1000;
proxima_llegada_cartucho = tiempo + proxima_llegada;
return proxima_llegada;
}
//Se activa cuando llega un cartucho y calcula la proxima llegada
if (proxima_llegada_cartucho == tiempo)
{
double proxima_llegada = GenerarRandomsPoisson() + 0.02;
//double proxima_llegada = 1000;
idsCliente++;
var cliente = new Clientes();
cliente.id = idsCliente + 1;
cliente.tiempo_llegada = tiempo;
proxima_llegada_cartucho = tiempo + proxima_llegada;
if (tecnico_1)
{
cliente.estado = " SA ";
clientes_cartucho.Add(cliente);
nombre_de_evento += cliente.id.ToString() + " SA ";
return proxima_llegada;
}
if(!tecnico_1)
{
cliente.estado = " EA ";
cola_tecnico.Add(cliente);
nombre_de_evento += cliente.id.ToString() + " EA ";
return proxima_llegada;
}
}
return 0;
}
private double ActualizarTiempoAtencionCartucho(double llegada_anterior)
{
if (tecnico_1 && llegada_anterior == tiempo)
{
tecnico_1 = false;
double proxima_fin = 4;
fin_atencion_cartucho1 = tiempo + proxima_fin;
return proxima_fin;
}
if (fin_atencion_cartucho1 == tiempo )
{
for (var i = 0; i < clientes_cartucho.Count(); i++)
{
if (clientes_cartucho.Count() == i + 1)
{
double demora_cliente = tiempo - clientes_cartucho[i].tiempo_llegada;
if (demora_cliente > tiempo_demora_maxima)
{
tiempo_demora_maxima = demora_cliente; // Actualiza el tiempo de demora máximo
}
clientes_cartucho[i].estado = "Destruido";
nombre_de_evento += clientes_cartucho[i].id.ToString() + " D ";
if (cola_tecnico.Count() == 0)
{
tecnico_1 = true;
fin_atencion_cartucho1 = 0;
}
else
{
double proxima_fin = 4;
fin_atencion_cartucho1 = tiempo + proxima_fin;
clientes_cartucho.Add(cola_tecnico[0]);
clientes_cartucho[i + 1].estado = " SA1 ";
cola_tecnico.Remove(clientes_cartucho[i + 1]);
nombre_de_evento += " -c: " + clientes_cartucho[i + 1].id.ToString() + " SA1 ";
return proxima_fin;
}
}
}
}
return 0;
}
private double ActualizarTiempoAtencionLlamada(double llegada_anterior)
{
if (tecnico_1 && llegada_anterior == tiempo )
{
tecnico_1 = false;
double proxima_fin = 3; // Cambiar los parámetros según la distribución deseada
fin_atencion_llamada1 = tiempo + proxima_fin;
return proxima_fin;
}
if (llegada_anterior == tiempo && fin_atencion_cartucho1 > 0)
{
tiempo_remanente_cartucho = fin_atencion_cartucho1 - tiempo;
fin_atencion_cartucho1 = 0;
double proxima_fin = 3;
fin_atencion_llamada1 = tiempo + proxima_fin;
nombre_de_evento += " -c: " + clientes_cartucho[clientes_cartucho.Count() - 1].id.ToString() + " ER ";
return proxima_fin;
// Update other necessary variables
}
if (fin_atencion_llamada1 == tiempo)
{
for (var i = 0; i < clientes_llamada.Count(); i++)
{
double demora_cliente = tiempo - clientes_llamada[i].tiempo_llegada;
if (demora_cliente > tiempo_demora_maxima)
{
tiempo_demora_maxima = demora_cliente; // Actualiza el tiempo de demora máximo
}
clientes_llamada[i].estado = "Destruido";
nombre_de_evento += clientes_llamada[i].id.ToString() + " D ";
if (cola_tecnico.Count() == 0)
{
tecnico_1 = true;
fin_atencion_llamada1 = 0;
fin_atencion_cartucho1 = tiempo + tiempo_remanente_cartucho;
tiempo_remanente_cartucho = 0;
}
else
{
double proxima_fin = 3;
fin_atencion_llamada1 = tiempo + proxima_fin;
clientes_llamada.Add(cola_tecnico[0]);
clientes_llamada[i + 1].estado = "SA1";
cola_tecnico.Remove(clientes_llamada[i+ 1]);
nombre_de_evento += " -c:" + clientes_llamada[i + 1].id.ToString() + " SA1";
return proxima_fin;
}
}
}
return 0;
}