Разработка программы, позволяющей смоделировать многоканальную систему массового обслуживания
Ознакомление с процессом создания программы массового обслуживания для пункта по ремонту радиотехники, который работает в режиме отказа. Расчет вероятности состояний системы, вероятности отказа, а также среднего времени между поступлением заявок.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 04.05.2014 |
Размер файла | 212,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
ВВЕДЕНИЕ
Теория массового обслуживания опирается на теорию вероятностей и математическую статистику.
Теория массового обслуживания - область прикладной математики, занимающаяся анализом процессов в системах производства, обслуживания, управления, в которых однородные события повторяются многократно, например, на предприятиях бытового обслуживания; в системах приема, переработки и передачи информации; автоматических линиях производства и др.
Предметом теории массового обслуживания является установление зависимостей между характером потока заявок, числом каналов обслуживания, производительностью отдельного канала и эффективным обслуживанием с целью нахождения наилучших путей управления этими процессами.
Задача теории массового обслуживания - установить зависимость результирующих показателей работы Системы Массового Обслуживания (СМО) (вероятности того, что заявка будет обслужена; математического ожидания числа обслуженных заявок и т.д.) от входных показателей (количества каналов в системе, параметров входящего потока заявок и т.д.). Результирующими показателями или интересующими нас характеристиками СМО являются - показатели эффективности СМО, которые описывают, способна ли данная система справляться с потоком заявок. Примерами СМО могут служить: телефонные станции, ремонтные мастерские, билетные кассы, стоянки такси, парикмахерские и т.п.
Задачи теории массового обслуживания носят оптимизационный характер и в конечном итоге включают экономический аспект по определению такого варианта системы, при котором будет обеспечен минимум суммарных затрат от ожидания обслуживания, потерь времени и ресурсов на обслуживание и простоев каналов обслуживания.
Для проверки той или иной системы на эффективность и целесообразность, производят теоретические расчеты. Часто возникает необходимость проверки полученных теоретических результатов, для чего лучшим средством служит модель. Не маловажный тот факт, что не всегда можно исследовать систему на практике, в связи с ее громоздкостью или дороговизной. В этом случае также целесообразно применять модель.
В данной работе предлагается к рассмотрению модель системы массового обслуживания с отказами. Эта система получила широкое распространение в телефонных сетях.
Задачу массового обслуживания, условно, можно разделить на две задачи: задачу анализа и задачу синтеза.
Задача анализа позволяет, на основе исходных, неизменных данных, произвести оценку эффективности заданной системы.
В то время как целью задачи синтеза служит выбор оптимальных параметров системы, при которых будет достигаться наиболее оптимальный результат. Для этого строиться компьютерная модель системы, в которой производится определенное количество экспериментов с целью выявления оптимального решения.
1. ОСНОВНЫЕ СВЕДЕНИЯ О ЗАДАЧЕ И МЕТОД ЕЕ РЕШЕНИЯ
1.1 ПЕРЕЧЕНЬ СОКРАЩЕНИЙ, СИМВОЛОВ И СПЕЦИАЛЬНЫХ ТЕРМИНОВ
n - количество каналов обслуживания;
л - интенсивность входящего потока заявок;
м - интенсивность обслуживания канала;
е - точность;
Р0, Р1, Р2, Р3, Р4 - вероятности состояния системы;
tср.пост. - среднее время поступления заявки в систему;
tср.обсл. - среднее время обслуживания заявки в системе;
с - коэффициент загрузки системы;
q - относительная пропускная способность системы;
А - абсолютная пропускная способность системы;
k - среднее число занятых каналов в системе;
СМО - система массового обслуживания.
1.2 ОПИСАНИЕ ЗАДАЧИ
Постановка задачи:
Пункт по ремонту радиотехники работает в режиме отказа, состоит из 4 (n) каналов обслуживания, в него поступает простейший (пуассоновский) поток заявок с интенсивностью 18 (). Интенсивность обслуживания канала - 5 (). Необходимо теоретически и практически рассчитать вероятности состояний системы, вероятность отказа, среднее время между поступлением заявок, среднее время обслуживания заявки в канале, коэффициент загрузки системы (приведенная интенсивность), относительную пропускную способность системы, абсолютную пропускную способность системы, среднее число занятых каналов.
Теоретический расчет подразумевает под собой вычисление выше приведенных величин, согласно формул для случая, когда распределение времени поступления заявок подчиняется пуассоновскому закону распределения. Необходимые формулы будут рассмотрены ниже.
В практической части необходимо построить модель системы, при условии, что время поступления заявок подчиняется пуассоновскому закону распределения, и рассчитать выше описанные величины.
Следует отметить, что теоретический расчет параметров системы для случая, когда потоки событий, переводящие систему из состояния в состояние, распределенные по закону отличному от пуассоновского, довольно сложен, т.к. на практике такой вариант встречается очень редко. Поэтому аналитические формулы для характеристик СМО удается получить только для самых простых случаев.
1.2.1 МАТЕМАТИЧЕСКОЕ ОПИСАНИЕ ЗАДАЧИ
Параметры системы:
Тип СМО: СМО с отказами
Входящий поток: пуассоновский
Интенсивность входящего потока заявок: л = 18 заявок в единицу времени
Интенсивность обслуживания канала: м = 5 заявок в единицу времени
Количество каналов обслуживания: n = 4 канала
Точность: е = 0,01
1.2.2 МЕТОД РЕШЕНИЯ
Простейшим потоком называется поток, обладающий следующими свойствами:
1. стационарность;
2. ординарность;
3. отсутствие последействия.
Поток событий называется стационарным, если вероятность попадания того или иного числа событий на участок времени длиной зависит только от длины участка и не зависит от того, где именно на оси времени расположен этот участок.
Поток событий называется ординарным, если вероятность попадания на элементарный участок t двух или более событий пренебрежимо мала по сравнению с вероятностью попадания одного события. Ординарность означает, что поток прореженный, т.е. между любыми двумя событиями есть временной интервал. программа массовый обслуживание ремонт
Поток событий называется потоком без последействия, если для любых, не перекрывающихся участков времени число событий, попадающих на один из них, не зависит от числа событий, попадающих на другие. Это означает, что заявки попадают в систему не зависимо друг от друга. Интенсивность поступления потока заявок - . Простейшие потоки поступления заявок характеризуются показательным законом распределения. Тогда интервал времени поступления потока заявок представляет собой случайную величину с одним и тем же распределением вероятностей F (t). , (1) где 0 - постоянная.
Плотность распределения показательного закона задается формулой:
где >0 - интенсивность поступления заявок.
Необходимо учесть, что данная система является СМО с отказами - это означает, что в момент, когда система занята (все каналы заняты), то пришедшая заявка получает отказ и покидает систему. Если в системе свободен хотя бы один канал обслуживания, то пришедшая заявка немедленно поступает на обслуживание в этот канал.
Длительность обслуживания потока заявок также представляет собой случайную величину, подчиняющуюся показательному закону распределения. Интенсивность обслуживания потока заявок - . Длительность обслуживания потока заявок представляет собой случайную величину с одним и тем же распределением вероятностей F (t).
, (1)
где 0 - постоянная.
Плотность распределения показательного закона задается формулой:
где >0, - интенсивность обслуживания потока заявок.
Изобразим граф состояний заданной СМО:
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Схема 1 - граф состояний заданной СМО в котором:
S0 - все каналы свободны (система свободна);
S1 - занят один канал;
S2 - занято два канала;
S3 - занято три канала;
S4 - все каналы заняты (система занята).
Из свободного состояния в состояние обслуживания, систему переводит поток заявок с интенсивностью л. Тогда как освобождение каналов от обслуживания происходит по такому принципу:
Из состояния Sn в состояние Sn-1 , систему переводит интенсивность потока n*м.
Если заявка поступает в момент времени, когда система свободна или свободен хотя бы один канал обслуживания, то она немедленно поступает на обслуживание. Если же все каналы заняты, то заявка покидает систему.
1.2.3 ВЫВОД ОСНОВНЫХ ФОРМУЛ
Среднее время поступления заявок в систему:
tпост. = 1/л
Данный параметр является интервалом времени, из которого генерируется появление заявки.
Среднее время (интервал) обслуживания одной заявки одним каналом:
tобс. = 1/м
Для того чтобы узнать какое количество заявок поступит в систему за время обслуживания одной заявки, необходимо:
с = л/м
с - приведенная интенсивность или коэффициент загрузки системы.
Составим уравнения Колмогорова для данной системы:
,
,
Уравнения называться уравнениями Эрланга, в которых начальными условиями, для их решения, являются:
р0(0)=1;
р1(0)= р2(0)= р3(0)=…= рn(0)=0,
т.е. в начальный момент времени - система свободна.
Рассмотрим предельные вероятности состояний P0, P1, P2,…, Pn, которые характеризуют установившийся режим работы СМО при t - > ?.
Р1= * P0;
Р2= * P0;
Р3= * P0;
Р4= * P0;
Р0 =
Зная все вероятности системы, можно найти характеристики СМО:
Вероятность отказа:
Ротк = Р4 - т.е. все каналы заняты
Относительная пропускная способность:
q = 1 - Ротк
Абсолютная пропускная способность:
А = л*q
Важной характеристикой СМО с отказами, является среднее число занятых каналов (в данном случае оно совпадает со средним числом заявок, находящихся в системе):
k = 0*Р0+1*Р1+2*Р2+3*Р3+4*Р4 ,
или
k = А/м
2. ДЕТАЛЬНОЕ ОПИСАНИЕ ПРОГРАММЫ
Данная программа написана в среде разработки Visual C# с использованием визуальных компонентов управления.
Результирующая программа СМО.exe является полностью законченным программным продуктом. Для ее нормальной работы необходимы следующие условия:
- IBM совместимый компьютер с процессором старше 386 серии;
- Операционная система Windows `98 и выше;
-Монитор класса VGA;
2.1 ПРИНЦИП ОРГАНИЗАЦИИ ПРОГРАММЫ
Рисунок 1- программа в рабочем состоянии
Данная программа (Рисунок 1) является универсальной для данного типа задач.
Для удобства управления, введения данных, просмотра результатов, присутствует графическая часть (формы, кнопки, поля ввода, поля вывода результатов и т.п.).
Работа программы начинается с формы введения данных.
После того как данные введены, необходимо нажать на кнопку «Пуск», на форме программы, для запуска работы основной части программы.
Для просмотра отчета необходимо нажать на кнопку «Отчет», после чего появиться форма результатов работы программы с рассчитанными характеристиками СМО.
Основные переменные в программе, являются глобальными переменными. После того как пользователь ввел все необходимые данные в основном окне программы, переменным присваиваются введенные характеристики СМО.
3. РЕЗУЛЬТАТЫ ИСПЫТАНИЯ ПРОГРАММЫ
Входящие данные:
Интенсивность входящего потока заявок: л = 18 заявок в единицу времени
Интенсивность обслуживания канала: м = 5 заявок в единицу времени
Количество каналов обслуживания: n = 4 канала
Точность: е = 0,01
РЕЗУЛЬТАТ РАСЧЕТА ТЕСТОВОЙ ЗАДАЧИ
Таблица 1 - Результат расчета
Аналитический расчет |
Программа |
||
с (коэф. нагрузки) |
3,6 |
4,5 |
|
Ротказа |
27 % |
35,96 % |
|
q (отн. пропускная способн.) |
0,73 |
0,64 |
|
A (абс. пропускная способн.) |
13,14 |
10,89 |
|
k (ср.число занятых каналов) |
2,63 |
2,9 |
Полученные результаты отличаются, т.к. аналитический расчет проводился с константными данными без имитационного процесса, тогда как в процессе работы программы данные были динамическими, т.к. создавалась имитация работы системы.
4. РЕЗУЛЬТАТЫ ИССЛЕДОВАНИЯ И ИХ АНАЛИЗ
После ознакомления с программой и инструкцией пользователя, можно приступить непосредственно к проведению экспериментов и исследований. Их целью может служить, например, сравнение параметров системы при распределении Пуассона и равномерном распределении, можно определить при каких значениях интенсивностей, числе каналов и мест в очереди, параметры будут приблизительно равны. Мною замечено, что они тем меньше отличаются, чем интенсивность обслуживания больше интенсивности поступления заявок. Также возможно исследование загруженности каналов с целью поиска оптимального числа каналов и мест в очереди для дальнейшего применения в сфере обслуживания.
ВЫВОДЫ
Таким образом, поставленная задача о создании программы, позволяющей смоделировать многоканальную систему массового обслуживания с ограниченной длиной очереди, решена. Созданная программа позволяет произвести расчет таких параметров системы как:
· вероятности состояний Pi;
· вероятность Ps
· среднее число заявок в системе Ns
· среднее число заявок в очереди Qоч.
при заданных начальных условиях :
· число каналов обслуживания n ;
· интенсивность поступления заявок ;
· интенсивность обслуживания ;
· параметр распределения случайного времени ожидания;
· визуально проследить работу системы и сравнить теоретические и практические результаты расчетов.
ПРИЛОЖЕНИЕ А. ЛИСТИНГ ПРОГРАММЫ
WorkForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CMO
{
public partial class WorkForm : Form
{
private int InOrders;
private int ServiceOrders;
private int NumOfChannels;
private double Precision = 0;
private double OrderInterval;
private double ChannelInterval;
private int TotalTime;
private double CmoTime;
private ulong NumOfOrders = 0;
private ulong ServedOrders;
private int CmoPosition;
private int[] ChannelBusy;
private double[] ServiceTimeOfChannel;
private Random rand = new Random();
// функция которая преобразовывает точность для дальнейшего использования в программе и функциях
private int Precition(double e)
{
int Tochnost = 0;
if (e == 0.1)
Tochnost = 10;
if (e == 0.01)
Tochnost = 100;
if (e == 0.001)
Tochnost = 1000;
return Tochnost;
}
// Число знаков для округления исходя из точности
private int ChisloZnakov(double Prec)
{
int a = 0;
if (Prec == 0.1)
a = 1;
if (Prec == 0.01)
a = 2;
if (Prec == 0.001)
a = 3;
return a;
}
// функция которая возвращает интервал времени между заявками, либо интер. времени обслуж. канала
private double OrdersInterval(int NumOfOrders, double Tochnost)
{
int CelayaChast;
double Ostatok;
CelayaChast = Precition(Tochnost) / NumOfOrders;
Ostatok = (Precition(Tochnost) / (double)NumOfOrders - CelayaChast) * 10;
if (Ostatok >= 5)
CelayaChast++;
return (double)(CelayaChast / (double)Precition(Tochnost));
}
// генератор моментов времени
private double TimeGenerator(bool FirstOrder, double Interval, double Tochnost)
{
double NewTime;
int GenerationInterval = (int)(Interval * Precition(Tochnost) + 1);
// только если это не первая заявка
if (!FirstOrder)
{
// исключение генерации нуля => повторяющееся время
do
{
NewTime = (double)(rand.Next() % GenerationInterval) / Precition(Tochnost);
} while (NewTime == 0);
}
else
NewTime = (double)(rand.Next() % GenerationInterval) / Precition(Tochnost);
return Math.Round(NewTime,ChisloZnakov(Tochnost));
}
// проверяет наличие новой заявки
private bool NewOrder(double TimeOfCmo, double IntervalOfOrder, ulong NumberOfOrders)
{
if (TimeOfCmo >= IntervalOfOrder * (NumberOfOrders))
{
return true;
}
else return false;
}
// проверка системы в текущий момент времени
private void CmoCheck(int TotalTime, double CmoTime, int NumOfChannels)
{
int i = 0;
if (CmoPosition != 0)
{
while (i < NumOfChannels)
{
if (ChannelBusy[i] == 1)
{
if (((ServiceTimeOfChannel[i] <= CmoTime) && (CmoTime <= TotalTime)) || ((CmoTime > TotalTime) && (ServiceTimeOfChannel[i] <= TotalTime)))
{
ChannelBusy[i] = 0;
ServiceTimeOfChannel[i] = 0;
CmoPosition--;
richTextBox1.Text += (i + 1).ToString() + "-й канал обслужил заявку" + "\n";
ServedOrders++;
}
}
i++;
}
}
}
// запись заявок в каналы и генерация времени обслуживания в канале + окончание обслуживания
private void CmoWork(double CmoTime, int NumOfChannels, double ChannelInterval, double e)
{
double ChannelWorkTime;
int i = 0;
// если система свободна, то запись осуществляется в первый канал
if (CmoPosition == 0)
{
ChannelBusy[0] = 1;
ChannelWorkTime = TimeGenerator(false, ChannelInterval, e);
ServiceTimeOfChannel[0] = CmoTime + ChannelWorkTime;
CmoPosition++;
InfoOrder(CmoTime, 0, ChannelWorkTime);
}
else // иначе, идет запись в первый свободный канал
{
if (CmoPosition != NumOfChannels)
{
while (i < NumOfChannels)
{
if (ChannelBusy[i] == 0)
{
ChannelBusy[i] = 1;
ChannelWorkTime = TimeGenerator(false, ChannelInterval, e);
ServiceTimeOfChannel[i] = CmoTime + ChannelWorkTime;
CmoPosition++;
InfoOrder(CmoTime, i, ChannelWorkTime);
break;
}
i++;
}
}
else
{
richTextBox1.Text += "Заявка не может быть принята на обслуживание - КАНАЛЫ ЗАНЯТЫ" + "\n";
richTextBox1.Text += "Состояние СМО: " + CmoPosition.ToString() + "\n";
for (i = 0; i < NumOfChannels; i++)
{
richTextBox1.Text += "Состояние " + (i + 1).ToString() + "-го канала : " + Convert.ToString(ChannelBusy[i]) + "\n";
richTextBox1.Text += "Время окончания обслуживания в " + (i + 1).ToString() + " канале: " + Convert.ToString(ServiceTimeOfChannel[i]) + "\n";
}
}
}
}
// информация о поступившей заявке
private void Info(double CmoTime, ulong NumOfOrders)
{
richTextBox1.Text += "Время поступления " + NumOfOrders.ToString() + "-й заявки: " + CmoTime.ToString() + "\n";
}
private void InfoOrder(double CmoTime, int Index, double TimeOfChannel)
{
richTextBox1.Text += "Заявка принята на обслуживание: " + CmoTime.ToString() + " в " + (Index + 1).ToString() + "-й канал" + "\n";
richTextBox1.Text += "Время обслуживания заявки в канале: " + TimeOfChannel.ToString() + "\n";
richTextBox1.Text += "Время окончания обслуживания: " + ServiceTimeOfChannel[Index].ToString() + "\n";
}
// конструктор формы
public WorkForm()
{
InitializeComponent();
}
private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
// ПУСК
private void btnStart_Click(object sender, EventArgs e)
{
// Считывание данных
if (TBoxOrders.Text != "" && TBoxOrderService.Text != "" && TBoxChannels.Text != "" && comboBoxPrecision.Text != "" && TBoxCmoWork.Text != "")
{
this.Enabled = false;
InOrders = Convert.ToInt32(TBoxOrders.Text);
ServiceOrders = Convert.ToInt32(TBoxOrderService.Text);
NumOfChannels = Convert.ToInt32(TBoxChannels.Text);
Precision = Convert.ToDouble(comboBoxPrecision.SelectedItem.ToString());
richTextBox1.Text = "";
int i = 0;
// установление размерности массивов
ChannelBusy = new int[NumOfChannels];
ServiceTimeOfChannel = new double[NumOfChannels];
TotalTime = Convert.ToInt32(TBoxCmoWork.Text);
// Перевод системы в первоначальное состояние (обнуление всех переменных)
CmoTime = 0;
CmoPosition = 0;
NumOfOrders = 0;
ServedOrders = 0;
while (i <= NumOfChannels - 1)
{
ChannelBusy[i] = 0;
ServiceTimeOfChannel[i] = 0;
i++;
}
// Генерация поступления первой заявки
CmoTime = TimeGenerator(true, OrderInterval, Precision);
richTextBox1.Text += "\n" + "-----------------------" + "\n";
richTextBox1.Text += "Текущее время СМО :" + CmoTime.ToString();
richTextBox1.Text += "\n" + "-----------------------" + "\n";
NumOfOrders++;
Info(CmoTime, NumOfOrders);
CmoCheck(TotalTime, CmoTime, NumOfChannels);
CmoWork(CmoTime, NumOfChannels, ChannelInterval, Precision);
// Последующая работа системы
do
{
// Генерация следующих моментов времени СМО
CmoTime = Math.Round((CmoTime + TimeGenerator(false, OrderInterval, Precision)),ChisloZnakov(Precision));
richTextBox1.Text += "\n" + "-----------------------" + "\n";
richTextBox1.Text += "Текущее время СМО :" + CmoTime.ToString();
richTextBox1.Text += "\n" + "-----------------------" + "\n";
// Проверка системы в текущий момент времени
CmoCheck(TotalTime, CmoTime, NumOfChannels);
// Появление новой заявки
if ((NewOrder(CmoTime, OrderInterval, NumOfOrders)) && (CmoTime <= TotalTime))
{
NumOfOrders++;
Info(CmoTime, NumOfOrders);
CmoWork(CmoTime, NumOfChannels, ChannelInterval, Precision);
}
} while (CmoTime < TotalTime);
richTextBox1.Text += "Количество поступивших заявок: " + NumOfOrders.ToString() + "\n";
richTextBox1.Text += "Количество обслуженных заявок: " + ServedOrders.ToString() + "\n";
this.Enabled = true;
this.Focus();
btnResult.Enabled = true;
}
else MessageBox.Show("Все поля обязательны для заполнения!");
}
// проверка вводимых значений
private bool Check(string Txt)
{
try
{
Convert.ToInt32(Txt);
}
catch (Exception)
{
MessageBox.Show("Вводимое значение должно быть целым числом");
return false;
}
return true;
}
// ввод входящего потока
private void TBoxOrders_TextChanged(object sender, EventArgs e)
{
TBoxOrderService.Enabled = true;
}
// ввод интенсивности обслуживания
private void TBoxOrderService_TextChanged(object sender, EventArgs e)
{
TBoxChannels.Enabled = true;
}
// ввод количества каналов
private void TBoxChannels_TextChanged(object sender, EventArgs e)
{
TBoxCmoWork.Enabled = true;
}
// выбор точности
private void comboBoxPrecision_TextChanged(object sender, EventArgs e)
{
Precision = Convert.ToDouble(comboBoxPrecision.SelectedItem.ToString());
TBoxOrders.Enabled = true;
}
// завершение ввода входящего потока
private void TBoxOrders_Leave(object sender, EventArgs e)
{
if (TBoxOrders.Text != ""&&(btnExit.ContainsFocus==false))
{
if (Check(TBoxOrders.Text))
{
InOrders = Convert.ToInt32(TBoxOrders.Text);
OrderInterval = OrdersInterval(InOrders, Precision);
labelOrdersInterval.Text = OrderInterval.ToString()+" ед.вр.";
}
else TBoxOrders.Focus();
}
}
// завершение ввода интенсивности обслуживания
private void TBoxOrderService_Leave(object sender, EventArgs e)
{
if (TBoxOrderService.Text != "" && (btnExit.ContainsFocus == false))
{
if (Check(TBoxOrderService.Text))
{
ServiceOrders = Convert.ToInt32(TBoxOrderService.Text);
ChannelInterval = OrdersInterval(ServiceOrders, Precision);
labelChannelInterval.Text = ChannelInterval.ToString() + " ед.вр.";
}
else TBoxOrderService.Focus();
}
}
// завершение ввода количества каналов
private void TBoxChannels_Leave(object sender, EventArgs e)
{
if (TBoxChannels.Text != "" && (btnExit.ContainsFocus == false))
{
if (Check(TBoxChannels.Text))
{
NumOfChannels = Convert.ToInt32(TBoxChannels.Text);
}
else TBoxChannels.Focus();
}
}
// ОТЧЕТ
private void btnResult_Click(object sender, EventArgs e)
{
ResultForm FResult = new ResultForm(this,NumOfChannels,Precision,TotalTime,NumOfOrders,ServedOrders);
FResult.Show();
}
private void WorkForm_Load(object sender, EventArgs e)
{
btnResult.Enabled = false;
}
}
}
ResultForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CMO
{
public partial class ResultForm : Form
{
private Form MForm;
private double inOrders;
private double ordersInService;
private int numOfChannels;
private double precision;
private double ordersInterval;
private double channelsInterval;
private int workTime;
private ulong totalInOrders;
private ulong servedOrders;
//------------------------
private double koefNagruzki;
private double otkaz;
private double otnSposob;
private double absolSposob;
private double zanyatKanaly;
private double Po;
//------------------------
public ResultForm(Form MainF, int NumChan,double Prec, int TotTime,ulong TotOrd,ulong ServOrd)
{
this.MForm = MainF;
numOfChannels = NumChan;
precision = Prec;
workTime = TotTime;
totalInOrders = TotOrd;
servedOrders = ServOrd;
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MForm.Enabled = true;
ResultForm.ActiveForm.Close();
}
private void ResultForm_Load(object sender, EventArgs e)
{
int i = 0;
double[] P=new double[numOfChannels+1];
dataGridView1.ColumnCount=numOfChannels+1;
string[] row = new string[numOfChannels + 1];
MForm.Enabled = false;
// Расчеты
// Расчет ср. числа потупивших заявок в ед. времени (Лямда)
// Расчет ср. числа обслужваемых заявок одним каналом (Мю)
ordersInService = (servedOrders / (double)workTime) / (double)numOfChannels;
// Расчет ср. интервала времени между поступл. заявок
ordersInterval = 1 / inOrders;
// Расчет срю интервала времени обслуживания канала
channelsInterval = 1 / ordersInService;
// Коеффициент загрузки
koefNagruzki = inOrders / ordersInService;
// Р0
Po = 1 / (1 + Sum(koefNagruzki, numOfChannels));
// Вероятность отказа
otkaz = ((Stepen(koefNagruzki, numOfChannels) / Factor(numOfChannels)) * Po);
// Относительная пропускная способность
otnSposob = 1 - otkaz;
// Абсолютная пропускная способность
absolSposob = (totalInOrders / (double)workTime) * otnSposob;
// Число занятых каналов
zanyatKanaly = absolSposob / (double)((servedOrders / (double)workTime) / (double)numOfChannels);
// Вывод на форму
labelInOrders.Text = Math.Round(inOrders,ChisloZnakov(precision)).ToString()+" заявок в ед.вр.";
labelServiceOrders.Text = Math.Round(ordersInService, ChisloZnakov(precision)).ToString() + " заявок в ед.вр.";
labelNumOfChannels.Text = numOfChannels.ToString();
labelPrecision.Text = precision.ToString();
labelOrdersInterval.Text = Math.Round(ordersInterval, ChisloZnakov(precision)).ToString() + " ед.вр.";
labelChannelsInterval.Text = Math.Round(channelsInterval, ChisloZnakov(precision)).ToString() + " ед.вр.";
labelWorkTime.Text = workTime.ToString() + " ед.вр.";
labelTotalOrders.Text = totalInOrders.ToString() + " заявок";
labelServedOrders.Text = servedOrders.ToString() + " заявок";
labelZagruzka.Text = Math.Round(koefNagruzki, ChisloZnakov(precision)).ToString() + " заявок";
labelOtkaz.Text = (Math.Round(otkaz * 100, ChisloZnakov(precision))).ToString() + " %";
labelOtnPropusk.Text = (Math.Round(otnSposob * 100, ChisloZnakov(precision))).ToString() + " %";
labelAbsPropusk.Text = (Math.Round(absolSposob, ChisloZnakov(precision))).ToString() + " заявок";
labelZanChannels.Text = (Math.Round(zanyatKanaly,ChisloZnakov(precision))).ToString();
// Вероятности состояния системы
while (i <= numOfChannels)
{
if (i == 0)
{
P[i] = Po; dataGridView1.Columns[i].Name = "P" + i.ToString();
row[i] = Math.Round(P[i] * 100, ChisloZnakov(precision)).ToString() + " %";
}
else
{
P[i] = (Stepen(koefNagruzki, i) / Factor(i)) * Po;
dataGridView1.Columns[i].Name = "P" + i.ToString();
row[i] = Math.Round(P[i] * 100, ChisloZnakov(precision)).ToString() + " %";
}
i++;
}
dataGridView1.Rows.Add(row);
}
// Сумма в знаменателе для расчета Ро
private double Sum(double ro, int numChan)
{
double summa = 0;
int n=1;
while (n <= numChan)
{
summa = summa + Stepen(ro,n) / (double)Factor(n);
n++;
}
return summa;
}
// Факториал
private ulong Factor(int num)
{
ulong factor = 1;
int n=0;
while (n <= num)
{
if ((n == 0) || (n == 1))
return 1;
else
factor = factor * (ulong)n;
n++;
}
return factor;
}
// Возведение в степень
private double Stepen(double X, int step)
{
int n=1;
double result=X;
if (X == 0)
return 0;
if (X == 1)
return 1;
if (step == 1)
return X;
if (step == 0)
return 1;
while (n <= step)
{
if (n>1)
result = result * X;
n++;
}
return result;
}
// Число знаков после запятой для округления
private int ChisloZnakov(double Prec)
{
int a=0;
if (Prec == 0.1)
a = 1;
if (Prec == 0.01)
a = 2;
if (Prec == 0.001)
a = 3;
return a;
}
}
}
Размещено на Allbest.ru
...Подобные документы
Общая характеристика системы массового обслуживания, исходные данные для ее создания. Особенности построения алгоритма имитационной модели задачи о поступлении заявок (клиентов) в канал (парикмахерскую). Описание функционирования математической модели.
курсовая работа [154,1 K], добавлен 19.05.2011Изучение понятия многофазовых систем. Рассмотрение примеров разомкнутых и замкнутых систем массового обслуживания с ожиданием и с неограниченным потоком заявок. Определение значений среднего времени ожидания заявки при неэкспоненциальном распределении.
контрольная работа [151,5 K], добавлен 16.09.2010Функционирование систем массового обслуживания с разными типами заявок. Построение математической модели, постановка задачи оптимизации среднего времени ожидания. Решение задачи оптимизации системы. Разработка программного кода для оптимизации системы.
дипломная работа [581,7 K], добавлен 27.10.2017Технология разработки и тестирования программного обеспечения в среде Visual Studio на примере создания программы моделирования систем массового обслуживания. Аналитические и имитационные методы моделирования с разными дисциплинами обслуживания заявок.
дипломная работа [1,1 M], добавлен 09.09.2012Программа, моделирующая систему массового обслуживания (СМО). Моделирование программы имитации работы турникетов на стадионе (многоканальная СМО) в визуальной среде Delphi 7. Описание программного модуля, листинг программы и руководство пользователя.
курсовая работа [3,8 M], добавлен 20.08.2009Характеристика системы массового обслуживания, куда поступают заявки обслуживания. Особенности моделирования системы массового обслуживания. Имитация работы системы массового обслуживания с относительными приоритетами. Отчеты полного факторного плана.
курсовая работа [1,1 M], добавлен 14.07.2012Системы, описывающие массовое обслуживание. Разработка системы массового обслуживания для магазинов. Постановка в очередь, порядок обслуживания, выбывание из очереди, периодичность попадания в нее. Описание программного модуля, листинг программы.
курсовая работа [171,8 K], добавлен 20.01.2010Определение назначения и описание функций имитационных моделей стохастических процессов систем массового обслуживания. Разработка модели описанной системы в виде Q-схемы и программы на языке GPSS и C#. Основные показатели работы имитационной модели.
курсовая работа [487,4 K], добавлен 18.12.2014Методика системного исследования реальной динамической сложной системы посредством разработки ее имитационной модели. Разработка программы реализации алгоритма имитационного моделирования системы массового обслуживания "Интернет-провайдерская фирма".
курсовая работа [2,0 M], добавлен 20.01.2010Рассмотрение управляемых марковских процессов с дисконтированием. Изучение систем массового обслуживания. Алгоритм метода анализа систем с групповым поступлением требований и управлением входящим потоком. Описание программы, реализующая алгоритм метода.
дипломная работа [1,3 M], добавлен 08.07.2014Программа, моделирующая систему массового обслуживания. Изучение режима функционирования обслуживающей системы и исследование явлений, возникающих в процессе обслуживания. Описание программного модуля, руководство пользователя для работы с программой.
курсовая работа [277,5 K], добавлен 20.01.2010Система массового обслуживания как одна из основных моделей, используемых инженерами-системотехниками, примеры: телефонные станции, ремонтные мастерские, билетные кассы. Характеристика и особенности многоканальной системы массового обслуживания.
контрольная работа [404,2 K], добавлен 19.11.2012Определение функциональных характеристик систем массового обслуживания (СМО) на основе имитационного моделирования; синтез СМО с заданными характеристиками. Разработка программы на языке SIMNET II; расчет процесса работы СМО; подбор требуемого параметра.
лабораторная работа [623,8 K], добавлен 11.03.2011Функционирование систем массового обслуживания с разными типами заявок. Построение математической модели. Постановка задачи оптимизации среднего времени ожидания. Решение задачи оптимизации и разработка программного кода для оптимизации системы.
курсовая работа [538,5 K], добавлен 11.08.2017Характеристика теоретических основ систем массового обслуживания и их структура функционирования. Анализ СМО на примере заказа такси. Сущность стохастического процесса смены дискретных состояний в непрерывном времени в форме моделирующего алгоритма.
дипломная работа [1,0 M], добавлен 28.06.2014Моделирование дневного стационара - многоканальной системы массового обслуживания с ожиданием. Определение оптимального числа койко-мест для данного количества клиентов. Практическое решение задачи с помощью программы, реализованной в среде Delphi 7.
курсовая работа [1,9 M], добавлен 15.01.2010Основные направления в численном анализе ТМО. Системы массового обслуживания, поведение которых описывается марковскими процессами при некотором расширении пространства состояний. Метод имитационного моделирования для исследования произвольных СМО.
учебное пособие [785,1 K], добавлен 12.10.2010Построение имитационной модели системы массового обслуживания, список и содержание ее активностей. Блок-схема алгоритма моделирования и текст процедуры. Моделирование случайных независимых величин и процессов. Оптимизация системы массового обслуживания.
курсовая работа [4,0 M], добавлен 28.05.2013Основное назначение систем массового обслуживания (СМО): обслуживание потока заявок. Моделирование СМО для стоянки такси, определение характеристик эффективности работы в качестве статистических результатов моделирования. Схема процесса функционирования.
курсовая работа [1,2 M], добавлен 27.12.2011Определение характеристик системы массового обслуживания – вероятность обслуживания заявки, занятости любого канала системы, среднее число занятых каналов. Описание блок-схемы алгоритма. Разработка имитационной и аналитической моделей и их сравнение.
курсовая работа [860,4 K], добавлен 24.12.2013