![>](style_images/1/nav_m.gif)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.241.74] |
![]() |
|
Сообщ.
#1
,
|
|
|
Смоделировать работу парикмахерской с тремя креслами и кассой.
Поток клиентов – экспоненциальный со средним временем 25 минут. Стрижка занимает 30±10 минут, расчет с кассой 2±1 минуты, стрижка стоит 800±100 рублей. В среднем каждый час (экспоненциальный закон) приходит клиент на стрижку и окраску волос, окраска волос занимает 60-90 минут. Временные параметры записать в параметры транзакта. Стоимость окраски составляет 1000±200 рублей Рассчитать баланс парикмахерской за месяц, если месячные платежи на содержание парикмахерской (аренда, коммунальные платежи, зарплата сотрудников, материалы) составляет от 500 до 600 тысяч рублей в месяц (задать дискретной случайной функцией с шагом 20 тыс.) Парикмахерская работает 10 часов в день без выходных. Смоделировать 30 дней работы. Рассуждение. 2 потока. 1-й те, кто стригутся. 2-й те, кто сригутся и красятся. Мнококанальное устройство, 3 парикмахера. Очередь общая. Отказов нет. Идет доход от транзактов 1-го и 2-го потоков после их обслуживания. Расходы по окончании месяца в виде дискретной функции. пишу такой код SIMULATE ZATR FUNCTION RN6,D6 0.1, 500000 / 0.3, 520000 / 0.5, 540000 / 0.7, 560000 / 0.9, 580000 / 1, 600000 KRES STORAGE 3 ;память KRES имеет емкость 3 ед. * * 1-й сегмент * GENERATE (EXPONENTIAL(1,0,25)) ;транзакт по экспоненциальному закону QUEUE 1 ;входит в очередь ENTER KRES ;занять канал в памяти KRES одно место DEPART 1 ;выход из очереди ADVANCE 30,10 ;стрижка LEAVE KRES ;освободить канал в памяти KRES одно место ADVANCE 2,1 ;расчет с кассой SUM1 VARIABLE DUNIFORM(1,800,100) SAVEVALUE DOHOD1+,SUM1 TERMINATE * * 2-й сегмент * GENERATE (EXPONENTIAL(1,0,60)) ;транзакт по экспоненциальному закону QUEUE 1 ;входит в очередь ENTER KRES ;занять канал в памяти KRES одно место DEPART 1 ;выход из очереди ADVANCE 30,10 ;стрижка ADVANCE 75,15 ;окраска LEAVE KRES ;освободить канал в памяти KRES одно место ADVANCE 2,1 ;расчет с кассой SUM1 VARIABLE DUNIFORM(1,800,100) SUM2 VARIABLE DUNIFORM(1,1000,200) SAVEVALUE DOHOD2+,(SUM1+SUM2) RASHOD VARIABLE ZATR SAVEVALUE RASH,RASHOD ;вычисляем расходы составили BALANS VARIABLE DOHOD1 + DOHOD2 - RASH ;вычисляем баланс SAVEVALUE BAL,BALANS TERMINATE * *3-й сегмент * GENERATE 30#10#60 TERMINATE 1 * *команды управления * START 1 Ожидал, что в переменную RASHOD запишется одно из значений функции ZATR (500000,520000,540000,560000,580000,600000), а так оказалось 10004.000. Как сделать правильно баланс? |
Сообщ.
#2
,
|
|
|
В итоге получилось так.
SIMULATE ZATR FUNCTION RN6,D6 0.1, 500000 / 0.3, 520000 / 0.5, 540000 / 0.7, 560000 / 0.9, 580000 / 1, 600000 ;дискретное распределение KRES STORAGE 3 ;память KRES имеет емкость 3 ед. * * 1-й сегмент * GENERATE (EXPONENTIAL(1,0,25)) ;транзакт по экспоненциальному закону QUEUE 1 ;входит в очередь ENTER KRES ;занять одно кресло DEPART 1 ;выход из очереди ADVANCE 30,10 ;стрижка LEAVE KRES ;освободить одно кресло SUM1 VARIABLE DUNIFORM(1,800,100) ADVANCE 2,1 ;расчет с кассой SAVEVALUE DOHOD1+,SUM1 TERMINATE * * 2-й сегмент * GENERATE (EXPONENTIAL(1,0,60)) ;транзакт по экспоненциальному закону QUEUE 1 ;входит в очередь ENTER KRES ;занять одно кресло DEPART 1 ;выход из очереди ADVANCE 30,10 ;стрижка ADVANCE 75,15 ;окраска LEAVE KRES ;освободить одно кресло SUM1 VARIABLE DUNIFORM(1,800,100) SUM2 VARIABLE DUNIFORM(1,1000,200) ADVANCE 2,1 ;расчет с кассой SAVEVALUE DOHOD2+,(SUM1+SUM2) SAVEVALUE RASHOD,FN$ZATR ;вычисляем расходы составили SAVEVALUE BALANSE,(X$DOHOD1 + X$DOHOD2 - X$RASHOD) ;вычисляем баланс TERMINATE * *3-й сегмент * GENERATE (30#10#60) TERMINATE 1 * *команды управления * START 1 SAVEVALUE RETRY VALUE DOHOD1 0 6581316.000 DOHOD2 0 5761440.000 RASHOD 0 500000.000 BALANSE 0 11822752.000 |