Министерство образования и науки Республики Казахстан
Карагандинский государственный технический университет
Кафедра
ПОЯСНИТЕЛЬНАЯ
ЗАПИСКА
к курсовому проекту
по дисциплине "Прикладная теория систем"
Тема: "Разработка имитационной модели системы
массового обслуживания"
Руководители
Студент
(группа)
Караганда 2009
Содержание
Введение
Постановка задачи
Описание программного модуля
Руководство пользователя
Результаты тестирования программы
Заключение
Список использованных источников
Приложение
Листинг программы
В теории систем большое место занимают системы способные описывать массовое обслуживание. Это связано с растущей глобализацией современного мира, а, соответственно, и с растущей актуальностью систем массового обслуживания. В связи этим, изучение данного раздела теории систем очень важно.
В данном курсовом проекте рассматривается система массового обслуживания, применимая для магазинов.
В теории систем массового обслуживания изучаются проблемы функционирования систем и наиболее часто возникающие ситуации в рассматриваемом процессе обслуживания. Для изучения данной проблемы необходимо рассматривать такие проблемы как - постановка в очередь, порядок обслуживания, выбывание из очереди, периодичность попадания в очередь. Из всего этого должны быть сделаны выводы о количестве аппаратов обслуживания. Это очень важный момент, так как позволяет уменьшить время простоя одного аппарата, а соответственно увеличить выгоду в целом. То есть моделирование систем массового обслуживания позволяет определить оптимальное количество аппаратов.
В данном курсовом проекте рассматривается система массового обслуживания - магазин.
Описание задачи: время работы с 8 до 20. Необходимо ввести различную периодичность поступления заявок в зависимости от времени суток. Также существует приоритет поступления заявок - помимо основных клиентов существуют клиенты, обслуживаемые вне очереди, для них периодичность поступления задаётся отдельно. Также необходима возможность ввода времени обслуживания клиента. Необходимо определить оптимальное число аппаратов обслуживания.
1. Выбор аппарата обслуживания. Если система только начала свою работу и приходит только первый клиент или же если свободны все аппараты, то он выбирается случайным образом. В обратном случае выбирается тот аппарат, очередь к которому меньше.
2. Выбирается случайным образом время, через которое должен появиться следующий клиент из заданного заранее промежутка.
3. Также случайным образом выбирается время, через которое клиент должен быть обслужен, либо должен покинуть очередь.
4. Определяется состояние клиента. Пойдёт ли он сразу на обслуживание либо будет ждать своей очереди.
5. С пункта первого по четвёртый процедура повторяется, но для клиентов с более высоким приоритетом.
Далее проверяется каждый клиент, находящийся в очереди.
6. Если клиент в данный момент обслуживается, то проверяется, не прошло ли время его обслуживания. Если прошло, то ему присваивается статус "Обслужен" и далее ищется следующий клиент для обслуживания.
7. Если клиент в данный момент ожидает обслуживания, то проверяется нельзя ли его поставить на обслуживание и если нельзя, то не вышло ли время его пребывания в очереди. Если вышло время пребывания, то клиенту присваивается статус "Выбыл".
8. Далее проверяется, не закончилось ли время работы системы. Если время закончилось, то процесс завершается и выводится отчёт о работе системы. Если же не закончилось, то процесс повторяется с первого пункта.
Работа программы начинается с её настройки. Так как здесь имитируется работа магазина, то обязательно необходимо определить начала работы (рис.1 - 1). Промежуток работы программы от 8: 00-20: 00. от выбранного промежутка зависит периодичность появления клиентов в магазине. Далее выбирается продолжительность работы магазина (рис.1 - 2).
Общее время работы | Номер аппарата обслуживания | Время работы аппарата | Время простоя аппарата | Общее количество клиентов | Количество обслуженных клиентов | Количество выбывших клиентов |
1: 50: 0 | 1 | 1: 50: 0 | 0: 0: 0 | 10 | 9 | 0 |
2 | 1: 49: 0 | 0: 1: 0 | 8 | 7 | 0 | |
3 | 1: 47: 0 | 0: 3: 0 | 8 | 7 | 0 | |
4 | 1: 46: 0 | 0: 4: 0 | 8 | 7 | 0 | |
5 | 1: 45: 0 | 0: 5: 0 | 8 | 7 | 0 | |
6 | 1: 44: 0 | 0: 6: 0 | 7 | 7 | 0 | |
7 | 1: 43: 0 | 0: 7: 0 | 7 | 6 | 0 | |
8 | 1: 41: 0 | 0: 9: 0 | 7 | 6 | 0 | |
9 | 1: 41: 0 | 0: 9: 0 | 7 | 6 | 0 | |
10 | 1: 41: 0 | 0: 9: 0 | 49 | 19 | 29 |
Результатом работы над данным курсовым проектом стала программа, моделирующая систему массового обслуживания - магазин. При помощи данной программы можно делать выводы о работе системы, выбирать оптимальное количество аппаратов обслуживания для хорошей работы. Программное средство в ходе моделирования визуально показывает пользователю текущие результаты работы системы.
1. Лифшиц А.Л. Статистическое моделирование СМО, М., 1978.
2. Советов Б.А., Яковлев С.А. Моделирование систем, М: Высшая школа, 1985.
3. Гмурман В.Е. Теория вероятностей и математическая статистика, М: Высшая школа, 2001.
4. Пригодин Н.В. Системный подход в моделироании М., 1986.
void CSMODlg:: OnButton1 ()
{
UpdateData ();
if (! NTime)
{
timeS=m_StartH*60+m_StartM;
timeE=m_EndH*60+m_EndM;
timeT=timeS+timeE;
int i=timeS;
Tm=timeS;
m_Table2. SetCols (m_CountOch*4);
m_Table2. SetRows (1);
m_Table2. SetRows (4);
int j=0;
while (j< (m_CountOch*4))
{
m_Table2. SetTextMatrix (0,j,"№"); m_Table2. SetColWidth (j,350);
m_Table2. SetTextMatrix (0,j+1,"Получение"); m_Table2. SetColWidth (j+1,700);
m_Table2. SetTextMatrix (0,j+2,"Обслужен"); m_Table2. SetColWidth (j+2,700);
m_Table2. SetTextMatrix (0,j+3,"Состояние"); m_Table2. SetColWidth (j+3,800);
j+=4;
}
for (i=0; i<1000; i++)
{
OCH. o1 [i] =0; OCH. o2 [i] =0;
OCH. kol1 [i] =0; OCH. kol2 [i] =0;
OCH. Obsluzh1 [i] =1;
OCH. Vib1 [i] =1;
OCH. TP [i] =0; OCH. TW [i] =0;
stat1 [i] =0;
stat2 [i] =0;
for (int k=0; k<1000; k++)
{
Kli [i]. num1 [k] =0; Kli [i]. time1 [k] =0; Kli [i]. timeVib [k] =0;
Kli2 [i]. num1 [k] =0; Kli2 [i]. time1 [k] =0; Kli2 [i]. timeVib [k] =0;
}
}
OCH. io1=0; OCH. io2=0;
Klient=0; Klient2=0;
bol=0;
}
LTimer1=SetTimer (ID_TIMER1,100,NULL);
UpdateData (FALSE);
}
void CSMODlg:: OnTimer (UINT uTime)
{
int i,n,tp;
float hr,min,sek;
char a [255] ;
time_t t;
srand ( (unsigned) time (&t));
COleSafeArray saRet;
DWORD numElements [] = {m_CountOch, 2};
saRet. Create (VT_R8, 2, numElements);
if (Klient2<=0 && bol! =0)
{ // очередь с первым приоритетом
i=0;
tp= (atof (m_Table. GetTextMatrix (1,3)) - atof (m_Table. GetTextMatrix (1,2))) *100;
Klient2= (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (1,2));
++OCH. kol1 [i] ; // общее количество для аппарата
++OCH. o2 [i] ; // количество с данным приоритетом