Академический Документы
Профессиональный Документы
Культура Документы
Содержание
1. Постановка задачи. ....................................................................................................................3
2. Разработка в среде Visual Studio 2005. ....................................................................................4
2.1. Интерфейс программы. ......................................................................................................4
2.1.1. Вкладка “Исходные данные”. .................................................................................4
2.1.2. Вкладка “Таблица”. .................................................................................................5
2.1.3. Вкладка “Статистика”. ............................................................................................6
2.2. Блок-схема реализованного алгоритма без интерфейсной части. .................................7
2.2.1. Укрупненная схема..................................................................................................7
2.2.2. InitializeModel(). .......................................................................................................8
2.2.3. UpdateStatistics(). .....................................................................................................8
2.2.4. GetNextEvent(). .........................................................................................................9
2.2.5. ArriveEvent(). ..........................................................................................................10
2.2.6. DepartEvent(). .........................................................................................................10
2.2.7. Report(). ...................................................................................................................11
2.3. Пояснения к реализованному алгоритму и тексту программы. ..................................12
3. Проверка качества генераторов случайных чисел. ..............................................................15
3.1. Генератор величин, распределенных по закону Эрланга. ............................................15
3.2. Генератор экспоненциального распределения. .............................................................17
3.3. Генератор нормально распределеннных значений. ......................................................18
4. Разработка в среде GPSS World. Валидация разработанной программы с помощью
модели в среде GPSS World. .......................................................................................................20
4.1. Программа в среде GPSS World ......................................................................................20
4.2. Результат одного прогона. ...............................................................................................20
4.3. Сравнение результатов с прогоном программы на Visual C++. ..................................21
5. Используемая литература. ......................................................................................................23
6. Текст программы на языке Visual C++. .................................................................................24
6.1. Файл Model.cpp. ................................................................................................................24
6.2. Файл StackEvent.h. ............................................................................................................24
6.3. Файл RandomGenerators.h. ...............................................................................................24
6.4. Файл ModelEvents.h. .........................................................................................................25
6.5. Файл MainForm.h. .............................................................................................................25
3 Дробышев Сергей 4601BN
1. Постановка задачи.
Система с очередями имеет один сервер и обслуживает поступающие заявки двух типов.
Заявки 1 типа образуют поток {1}. Заявки 2 типа поступают в систему с интервалом
времени, распределенным {2}. Они обслуживаются сервером с разным временем
обслуживания: заявки первого типа – {3}; заявки второго типа – {4}.. Если сервер занят,
когда поступает заявка, то заявка присоединяется к очереди с дисциплиной обслуживания
{5}. Время моделирования Tf=500 мин.
Индивидуальный вариант:
1 2 3 4 5 6 7 8
Вероятность
Нормальное Коэффициент обслуживания
Эрланговский Пуассоновский
( µ = 14,σ =
Экспоненциальное
LIFO простоя заявки без
S.
( l=3,λ =0.25) (среднее=0.5) (λ =3) Drobiševs
1.5) сервера пребывания в
очереди
4 Дробышев Сергей 4601BN
erlang.txt
exp.txt
normal.txt
Во всех полях ввода реализована валидация введенных данных. Если в поле введены
данные в неправильном формате, около этого поля появляется иконка, при наведении
мышью на которую, появляется всплывающая подсказка с описанием ошибки:
5 Дробышев Сергей 4601BN
После установки исходных данных на этой вкладке для начала процесса моделирования
необходимо нажать на кнопку “Запуск”. Ход процесса моделирования отражает прогресс-
бар в статусной строке.
simulation_текущая_временная_отметка.txt
ИТОГОВАЯ СТАТИСТИКА
Поступление заявок
L1: 37
L2: 250
Всего заявок: 287
-------------------------------------------------------
Очередь
Вхождений L1 в очередь: 36
Вхождений L2 в очередь: 243
Всего вхождений в очередь: 279
Start
InitializeModel()
Yes
currentTime = modellingTime
UpdateStatistics()
UpdateStatistics()
No nextEvent == L1
Report()
No nextEvent == L2 Yes
ArriveEvent(L1)
nextEvent ==
End Yes
Depart
ArriveEvent(L2)
Yes
DepartEvent()
No
GetNextEvent()
8 Дробышев Сергей 4601BN
2.2.2. InitializeModel().
Start
currentTime = 0.0;
nextEvent = -1; // не установлено
serverStatus = Idle;
// инициализация стека
eventStack = gcnew System::Collections::Generic::Stack<StackEvent^>();
l1WithoutQ = 0;
l2WithoutQ = 0;
l1Count = 0;
l2Count = 0;
L1FromStack = 0;
L2FromStack = 0;
return
2.2.3. UpdateStatistics().
Start
return
9 Дробышев Сергей 4601BN
2.2.4. GetNextEvent().
Start
i<3
Yes
futureEvents[i] <
minEvent
No Yes
minEvent = futureEvents[i];
No
indexMin = i;
i++;
nextEvent = indexMin;
currentTime = minEvent;
return
10 Дробышев Сергей 4601BN
2.2.5. ArriveEvent().
Start
No eventType == 0
Yes
eventType == 1
futureEvents[0] = currentTime + randValue->Erlang(erlangLen,
erlangLambda);
serverStatus = Busy;
futureEvents[2] = currentTime+ randValue-> eventStack->Push(gcnew
serverStatus == Busy
Normal(normalSigma, normalMu); StackEvent(0, currentTime));
Yes
No l1WithoutQ++;
serverStatus = Busy;
eventStack->Push(gcnew
futureEvents[2] = currentTime + randValue-> l1Count++;
StackEvent(1, currentTime));
Exponential(expLambda);
l2Count++;
return
2.2.6. DepartEvent().
Start
serverStatus = Idle;
eventStack->Count == 0
No
// Стек пуст
serverStatus = Busy;
// выталкиваем из стека
StackEvent temp = eventStack->Pop();
Yes
temp->EventType == 0
No futureEvents[2] = System::Double::MaxValue;
// Вытолкнули L1
temp->EventType == 1
// Вытолкнули L2 Yes
2.2.7. Report().
Start
// Поступление заявок L1
lbL1Count->Text = l1Count;
// Поступление заявок L2
lbL2Count->Text = l2Count;
// Всего заявок
lbTotalCount->Text = l1Count + l2Count;
int l1RemainInstack = 0;
int l2RemainInstack = 0;
// Осталось в очереди L1
lblL1RemainInstack->Text = l1RemainInstack;
// Осталось в очереди L2
lblL2RemainInstack->Text = l2RemainInstack;
// Всего осталось в очереди
lblRemainInstackTotal->Text = eventStack.Count;
// Вхождений L1 в очередь
lblL1InStack->Text = l1Count - l1WithoutQ;
// Вхождений L2 в очередь
lblL2InStack->Text = l2Count - l2WithoutQ;
// Всего вхождений в очередь
lblInStackTotal->Text = (l1Count - l1WithoutQ) + (l2Count - l2WithoutQ);
// Всего вхождений L1
lblL1ToServer->Text = l1WithoutQ + L1FromStack;
// Всего вхождений L2
lblL2ToServer->Text = l2WithoutQ + L2FromStack;
// Всего вхождений на сервер
lblToServerTotal->Text = (l1WithoutQ + L1FromStack) + (l2WithoutQ + L2FromStack);
return