Моделирование системы массового обслуживания

 















Курсовая работа

Моделирование системы массового обслуживания



Содержание


Введение

. Анализ технического задания

. Разработка модели системы

.1 На языке GPSS

.2 На языке высокого уровня

. Симуляция

Заключение

Список литературы



Введение


Процессы функционирования различных систем и сетей связи могут быть представлены той или иной совокупностью систем массового обслуживания (СМО) - стохастических, динамических, дискретно-непрерывных математических моделей. Исследование характеристик таких моделей может проводиться либо аналитическими методами, либо путем имитационного моделирования.

Имитационная модель отображает стохастический процесс смены дискретных состояний СМО в непрерывном времени в форме моделирующего алгоритма. При его реализации на ЭВМ производится накопление статистических данных по тем атрибутам модели, характеристики которых являются предметом исследований. По окончании моделирования накопленная статистика обрабатывается, и результаты моделирования получаются в виде выборочных распределений исследуемых величин или их выборочных моментов. Таким образом, при имитационном моделировании систем массового обслуживания речь всегда идет о статистическом имитационном моделировании.

Сложные функции моделирующего алгоритма могут быть реализованы средствами универсальных языков программирования, что предоставляет неограниченные возможности в разработке, отладке и использовании модели. Однако подобная гибкость приобретается ценой больших усилий, затрачиваемых на разработку и программирование весьма сложных моделирующих алгоритмов, оперирующих со списковыми структурами данных. Альтернативой этому является использование специализированных языков имитационного моделирования.

Одним из наиболее эффективных и распространенных языков моделирования сложных дискретных систем является в настоящее время язык GPSS (General Purpose Simulation System). Он может быть с наибольшим успехом использован для моделирования систем, формализуемых в виде систем массового обслуживания. В качестве объектов языка используются аналоги таких стандартных компонентов СМО, как заявки, обслуживающие приборы, очереди и т.п. Достаточный набор подобных компонентов позволяет конструировать сложные имитационные модели, сохраняя привычную терминологию СМО.



1. Анализ технического задания


В курсовом проекте требуется разработать имитационную модель системы массового облуживания:

Система обработки информации содержит мультиплексный канал и три миниЭВМ. Сигналы от датчиков поступают на вход канала через интервалы времени 10+-5 мкс. В канале они буферизуются и предварительно обрабатываются в течении 10+-3 мкс. Затем они поступают на обработку в ту миниЭВМ, где имеется наименьшая по длине входная очередь. Емкости входных накопителей во всех миниЭВМ рассчитаны на хранение величин 10 сигналов. Время обработки сигнала в любой миниЭВМ равно 33 мкс.

Разработать модель описанной системы в виде Q-схемы и программу на языке GPSS и C#.

Задание разделено на 3 части: разработка Q-схемы, разработка модели системы на языке GPSS и разработка на языке С#.

Одним из основных подходов, используемых при построении математических моделей процессов функционирования систем, является непрерывно-стохастический подход. Особенности этого подхода выражаются в использовании в качестве типовых математических схем систем массового обслуживания, называемых Q-схемами.

Схемы массового обслуживания представляют собой класс математических схем, разработанных в теории массового обслуживания и различных приложениях для формализации процессов функционирования систем, которые по сути своей являются процессами обслуживания.

Задачи массового обслуживания возникают в тех случаях, когда условия на выполнение работы поступают в случайные моменты времени, а выполнение этих работ, называемые обслуживанием, осуществляется одним или несколькими обслуживающими устройствами. Длительность выполнения отдельных требований предполагается случайной. В любом элементарном акте обслуживания можно выделить две основные составляющие: ожидание обслуживания заявки и собственно обслуживание заявки.

Характерной особенностью задач массового обслуживания является возникновение несоответствия между скоростью поступления требований и скоростью обслуживания, в результате чего или оказываются простаивающими обслуживаемые приборы или образуется очередь на обслуживание.

Проанализировав задание, можно выделить следующие свойства решаемой системы распределения ресурсов:

рассматриваемая система имеет один мультиплексный канал и три миниЭВМ;

сигналы буферизуются в канале и предварительно обрабатываются, и лишь затем поступают на обработку в ту миниЭВМ, где наименьшая по длине входная очередь.

время поступления на вход и время предварительной обработки сигналов в канале заданы случайно;

время обработки сигнала в любой миниЭВМ одинаковое.

если все емкости входных накопителей будут заняты, то система генерирует отказ.

Все эти свойства системы с легкостью можно перенести на модель, написанную на языке С# или же на языке GPSS.

GPSS - Один из наиболее эффективных и распространенных языков моделирования сложных дискретных систем. Он может быть с наибольшим успехом использован для моделирования систем, формализуемых в виде систем массового обслуживания. В качестве объектов языка используются аналоги таких стандартных компонентов СМО, как заявки, обслуживающие приборы, очереди и т.п. Достаточный набор подобных компонентов позволяет конструировать сложные имитационные модели, сохраняя привычную терминологию СМО. На персональных компьютерах язык GPSS реализован в рамках пакета прикладных программ GPSS/PC. Основной модуль пакета представляет собой интегрированную среду, включающую помимо транслятора со входного языка средства ввода и редактирования текста модели, ее отладки и наблюдения за процессом моделирования, графические средства отображения атрибутов модели, а также средства накопления результатов моделирования в базе данных и их статистической обработки. Кроме основного модуля в состав пакета входит модуль создания стандартного отчета GPSS/PC, а также ряд дополнительных модулей и файлов.

Для решения задачи так же используется язык программирования С#. Этот язык предоставляет гибкие и эффективные средства определения новых типов. Помимо этого, мы можем разделить программу на легко поддающие контролю части. Он обеспечивает полный набор операторов структурного программирования. Для реализации курсового проекта была выбрана среда программирования Microsoft Visual Studio 2013.



2. Разработка модели системы


При стохастическом подходе в качестве типовых математических схем применяется система массового обслуживания, которые называются Q-схемами. Системы массового обслуживания представляют собой класс математических схем, разработанных в теории массового обслуживания и различных приложениях для формализации процессов функционирования систем, которые по своей сути являются процессами обслуживания.

Q-схема модели системы представлена на рисунке 1. Q-схема является разомкнутой, т.к. выходной поток обслуженных заявок не может снова поступить на какой-либо элемент, т. е. обратная связь отсутствует.

Для задания Q-схемы необходимо описать алгоритмы ее функционирования, которые определяют набор правил поведения заявок в системе в различных ситуациях.


Рисунок 1 - Q-схема модели.


W - Входной сигнал

Y - Обработанный сигнал

X - Потерянный сигнал

K1 - Канал предварительного обслуживания

EVM1 - первая миниЭВМ

EVM2 - вторая миниЭВМ

EVM3 - третья миниЭВМ

ochK1 - очередь в канале предварительного обслуживания

ochEVM1 - очередь в первой миниЭВМ

ochEVM2 - очередь во второй миниЭВМ

ochEVM3 - очередь в третьей миниЭВМ


2.1 На языке GPSS


В данной курсовой работе для написания программы будет использован язык имитационного моделирования GPSS. Данный язык выбран, так как в моделях, написанных на этом языке можно учесть большое количество фактов и отказаться от многих ограничений и допущений. Ввод и вывод имитационной модели будем производить в редакторе языка GPSS, все сохраненные файлы будут храниться также в редакторе.

Сигнал поступает на вход мультиплексного канала (K1) через интервалы времени 10+-5 мкс (GENERATE 10,5). В канале он буферизуется (ochK1) и предварительно обрабатывается в течении 10+-3 мкс (ADVANCE 10,3). Затем он поступает на обработку в ту миниЭВМ, где имеется наименьшая по длине входная очередь (mt3 TEST LE V$aa,V$ba,mt1, TEST LE V$aa,V$caa,mt1). Емкости входных накопителей рассчитаны на хранение величин 10 сигналов (ochEVM STORAGE 10), где ochEVM STORAGE - накопитель одной из трех миниЭВМ. Если поступит сигнал, и все накопители будут заняты (TEST L V$daa,30,metk1), то сигнал будет потерян (metk1 QUEUE otk). Время обработки сигнала в любой миниЭВМ равно 33 мкс (ADVANCE 33,0). Операторы языка GPSS используемые в работе:

- GENERATE A, B- вводит транзакты в модель. Вводит транзакты в модель, посылая их в следующий по порядку блок. Если в поле В не указана функция, то интервал между поступлением транзактов определяется случайным числом, равномерно распределенным в диапазоне от (А - В) до (А + В).

QUEUE А, В - помещает транзакт в конец бесконечной очереди. Увеличивает текущее содержимое очереди, указанной в поле А, на значение в поле В. Если поле В не определено, увеличивает содержимое очереди на единицу. Транзакт может находиться в двух различных очередях одновременно.

DEPART А, В - удаляет транзакт из бесконечной очереди. Удаляет текущий транзакт из очереди, указанной в поле А, и уменьшает содержимое очереди на значение поля В. Транзакт может находиться одновременно в двух различных очередях.

SEIZE А- занимает устройство. Транзакт пытается занять устройство, определенное полем А. Если прервано, транзакт задерживается в предыдущем блоке.

RELEASE А- освобождает устройство. Устройство, указанное в поле А, освобождается и становится доступным для других транзактов. Освобождать устройство должен тот же транзакт, который его занимал.

ADVANCE А, В - задерживает транзакт. Блок ADVANCE моделирует временную задержку транзакта в течение определенного интервала. Значение задержки по умолчанию равно нулю. Время задержки является случайным числом, распределенным равномерно на интервале от (А + В) до (А - В).

START А- управление процессом моделирования.

TERMINATE А- служит для удаления транзактов из модели. А - указывает, на сколько единиц уменьшается содержимое счётчика завершений при входе транзакта в данный блок TERMINATE. Если поле А не определено, то оно считается равным 0 и транзакты, проходящие через такой блок, не уменьшают содержимого счётчика завершений.

STORAGE A - объявляем многоканальное устройство

ENTER A- занятие многоканального устройства

- LEAVE A- освобождение многоканального устройства

TEST - перемещает транзакт согласно сравнению

·G - больше;

·GE - больше или равно;

·L - меньше;

·LE - меньше или равно;

·E - равно;

·NE - не равно.

А и В - сравниваемые величины.

Также в программу ведены переменные, для отслеживания занятости очередей:

aa VARIABLE Q$och1VARIABLE Q$och2VARIABLE Q$och3

daa VARIABLE Q$och3+Q$och2+Q$och1

Текст разработанной модели системы на языке GPSS:

ochEVM1 STORAGE 10;объявление очереди ochEVM1 емкостью 10STORAGE 10;объявление очереди ochEVM2 емкостью 10STORAGE 10;объявление очереди ochEVM3 емкостью 10VARIABLE S$ochEVM1 ;длина очереди в ochEVM1 VARIABLE S$ochEVM2;длина очереди в ochEVM2 VARIABLE S$ochEVM3;длина очереди в ochEVM3 VARIABLE S$ochEVM1 +S$ochEVM2+S$ochEVM3 ;общая длина очередей10,5;генерация сигналовvrem;вход в очередь статистикиochK1;очередь канала предварительного обслуживанияK1;занятие канала предварительного обслуживанияochK1;освобождение очереди канала предварительного обслуживания10,3;задержка в каналеK1;освобождение канала предварительного обслуживанияL V$daa,30,metk1 ;проверка - суммарная очередь меньше 30TEST LE V$aa,V$ba,mt1;проверка - поиск самой короткой очередиLE V$aa,V$caa,mt1 ;проверка - поиск самой короткой очередиochEVM1;вход в очередь ЭВМ1EVM1;занятие ЭВМ1ochEVM1;освобождение очереди в ЭВМ133,0;задержка в ЭВМ1EVM1;освобождение ЭВМ1,met2;безусловный переходTEST LE V$ba,V$aa,mt2;проверка - поиск самой короткой очередиLE V$ba,V$caa,mt2 ;проверка - поиск самой короткой очередиochEVM2;вход в очередь ЭВМ2EVM2;занятие ЭВМ2ochEVM2;освобождение очереди в ЭВМ233,0;задержка в ЭВМ2EVM2;освобождение ЭВМ2,met2;безусловный переходTEST LE V$caa,V$ba,mt3;проверка - поиск самой короткой очередиLE V$caa,V$aa,mt3 ;проверка - поиск самой короткой очередиochEVM3;вход в очередь ЭВМ3EVM3;занятие ЭВМ3ochEVM3;освобождение очереди в ЭВМ333,0;задержка в ЭВМ3EVM3;освобождение ЭВМ3DEPART vrem ;освобождение очереди сбора статистики1 ;вывод сигнала из системыQUEUE otk;очередь отказовotk ;освобождение очереди отказов1;вывод потерянного сигнал из системы

START 500 ;моделировать 500 раз


2.2 На языке высокого уровня


Язык программирования высокого уровня С# поддерживает объектно-ориентированное программирование (ООП), а используя средства ООП можно легко создать имитационную модель СМО, представляя каждую подсистему СМО в виде отдельного класса. В свойствах класса можно хранить параметры подсистемы, а в методах - алгоритм её работы.

Для разработки модели системы будем использовать классы, экземпляры класса, методы и поля:

IM_Queue - класс для очередей канала предварительного обслуживания и трех миниЭВМ;

queueK1, queueEVM1, queueEVM2, queueEVM3 - экзепляры класса IM_Queue: очередь канала предварительного обслуживания, очередь миниЭВМ1, очередь миниЭВМ2, очередь миниЭВМ3;

Queue() - метод занесения сигнала в очередь;

Depart() - метод удаления сигнала из очереди;

Name - название очереди;

Number - номер очереди;

QueueSize - длина очереди;

IM_Device - класс для канала предварительного обслуживания и трех миниЭВМ;

K1, EVM1, EVM2, EVM3 - экземпляры класса IM_Device: канал предварительного обслуживания, миниЭВМ1, миниЭВМ2, миниЭВМ3;

Seize() - метод занятие устройства;

Release() - метод освобождения устройства;

Name - название устройства;

Number - номер устройства;

Free - занятость устройства;

IM_Event - класс для событий прихода и ухода сигнала;

IM_Event1 - класс, производный от класса IM_Event, для события поступления сигнала.

IM_Event2 - класс, производный от класса IM_Event, для события ухода сигнала из первой миниЭВМ;

IM_Event3 - класс, производный от класса IM_Event, для события ухода сигнала из второй миниЭВМ;

IM_Event4 - класс, производный от класса IM_Event, для события ухода сигнала из третьей миниЭВМ;

Name - имя события;

Type - тип события;

Time - время события;

IM_System - класс для реализации работы системы;

Init() - метод инициализации системы;

Synhronise() - метод синхронизации системы;

Generate_Interval_tgen(int time1, int time2) - метод планирования интервала time1+-time2 для генерации заявки;

Generate_Interval_tevm1(int time1, int time2) - метод планирования интервала time1+-time2 для обработки сигнала в канале предварительного обслуживания;

TestQueueK1() - метод для проверки сигналов в очереди канала предварительного обслуживания;

GoIn() - метод события поступления сигнала;

GoOut() - метод события ухода сигнала;

В проект включены следующие переменные:

tend - количество входных сигналов.

kol_Otkasov - количество потерянных сигналов.

Sim_Time - модельное время.

Tranzakt_Value - количество сигналов, попавших в систему.

Tranzakt_Process - количество обработанных сигналов.

timeReliaseK1 - время освобождения канала предварительного обслуживания.

tgen1, tgen2 - время генерации сигналов.

t1K1, t2K1 - время обработки в канале предварительного обслуживания.

t2EVM123 - время обработки в любой системе.

num_events - число событий в системе.

next_event_type - следующий тип события.

TimeObrVK1 - время обработки в канале предварительного обслуживания.

Текст программы разработанной модели системы:

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Collections;

namespace _Курсовой_проект_по_Моделированию

{

public partial class Form1 : Form

{Form1()

{();

}

//определяем класс ОчередьIM_Queue

{string Name; //названиеint Number; //номерint QueueSize; //длина очереди void Queue() //занесение транзакта в буфер

{++; //увеличиваем длину очереди

}void Depart() //удаление транзакта из буфера

{-; //уменьшаем длину очереди

}

}

//определяем класс Устройство

class IM_Device

{string Name; //названиеint Number; //номерbool Free; //true - свободно, false - занято

public void Seize() //занятие устройства

{= false;//устройство занято

}void Release()//удаление транзакта из устройства

{= true;//устройство свободно

}

}

//определяем класс Событие

class IM_Event

{string Name; //название событияint Type; //тип событияfloat Time; //время наступления событияIM_Event(string Name, int Type, float Time)

{.Name = Name;.Type = Type;.Time = Time;

}

}IM_Event1 : IM_Event//события для поступившей заявки

{IM_Event1(string Name, int Type, float Time)

: base(Name, Type, Time)

{ }

}IM_Event2 : IM_Event//событие для ухода заявки из первой миниЭВМ

{IM_Event2(string Name, int Type, float Time)

: base(Name, Type, Time)

{ }

}IM_Event3 : IM_Event//событие для ухода заявки из второй миниЭВМ

{IM_Event3(string Name, int Type, float Time)

: base(Name, Type, Time)

{

}

}IM_Event4 : IM_Event//событие для ухода заявки из третьей миниЭВМ

{IM_Event4(string Name, int Type, float Time)

: base(Name, Type, Time)

{

}

}

//определяем класс СистемаIM_System

{kol_Otkasov;IM_Event[] EventsArray = new IM_Event[4];float Sim_Time; //модельное время

public int Tranzakt_Value; //количество транзактов, попавших в системуint Tranzakt_Process; //количество обработанных транзактовfloat timeReleaseK1; //время освобождения канала int tgen1, tgen2; //время генерации заявок int tend; //количество входных заявокint t1K1, t2K1; //время обработки в канале предварительного обслуживанияint t2EVM123; //время обработки в любой миниЭВМint num_events; //число событий в системе

public int next_event_type; //следующий тип события

public int TimeObrVK1; //время обработки в канале

Random random = new Random();_Queue queueK1 = new IM_Queue { Name = "Очередь 1", Number = 1, QueueSize = 0 };_Queue queueEVM1 = new IM_Queue { Name = "Очередь EVM1", Number = 1, QueueSize = 0};_Queue queueEVM2 = new IM_Queue { Name = "Очередь EVM2", Number = 2, QueueSize = 0};_Queue queueEVM3 = new IM_Queue { Name = "Очередь EVM3", Number = 3, QueueSize = 0};_Device K1 = new IM_Device { Name = "Канал предварительного обслуживания", Number = 1, Free = true };//устройство свободно_Device EVM1 = new IM_Device { Name = "EVM1", Number = 1, Free = true};_Device EVM2 = new IM_Device { Name = "EVM2", Number = 2, Free = true};_Device EVM3 = new IM_Device { Name = "EVM3", Number = 3, Free = true};

public void Init() //инициализация системы

{

//инициализация модельного времени и состояния системы

Sim_Time = 0.0f;_Value = 0;

Tranzakt_Process = 0;_events = 4;

//планирование первого события

EventsArray[0] = new IM_Event1("Генерация заявки", 0, Sim_Time + Generate_Interval_tgen(tgen1, tgen2));

EventsArray[1] = new IM_Event2("Окончание обслуживания заявки в EVM1", 1, 1.0e+30f);//событие произойдет во времени 10 в 30 [2] = new IM_Event3("Окончание обслуживания заявки в EVM2", 2, 1.0e+30f);[3] = new IM_Event3("Окончание обслуживания заявки в EVM3", 3, 1.0e+30f);

}void Synhronise() //синхронизация событий

{min_time_next_event = 1.0e+29f;//берем для сравнения большое число_event_type = -1;//предполагаем, что событий нет

//открываем цикл, в котором определяем событие с наименьшим временем

for (int i = 0; i < num_events; i++)

{(EventsArray[i].Time < min_time_next_event)

{_time_next_event = EventsArray[i].Time;_event_type = i;//отыскиваем тип события

}

}

//если событий нет, то завершаем моделирование

if (next_event_type == -1)

{.Show("Список событий пуст");

Environment.Exit(0);

}

//переводим модельные часы на ближайшее событие

Sim_Time = min_time_next_event;

}int Generate_Interval_tgen(int time1, int time2)//планирование интервала time1 +-time2 для генерации заявки

{result = random.Next(11)+5;result;

}int Generate_Interval_tevm1(int time1, int time2)//планирование интервала time1 +-time2 для обработки заявки

{result = random.Next(7)+7;// то есть интервал 7-13 или 10+-3= result;result;

}void TestQueueK1()//проверка: есть ли заявки в очереди канала

{(queueK1.QueueSize> 0)

{.Free = false;.Depart();= Sim_Time + random.Next(7) + 7;

}

}void GoIn() //событие поступления заявки

{_Value++;//увеличиваем число поступивших транзактов (количество заявок всех типов)

//если устройство свободно, то занимаем его для текущей заявки

queueK1.Queue();((K1.Free == true) && (queueK1.QueueSize > 0))

{.Depart();.Seize();

//планируем время обработки в устройстве

timeReleaseK1 = Sim_Time + Generate_Interval_tevm1(t1K1, t2K1);

}

//планируем время поступления следующей заявки[0].Time = Sim_Time + Generate_Interval_tgen(tgen1, tgen2);

//проверка: если заявка обработана в канале пред обслуж, то она передается одной из миниЭВМ

if ((timeReleaseK1 < EventsArray[0].Time) && (K1.Free == false))

{.Release();//освобождаем канал((queueEVM1.QueueSize == 10) && (queueEVM2.QueueSize == 10) && (queueEVM3.QueueSize == 10))

{_Otkasov++;

//dataGridView2[u, 1].Value = takt_Mod_Vremeni;

//u++;();

}

//проверка на меньшую очередь

if ((queueEVM1.QueueSize <= queueEVM2.QueueSize) && (queueEVM1.QueueSize <= queueEVM3.QueueSize))

{.Queue();(EVM1.Free == true)

{.Seize();.Depart();[1].Time = Sim_Time + t2EVM123;

}();

}((queueEVM2.QueueSize<=queueEVM1.QueueSize) && (queueEVM2.QueueSize<=queueEVM3.QueueSize))

{.Queue();(EVM2.Free == true)

{.Seize();.Depart();[2].Time = Sim_Time + t2EVM123;

}();

}((queueEVM3.QueueSize<=queueEVM1.QueueSize) &&(queueEVM3.QueueSize<=queueEVM2.QueueSize))

{.Queue();(EVM3.Free == true)

{.Seize();.Depart();[3].Time = Sim_Time + t2EVM123;

}();

}

}

}void GoOut() //событие ухода заявки

{ _Process++;//увеличиваем число обработанных транзактов

EventsArray[next_event_type].Time = 1.0e+30f;

//освобождение ЭВМ((next_event_type == 1) && (EVM1.Free == false))

{.Release();(queueEVM1.QueueSize>0)

{.Depart();.Seize();[1].Time = Sim_Time + t2EVM123;

}

}((next_event_type == 2) && (EVM2.Free == false))

{.Release();(queueEVM2.QueueSize > 0)

{.Depart();.Seize();[2].Time = Sim_Time + t2EVM123;

}

}((next_event_type == 3) && (EVM1.Free == false))

{.Release();(queueEVM3.QueueSize > 0)

{.Depart();.Seize();[3].Time = Sim_Time + t2EVM123;

}

}

}void Tabl1(out int queueSizeK1, out int queueSizeEVM1, out int queueSizeEVM2, out int queueSizeEVM3,bool FreeK1, out bool FreeEVM1, out bool FreeEVM2, out bool FreeEVM3,int kolOtkazov, out int timeObrVK1, out float timeReleaseK1, out float timeReleaseEVM1, float timeReleaseEVM2, out float timeReleaseEVM3, out int t2EVM123, out float timePostZ)

{= queueK1.QueueSize;= queueEVM1.QueueSize;= queueEVM2.QueueSize;= queueEVM3.QueueSize;= K1.Free;= EVM1.Free;= EVM2.Free;= EVM3.Free;= kol_Otkasov;= TimeObrVK1;= this.timeReleaseK1;= EventsArray[1].Time;= EventsArray[2].Time;= EventsArray[3].Time;EVM123 = this.t2EVM123;= EventsArray[0].Time;

}

}void Start_Click(object sender, EventArgs e)

{

{queueSizeK1 = 0, queueSizeEVM1 = 0, queueSizeEVM2 = 0, queueSizeEVM3 = 0;FreeK1 = true, FreeEVM1 = true, FreeEVM2 = true, FreeEVM3 = true;timeObrVK1, t2EVM123;timeReleaseK1, timeReleaseEVM1, timeReleaseEVM2, timeReleaseEVM3;kol_Otkazov = 0;timePostZ;

int j = 0;

//считывание данных с формы

IM_System system = new IM_System();.ColumnCount = 18; //количество столбцов в dataGridView1.RowCount = 2000;//добавление 2000 строкcolumnHeaderStyle = new DataGridViewCellStyle();.Font = new Font("Verdana", 4, FontStyle.Bold);.ColumnHeadersDefaultCellStyle = columnHeaderStyle;

//Установка ширины столбцов в dataGridView1.Columns[0].Width = 50;.Columns[1].Width = 100;.Columns[2].Width = 50;.Columns[3].Width = 50;.Columns[4].Width = 50;.Columns[5].Width = 50;.Columns[6].Width = 50;.Columns[7].Width = 50;.Columns[8].Width = 50;.Columns[9].Width = 50;.Columns[10].Width = 50;.Columns[11].Width = 50;.Columns[12].Width = 50;.Columns[13].Width = 50;.Columns[14].Width = 50;.Columns[15].Width = 50;.Columns[16].Width = 50;.Columns[17].Width = 50;.Columns[0].Name = "Мод время";.Columns[1].Name = "T пост";.Columns[2].Name = "ОчерK1";.Columns[3].Name = "КаналK1";.Columns[4].Name = "T обрK1";.Columns[5].Name = "T освK1";.Columns[6].Name = "ОчерEVM1";.Columns[7].Name = "КаналEVM1";.Columns[8].Name = "T освEVM1";.Columns[9].Name = "ОчерEVM2";.Columns[10].Name = "КаналEVM2";.Columns[11].Name = "T освEVM2";.Columns[12].Name = "ОчерEVM3";.Columns[13].Name = "КаналEVM3";.Columns[14].Name = "T освEVM3";.Columns[15].Name = "T обр";.Columns[16].Name = "N";.Columns[17].Name = "Кол отказов";

//время поступления заявок tgen1+-tgen2.tgen1 = 10;//Convert.ToInt32(textBox1.Text);.tgen2 = 5;//Convert.ToInt32(textBox2.Text);

//время обработки заявки t1evm1+-t2evm1.t1K1 = 10;//Convert.ToInt32(textBox3.Text);.t2K1 = 3; // Convert.ToInt32(textBox4.Text);.t2EVM123 = 33;

//количество поступивших заявок.tend = 500;// Convert.ToInt32(textBox5.Text);

system.Init();//инициализация системы.Synhronise();//синхронизация события

//открываем цикл до тех пор, пока не наступит заданное время моделирования(system.Tranzakt_Value < system.tend)//до тех пор, пока количество поступивших заявок не превысит 1000

{

//выбираем тип события(system.next_event_type)

{0:.GoIn();//поступление заявки;1:

system.GoOut();//удаление заявки;

case 2:.GoOut();//удаление заявки;3:.GoOut();//удаление заявки;

}

//system.Tabl1() необходима для вывода данных в таблицу

system.Tabl1(out queueSizeK1, out queueSizeEVM1, out queueSizeEVM2, out queueSizeEVM3,FreeK1, out FreeEVM1, out FreeEVM2, out FreeEVM3, out kol_Otkazov, out timeObrVK1, out timeReleaseK1,timeReleaseEVM1, out timeReleaseEVM2, out timeReleaseEVM3, out t2EVM123, out timePostZ);[0, j].Value = system.Sim_Time;[1, j].Value = timePostZ;[2, j].Value = queueSizeK1;[3, j].Value = FreeK1;[4, j].Value = timeObrVK1;[5, j].Value = timeReleaseK1;[6, j].Value = queueSizeEVM1;[7, j].Value = FreeEVM1;[8, j].Value = timeReleaseEVM1;[9, j].Value = queueSizeEVM2;[10, j].Value = FreeEVM2;[11, j].Value = timeReleaseEVM2;[12, j].Value = queueSizeEVM3;[13, j].Value = FreeEVM3;[14, j].Value = timeReleaseEVM3;[15, j].Value = t2EVM123;[16, j].Value = system.Tranzakt_Process;[17, j].Value = kol_Otkazov;

j++;.Synhronise();//синхронизируем события

}

//Вывод данных на форму.Text = Convert.ToString(system.Tranzakt_Value); //количество поступивших заявок.Text = Convert.ToString(kol_Otkazov); //количество отказов.Text = Convert.ToString(system.Tranzakt_Process);//количество обработанных заявок.Text = Convert.ToString(system.Sim_Time); //модельное время.Text = Convert.ToString(queueSizeK1); //очередь в канале.Text = Convert.ToString(queueSizeEVM1); //очередь в ЭВМ1.Text = Convert.ToString(queueSizeEVM2); //очередь в ЭВМ2.Text = Convert.ToString(queueSizeEVM3); //очередь в ЭВМ3.Text = Convert.ToString(FreeK1); //занятость канала.Text = Convert.ToString(FreeEVM1); //занятость ЭВМ1.Text = Convert.ToString(FreeEVM2); //занятость ЭВМ2.Text = Convert.ToString(FreeEVM3); //занятость ЭВМ3.BackColor = System.Drawing.Color.MediumSeaGreen;

MessageBox.Show("Система смоделирована! ");

}

//если не введены параметры или введены неправильно(FormatException ex)

{.Show("Неправильно введены параметры модели! Введите данные заново! " + ex);

}

}void Close_Click(object sender, EventArgs e)//выход из программы

{.Exit();

}

}

}



3. Симуляция


GPSS World Simulation Report - Модель 1 (Курс проект по модел).42.1, June 19, 2014 05:04:08 TIME END TIME BLOCKS FACILITIES STORAGES

.000 5074.710 36 4 3VALUE 10003.00010004.00010005.00010006.00010010.00010011.00010012.00010009.00032.00034.00017.00025.0009.00010000.00010001.00010002.00010008.00010013.00010007.000LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY

GENERATE 511 0 0

QUEUE 511 0 0

QUEUE 511 12 0

SEIZE 499 0 0

DEPART 499 0 0

ADVANCE 499 1 0

RELEASE 498 0 0

TEST 498 0 09 TEST 487 0 0

TEST 319 0 0

ENTER 163 9 0

SEIZE 154 1 0

LEAVE 153 0 0

ADVANCE 153 0 0

RELEASE 153 0 0

TRANSFER 153 0 017 TEST 324 0 0

TEST 288 0 0

ENTER 163 10 0

SEIZE 153 0 0

LEAVE 153 0 0

ADVANCE 153 1 0

RELEASE 152 0 0

TRANSFER 152 0 025 TEST 161 0 0

TEST 161 0 0

ENTER 161 9 0

SEIZE 152 0 0

LEAVE 152 0 0

ADVANCE 152 1 0

RELEASE 151 0 032 DEPART 456 0 0

TERMINATE 456 0 034 QUEUE 11 0 0

DEPART 11 0 0

TERMINATE 11 0 0ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY499 0.985 10.012 1 499 0 0 0 12154 0.995 32.786 1 467 0 0 0 9153 0.990 32.851 1 465 0 0 0 10152 0.982 32.792 1 468 0 0 0 9MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY58 55 511 0 29.998 297.905 297.905 015 12 511 26 5.984 59.429 62.615 01 0 11 11 0.000 0.000 0.000 0CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY10 0 0 10 163 1 6.387 0.639 0 010 0 0 10 163 1 6.251 0.625 0 010 1 0 10 161 1 5.836 0.584 0 0XN PRI M1 ASSEM CURRENT NEXT PARAMETER VALUE

0 4627.613 467 12 13XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE

512 0 5075.633 512 0 1

0 5077.746 499 6 7

0 5097.528 465 22 23

0 5106.281 468 30 31

Рисунок 1 - статистика работы системы в GPSS


K1 - канал предварительного обслуживания. Через него прошло 499 транзактов, что показывает параметр ENTRIES. Через миниЭВМ1 (EVM1) прошло 154 транзакта, через миниЭВМ2 - 153, через миниЭВМ3 - 152. Вероятность загрузки устройств демонстрирует параметр UTIL, у канала предварительного обслуживания 0.985, у первой - 0.995, у второй - 0.990 и у третьей - 0.982, то есть все устройства приблизительно одинаково используются. Параметр AVE. TIME указывает среднее время обработки одного транзакта. В результате работы системы было обработано 459 заявок из 500, 11 заявок были потеряны, остальные заявки остались в очереди.

Статистика об очереди:максимальная длина очереди за все время работы системы. - раздел содержит информацию о списке будущих событий. XN - номер транзакта, PRI - приоритет, BDT - абсолютное модельное время, т.е. время выхода транзакта из списка будущих событий.

Модель системы на языке С#


Рисунок 2 - статистика работы системы в C#


Максимальная длина очереди:

В среде GPSS - миниЭВМ1 = 10, миниЭВМ2 = 10, миниЭВМ3 = 10;

В среде C++ - миниЭВМ1 = 10, миниЭВМ2 = 10, миниЭВМ3 = 10;

Обработано требований:

В среде GPSS - миниЭВМ1 = 154, миниЭВМ2 = 153, миниЭВМ3 = 152, всего = 459;

В среде С++ - всего = 446;

Количество отказов:

В среде GPSS - 11;

В среде C++ - 11;

Сравнивая результаты моделирования на языке С++ и GPSS можно сделать вывод, что модели работают одинаково, а результаты моделирования схожи между собой.



Заключение


В процессе выполнения курсового проекта были разработаны две имитационные модели системы обработки информации - в среде GPSS и на языке высокого уровня С#.

По полученным в результате экспериментов данным можно сделать вывод, что модели работаю одинаково, а результаты их моделирования схожи между собой.

Основательно закреплены теоретические знания по дисциплине «Моделирование».

программа имитационная модель система обслуживания



Список литературы


1. Сапожников Н.Е. Математическое моделирование на ПК: Учеб. пособие. 2-е изд., перераб. и доп. - Севастополь: СНУЯЭиП, 2006. - 380 с.: ил.

2. Троелсен Э. Язык программирования C# 2010 и платформа .NET 4- пер. с англ. - M.:OOO Вильямс И.Д., 2011.-1392c.

. Л. А. Воробейчиков, Г. К. Сосновиков Основы моделирования на GPSS/PC.

4. Томашевский В., Жданова E. Имитационное моделирование в среде GPSS.-М.:Бестселлер,2003.-416c.

. Уотсон К., Нейгел К., Педерсен Я.Х., Рид Д., Скиннер М. Visual C# 2010 полный курс - пер. с англ. - M.:OOO Вильямс И.Д., 2011.-960с.



Курсовая работа Моделирование системы массового обслуживания Содержание Введение

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ