Задание 6. Выбор оптимального варианта решения развития станции технического обслуживания
Станция технического обслуживания (СТО) выполняет ремонт и обслуживание автомобилей. В среднем в час на СТО прибывает λ автомобилей. СТО имеет m боксов для ремонта и гараж, в котором могут ожидать обслуживания v автомобилей. Среднее время ремонта автомобиля составляет t часов.
Руководство СТО может выбрать одно из двух решений по развитию, затраты на реализацию которых приблизительно равны:
построить и оборудовать ещё один бокс для ремонта,
увеличить гараж для ожидающих ремонта автомобилей ещё на k мест.
Считая, процесс обслуживания автомобилей марковским процессом с пуассоновским потоком заявок и показательным распределением времени обслуживания, выбрать оптимальный вариант развития СТО по критерию максимума пропускной способности.
Парамет- ры СТО |
Номер варианта |
№ 6 | |
λ |
1.0 |
m |
3 |
v |
2 |
t |
3.5 |
k |
3 |
Результаты работы программы.
Код основной части программы, выполняющий решение.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace sto_station
{
class Program
{
static void Main(string[] args)
{
double y=1;
double m=3;
double v=2;
double t=3.5;
double k=3;
Console.WriteLine("Исходные данные: " + y + " " + m + " " + v + " " + t + " " + k + Environment.NewLine);
Console.WriteLine("РЕШЕНИЕ");
Console.WriteLine("По условию задачи, нужно сравнить два варианта функционирования СТО:");
Console.WriteLine("а) увеличить значение m до " + Convert.ToString(m + 1));
Console.WriteLine("б) увеличить v на k мест, т.е. до v=" + Convert.ToString(v + k));
double u;
u = 1 / t;
u = Math.Round(u, 3);
Console.WriteLine("μ = 1 / t =" + "1/" + Convert.ToString(t) + " = " + Convert.ToString(u));
double a;
a = y / u;
a = Math.Round(a, 3);
Console.WriteLine("α = λ / μ = " + Convert.ToString(y) + "/" + Convert.ToString(u) + " = " + Convert.ToString(a));
Console.WriteLine(Environment.NewLine + "РАССМОТРИМ ПЕРВЫЙ ВАРИАНТ");
Console.WriteLine("Находим вероятность того, что в системе нет заявок:");
double p0;
double summ1 = 0;
double fact = 1;
summ1 = Math.Pow(a, 0) / 1;
for (int i = 1; i < m + 1; i++)
{
fact = fact * i;
summ1 = summ1 + ((Math.Pow(a, i)) / fact);
}
double summ2;
summ2 = 0;
for (int r = 1; r < m + 1 + 1; r++)
{
summ2 = summ2 + Math.Pow((a / (m + 1)), r);
}
summ2 = summ2 * Math.Pow(a, m + 1);
fact = 1;
for (int i = 1; i < m + +1 + 1; i++)
{
fact = fact * i;
}
summ2 = summ2 / fact;
p0 = 1 / (summ1 + summ2);
p0 = Math.Round(p0, 3);
Console.WriteLine("P(0)=" + Convert.ToString(p0));
double p_mv;
p_mv = 0;
p_mv = Math.Pow(a, (m + 1 + v)) * p0 / (Math.Pow(m + 1, v) * fact);
p_mv = Math.Round(p_mv, 3);
Console.WriteLine("P(m+v)=" + Convert.ToString(p_mv));
double q1;
q1 = 1 - p_mv;
Console.WriteLine("Относительная пропускная способность составит " + Convert.ToString(q1));
Console.WriteLine(Environment.NewLine + "РАССМОТРИМ ВТОРОЙ ВАРИАНТ");
Console.WriteLine("Находим вероятность того, что в системе нет заявок:");
double p0_1;
fact = 1;
summ1 = Math.Pow(a, 0) / 1;
for (int i = 1; i < m + 1; i++)
{
fact = fact * i;
summ1 = summ1 + ((Math.Pow(a, i)) / fact);
}
fact = 1;
for (int i = 1; i < m + +1 + 1; i++)
{
fact = fact * i;
}
double fact1 = fact;
fact = fact * (m + 1 - a);
p0_1 = 1 / (summ1 + ((Math.Pow(a, m + 1)) * (1 - (Math.Pow(a / (m + 1), v)))) / fact);
p0_1 = Math.Round(p0_1, 5);
Console.WriteLine("P(0)=" + Convert.ToString(p0_1));
double p_mv_1;
p_mv_1 = Math.Pow(a, (m + 1 + v)) * p0_1 / (Math.Pow(m + 1, v) * fact1);
p_mv_1 = Math.Round(p_mv_1, 3);
Console.WriteLine("P(m+v)=" + Convert.ToString(p_mv_1));
double q2;
q2 = 1 - p_mv_1;
Console.WriteLine("Относительная пропускная способность составит " + Convert.ToString(q2) + Environment.NewLine);
if (q1 > q2)
{
Console.WriteLine("q1>q2, поэтому первый вариант предпочтительнее");
}
if (q1 < q2)
{
Console.WriteLine("q1<q2, поэтому второй вариант предпочтительнее");
}
if (q1 == q2)
{
Console.WriteLine("q1=q2, оба варианта оптимальны");
}
Console.ReadKey();
}
}
}