На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (54) « Первая ... 11 12 [13] 14 15 ...  53 54  ( Перейти к последнему сообщению )  
> GPSS , Вопрос для знающих
    Кстати, а если б нужно было, например, равномерное распределение не от 5 до 100, а от 0 до 30, то как бы это тогда выглядело?
      DUniform(1,0,30) ;дискретное
      Uniform(1,0,30) ;непрерывное
      RN1#30\1000 ;дискретное
      RN1#30/1000 ;непрерывное
        еще точнее ;) :
        RN1#30\999 ;дискретное
        RN1#30/999 ;непрерывное
        и общаяя формула для равномерного распределения A+/-B:
        A-B+(2#B#RNn)/999,
        A-B - наименьшее значение;
        2#B - ширина выборки. стр.191
          ага, точно, врубилась! спасибо, ребят! :)
            мой вариант точнее. делим то мы не на верхнее значение, а на колличество значений ))
            А это 0..999 итого 1000 штук ;)
              Цитата MEGERA @
              * Customers arrival during 0 - 30 minutes.
              GENERATE (Exponential(1,0,60)),,,200
              TRANSFER ,Parking

              * Customers arrival during 30 - 90 minutes.
              GENERATE (Exponential(1,0,40)),,1800,400 ;Частота появления через 0.5 часа.
              TRANSFER ,Parking

              * Customers arrival during 90 - 150 minutes.
              GENERATE (Exponential(1,0,80)),,5400,300 ;Частота появления через 1.5 часа.
              TRANSFER ,Parking

              * Customers arrival during 150+ minutes.
              GENERATE (Exponential(1,0,120)),,9000 ;Частота появления через 2.5 часа.
              TRANSFER ,Parking

              GENERATE (Exponential(1,0,60)),,,200
              TRANSFER ,ENTRY

              GENERATE (Exponential(1,0,40)),,1800,400 ;Частота появления через 0.5 часа.
              TRANSFER ,ENTRY

              GENERATE (Exponential(1,0,120)),,9000 ;Частота появления через 2.5 часа.
              TRANSFER ,ENTRY

              А вот еще такой вопрос. У меня покупатели двух типов: приезжающие на машине(отправляются трансфером на метку Parking) и приходящие пешком (отправляются на метку ENTRY в обход парковки). И я не могу допетрить, как их идентифицировать. Т.е. Надо тем, кто на машине, присвоить один уникальный параметр, а тем, кто пришел пешком - другой, чтоб потом я могла их разделить, когда дело дойдет до возвращения на парковку... Только как?
                ExpandedWrap disabled
                  ASSIGN 1,1
                  TRANSFER ,Parking
                   
                  ASSIGN 1,2
                  TRANSFER ,ENTRY
                  ага, а когда мне потребуется их разделить, использую конструкцию

                  TEST NE 1,1,Fin
                  LEAVE Park
                  Fin TERMINATE

                  Правильно?
                    ExpandedWrap disabled
                      TEST E P1,1,Fin

                    ASSIGN A,B - операнд A задает номер параметра или его имя..
                    ExpandedWrap disabled
                      ASSIGN 1,123
                      ASSIGN 1,P$name
                       
                      ASSIGN name,123
                      ASSIGN name,P1

                    во всех(как правило) остальных местах (в т.ч. и в операнде B), - P$имя параметра или P и номер
                    ExpandedWrap disabled
                      TEST E P1,123,Fin
                      TEST E P$name,123,Fin
                      фу ты, блин! все-таки пора заняться серьезно изучением гпсс, чтоб так не тупить :whistle: спасибо!
                        И последний вопрос!
                        Нужно сгенерить транзакты по экспоненте таким образом, чтоб в первые 3 часа транзакты поступали по 80 транзактов в час, во вторые 3 часа по 160, в третьи 3 часа по 350, в четвертые 3 часа по 450.

                        GENERATE Exponential(1,0,80)
                        GENERATE Exponential(1,0,160),,10800
                        GENERATE Exponential(1,0,350),,21600
                        GENERATE Exponential(1,0,450),,32400

                        Правильно делаю?
                          вообще то нет. транзакты если начнут поступать - уже не остановятся. просто последующие дженерейты генят с задержкой.

                          я бы предложил конструкцию типа

                          generate ,,,1
                          met1 advance (Exponential(1,0,60/80))
                          split 1,ent
                          test g ac1,(3#60),met1
                          met2 advance (Exponential(1,0,60/160))
                          split 1,ent
                          test g ac1,(6#60),met2
                          met3 advance (Exponential(1,0,60/350))
                          split 1,ent
                          test g ac1,(9#60),met3
                          met4 advance (Exponential(1,0,60/450))
                          split 1,ent
                          test g ac1,(12#60),met4 ;поидее вместо этой и следующей строки можно поставить трансфер на метку met4. всеравно, когда время
                          terminate ;будет равно 12*60 - моделирование завершится и в терминейт ничего не прийдет.

                          ent ... ... ;собсно текст модели
                          ..................

                          generate (12#60)
                          terminate 1
                          start 1

                          верхний сегмент является генератором.

                          провериться очень легко. из первого генератора должно поступить 3*80 транзактов, из второго 3*160 и т.д. +/- конечно, но очень незначительный.
                          т.е. строки 3-5 посетит 240 транзактов, строки 6-8 - 480 транзактов. и т.д.

                          столько ли транзактов генерируется в ваших генераторах? ;)

                          Добавлено
                          кстати не очень понял, что вы берете за единицу модельного времени. мой пример в минутах.

                          судя по приведенному выше тексту программы, время моделирования у вас
                          Time_work VARIABLE 8#60#60
                          т.е. 8 часов в секундах
                          так?

                          откуда тогда беруться четвертые три часа (до 12-и часов)?
                            Вот-вот, как раз моих-то генераторах все генерилось наоборот (не по нарастающей, а по убывающей, да и вообще неправильно), щас понимаю, почему ))) а насчет 12 часов, это просто я условие изменила. раньше моделировала для 8 часов в секундах, а теперь для 12, потому и получается 4 промежутка по 3 часа. Спасибо! Кажется, на этом все ))))
                              Кстати на будущее. Plus (exponential - plus-функция) функции лучше всегда брать в кавычки. Они вроде формул и ставить их без кавычек на место параметров нежелательно. В блоке assign можно найти тому подтверждение - без скобок модель попросту не скомпилится.
                                мда.... думала я, что наконец покончила с этой задачей, но не тут-то было ((( все же gpss - что-то мега-непостижимое для меня, наверно ((( внесла кое-какие изменения в задачу, теперь она звучит так: Промоделировать работу супермаркета/универсама, в который покупатели приходят пешком и приезжают на машинах.
                                Парковка может предоставить места для 80 автомобилей. Если все места парковки автомобилей заняты, то вновь прибывший автомобиль вынужден покинуть супермаркет/универсам. Примем, что время прихода покупателя с парковки в супермаркет составляет 60±40 с.
                                Магазин имеет 150 ручных тележек и 50 корзин для транспортировки купленных товаров. Если производится покупка более 10 товаров, то необходима тележка, в противном случае используется корзина. После выбора тары покупатели подходят к стеллажам для выбора товаров. Время, затраченное на выбор одного товара и переход к следующему стеллажу, примем за 80с. Количество покупок, которые покупатель может совершить в магазине ограничим в интервале от 0 до 30. Число взятых товаров будем определять с помощью датчика случайных чисел.
                                Количество обслуживающих касс увеличим до 12. Причем 3 из них буду предназначены только для обслуживания покупателей с количеством товаров не более 10.
                                Поток клиентов в будние дни будем считать экспоненциальным
                                 с 10.00 до 13.00 – 80 человек в час;
                                 с 13.00 до 16.00 – 160 человек в час;
                                 с 16.00 до 19.00 – 350 человек в час;
                                 с 19.00 до 22.00 – 450 человек в час.
                                Моделирование провести для 12 - часового рабочего дня.

                                С множеством изменений и ваших советов решение стало выглядеть как-то так:

                                Checkout_1 EQU 1 ; 1-9 обычные кассы
                                Checkout_N EQU 9
                                Check_1 EQU 10 ; 10-12 кассы экспресс-обслуживания
                                Check_N EQU 12
                                N_Purchases VARIABLE Uniform(1,0,30) ; количество покупок от 0 до 30
                                Time_system TABLE M1,10000,10000,7
                                Purchases TABLE P$Qty_purchases,10,10,10
                                N_Customer TABLE X$Customer,100,50,12
                                Basket STORAGE 50 ; корзин 50
                                Cart STORAGE 150 ; тележек 150
                                Park STORAGE 80 ; парковочных мест 80
                                Cashier VARIABLE (P$Qty_purchases#0.05)+ 0.7 ; время рассчтеа на кассе
                                Time_shop VARIABLE P$Qty_purchases#1.3 ; время хождения по магазину и выбора товаров
                                INITIAL X$Customer,0


                                Parking TRANSFER Both,,Lost
                                ENTER Park ; транзакт занимает место на парковке
                                ADVANCE 1,0.7 ; идет от машину к магазину
                                Entrar SAVEVALUE Customer+,1
                                ASSIGN Qty_purchases,V$N_Purchases ; ему присваивается кол-во покупок, которые он собирается совершить
                                TEST LE P$Qty_purchases,10,QCart ; если покупок меньше 10, то он встает в очередь за корзиной, если больше - то за тележкой
                                GATE SNF Basket,QCart
                                QUEUE Basket_Q
                                ENTER Basket
                                DEPART Basket_Q
                                ASSIGN Container,Basket
                                TRANSFER ,Shop

                                QCart QUEUE Cart_Q
                                ENTER Cart
                                DEPART Cart_Q
                                ASSIGN Container,Cart

                                Shop ADVANCE V$Time_shop ; ходит по магазину, выбирая нужные товары
                                TEST LE P$Qty_purchases,10,Norm ;если выбрано товаров меньше 10 то идет на экспресс-кассу, если больше - то на обычную (Norm)
                                SELECT MIN Xque,Check_1,Check_N,,Q ; выбирает кассу с минимальной очередью

                                QUEUE P$Xque
                                SEIZE P$Xque
                                DEPART P$Xque
                                ADVANCE V$Cashier
                                RELEASE P$Xque
                                LEAVE P$Container
                                TRANSFER ,go


                                Norm SELECT MIN Minque,Checkout_1,Checkout_N,,Q ; выбирает кассу с минимальной очередью

                                QUEUE P$Minque
                                SEIZE P$Minque
                                DEPART P$Minque
                                ADVANCE V$Cashier
                                RELEASE P$Minque
                                LEAVE P$Container

                                go TABULATE Time_system
                                TABULATE Purchases
                                SAVEVALUE Customer-,1

                                TEST E P$Transport,2,Fin ; если пришел пешком, отправляется на Fin, если на машине - то уезжает с парковки
                                LEAVE Park
                                Fin TERMINATE

                                Lost TERMINATE

                                *****************************************************************************
                                generate ,,,1
                                met1 advance (Exponential(1,0,60/40))
                                split 1,ent
                                test g ac1,(3#60),met1
                                met2 advance (Exponential(1,0,60/80))
                                split 1,ent
                                test g ac1,(6#60),met2
                                met3 advance (Exponential(1,0,60/175))
                                split 1,ent
                                test g ac1,(9#60),met3
                                met4 advance (Exponential(1,0,60/225))
                                split 1,ent
                                test g ac1,(12#60),met4
                                TERMINATE

                                ent ASSIGN Transport,1
                                TRANSFER ,Entrar

                                generate ,,,1
                                met5 advance (Exponential(1,0,60/40))
                                split 1,ent1
                                test g ac1,(3#60),met5
                                met6 advance (Exponential(1,0,60/80))
                                split 1,ent1
                                test g ac1,(6#60),met6
                                met7 advance (Exponential(1,0,60/175))
                                split 1,ent1
                                test g ac1,(9#60),met7
                                met8 advance (Exponential(1,0,60/225))
                                split 1,ent1
                                test g ac1,(12#60),met8
                                TERMINATE

                                ent1 ASSIGN Transport,2
                                TRANSFER ,Parking
                                *****************************************************************************

                                GENERATE (12#60)
                                TABULATE N_Customer
                                TERMINATE 1
                                START 1

                                И все, вроде нормально было, пока я не впихнула в модель эти экспресс-кассы Check_1 и Check_N! с их появлением статистика какая-то косячная получается! например, может показывать, что в данный момент обслуживается 8 клиентов, а еще 7 ждут в очереди, хотя свободные кассы еще есть! с чем это может быть связано?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (54) « Первая ... 11 12 [13] 14 15 ...  53 54


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0413 ]   [ 15 queries used ]   [ Generated: 18.06.25, 15:52 GMT ]