На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (54) « Первая ... 20 21 [22] 23 24 ...  53 54  ( Перейти к последнему сообщению )  
> GPSS , Вопрос для знающих
    Цитата Eugen @
    QUEUE QueueContanerLenta
    ENTER ContanerLenta
    DEPART QueueContanerLenta
    TRANSFER BOTH,,met2
    SEISE lenta1
    ADVANCE xxx
    RELEASE lenta1
    TRANSFER ,metEnd

    met2 TRANSFER BOTH,,met3
    SEIZE lenta2
    // и т.п.

    metEnd LEAVE ContanerLenta

    у такого кода есть один недостаток. основная нагрузка пойдет на первую ленту, чуть меньшая на вторую.. и на последнюю - минимальная нагрузка.
    что бы распределить:
    Цитата

    lenta storage 4
    generate 1
    QUEUE LNB
    TEST L (F1+F2+F3+F4),4
    ASSIGN LEN,RN1
    POVT ASSIGN LEN,((P$LEN@4)+1)
    TEST E F*LEN,0,POVT
    ENTER lenta
    SEIZE LEN
    DEPART LNB
    ADVANCE 4
    RELEASE LEN
    LEAVE lenta
    TERMINATE 1

    Вот как то так =)
      мне ни холодно ни жарко от этих недостатков, это ж лучше чем ничего ;)
      Цитата TEMENb @
      POVT ASSIGN LEN,((P$LEN@4)+1)
      TEST E F*LEN,0,POVT

      заменяестя на
      ExpandedWrap disabled
        SELECT MIN LEN,1,4,,F


      Добавлено
      ЗерГуд!
      Цитата TEMENb @
      ASSIGN LEN,RN1
      POVT ASSIGN LEN,((P$LEN@4)+1)
      TEST xxx POVT
        Ребята помогите решить задачу, сессия уже почти на шее, очень нужна помощь !

        Условие: К 3м рабочим поступают детали для обработки. Интервал поступления деталей 4-6 мин. Если первый занят, то деталь идет ко второму, если второй занят, то деталь идет к третьему. При этом 3й должен обрабатывать все имеющиеся детали. Время обработки: первый: 9-11 мин, второй 11-15 мин, третий 7-9.

        Вот мой примерный вариант решения. Можете помочь над поиском ошибок

        код программы:

        GENERATE 5,1
        QUEUE detali
        QUEUE srednee_vremya_obrabotki
        TRANSFER Both,rabochiy1,perexod

        rabochiy1 SEIZE rab1
        DEPART detali
        ADVANCE 10,1
        DEPART srednee_vremya_obrabotki
        RELEASE rab1
        TRANSFER ,Next

        perexod TRANSFER Both,rabochiy2,rabochiy3

        rabochiy2 SEIZE rab2
        DEPART detali
        ADVANCE 13,2
        DEPART srednee_vremya_obrabotki
        RELEASE rab2
        TRANSFER ,Next

        rabochiy3 SEIZE rab3
        DEPART detali
        ADVANCE 8,1
        DEPART srednee_vremya_obrabotki
        RELEASE rab3
        TRANSFER ,Next

        Next SAVEVALUE Ave_Queue,QT$detali
        TERMINATE 1
        Сообщение отредактировано: NoVa -
          Цитата Eugen @
          Цитата TEMENb @
          POVT ASSIGN LEN,((P$LEN@4)+1)
          TEST E F*LEN,0,POVT

          заменяестя на
          ExpandedWrap disabled
            SELECT MIN LEN,1,4,,F

          не, не заменяется. в этом вся соль.
          селект выберет первый по списку.
          А моя конструкция выберет случайный свободный
            Eugen,TEMENb спасибо за помощь. А если багаж при разделении на ленты идет на разные рейсы по каждой ленте?
              Arrrgh, можно поставить
              Цитата

              REIS FUNCTION P$LEN,E4
              1,MET1/2,MET2/3,MET3/4,MET4
              ...........
              release P$len
              leave lenta
              TRANSFER ,(FN$REIS)

              Скрытый текст
              Ну это не то что б высший пилотаж, но несколько необычно

              Метки указывают каждая на соответствующий рейс.
              Причем не забудьте поставить эти метки в тексте, иначе вылетит ошибка.
              вовторых, можно использовать тесты
              Цитата
              ...........
              release P$len
              leave lenta
              TEST NE P$LEN,1,MET1
              TEST NE P$LEN,2,MET2
              TEST NE P$LEN,3,MET3
              TEST NE P$LEN,4,MET4
              ............

              Скрытый текст
              такая реализацция имеет уже более привычную форму, хоть места занимает больше, а работает точно так же


              ну и третий, на мой взгляд самый приемлемый вариант - это выразить рейсы такими же числами
              Цитата
              ...........
              release P$len
              leave lenta
              ASSIGN REIS,P$LEN
              SEIZE P$REIS
              ............
                Цитата TEMENb @
                не, не заменяется. в этом вся соль.
                селект выберет первый по списку.

                Точно выберет первое свободное устройство :whistle:
                  Помогите несчастной блондинке :( . Не работает ссылка на kp1.

                  tbl1 table M1,500,500,10

                  generate 10,3,,500
                  queue qpc1
                  seize pc1
                  depart qpc1
                  advance 2
                  advance 18,2
                  release pc1


                  transfer .5,kp1,out
                  kp1 seize kp
                  advance 3
                  release kp
                  tabulate tbl1
                  savevalue 1,c1
                  transfer ,kom2
                  terminate 1

                  generate 600,300
                  funavail kp,re,kp1
                  advance 20,5
                  favail kp
                  terminate

                  kom2 queue qpc2
                  seize pc2
                  depart qpc2
                  advance 2
                  advance 18,2
                  release pc2

                  out terminate 1
                  Сообщение отредактировано: Blond -
                    Привет! Адекватно ли мое решение поставленной задаче? :)
                    Задача:
                    На 2-х канальный телефон скорой помощи в среднем 1 раз в 100 секунд с равной вероятностью звонят старики, взрослые и дети. Время разговора с ними соответственно 180, 150 и 200 секунд. Определить распределение времени ожидания, при условии, что если в очереди находятся заявки с разным временем обслуживания, то первой обслуживается заявка с меньшим временем.
                    Решение:
                    telefon storage 2
                    wosrast function rn1,d3
                    0.333,1/0.666,2/1,3
                    wremya function p$type,l3
                    1,180/2,150/3,210
                    generate (exponential(1,50,50))
                    assign type,fn$wosrast
                    gate snf telefon,wait
                    seg1 enter telefon
                    advance fn$wremya
                    leave telefon
                    unlink que,seg1,1
                    terminate 1
                    wait link que,type

                    Спасибо!
                      tigreg, впринципе похоже на правильное, и очень даже симпатично использованы фукнции (респект))), только лень разбираться зачем вы использовали пользовательские списки.
                      почему вам не сделать еще одну функцию, которая будет попросту задавать приоритеть транзакта? ну а дальше очередь и мку. и никакхи СП ненадо.
                        :D Спасибо, TEMENb!
                        Еще одна задача (условия почти те же):
                        На 2-х канальный телефон скорой помощи в среднем 1 раз в 100 секунд с равной вероятностью звонят старики, взрослые и дети. Время разговора с ними соответственно 180, 150 и 200 секунд. Определить распределение времени ожидания, при условии, что если в очереди появляется заявка с меньшим временем обработки, чем обслуживаемая, выполнить прерывание.
                        Мое решение:
                        telefon storage 2
                        generate (exponential(1,50,150))
                        assign 1,210
                        transfer ,seg1

                        generate (exponential(1,50,150))
                        priority 1
                        assign 1,180
                        transfer ,seg1

                        generate (exponential(1,50,150))
                        priority 2
                        assign 1,150
                        transfer ,seg1

                        seg1 queue line
                        enter telefon
                        depart line
                        preempt telefon,pr,seg1,1
                        advance p1
                        return telefon
                        leave telefon

                        terminate 1
                          Цитата Blond @
                          Не работает ссылка на kp1.
                          Работает только 1 раз.
                          После выполнения funavail kp,re,kp1 прерванный транзакт направляется к метке kp1. При этом он продолжает занимать устройство kp. В строке kp1 seize kp транзакт снова встает в очередь на занятие устройства kp(не освободив его). - deadlock

                          напиши так:
                          ExpandedWrap disabled
                            transfer .5,kp1,out
                            KP2 RELEASE kp
                            kp1 seize kp
                            ...
                            generate 600,300
                            funavail kp,re,KP2
                            HELP!
                            Формирование размера пакета
                            ASSIGN 1,(Gamma(1,0,769.23,2))
                            Необходимо сделать разбиение по след. принципу:
                            Пакеты имеют переменный размер в знаках и при передаче разбиваются на фрагменты: пакеты размером до 1000 знаков – на фрагменты по 200; от 1000 до 1800 – по 300; сверх 1800 – по 500. Последний фрагмент разбиения содержит остаточное количество знаков.
                              Подскажите пожалуйста (немогу пересчитать исходные данные) Задача: На станцию технического обслуживания автомобилей (СТО) поступают в смену (8 часов) 50±10 машин. На станции работают 4 бригады. Каждая бригада обслуживает за смену 10±3 автомобиля. На стоянке перед СТО могут ожидать обслуживания 5 машин.
                              Смоделировать работу СТО по обслуживанию 100 машин. Определить коэф. загрузки бригад и вероятность отказа в обслуживании.

                              Я перевел исходные данные в необходимую для написания программы форму, и получил, что на СТО машины поступают через каждые 10±2 мин, а время обслуживания одной машины равно ПРИМЕРНО 52±16 мин. (корректно ли здесь округлять?)


                              Вопрос, нужно ли пересчитывать исходные данные в форму "кол-во машин/минуту", т.е. через какой промежуток времени поступает машина на СТО, и сколько времени уходит на ремонт одной машины? Или можно как то решить не пересчитывая исходные данные? Если всетаки нужно пересчитывать, помогите пожалуста правильно это сделать.

                              Чему, к примеру, будет равно среднее время обработки? Считал двумя разными способами и получил 48 мин и 52,6 мин, что правильно непойму, а это очень важно т.к. нужно еще составить мат. модель (привести формулы), и все рассчитать в ручную используя эти формулы.

                              вот код который у меня получился:
                              simulate
                              stoyanka storage 5
                              10 generate 10,2,,100
                              20 gate SF stoyanka,nast
                              30 terminate 1
                              40 nast enter stoyanka
                              50 transfer ALL,b1,b4,5

                              100 b1 seize br1
                              110 leave stoyanka
                              120 advance 52,16
                              130 release br1
                              140 terminate 1

                              200 b2 seize br2
                              210 leave stoyanka
                              220 advance 52,16
                              230 release br2
                              240 terminate 1

                              300 b3 seize br3
                              310 leave stoyanka
                              320 advance 52,16
                              330 release br3
                              340 terminate 1

                              400 b4 seize br4
                              410 leave stoyanka
                              420 advance 52,16
                              430 release br4
                              440 terminate 1

                              start 100

                              Заранее благодарю!
                                Цитата Figaro-serg @
                                Вопрос, нужно ли пересчитывать исходные данные в форму "кол-во машин/минуту", т.е. через какой промежуток времени поступает машина на СТО, и сколько времени уходит на ремонт одной машины? Или можно как то решить не пересчитывая исходные данные? Если всетаки нужно пересчитывать, помогите пожалуста правильно это сделать.

                                Специально для этих целей существует Единица модельного времени. 8 часов ничто иное как 60 минут. так что сложно назвать это пересчетом. Это те же самые интервалы времени.
                                Вовторых, перевести часы в минуты будет правильней, чем моделировать в часах, НО gpss/w такая штука, что и в часах и в минутах выдаст вам одинаковые результаты (великолепно работает с дробным временем)

                                Цитата Figaro-serg @
                                равно ПРИМЕРНО 52±16 мин
                                вот округлять или не округлять - это уже ваше личное дело. я бы не округлял. На самом деле, если вас смущает округление - вовсе не обязательно переводить часы именно в минуты.. вы можете перевести часы в санти часы ) почему нет? одна единица моельного времени равна одной сотой часа! и проблема с округлением исчезнет сама собой. главное потом все правильно разрулить преподу ;)
                                Зато числа сразу получаться красивые. и что б получить итог в часах - надо будет всего лишь открнуть два младших разряда.
                                Цитата Figaro-serg @
                                Чему, к примеру, будет равно среднее время обработки?

                                учи мат часть. В отчете в таблице FACILITY колонка AVT.TIME.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (54) « Первая ... 20 21 [22] 23 24 ...  53 54


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0683 ]   [ 15 queries used ]   [ Generated: 19.06.25, 21:25 GMT ]