записується звичайно у вигляді
(4)
Експоненційний закон розподілу.
Щільність розподілу:
; ; ; (2 )
(3)
де - параметр розподілу, .
Потрібно знайти формулу для моделювання випадкової величини X за допомогою рівномірно розподіленої випадкової величини .
Знаходимо обернену стосовно F функцію. Маємо :
(4)
Так, як 1-R має той же розподіл, що і R, то зручніше при знаходженні значень випадкової величини X користуватися формулою :
(5)
Випадкове число з експонентним розподілом обчислюється по формулі
Розглянемо, як використовуючи метод оберненої функції, можна змоделювати випадкову величину, розподілену за експоненційним законом. Нехай л=1. Виконаємо апроксимацію експоненційного розподілу лінійними ділянками, щоб можна було використовувати її для моделювання методом оберненої функції. Для апроксимації достатньо 24-х точок.
У разі необхідності моделювання випадкової величини Х, роходіленої за експоненційним розподілом з л?1, яка використовується як затримка у часі (наприклад, для моделювання пуасонівського потоку надходження заявок), виконується наступним чином:
1) генерується значення випадкової величини, розподіленої за експоненційним розподілом з л=1;
2) знаходиться добуток цього значення та математичне сподівання випадкової величини Х; у результаті отримаємо шукану послідовність значень шуканої величини Х.
8.Блок-схеми
Загальна блок-схема програми.
Блок-схема потоку обслуговування.
Блок-схема гнератора випадкових чисел.
Генератор випадкових чисел з експоненційним законом розподілу(в програмі використовується з попередньо згенерованим рівномірно розподіленим випадковим числом) .
Де: r – генерується на попередньому генераторі.
9.Технічні характеристики
1. Intel – сумісний процесор з тактовою частотою >50 Мгц
2. IBM – сумісний монітор
3. IBM-сумісний відео адаптер
4. Операційна система Windows 95 і вище.
5. Пакет розробки програмного забезпечення Microsoft Visual Studio 6.0
6. 64 Мb RAM
7.IBM-сумісна клавіатура
10. Результати моделювання
Дослід 1.
Середня довжина черги клієнтів типу 1: 954
Середня довжина черги клієнтів типу 2: 513
Загальна середня довжина черги: 733
Середній час очікування заявок типу 1: 8,475 сек.
Середній час очікування заявок типу 2: -
Загальний середній час очікування: -
Дослід 2.
Середня довжина черги клієнтів типу 1: 952
Середня довжина черги клієнтів типу 2: 509
Загальна середня довжина черги: 730
Середній час очікування заявок типу 1: 8,615 сек.
Середній час очікування заявок типу 2: -
Загальний середній час очікування: -
Дослід 3.
Середня довжина черги клієнтів типу 1: 954
Середня довжина черги клієнтів типу 2: 504
Загальна середня довжина черги: 729
Середній час очікування заявок типу 1: 8,987 сек.
Середній час очікування заявок типу 2: -
Загальний середній час очікування: -
Дослід 4.
Середня довжина черги клієнтів типу 1: 957
Середня довжина черги клієнтів типу 2: 510
Загальна середня довжина черги: 733
Середній час очікування заявок типу 1: 8,991 сек.
Середній час очікування заявок типу 2: -
Загальний середній час очікування: -
Дослід 5.
Середня довжина черги клієнтів типу 1: 958
Середня довжина черги клієнтів типу 2: 509
Загальна середня довжина черги: 733
Середній час очікування заявок типу 1: 9,049 сек.
Середній час очікування заявок типу 2: -
Загальний середній час очікування: -
11.Висновки
Після проведення експериментів можна зробити такі висновки:
Система працює стабільно, але не ефективно. Дуже швидко зростає довжина черги, це пов”язане із тим, що система не справляється із поступаючим потоком заявок. Існує також проблема того, що клієнти типу 2 взагалі не обслуговуються. Ймовірність простою системи рівна нулю, оскільли заявки надходять на багато швидше ніж система може їх опрацювати.
Отже, можна дати такі рекомендації щодо покращення системи:
Зменшення часу обслуговування (особливо клієнтів типу 1).
Збільшення періоду між надходженням заявок (особливо клієнтів типу 1).
Введення в систему додаткового обслуговуючого пристрою.
Особисто на мій погляд, найкращим є третій варйант. Він дає можливість розвантажити систему, але без зменшення її продуктивності.
Список використаної літератури
Саати Т. Л. Элементы теории обслуживания. М.: Советское радио , 1971.
Гнеденко Б. В., Коваленко И. Н. Введение в теорию массового обслуживания , 2-е изд. М.:Наука , 1987.
Советов Б.Я., Яковлев С.А. “Моделирование систем” Учебник для ВУЗов- М.: Высшая школа , 1985.
Рябов В.Ф.,Советов Б.Я.Яковлев С.А. Машинное моделирование при проектировании больших систем .Л., 1978
Сочнев А.В.,Яковлев С.А. Методические указания к выполнению курсовой работы по дисциплине “Моделирование систем” Л.,1986.
Якимов И.М.,Мосунов В.Е.,Яхина З.Т. Имитационное моделирование сложных систем. Казань,1984.
Ивахненко А.Г.,Юрачковский Ю.П. Моделирование сложных систем по экспериментальным данным.М., 1987.
Имитационное моделирование в задачах синтеза структуры сложных систем /А.Д.Цвиркун и др.М.,1985.
Додаток 1.
Лістинг програми на мові С++
Файл functions.h
#include <math.h>
#define a 16807
#define m 2147483647;
#define LAMBDAi 2;
double p = (int)GetTickCount();
//генератор нормально розподілених випадкових чисел
double Rand(double p0)
{
double t, x, q;
x = a * p0;
t = x / m;
q = (int)t;
p = x - q * m;
t = p / m
return t;
}
// генератор випадкових чисел, розподілених по експоненційному закону
double Exponent(UINT lambda)
{
double r;
r = Rand(p);
return ( (-1 / lambda) * log(r) );
}
//return -1000 ... +1000
int Generator()
{
double d1;
int res;
static bool b = TRUE;
d1 = Exponent(900000);
res = (int)d1;
if(res<0) res *= -1;
while(res>1000)
{
res = (int)res / 2;
}
if(b) res *= -1;
b = !b;
return res;
}
//////////////////////////////////////////////////////////////////////////////
void IntToStr(char *lpResultBuff, int iDigit)
{
// PARAMETRS:
// lpResult -- buffer, wich will get string
// iDigit -- integer digit, wich will translated to string
wsprintf(lpResultBuff, "%d", iDigit);
return;
}
#define MESSAGE(szText) MessageBox(0, szText, "Kursova", 0);
Файл types.h
typedef struct _CLIENT
{
UINT uIn;
UINT uOut;
UINT uNumber;
} CLIENT;
Файл Kursova.cpp
#include "stdafx.h"
#include <shlwapi.h>
#include <fstream.h>
#include "resource.h"
#include "functions.h"
#include "types.h"
////////// all times in miliseconds
#define CLIENT1_SERVTIME 3000
#define CLIENT2_SERVTIME 2000
#define CLIENT1_COMETIME 1500
#define CLIENT2_COMETIME 3000
#define TIME_RATIO 1 //1 - 1min == 1sec
//0.5 - 1min == 0.5sec
// prototipes ///////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);
DWORD WINAPI ServerThread(HWND);
DWORD WINAPI Client1Thread(HWND);
DWORD WINAPI Client2Thread(HWND);
VOID CALLBACK TimerProc(HWND, UINT, UINT, DWORD);
void Serving(CLIENT*, UINT, UINT);
/////////////////////////////////////////////////////////////////////////////////////
// global variables /////////////////////////////////////////////////////////////////
char szResults[150];
UINT uWorkingTime = 0;
HANDLE hServerThread, hClient1Thread, hClient2Thread;
DWORD dwServerID, dwTread1ID, dwTread2ID;
HWND hMainWindow;
HANDLE hSemaphore;
UINT uTimerID;
//controls
UINT uTurn1 = 0;
UINT uTurn2 = 0;
UINT uTurn = 0;
//turns
bool bCMOWork = TRUE;
CLIENT Turn1[5000] = {0, 0, 0};
UINT uAmount1 = 0; //кількість
CLIENT Turn2[5000] = {0, 0, 0};
UINT uAmount2 = 0;
// code /////////////////////////////////////////////////////////////////////////////
int APIENTRY WinMain(HINSTANCE hInstance,