На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> gpss Смоделировать работу парикмахерской с тремя креслами , Рассчитать баланс парикмахерской
    Смоделировать работу парикмахерской с тремя креслами и кассой.
    Поток клиентов – экспоненциальный со средним временем 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. Как сделать правильно баланс?
      В итоге получилось так.


      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
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0153 ]   [ 15 queries used ]   [ Generated: 25.04.24, 20:40 GMT ]