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();
}
2.5 Моделирование программы с заданными параметрами
Запустив программу, написанную на языке С++, мы получили следующие результаты согласно исходным данным:
Рис3. Результат выполнения разработанной программы
При данном количестве парикмахеров– 2, было рассчитано:
· Общее количество посетителей-25 человек;
· Общее количество обслуженных клиентов-20человек;
· Oбщее количество отказов-5 человек;
· Полученная прибыль составила 13690руб.
2.6 Машинный эксперимент с разработанной моделью
В результате машинного эксперимента с разработанной моделью мы получили следующие данные, приведенные в таблице 1:
Таблица 1. Полученные результаты задачи
Количество парикмахеров | Общее кол-во посетителей | Число обслуженных | Число отказов | Выручка |
1 | 17 | 13 | 4 | 8398 |
2 | 25 | 20 | 5 | 13690 |
3 | 45 | 27 | 18 | 17530 |
4 | 57 | 33 | 24 | 16890 |
5 | 64 | 43 | 21 | 26540 |
6 | 78 | 51 | 27 | 23540 |
7 | 89 | 63 | 26 | 26540 |
8 | 110 | 76 | 34 | 31790 |
9 | 124 | 81 | 43 | 37950 |
10 | 140 | 97 | 43 | 39890 |
Изменяя число парикмахеров в салоне, мы получаем следующие графики:
Рис 4. График зависимости дохода Парикмахерской от количества мастеров
По данным таблицы видим что увеличивается с увеличением числа парикмахеров в салоне до7, дальше результат не меняется и остается на постоянном уровне.
Рис.5. График зависимости количества посетителей от числа парикмахеров
Здесь мы можем заметить то же самое, что поток клиентов в салон увеличивается до определенного предела, а после остается не изменным.
Изменяя число отказов поступающим требованиям, получим следующий график:
Рис.6. График зависимости обслуженных требований от числа парикмахеров
Здесь мы видим, что чем больше в салоне мастеров, то тем больше число обслуженных клиентов.
Рис.7. График зависимости отказов поступающим требованиям от числа парикмахеров
Этот график показывает нам, что число отказов поступающим требованиям уменьшается при увеличении числа мастеров в салоне.
Заключение
Одной из наиболее крупных отраслей развития технологий с применением ЭВМ, является математическое моделирование, которое достаточно просто (в отличие от аналогового моделирования) может быть реализовано на ЭВМ разных модификаций и возможностей. Математическое моделирование тесно связано с имитационным моделированием. Одним из разделов математического моделирования являются модели систем массового обслуживания и их изучение.
В данном курсовом проекте была построена имитационная модель процесса работы Парикмахерской с использованием программы С++, которая рассчитывает общий объем полученной выручки, количество обслуженных посетителей, число отказов общее количество посетителей. Результатом данного курсового проекта является имитационная модель работы процесса обслуживания клиентов Парикмахерской. Модель реализована на языке программирования высокого уровня Си++. Текст программы состоит из следующих функций:
Программа является рабочей. Выдает на экран вероятностные и статистические характеристики работы процесса обслуживания клиентов в Парикмахерской в соответствии с постановкой задачи.
На основании проделанной работы, можно сделать следующие выводы:
1. Математическая модель системы массового обслуживания, созданная нами, адекватна реальному объекту;
2. Проведенные исследования показали эффективность нашей модели и способов “приведения её в действие” при определении необходимых нам параметров по сравнению с ручным способом моделирования и расчетов параметров;
3. Созданная модель имеет достаточную, для таких моделей, степень универсальности, т.к. диапазон входных параметров системы можно легко и быстро изменить.
Список использованной литературы
1. Методические указания к выполнению курсового проекта по дисциплине «Имитационное моделирование экономических процессов».- Махачкала,ГОУ ВПО ДГТУ, 2008, 51 стр.
2. «Машинные имитационные эксперименты с моделями экономических систем» под ред. Нейлера;
3. Кеольтон В., Лод А. «Имитационное моделирование. Классика CS» издание 3-е, 2004г.;
4. Варфоломеев В.И. «Алгоритмическое моделирование элементов экономических систем». - М.: Финансы и статистика, 2000г.
5. Клейнрок Л. «Теория массового обслуживания.»-М.: Машиностроение,1979.-432 с.
6. Прицкер А. «Введение в имитационное моделирование»-М.: Мир,1987.-644с.
7. Емельянов А.А.,Власова Е.А., «Имитационное моделирование экономических процессов» - М. Финансы и статистика,2002.
8. Соболь И.М. «Численные методы Монте-Карло».-М.Наука,1973.
9. Бахвалов Н.С. «Численные методы» – М.: Наука, 1973
Приложение
Программа, реализующая моделирование работы Парикмахерской.
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#define VACANCY (-1)
#define T (200*8*60)
#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 RCOST x2[discrete(p2)]
float x2[]={10,12,13,14,15,16,17,18,19};
float p2[]={0.05,0.05,0.05,0.05,0.05,0.2,0.2,0.2,0.15};
#define a 3
#define L 10
#define RAND (125*125*125*125*5)
float rand1(void)
{
static unsigned long int u=RAND;
u*=RAND;
return u/(float(0xFFFFFFFF)+1.0);
}
unsigned int discrete(float p[])
void main (void)
{
unsigned long int i,j,cost,k,n,r,R;
float t,tin;
n=0; k=0; R=0;
for(t=RIN;t<T;t+=RIN)
{
i=RCLIENTS;
n+=i;
for(;i<RCLIENTS;i++)
if(rand1()<=P)
{
cost=cost+a*RCOST;
k++;
}
}
cout<<"Posetili parikmaherskuu"<<n<<"chel"<<endl;
cout<<"Iz nih obslugeno "<<k<<"chel"<<endl;
cout<<"Iz nih ne obslugeno"<<r<<"chel"<<endl;
cout<<"Viruchka"<<R<<"rub"<<endl;
cout<<"Srednei dlina ocheredi"<<L<<"chel"<<endl;
}