На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (54) 1 2 [3] 4 5 ...  53 54  ( Перейти к последнему сообщению )  
> GPSS , Вопрос для знающих
    из другой темы
    Цитата
    Но лучше для этих целей использовать параметры транзакта. Т.к. в этой задаче у вас один транзакт (пакет), а реально в сети их дофига. Маркер должен быть у каждого свой.

    GENERATE ,,,1
    ASSIGN MARKER,1
    SMET ASSIGN MARKER+,1
    TEST G P$MARKER,5,SMET
    TERMINATE 1
    START 1


    и не забудьте звездочку перед терминейт убрать. ато ошибочка малость вылетит.
    Кроме того, вы задаете значение переменной сразу после генерации транзакта. вообщем то инициализация переменной становиться лишней
    Дальше.. какой смысл ждать единиццу времени перед генерацией? =)

    Ждать единицу не нужно, это я так пытаюсь найти причины неработоспособности модели любыми способами.
    Наверно всё же variable использовать, т к рассказываю смысл задачи:
    Есть 10 компьютеров и 1 сервер, они объединены в сеть Token Ring. Работает токен ринг так: на всю сеть имеется 1 маркер, он переходит поочередно от одного компа к другому. Компьютер может посылать данные другому комьютеру только в тот момент когда получил маркер, когда он его получил он его преобразует немного, прицепляет данные и передает следующему компьютеру этот кадр, слад компьютер получает и проверяет свой адрес с адресом в кадре, если пододит, то он копирует данные и помечает маркер о копировании, дальше его отправляет следующему компьютеру и т д пока кадр не вернется отправителю, как вернулся так отправитель освобождает маркер и посылает след компу. Вот надо модель сделать, я почти 1ый раз вижу этот ГПСС, а лабораторная по Сетям, а задание сложнее чем на курсовую по Моделированию Систем на ГПСС. Кто чем может помогите, модель должна быть не сложная, но нужно, чтобы присутствовали ошибки в сети - сломался компьютер. Время хранения маркера у одного компьютера не больше 10мс, а посылаемый пакет не болльше 18кбайт
      variable - это вычисляемое выражение...
      Вам же нужна сохраняемая величина (я б сказал переменная, но это вводит в заблуждение)))

      теперь касаемо вашей задачи
      ExpandedWrap disabled
        GENERATE ,,,1
        SAVAVALUE MARKER,1
        SMET SAVEVALUE MARKER+,1
        TEST G X$MARKER,5,SMET
        TERMINATE 1
        START 1


      следующий момент. это ж получается так, что маркер обходит 5 компов и покидает систему. Разве так должно быть? может вам надо что то типа

      ExpandedWrap disabled
        GENERATE ,,,1
        SAVAVALUE MARKER,1
        SMET SAVEVALUE MARKER,((X$MARKER @ 5)+1)       ; (остаток от деления на 5) плюс 1
        ADVANCE 1       ; что бы снова не зациклиться
        TRANSFER ,SMET
         
        GENERATE 1000000       ;моделируем 1 секунду (если за единиццу модельного времени принять 1 мкс)
        TERMINATE 1
         
        START 1

      собственно получается, что маркер последовательно принимает значения от 1 до 5.

      дальше. Адрес получателя и адреса отправлителя надо записывать в параметр транзакта. что соответствует действительности. Ведь адрес несет пакет.
      Вообщем пишите, пробуйте, а будут вопросы - мы подскажем.

      Это лаба? 0.о
      Я думал дипломик...
        Цитата artyomst @
        Есть 10 компьютеров и 1 сервер, они объединены в сеть Token Ring. Работает токен ринг так: на всю сеть имеется 1 маркер, он переходит поочередно от одного компа к другому.

        Если перевести, то получается следующее:
        1. скорость сети к примеру 10 мб/с
        2. пакеты не более 18кбайт
        3. компьютер, обладающий маркером, отправляет пакеты в течении ~10мс
        4. каждый пакет содержит адрес компа получателя
        5. комп получивший пакет проверяет адреса и при совпадении, помечает пакет как скопированный

        Процедура передачи маркера на другой комп:
        6. определить адрес кандидата на получение маркера управления сетью
        7. комп обладающий маркером создает спец. пакет и помечает в него адрес компа-кандидата к которому должен перейти маркер
        8. также как и в пункте 5
        9. комп обладающий маркером проверяет вернувшийся пакет и если кандидат на получение маркера "отметился" в нем, то передает ему (кандидату) управление сетью. Иначе пункт 7.

        Кандидата на получение маркера, мож. определить множеством способов:
        а. сосед слева/справа
        б. случайно выбранный комп.
        и усложнения
        в. с использованием служебной инфы. в каждом сообщении: о работоспособности компа; о том сколько он хочет передать; о его приоритете; о времени выставления заявки на получение маркера и т.п.

        +
        Цитата artyomst @
        нужно, чтобы присутствовали ошибки в сети - сломался компьютер
        тут нужно задать интенсивность поломок и время восстановления.
        Определить тип поломки: комп не обрабатывает пакеты адресованные ему или вообще не пропускает пакеты и сеть встала
        Сервер - что это?


        И снова 2 варианта: ПЕРВЫЙ
        Цитата TEMENb @
        Вообщем пишите, пробуйте, а будут вопросы - мы подскажем.

        ВТОРОЙ GPSS задача (20-60$ от реализации)
        Сообщение отредактировано: Eugen -
          Ребят! Помогите советом!
          Задача:
          В цех сборки поступает три типа деталей: детали первого типа с интервалом 20+-3 минут, детали второго типа с интервалом 16+-5 минут, детали третьего типа с интервалом 20 минут. Как только сборщик получает 3 детали любого типа, он может собрать продукт, что отнимает у него 5 минут. Процент брака на выходе - 15%. Если готовый продукт был поврежден один раз, то он отправляеся на переработку сборщику, если во второй - то в отходы, утилизация которых происходит каждые 10 минут. Небракованый продукт поступает к упаковщику, который может упаковать 5 продуктов за 5 минут.

          И вот тут проблема: когда деталь идет на переработку в 1 раз или бракуется 2 раз, нужно назначить переменную, скорее всего, которая будет определять, отправлялась ли деталь уже на повторную сборку или пришла только в первый раз. Не знаю, как это организовать...

          GENERATE ,,,1
          SPLIT 1,MM1
          SPLIT 1,MM2
          SPLIT 1,MM3

          MM1 ADVANCE 20,3 \\ детали первого типа
          SPLIT 1,MM1
          TRANSFER ,MET
          MM2 ADVANCE 16,5 \\ детали второго типа
          SPLIT 1,MM2
          TRANSFER ,MET
          MM3 ADVANCE 20 \\ детали третьего типа
          SPLIT 1,MM3
          TRANSFER ,MET

          MET ASSEMBLE 3 \\ сборка 3 деталей
          QUEUE OCHER1 \\встать в очередь
          MET3 SEIZE WORKER \\ занять сборщика
          DEPART OCHER1 \\ покинуть очередь
          ADVANCE 5 \\ сборка идет минут
          RELEASE WORKER \\ освободить ресурс

          TRANSFER 0.15,MET1,MET2 \\ в 15% случаев отправиться по дресу MET2, в 85% - по адресу MET1

          MET1 GATHER 5 \\ собрать 5 членов ансамбля
          QUEUE OCHER2 \\ встать в очередь
          SEIZE PACKER \\ занять упаковшика
          DEPART OCHER2 \\ выйти из очереди
          ADVANCE 5 \\ процесс упаковки длится 5 минут
          RELEASE PACKER \\ освободить ресурс

          MET3 PREEMPT WORKER
          ADVANCE 5
          RETURN WORKER
          TRANSFER ,MET4

          MET2 ASSIGN QUANTITY,2
          LOOP QUANTITY,MET3 \\в случае, если брак выявлен в 1 раз, направиться в блок MET3, т.е. на повторную сборку, вот здесь, наверно, должно быть что-то типа SAVEVALUE и TEST, но я смутно представляю, как задать условие...

          QUEUE OCHER3 \\ после второго раза выявления брака пойти в отходы
          SEIZE WASTES
          DEPART OCHER3
          ADVANCE 10
          RELEASE WASTES

          TERMINATE

          GENERATE (8#60)
          TERMINATE 1
          START 1

          // TEMENb, у тебя был ряд претензий по этой задаче ))) выкладывай! а то так и не научусь задачи нормально решать )))
            Цитата
            GENERATE ,,,1
            SPLIT 1,MM1
            SPLIT 1,MM2
            SPLIT 1,MM3

            MM1 ADVANCE 20,3 \\ детали первого типа
            SPLIT 1,MM1
            TRANSFER ,MET
            MM2 ADVANCE 16,5 \\ детали второго типа
            SPLIT 1,MM2
            TRANSFER ,MET
            MM3 ADVANCE 20 \\ детали третьего типа
            SPLIT 1,MM3
            TRANSFER ,MET
            met terminate


            Цитата
            GENERATE ,,,1
            SPLIT 1,MM2
            SPLIT 1,MM3

            MM1 ADVANCE 20,3 \\ детали первого типа
            SPLIT 1,MM1
            TRANSFER ,MET
            MM2 ADVANCE 16,5 \\ детали второго типа
            SPLIT 1,MM2
            TRANSFER ,MET
            MM1 ADVANCE 20 \\ детали третьего типа
            SPLIT 1,MM3
            TRANSFER ,MET
            met terminate


            найдите отличия ;)
            я разве так писал?

            а касаемо ряда замечаний - у вас логика модели не выдержана. к примеру, зачем вам блок премит? я не вижу у вас в задании слов "абсолютный приоритет". Где у вас "упаковка каждые 5 минут", где "утилизация каждые 10 минут"?

            скажем так, не щитая ошибки при генерации, до метки МЕТ1 со всем согласен. А вот дальше, простите, белиберда.


            вот, пожалуйста, повторная сборка
            Цитата
            met2 QUEUE OCHER1 \\встать в очередь
            MET3 SEIZE WORKER \\ занять сборщика
            DEPART OCHER1 \\ покинуть очередь
            ADVANCE 5 \\ сборка идет минут
            RELEASE WORKER \\ освободить ресурс

            TRANSFER 0.15,MET1,util \\ в 15% случаев отправиться НА УТИЛИЗАЦИЮ, в 85% - НА УПАКОВКУ


            используйте пользовательские списки для установки в очередь на утилизацию и упаковку

            Саму утилизацию и упаковку - вынесите в виде отдельных сегментов.

            ато получается, что вместо "утилизация проходит каждые 10 мин" вы делаете "утилизация каждой детали длиться 10 мин". чуствуете разниццу?
            Сообщение отредактировано: TEMENb -
              Цитата TEMENb @
              Цитата
              GENERATE ,,,1
              SPLIT 1,MM1
              SPLIT 1,MM2
              SPLIT 1,MM3

              MM1 ADVANCE 20,3 \\ детали первого типа
              SPLIT 1,MM1
              TRANSFER ,MET
              MM2 ADVANCE 16,5 \\ детали второго типа
              SPLIT 1,MM2
              TRANSFER ,MET
              MM3 ADVANCE 20 \\ детали третьего типа
              SPLIT 1,MM3
              TRANSFER ,MET
              met terminate


              Цитата
              GENERATE ,,,1
              SPLIT 1,MM2
              SPLIT 1,MM3

              MM1 ADVANCE 20,3 \\ детали первого типа
              SPLIT 1,MM1
              TRANSFER ,MET
              MM2 ADVANCE 16,5 \\ детали второго типа
              SPLIT 1,MM2
              TRANSFER ,MET
              MM1 ADVANCE 20 \\ детали третьего типа
              SPLIT 1,MM3
              TRANSFER ,MET
              met terminate


              найдите отличия ;)
              я разве так писал?

              а касаемо ряда замечаний - у вас логика модели не выдержана. к примеру, зачем вам блок премит? я не вижу у вас в задании слов "абсолютный приоритет". Где у вас "упаковка каждые 5 минут", где "утилизация каждые 10 минут"?

              В таком случае, я не понимаю, почему у нас отсутствует ММ1? Я сначала подумала, что это описка. Ведь здесь, кажется, объявляется, что spit разбивает ансамбль на ММ1, ММ2 и ММ3. А ММ1 не указывается....
              А насчет ряда замечаний... Блок preempt - это просто эксперимент я ставила :rolleyes: и насчет утилизации верно, а вот насчет упаковки... в условии ведь не сказано, что она происходит каждые 5 минут. Там сказано, что упаковщик может упаковать 5 изелий за 5 минут, так что здесь неважно, через какие промежутк времени эта самая упаковка происходит.
                угу, нащет упаковщика не доглядел. Действительно отдельный сегмент на него не нужен.

                нащет сплит - посудите сами.

                у вас ведь генерируется три типа деталей. так? =)
                вот идет транзакт. он проходит через первый сплит, появляется потомок, которого отправляют на метку ММ2, родитель движет дальше. т.е. по прохождении одного сплита получается два транзакта.
                Далие родитель попадает во второй сплин - потомок идет на ММ3, а родитель - дальше.. а дальше - это мм1 =)))
                два сплита - три транзакта. все верно =)
                  ага, действительно ))) правильно все!спасибо за помощь!
                    а вот задача такого плана: даны графы состояния системы...имеется система вероятности состояний. для их получения проделала кучу математики : составлялась матрица интенсивности по указанному графу состояния системы, получаем систему уравнений Колмогорова,решаем методом Крамера, применяем обратное преобразование Лапласа и далее, по полученным преобразованиям, постоена зависимость р(t), где р-стационарная вероятность системы в Маткаде).. и мне осталось постоить модель такой системы в GPSS. ума не приложу как делать это((. :wall: .может кто объяснит..с чего начать то ..
                    буду очень рада за помошь
                      Подскажите,пожалуйста,как узнать время переходного(неустановившегося)режима?!оч нужно!
                        Задан экспоненциальный закон распределения интенсивности поступления клиентов. Почему при построении графика зависимости вероятности отказа от интенсивности поступления в нескольких точках при одинаковой интенсивности поступления и разной интенсивности обслуживания получается одна и та же вероятность отказа?
                          код в студию
                            Помогите пожалуйста решить задачу на MICRO-GPSS (STUDENT VERSION 95-01-01).

                            Задание: На комплексный конвейер сборочного цеха каждые 5+-1 мин. (случайная величина распределена по нормальному закону распределения) поступают 5 изделий первого типа, и каждые 20+-7 мин поступают (случайная величина распределена по экспоненциальному закону распределения) 20 изделий второго типа. Конвейер состоит из секций, вмещаемых по 10 изделий каждого типа. Комплектация начинается только при наличии деталей обоих типов в требуемом количестве и длится 10 мин. При нехватке деталей секция конвейера остается пустой.Смоделировать работу конвейера в течение 8 часов.

                            Также необходимо "Определить вероятность пропуска секции, средние и максимальные очереди по каждому типу изделий. Определить экономическую целесообразность перехода на секции по 20 изделий со временем комплектации 20 мин.", но это уже не главное.


                            Я находила решение этой задачи в Интернете, но не на MICRO-версии, а на обычном GPSS:

                            ExpandedWrap disabled
                              NN1  STORAGE 10         //выделение 10 памяти для NN1
                              NN2  STORAGE 10         //выделение 10 памяти для NN2
                              MET1 GENERATE 5,1       //интервал поступления деталей 1-ого типа
                                   SPLIT 4                //копирование 4 деталей, 5 деталей идет далее.
                                   QUEUE QUE1         //занятие очереди QUE1
                                   ENTER NN1          //вход в накопитель NN1
                                   DEPART QUE1        //освобождение очереди QUE1
                                   SAVEVALUE 1+,1     //увеличивает и сохраняет значение
                                   TEST E Q1,10,MET3      //проверяем условие: если Q1=10, то переход к метке MET3
                                   LEAVE NN1,10           //освобождает 10 единиц памяти в накопителе NN1
                                   TERMINATE 9        //уничтожение 9 транзактов
                              MET2 GENERATE 20.7      //интервал поступления деталей 2-ого типа
                                   SPLIT 19               //копирование 19 деталей 20 деталей идут далее.
                                   QUEUE QUE2         //занятие очереди QUE2
                              ENTER NN2           //вход в накопитель NN2
                                   DEPART QUE2        //освобождение очереди QUE2
                              TEST E Q2,10,MET3           //проверяем условие: если Q2=10, то переход к метке MET3
                              LEAVE NN2,10                    //освобождает 10 единиц памяти в накопителе NN2
                                   TERMINATE 9        //уничтожение 9 транзактов
                              MET3 SEIZE KAN          //занятие канала KAN
                                   ADVANCE 10         //обработка в канале KAN
                              RELEASE KAN         //освобождение KAN
                                   TERMINATE          //уничтожение транзакта
                                   GENERATE 480       //время работы конвейера
                                   TERMINATE 1        //уничтожение транзакта
                                   START 1
                                   END


                            Но мне кажется тут многое неправильно: транзакты генерируются не по заданному закону распределения; в блоке LEAVE почему-то указано 10 транзактов, в то время как в начале моделирования туда придёт только 5 транзактов, следовательно условие "TEST E Q1,10,MET3" не выполнится и будет из памяти удалено 10 транзактов, заместо 5; да и вообще логика программы по-моему не верна в принципе... да и к тому же не для Микро-версии написано.

                            Начала писать свою программу. Сначала пробовала делать при помощи waitif:

                            ExpandedWrap disabled
                              simulate
                              NN1 STORAGE 10
                              NN2 STORAGE 10
                               
                              generate 5+fn$snorm*1
                              split 4,met0
                              met0 QUEUE que1
                              enter NN1
                              waitif NN1=nf
                              waitif NN2=nf
                              goto com3
                               
                              generate 20*FN$XPDIS+3
                              split 19,met2
                              met2 QUEUE que2
                              enter NN2
                              waitif NN2=nf
                              waitif NN1=nf
                              goto com3
                               
                              com3 DEPART que1
                              DEPART que2
                              seize que3
                              advance 10
                              leave NN1
                              leave NN2
                              release que3
                              ASSEMBLE 20
                              TERMINATE 19
                               
                              GENERATE 480
                              TERMINATE 1
                              START 1
                              END


                            Но как-то подряд по два waitif'a вряд ли правильно использовать, наверняка что-то зациклится не как нужно. Да и нужно ли писать ASSEMBLE 20, к тому же в том месте где я его написала, я также не знаю. Так или иначе программа вылетает с ошибкой "Слишком много транзактов в системе" и судя по тому, что выдаёт статистика - мало какие транзакты доходят до метки com3.

                            Решила переделать программу на использование просто if'ов:

                            ExpandedWrap disabled
                              simulate
                              NN1 STORAGE 10
                              NN2 STORAGE 10
                               
                              generate 5+fn$snorm*1
                              split 4,met1
                              met1 seize que1
                              enter NN1
                              release que1
                              goto com3
                               
                              generate 20*FN$XPDIS+3
                              split 19,met2
                              met2 seize que2
                              enter NN2
                              release que2
                              goto com3
                               
                              com3 if NN1=NF,exit
                              if NN1=NF,exit
                              assemble 20
                              seize que3
                              leave NN1
                              leave NN2
                              advance 10
                              release que3
                               
                              exit terminate
                               
                              GENERATE 480
                              TERMINATE 1
                              START 1
                              END


                            Тут вроде логика работы программы прозрачней и правильней, но всё равно программа вылетает с ошибкой "Слишком много транзактов в системе". При этом судя по статистике во второй блок IF заходит транзакт всего 1 раз... не знаю почему...

                            В общем у меня складывается ощущение что я концептуально неправильно что-то делаю - помогите пожалуйста бедной девушке - уже третий день сижу вот мучаюсь... ;(
                              эээээээээээээ.........
                              А что за микроверсия и с чем ее едят?
                              Де можно ее качнуть и есть ли мануалы по ней?

                              Сам я юзаю GPSS/W (Student-Professional вроде отличаются только допустимым колличеством блоков программы)
                              В состоянии коди из GPSS/W переделать в GPSS/PC-GPSS/H, хоть и геморойно, но вполне возможно.
                              А про MICRO-GPSS слышу впервые.

                              Добавлено
                              Цитата makingbeauty @
                              NN1 STORAGE 10 //выделение 10 памяти для NN1
                              NN2 STORAGE 10 //выделение 10 памяти для NN2
                              MET1 GENERATE 5,1 //интервал поступления деталей 1-ого типа
                              SPLIT 4 //копирование 4 деталей, 5 деталей идет далее.
                              QUEUE QUE1 //занятие очереди QUE1
                              ENTER NN1 //вход в накопитель NN1
                              DEPART QUE1 //освобождение очереди QUE1
                              SAVEVALUE 1+,1 //увеличивает и сохраняет значение
                              TEST E Q1,10,MET3 //проверяем условие: если Q1=10, то переход к метке MET3
                              LEAVE NN1,10 //освобождает 10 единиц памяти в накопителе NN1
                              TERMINATE 9 //уничтожение 9 транзактов
                              MET2 GENERATE 20.7 //интервал поступления деталей 2-ого типа
                              SPLIT 19 //копирование 19 деталей 20 деталей идут далее.
                              QUEUE QUE2 //занятие очереди QUE2
                              ENTER NN2 //вход в накопитель NN2
                              DEPART QUE2 //освобождение очереди QUE2
                              TEST E Q2,10,MET3 //проверяем условие: если Q2=10, то переход к метке MET3
                              LEAVE NN2,10 //освобождает 10 единиц памяти в накопителе NN2
                              TERMINATE 9 //уничтожение 9 транзактов
                              MET3 SEIZE KAN //занятие канала KAN
                              ADVANCE 10 //обработка в канале KAN
                              RELEASE KAN //освобождение KAN
                              TERMINATE //уничтожение транзакта
                              GENERATE 480 //время работы конвейера
                              TERMINATE 1 //уничтожение транзакта
                              START 1
                              END



                              насколько мне видно - неверная реализация. Глубоко не копался но на первый взгляд сразу бросаются в глаза "TERMINATE 9 " при "START 1" и сишные коментарии, вызывающие ошибку.
                                Вообщем программа совсем не соответствует заданию. :o

                                Исходя из программы - для детали каждого вида свой отдельный контейнер. работают они независимо друг от друга.принцип действия таков - детальки идут и не глядя направо-налево, без лишних слов становятся в контейнер. <_< Контейнер постепенно заполняется.. но очередь перед ним уже существует! :blink: она пустая, но она есть. ее длинна - ноль. И вот, пока очередь еще не достигла 10 деталек - контейнеры начинают по одной детальке плевать в комплектацию. :blink: причем на КАЖДУЮ детальку, в комплектации, тратится 10 минут. так длится до тех пор, пока очередь не достигнет размера 10 (хотя этот момент не случается. модель его проскакивает :rolleyes: ) вообщем когда очередь равна 10 - моделирование заканчивается :whistle: . причем веська криво заканчивается.
                                Цитата makingbeauty @
                                LEAVE NN1,10 //освобождает 10 единиц памяти в накопителе NN1
                                TERMINATE 9 //уничтожение 9 транзактов
                                В глубину мысли такого экстеррного завершения моделлирования даже лезть не хочецца :wall:
                                а после того, как этот момент пройден - снова начинаем по одной детальке плевать в комплектацию ))

                                НО!! Это еще не все!! :wacko:
                                Контейнеры заполняются только один раз!! :whistle:
                                Даже не заполняются, а позволяют войти десяти деталям.
                                А потом грят - "наша суточная норма закончена, приходите завтра" - и никого не пускают больше :tong:
                                Ээээ.... вам такая модель нада была? :D
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (54) 1 2 [3] 4 5 ...  53 54


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0416 ]   [ 15 queries used ]   [ Generated: 18.03.25, 03:11 GMT ]