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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.12.2014
Размер файла 487,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

37

Размещено на http://www.allbest.ru/

1

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

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

Содержание

Введение

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

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

2.1 На языке GPSS

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

3. Симуляция

Заключение

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

Введение

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

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

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

Одним из наиболее эффективных и распространенных языков моделирования сложных дискретных систем является в настоящее время язык 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$och1

ba VARIABLE Q$och2

caa VARIABLE Q$och3

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

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

ochEVM1 STORAGE 10;объявление очереди ochEVM1 емкостью 10

ochEVM2 STORAGE 10;объявление очереди ochEVM2 емкостью 10

ochEVM3 STORAGE 10;объявление очереди ochEVM3 емкостью 10

aa VARIABLE S$ochEVM1 ;длина очереди в ochEVM1

ba VARIABLE S$ochEVM2;длина очереди в ochEVM2

caa VARIABLE S$ochEVM3;длина очереди в ochEVM3

daa VARIABLE S$ochEVM1 +S$ochEVM2+S$ochEVM3 ;общая длина очередей

GENERATE 10,5;генерация сигналов

QUEUE vrem;вход в очередь статистики

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

SEIZE K1;занятие канала предварительного обслуживания

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

ADVANCE 10,3;задержка в канале

RELEASE K1;освобождение канала предварительного обслуживания

TEST L V$daa,30,metk1 ;проверка - суммарная очередь меньше 30

mt3 TEST LE V$aa,V$ba,mt1;проверка - поиск самой короткой очереди

TEST LE V$aa,V$caa,mt1 ;проверка - поиск самой короткой очереди

ENTER ochEVM1;вход в очередь ЭВМ1

SEIZE EVM1;занятие ЭВМ1

LEAVE ochEVM1;освобождение очереди в ЭВМ1

ADVANCE 33,0;задержка в ЭВМ1

RELEASE EVM1;освобождение ЭВМ1

TRANSFER ,met2;безусловный переход

mt1 TEST LE V$ba,V$aa,mt2;проверка - поиск самой короткой очереди

TEST LE V$ba,V$caa,mt2 ;проверка - поиск самой короткой очереди

ENTER ochEVM2;вход в очередь ЭВМ2

SEIZE EVM2;занятие ЭВМ2

LEAVE ochEVM2;освобождение очереди в ЭВМ2

ADVANCE 33,0;задержка в ЭВМ2

RELEASE EVM2;освобождение ЭВМ2

TRANSFER ,met2;безусловный переход

mt2 TEST LE V$caa,V$ba,mt3;проверка - поиск самой короткой очереди

TEST LE V$caa,V$aa,mt3 ;проверка - поиск самой короткой очереди

ENTER ochEVM3;вход в очередь ЭВМ3

SEIZE EVM3;занятие ЭВМ3

LEAVE ochEVM3;освобождение очереди в ЭВМ3

ADVANCE 33,0;задержка в ЭВМ3

RELEASE EVM3;освобождение ЭВМ3

met2 DEPART vrem ;освобождение очереди сбора статистики

TERMINATE 1 ;вывод сигнала из системы

metk1 QUEUE otk;очередь отказов

DEPART otk ;освобождение очереди отказов

TERMINATE 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;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Collections;

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

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

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

class IM_Queue

{

public string Name; //название

public int Number; //номер

public int QueueSize; //длина очереди

public void Queue() //занесение транзакта в буфер

{

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

}

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

{

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

}

}

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

class IM_Device

{

public string Name; //название

public int Number; //номер

public bool Free; //true - свободно, false - занято

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

{

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

}

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

{

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

}

}

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

class IM_Event

{

public string Name; //название события

public int Type; //тип события

public float Time; //время наступления события

public IM_Event(string Name, int Type, float Time)

{

this.Name = Name;

this.Type = Type;

this.Time = Time;

}

}

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

{

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

: base(Name, Type, Time)

{ }

}

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

{

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

: base(Name, Type, Time)

{ }

}

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

{

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

: base(Name, Type, Time)

{

}

}

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

{

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

: base(Name, Type, Time)

{

}

}

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

class IM_System

{

int kol_Otkasov;

public IM_Event[] EventsArray = new IM_Event[4];

public float Sim_Time; //модельное время

public int Tranzakt_Value; //количество транзактов, попавших в систему

public int Tranzakt_Process; //количество обработанных транзактов

public float timeReleaseK1; //время освобождения канала

public int tgen1, tgen2; //время генерации заявок

public int tend; //количество входных заявок

public int t1K1, t2K1; //время обработки в канале предварительного обслуживания

public int t2EVM123; //время обработки в любой миниЭВМ

public int num_events; //число событий в системе

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

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

Random random = new Random();

IM_Queue queueK1 = new IM_Queue { Name = "Очередь 1", Number = 1, QueueSize = 0 };

IM_Queue queueEVM1 = new IM_Queue { Name = "Очередь EVM1", Number = 1, QueueSize = 0};

IM_Queue queueEVM2 = new IM_Queue { Name = "Очередь EVM2", Number = 2, QueueSize = 0};

IM_Queue queueEVM3 = new IM_Queue { Name = "Очередь EVM3", Number = 3, QueueSize = 0};

IM_Device K1 = new IM_Device { Name = "Канал предварительного обслуживания", Number = 1, Free = true };//устройство свободно

IM_Device EVM1 = new IM_Device { Name = "EVM1", Number = 1, Free = true};

IM_Device EVM2 = new IM_Device { Name = "EVM2", Number = 2, Free = true};

IM_Device EVM3 = new IM_Device { Name = "EVM3", Number = 3, Free = true};

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

{

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

Sim_Time = 0.0f;

Tranzakt_Value = 0;

Tranzakt_Process = 0;

num_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

EventsArray[2] = new IM_Event3("Окончание обслуживания заявки в EVM2", 2, 1.0e+30f);

EventsArray[3] = new IM_Event3("Окончание обслуживания заявки в EVM3", 3, 1.0e+30f);

}

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

{

float min_time_next_event = 1.0e+29f;//берем для сравнения большое число

next_event_type = -1;//предполагаем, что событий нет

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

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

{

if (EventsArray[i].Time < min_time_next_event)

{

min_time_next_event = EventsArray[i].Time;

next_event_type = i;//отыскиваем тип события

}

}

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

if (next_event_type == -1)

{

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

Environment.Exit(0);

}

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

Sim_Time = min_time_next_event;

}

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

{

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

return result;

}

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

{

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

TimeObrVK1 = result;

return result;

}

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

{

if (queueK1.QueueSize> 0)

{

K1.Free = false;

queueK1.Depart();

timeReleaseK1 = Sim_Time + random.Next(7) + 7;

}

}

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

{

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

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

queueK1.Queue();

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

{

queueK1.Depart();

K1.Seize();

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

timeReleaseK1 = Sim_Time + Generate_Interval_tevm1(t1K1, t2K1);

}

//планируем время поступления следующей заявки

EventsArray[0].Time = Sim_Time + Generate_Interval_tgen(tgen1, tgen2);

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

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

{

K1.Release();//освобождаем канал

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

{

kol_Otkasov++;

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

//u++;

TestQueueK1();

}

else

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

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

{

queueEVM1.Queue();

if (EVM1.Free == true)

{

EVM1.Seize();

queueEVM1.Depart();

EventsArray[1].Time = Sim_Time + t2EVM123;

}

TestQueueK1();

}

else

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

{

queueEVM2.Queue();

if(EVM2.Free == true)

{

EVM2.Seize();

queueEVM2.Depart();

EventsArray[2].Time = Sim_Time + t2EVM123;

}

TestQueueK1();

}

else

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

{

queueEVM3.Queue();

if(EVM3.Free == true)

{

EVM3.Seize();

queueEVM3.Depart();

EventsArray[3].Time = Sim_Time + t2EVM123;

}

TestQueueK1();

}

}

}

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

{

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

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

//освобождение ЭВМ

if ((next_event_type == 1) && (EVM1.Free == false))

{

EVM1.Release();

if (queueEVM1.QueueSize>0)

{

queueEVM1.Depart();

EVM1.Seize();

EventsArray[1].Time = Sim_Time + t2EVM123;

}

}

else

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

{

EVM2.Release();

if (queueEVM2.QueueSize > 0)

{

queueEVM2.Depart();

EVM2.Seize();

EventsArray[2].Time = Sim_Time + t2EVM123;

}

}

else

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

{

EVM3.Release();

if (queueEVM3.QueueSize > 0)

{

queueEVM3.Depart();

EVM3.Seize();

EventsArray[3].Time = Sim_Time + t2EVM123;

}

}

}

public void Tabl1(out int queueSizeK1, out int queueSizeEVM1, out int queueSizeEVM2, out int queueSizeEVM3,

out bool FreeK1, out bool FreeEVM1, out bool FreeEVM2, out bool FreeEVM3,

out int kolOtkazov, out int timeObrVK1, out float timeReleaseK1, out float timeReleaseEVM1,

out float timeReleaseEVM2, out float timeReleaseEVM3, out int t2EVM123, out float timePostZ)

{

queueSizeK1 = queueK1.QueueSize;

queueSizeEVM1 = queueEVM1.QueueSize;

queueSizeEVM2 = queueEVM2.QueueSize;

queueSizeEVM3 = queueEVM3.QueueSize;

FreeK1 = K1.Free;

FreeEVM1 = EVM1.Free;

FreeEVM2 = EVM2.Free;

FreeEVM3 = EVM3.Free;

kolOtkazov = kol_Otkasov;

timeObrVK1 = TimeObrVK1;

timeReleaseK1 = this.timeReleaseK1;

timeReleaseEVM1 = EventsArray[1].Time;

timeReleaseEVM2 = EventsArray[2].Time;

timeReleaseEVM3 = EventsArray[3].Time;

t2EVM123 = this.t2EVM123;

timePostZ = EventsArray[0].Time;

}

}

private void Start_Click(object sender, EventArgs e)

{

try

{

int queueSizeK1 = 0, queueSizeEVM1 = 0, queueSizeEVM2 = 0, queueSizeEVM3 = 0;

bool FreeK1 = true, FreeEVM1 = true, FreeEVM2 = true, FreeEVM3 = true;

int timeObrVK1, t2EVM123;

float timeReleaseK1, timeReleaseEVM1, timeReleaseEVM2, timeReleaseEVM3;

int kol_Otkazov = 0;

float timePostZ;

int j = 0;

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

IM_System system = new IM_System();

dataGridView1.ColumnCount = 18; //количество столбцов в dataGridView1

dataGridView1.RowCount = 2000;//добавление 2000 строк

DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();

columnHeaderStyle.Font = new Font("Verdana", 4, FontStyle.Bold);

dataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle;

//Установка ширины столбцов в dataGridView1

dataGridView1.Columns[0].Width = 50;

dataGridView1.Columns[1].Width = 100;

dataGridView1.Columns[2].Width = 50;

dataGridView1.Columns[3].Width = 50;

dataGridView1.Columns[4].Width = 50;

dataGridView1.Columns[5].Width = 50;

dataGridView1.Columns[6].Width = 50;

dataGridView1.Columns[7].Width = 50;

dataGridView1.Columns[8].Width = 50;

dataGridView1.Columns[9].Width = 50;

dataGridView1.Columns[10].Width = 50;

dataGridView1.Columns[11].Width = 50;

dataGridView1.Columns[12].Width = 50;

dataGridView1.Columns[13].Width = 50;

dataGridView1.Columns[14].Width = 50;

dataGridView1.Columns[15].Width = 50;

dataGridView1.Columns[16].Width = 50;

dataGridView1.Columns[17].Width = 50;

dataGridView1.Columns[0].Name = "Мод время";

dataGridView1.Columns[1].Name = "T пост";

dataGridView1.Columns[2].Name = "ОчерK1";

dataGridView1.Columns[3].Name = "КаналK1";

dataGridView1.Columns[4].Name = "T обрK1";

dataGridView1.Columns[5].Name = "T освK1";

dataGridView1.Columns[6].Name = "ОчерEVM1";

dataGridView1.Columns[7].Name = "КаналEVM1";

dataGridView1.Columns[8].Name = "T освEVM1";

dataGridView1.Columns[9].Name = "ОчерEVM2";

dataGridView1.Columns[10].Name = "КаналEVM2";

dataGridView1.Columns[11].Name = "T освEVM2";

dataGridView1.Columns[12].Name = "ОчерEVM3";

dataGridView1.Columns[13].Name = "КаналEVM3";

dataGridView1.Columns[14].Name = "T освEVM3";

dataGridView1.Columns[15].Name = "T обр";

dataGridView1.Columns[16].Name = "N";

dataGridView1.Columns[17].Name = "Кол отказов";

//время поступления заявок tgen1+-tgen2

system.tgen1 = 10;//Convert.ToInt32(textBox1.Text);

system.tgen2 = 5;//Convert.ToInt32(textBox2.Text);

//время обработки заявки t1evm1+-t2evm1

system.t1K1 = 10;//Convert.ToInt32(textBox3.Text);

system.t2K1 = 3; // Convert.ToInt32(textBox4.Text);

system.t2EVM123 = 33;

//количество поступивших заявок

system.tend = 500;// Convert.ToInt32(textBox5.Text);

system.Init();//инициализация системы

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

//открываем цикл до тех пор, пока не наступит заданное время моделирования

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

{

//выбираем тип события

switch (system.next_event_type)

{

case 0:

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

break;

case 1:

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

break;

case 2:

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

break;

case 3:

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

break;

}

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

system.Tabl1(out queueSizeK1, out queueSizeEVM1, out queueSizeEVM2, out queueSizeEVM3,

out FreeK1, out FreeEVM1, out FreeEVM2, out FreeEVM3, out kol_Otkazov, out timeObrVK1, out timeReleaseK1,

out timeReleaseEVM1, out timeReleaseEVM2, out timeReleaseEVM3, out t2EVM123, out timePostZ);

dataGridView1[0, j].Value = system.Sim_Time;

dataGridView1[1, j].Value = timePostZ;

dataGridView1[2, j].Value = queueSizeK1;

dataGridView1[3, j].Value = FreeK1;

dataGridView1[4, j].Value = timeObrVK1;

dataGridView1[5, j].Value = timeReleaseK1;

dataGridView1[6, j].Value = queueSizeEVM1;

dataGridView1[7, j].Value = FreeEVM1;

dataGridView1[8, j].Value = timeReleaseEVM1;

dataGridView1[9, j].Value = queueSizeEVM2;

dataGridView1[10, j].Value = FreeEVM2;

dataGridView1[11, j].Value = timeReleaseEVM2;

dataGridView1[12, j].Value = queueSizeEVM3;

dataGridView1[13, j].Value = FreeEVM3;

dataGridView1[14, j].Value = timeReleaseEVM3;

dataGridView1[15, j].Value = t2EVM123;

dataGridView1[16, j].Value = system.Tranzakt_Process;

dataGridView1[17, j].Value = kol_Otkazov;

j++;

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

}

//Вывод данных на форму

textBox6.Text = Convert.ToString(system.Tranzakt_Value); //количество поступивших заявок

textBox7.Text = Convert.ToString(kol_Otkazov); //количество отказов

textBox8.Text = Convert.ToString(system.Tranzakt_Process);//количество обработанных заявок

textBox13.Text = Convert.ToString(system.Sim_Time); //модельное время

textBox9.Text = Convert.ToString(queueSizeK1); //очередь в канале

textBox11.Text = Convert.ToString(queueSizeEVM1); //очередь в ЭВМ1

textBox12.Text = Convert.ToString(queueSizeEVM2); //очередь в ЭВМ2

textBox14.Text = Convert.ToString(queueSizeEVM3); //очередь в ЭВМ3

textBox15.Text = Convert.ToString(FreeK1); //занятость канала

textBox16.Text = Convert.ToString(FreeEVM1); //занятость ЭВМ1

textBox17.Text = Convert.ToString(FreeEVM2); //занятость ЭВМ2

textBox18.Text = Convert.ToString(FreeEVM3); //занятость ЭВМ3

this.BackColor = System.Drawing.Color.MediumSeaGreen;

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

}

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

catch (FormatException ex)

{

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

}

}

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

{

Application.Exit();

}

}

}

3. Симуляция

GPSS World Simulation Report - Модель 1 (Курс проект по модел).42.1

Thursday, June 19, 2014 05:04:08

START TIME END TIME BLOCKS FACILITIES STORAGES

0.000 5074.710 36 4 3

NAME VALUE

AA 10003.000

BA 10004.000

CAA 10005.000

DAA 10006.000

EVM1 10010.000

EVM2 10011.000

EVM3 10012.000

K1 10009.000

MET2 32.000

METK1 34.000

MT1 17.000

MT2 25.000

MT3 9.000

OCHEVM1 10000.000

OCHEVM2 10001.000

OCHEVM3 10002.000

OCHK1 10008.000

OTK 10013.000

VREM 10007.000

LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY

1 GENERATE 511 0 0

2 QUEUE 511 0 0

3 QUEUE 511 12 0

4 SEIZE 499 0 0

5 DEPART 499 0 0

6 ADVANCE 499 1 0

7 RELEASE 498 0 0

8 TEST 498 0 0

MT3 9 TEST 487 0 0

10 TEST 319 0 0

11 ENTER 163 9 0

12 SEIZE 154 1 0

13 LEAVE 153 0 0

14 ADVANCE 153 0 0

15 RELEASE 153 0 0

16 TRANSFER 153 0 0

MT1 17 TEST 324 0 0

18 TEST 288 0 0

19 ENTER 163 10 0

20 SEIZE 153 0 0

21 LEAVE 153 0 0

22 ADVANCE 153 1 0

23 RELEASE 152 0 0

24 TRANSFER 152 0 0

MT2 25 TEST 161 0 0

26 TEST 161 0 0

27 ENTER 161 9 0

28 SEIZE 152 0 0

29 LEAVE 152 0 0

30 ADVANCE 152 1 0

31 RELEASE 151 0 0

MET2 32 DEPART 456 0 0

33 TERMINATE 456 0 0

METK1 34 QUEUE 11 0 0

35 DEPART 11 0 0

36 TERMINATE 11 0 0

FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY

K1 499 0.985 10.012 1 499 0 0 0 12

EVM1 154 0.995 32.786 1 467 0 0 0 9

EVM2 153 0.990 32.851 1 465 0 0 0 10

EVM3 152 0.982 32.792 1 468 0 0 0 9

QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY

VREM 58 55 511 0 29.998 297.905 297.905 0

OCHK1 15 12 511 26 5.984 59.429 62.615 0

OTK 1 0 11 11 0.000 0.000 0.000 0

STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY

OCHEVM1 10 0 0 10 163 1 6.387 0.639 0 0

OCHEVM2 10 0 0 10 163 1 6.251 0.625 0 0

OCHEVM3 10 1 0 10 161 1 5.836 0.584 0 0

CEC XN PRI M1 ASSEM CURRENT NEXT PARAMETER VALUE

467 0 4627.613 467 12 13

FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE

512 0 5075.633 512 0 1

499 0 5077.746 499 6 7

465 0 5097.528 465 22 23

468 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 заявок были потеряны, остальные заявки остались в очереди.

Статистика об очереди:

Max-максимальная длина очереди за все время работы системы.

FEC - раздел содержит информацию о списке будущих событий. 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.

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

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

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

Размещено на Allbest.ru


Подобные документы

  • Основные сведение о системе моделирования GPSS и блоки, используемые при моделировании одноканальных и многоканальных систем массового обслуживания. Разработка модели работы ремонтного подразделения в течение суток с использованием программы GPSS World.

    курсовая работа [36,4 K], добавлен 11.02.2015

  • Система GPSS World как мощная универсальная среда моделирования как дискретных, так и непрерывных процессов, предназначенная для профессионального моделирования самых разнообразных процессов и систем. Системы массового обслуживания. Листинг программы.

    курсовая работа [499,6 K], добавлен 25.12.2013

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

    курсовая работа [154,1 K], добавлен 19.05.2011

  • Методика системного исследования реальной динамической сложной системы посредством разработки ее имитационной модели. Разработка программы реализации алгоритма имитационного моделирования системы массового обслуживания "Интернет-провайдерская фирма".

    курсовая работа [2,0 M], добавлен 20.01.2010

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

    курсовая работа [860,4 K], добавлен 24.12.2013

  • Практические навыки системного исследования реальной динамической сложной системы на основе построения ее имитационной модели. Автоматизация работы по расчету эффективности системы массового обслуживания с понятным интерфейсом. Выбор алгоритма решения.

    курсовая работа [1,0 M], добавлен 18.08.2009

  • Построение имитационной модели системы массового обслуживания, список и содержание ее активностей. Блок-схема алгоритма моделирования и текст процедуры. Моделирование случайных независимых величин и процессов. Оптимизация системы массового обслуживания.

    курсовая работа [4,0 M], добавлен 28.05.2013

  • Разработка концептуальной модели системы обработки информации для узла коммутации сообщений. Построение структурной и функциональной блок-схем системы. Программирование модели на языке GPSS/PC. Анализ экономической эффективности результатов моделирования.

    курсовая работа [802,8 K], добавлен 04.03.2015

  • Построение имитационной модели системы массового обслуживания в среде Borland Delphi 7.0 с учетом того, что параметры модели – детерминированные величины. Моделирование случайных независимых величин и процессов. Оптимизация системы массового обслуживания.

    курсовая работа [1,4 M], добавлен 28.05.2013

  • Автоматизация технологических процессов. Написание имитационных моделей систем с дискретными событиями. Модели систем массового обслуживания в общецелевой системе GPSS. Логическая схема алгоритмов и схема программы. Математическая модель и ее описание.

    курсовая работа [1,4 M], добавлен 29.06.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.