На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (54) « Первая ... 46 47 [48] 49 50 ...  53 54  ( Перейти к последнему сообщению )  
> GPSS , Вопрос для знающих
    Полное условие вам ни к чему, моделируется работа локальной подсистемы хранения информации, элемент который я очень кратко вынес - элемент работы определённой "ветки(куска)" технологии.

    ExpandedWrap disabled
      СЕЛЕКТ 5,10,10+V$N,...  ; Короче в 5 параметр записываем куда идёт на обслуживание транзакт, для этого выделены очереди(приборы) с 10, по 10+N
       
      QUEUE P5
      SEIZE P5
      DEPART P5
      ADVANCE (1/Q$P5)  ;Для простоты допустим так
      RELEASE P5


    Дак вот когда транзакт входит к АДВАНС, требуется знать длину очереди в к данному прибору, а какая она(очередь) 10, 11, 12, 13 ... - знает только P5 (Q$P5) и никто другой.

    Может быть, можно какой нибудь хитрый блочек(связку) сделать, описывающих case P5: 10: savevalue 1,Q$10; 11:savevalue 1,Q$10;
    но как это реализовать + с увеличением N идея конечно превращается в муд))
      Попробуйте так
      generate 1
      assign 5,10
      QUEUE P5
      SEIZE P5
      DEPART P5
      savevalue 1,q*5
      ADVANCE x1 ;Для простоты допустим так
      RELEASE P5
      terminate
      generate 10
      terminate 1
        :scratch: , Интересная интерпритация, главное компилятор не ругацца и значение через SHOW правду показывает. Одно осталось понять, извините за мою компетентность 8-) , Могли бы вы объяснить запись Q*5? Вот чес слово в GPSS недавно, когда используется знак *, и что он вообще символизирует? Спс.
          Теперь у Вас все должно работать как надо!
          q*5 означает текущее значение длины очереди, номер которой является значением параметра 5 активного транзакта. * означает косвенную адресацию. Извините, что сразу не понял, что Вам надо.
            Большое вам спасибо за своевременную и квалифицированную помощь!

            P.S. Да прибудет с нами Шрайбер))
              Рад был помочь.
                А вот могли бы ещё по такому вопросу проконсультировать - в процессе создания моделей, изучения литературы - в голову приходят интересны мысли, например в модели мне интересно было бы использовать следующие структуры:
                1. Динамически изменяемая ёмкость памяти (STORAGE) - да это может привести к сбою программы в случае уменьшения счётчика и т.д. НО если мне нужно всё время увеличивать очередь, а не уменьшать? Или скажем в начальных исходных данных размер определяется однократно( но зависит от нескольких исходных переменных).
                Как верно записать, и возможно ли это (выводить и вводить transferom заявки не вариант, выводить и выводить не по 1 тоже не вариант)

                Пример - Размер очереди(некая общая очередь) зависит от кол-во устройств и ихней(собственной) памяти (компилятор ругаеца)
                (обе переменные const, и задаются в начале программы. При изменении одной из них(новый прогон) автоматически должна меняться ёмкость памяти)
                ExpandedWrap disabled
                  QUE STORAGE (V$N#V$P)


                2. Как правильно записать следующую функцию и возможно ли это. пример - В зависимости от псевдослучайного значения ГСЧ FN$PRIMER примет одно из след значений (компилятор ругаеца)
                ExpandedWrap disabled
                  PRIMER FUNCTION RN1,D2
                  .15,V$I/1,V$Y
                  Привет всем!
                  Прошу посоветовать по следующему вопросу:

                  Пусть имееться некая модель (я ее упростил, но для примера думаю сойдет):

                  XPDIS FUNCTION RN7,C24
                  0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915/.7,1.2/.75,1.38
                  .8,1.6/.84,1.83/.88,2.12/.9,2.3/.92,2.52/.94,2.81/.95,2.99/.96,3.2
                  .97,3.5/.98,3.9/.99,4.6/.995,5.3/.998,6.2/.999,7/.9999,8
                  MOBILITY_IN FUNCTION RN2,D3
                  .10,0/.6,0.03364/1,0.6723
                  MOBILITY_OUT FUNCTION RN2,D3
                  .10,0/.6,60/1,1149
                  INT_IN FUNCTION C1,D3
                  7200,0.0336/14400,0.0336/28800,0.0336
                  INT_OUT FUNCTION C1,D3
                  7200,61/14400,61/28800,61
                  SOTA STORAGE 100000
                  Timer EQU 300
                  *************************************************************
                  GENERATE (FN$INT_IN+FN$MOBILITY_IN),FN$XPDIS
                  DURATION_CALL ASSIGN 2,(FN$XPDIS#54)
                  SAVEVALUE XN1,C1
                  COUNTER_ ENTER SOTA
                  ADVANCE P2
                  LEAVE SOTA
                  TERMINATE
                  *************************************************************
                  GENERATE 600
                  TERMINATE 1
                  *************************************************************
                  В данной модели появляються транзакты (с некой интенсивностью), затем определяеться время пребывания его в сторадже (SOTA). В ячейку с номером транзакта записываеться время его появления. Транзакт отбывает время в SOTA и терминируется.

                  Мне необходимо обработать собранные данные о входах в модель (данные хранящиеся в ячейках), результатом обработки будет число. Я попытался сделать это в виде процедуры:

                  PROCEDURE Decision_liner () BEGIN
                  TEMPORARY tcr, tsum, Dsum, D_, N_, M_;
                  N_=1;
                  M_=1;
                  tsum=0;
                  Dsum=0;
                  WHILE (N_<SC$SOTA) DO BEGIN
                  tsum=tsum+X$N_;
                  N_=N_+1;
                  END;
                  tcr=tsum/SC$SOTA;
                  WHILE (M_<SC$SOTA) DO BEGIN
                  Dsum=Dsum+(X$M_-tcr)^2;
                  M_=M_+1;
                  END;
                  D_=Dsum/SC$SOTA;
                  VAL_Dec1=((Timer/2-tcr)^2)/D_;
                  RETURN VAL_Dec1;
                  END;

                  Вопрос: не могу никак понять как их соединить в одном окне модели и вызвать процедуру после истечения периода моделирования. Подскажите пожайлуста. :)
                    Уважаемые форумчане!Подскажите начинающему ответ на вот такой вопрос(изучаю GPSS World самостоятельно, литература есть,но терзают смутные сомнения):что задается в START?Количество проходов программы?Или время работы программы?Поясню свой вопрос на примере:допустим нужно смоделировать работу какой либо системы за полный рабочий день-8часов,т.е.при старте я задам 8 часов(в минутах допустим)?Так?
                    А если нужно по заданию узнать время обработки 300 заявок например,то в старте 300 будем писать?Так?
                    Или я не так все понимаю :blush:
                    Сразу извиняюсь за такой школьный вопрос :blush: :blush: :blush:
                      Чтобы обработать 300 заявок необходимо указывать start 300, но в тексте модели надо при удалении заявки из системы указывать terminate 1
                        Цитата olsheu @
                        Чтобы обработать 300 заявок необходимо указывать start 300, но в тексте модели надо при удалении заявки из системы указывать terminate 1

                        Спасибо за ответ :D
                        А тогда чем будет отличаться код,программа для 8часового рабочего дня например?
                          Надо сделать дополнительный сегмент модели и если единица модельного времени = 1 мин, то надо написать
                          generate 480
                          terminate 1
                          start 1

                          480=8*60 - в одном часе 60 мин.
                          А в тексте модели при уничтожении транзакта использовать terminate без единицы.
                            Цитата olsheu @
                            Надо сделать дополнительный сегмент модели и если единица модельного времени = 1 мин, то надо написать
                            generate 480
                            terminate 1
                            start 1

                            480=8*60 - в одном часе 60 мин.
                            А в тексте модели при уничтожении транзакта использовать terminate без единицы.

                            Спасибо большое!!!Теперь мне понятно :)

                            Добавлено
                            У меня еще один вопрос:если start прописать в тексте программы-обязательно\не обязательно выполнять команду start, после симуляции?
                              Если start в тексте программы, то после команды create simulation, модель будет выполнена автоматически и появится отчет.
                                Цитата olsheu @
                                Если start в тексте программы, то после команды create simulation, модель будет выполнена автоматически и появится отчет.

                                Т.е. ничего "страшного" не будет если я не в тексте,а командой задам Start?
                                Спасибо за ответ Вам :blush:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (54) « Первая ... 46 47 [48] 49 50 ...  53 54


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