В данном разделе мы разрабатываем программную реализацию имитационного моделирования работы Парикмахерской. Помимо общих переменных, которые были описаны выше в п.2.3., в этом разделе можно описать и частные переменные, которые используются в программе, разработанной на языке программирования С++:
В программной реализации используются следующие частные переменные:
· i, j - используются для хранения вспомогательных индексных значений;
· t - дискретные отсчёты времени периода моделирования;
· tin – входящий поток, время прихода посетителя (момент поступления в систему следующего требования);
· ton [ ] - моменты завершения обработки требований соответствующими элементам массива обрабатывающими устройствами, то есть массив для сохранения интервалов времени ухода посетителей;
· Cena –цена обслуживания клиента;
· r – число отказов пользователям;
· m – число обслуженных посетителей;
R -выручка парикмахерской за период моделирования
Программная реализация алгоритма производится в несколько этапов:
|
|
1. Подключение в программу заголовочных файлов:
#include //включение в программу текстов заранее подготовленных файлов
#include<iostream.h> //содержит потоки данных ввода/вывода
#include<math.h> //хранятся математически функции
#include<conio.h> //
#include<stdlib.h> //
# include <values.h> //содержит описания данных
#define //определение параметров модели и прочих исходных данных на глобальном уровне, описанной в п.
#define RCLIENTS x1[discrete(p1)]
float x1[]={7,8,9,10,11,12,13,14,15};
float p1[]={0.05, 0.05, 0.05, 0.2, 0.2, 0.2, 0.05, 0.05, 0.15};
#define CENA x2[discrete(p2)]
floatx1[]={10,12,13,14,15,16,17,18,19};
floatp1[]={0.05, 0.05, 0.05, 0.05, 0.05, 0.2, 0.2, 0.2, 0.15};
#defineC (125*125*125*125*5) //объявление мультипликативного конгруэнтного метода, которое описывается в п.1.3.
#definen 2 // общее число парикмахеров
#defineT (8*60*30) // период моделирования (в мин.)
2. Генерация мультипликативным конгруэнтным методом псевдослучайной последовательности чисел:
floatrand(void) //генерация псевдослучайной последовательности с равномерным распределением
{
static unsigned long int u=C;
// static – модификатор для того, чтобы локальная переменная u сохраняла значение между двумя последующими обращениями к этой функции
u=u*C; //С - константа
returnu/float(0xfffffffful); // (0xfffffffful) – максимально беззнаковые целое число, заданное в шестнадцатеричной форме.
}
3. Вызов функций моделирования:
//функция моделирования показательного распределения, описанная в п.1.7.
unsigned int discrete(float p[ ])
{
float s, r;
int k=0;
s=p[ ];
r=rand();
while (s<r)
{
k++;
s+=s+p[k];
}
returnk;
}
4. Инициализация
unsigned long int i,j,cost, R,r,n,k;
float t, tin;
m=0; k=0; R=0;
5. Запускпрограммы
tin=RIN;
for(i=0;i<T;i++)
6. Обработказавершения
for(j=0;j<N;j++) if(ton[j]==i)
{
m++;
ton[j]=-1;
}
7. Обработка очередного входящего события
|
|
if(i==tin)
{
j=0; while((ton[j]!=-1) && (j<N)) j++;
if(j!=N)
{
i=RCLIENTS;
n++;
for(;t<N;i++)
if(rand1()<=P)
{
cost=cost+a*CENA;
k++;
}
} else r++;
tin=RIN+i;
}
}
8. Выводимые результаты:
cout<<"........................ Rezultati modelirovaniya..............................";
cout<<"1.Posetili parikmakherskuy:"<<n<<" chel"<<endl;
cout<<"2.Iz nikh obclujeno: "<<m<<" chel"<<endl;
cout<<"3. Iz nikh ne obclujeno: "<<r<<endl;
cout<<"5Viruchka sostavila: "<<n*cost<<" rub"<<endl;
getch();
}
Моделирование программы с заданными параметрами
Запустив программу, написанную на языке С++, мы получили следующие результаты согласно исходным данным:
Рис3. Результат выполнения разработанной программы
При данном количестве парикмахеров– 2, было рассчитано:
· Общее количество посетителей-25 человек;
· Общее количество обслуженных клиентов-20человек;
· Oбщее количество отказов-5 человек;
· Полученная прибыль составила 13690руб.