На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> gpss , Нормальное распределение, приоритеты и переменные
    Пишу диплом и не знаю как записать функцию нормального распределения в gpss
    Пробовал вот это:
    ExpandedWrap disabled
      SNORM   FUNCTION    RN1,C25              ;Функция нормального распределения (она не используется нигде)
      0,-5/.00003,-4/.00135,-3/.00621,-2.5/.02275,-2
      .06681,-1.5/.11507,-1.2/.15866,-1/.21186,-.8/.27425,-.6
      .34458,-.4/.42074,-.2/.5,0/.57926,.2/.65542,.4
      .72575,.6/.78814,.8/.84134,1/.88493,1.2/.93319,1.5
      .97725,2/.99379,2.5/.99865,3/.99997,4/1,5


    Но оно выдаёт отрицательные значения. Как будет правильно?

    Добавлено
    И ещё функцией генерируется время ожидания в блоке Advance, хочу что бы это же время записывалось в параметр транзакта. По этому параметру которому он потом будет становиться в очередь (чем меньше параметр тем больше приоритет, т.е. чем меньше времени осталось на выполнение заказа, тем он важнее), но не знаю как реализовать.

    Подскажите пожалуйста вот на этом куске кода, как такое реализовать:

    ExpandedWrap disabled
      10  GENERATE    0.12,FN$EKSP        ;В среднем новый заказ поступает каждые 0.12 дня или 57 минут
      30      TABULATE    RASP_ZAKAZOV        ;Поток заказов заносится в таблицу
      35  ASSIGN  TYPE,FN$CLASS       ;присвоение класса заявке (для определения оборудования на котором будет выполняться)
      40  ISPR    QUEUE   document        ;Фиксируется очередь на формление документов
      50      ENTER   IN      ;Поступает на оформление документов
      60  DEPART  document        ;Уходит из очереди на оформление документов
      70  SAVEVALUE   TO,FN$EKSP      ;это попытка записи в переменную времени, но ведь оно будет не таким как в строчке выше?
      100 ADVANCE 0.065,FN$EKSP       ;В среднем на оформление документов требуется пол часа распределено по эксп закону
      250 ASSIGN  TO,(FN$eksp#10)     ;Записывает в параметр TO время окончания выполнения заказа (и это тоже)
      200 LEAVE   IN      ;Уходит из очереди
      Ох....юзайте плиз хелп GPSS....
      Там много, чего есть, в том числе и куча распределений:
      17. Normal
      Syntax
      Real = NORMAL( Stream, Mean, StdDev )
      Arguments
      Stream - The random number generator entity number. Required. Coerced to integer. Must be greater than or equal to 1. The argument must be Expression.
      Mean - The mean value of the distribution. Required. Coerced to real. The argument must be Expression.
      StdDev - The standard deviation of the distribution. Must be strictly positive. Required. Coerced to real. The argument must be Expression.
      Return Value
      Real - The real value generated as a single instance of the probability distribution.
      Probability Density Function

      Ну и есно ВСЕГДА необходимо указывать версию вашего GPSS!

      По второму...Не совсем ясно, что именно нужно,т.е. транзакт обслуживается в устройстве не всегда до конца? Или есть два параметра у заказа: время его выполнения и время к которому он должен быть выполнен?
      Про твоё "но ведь оно будет не таким как в строчке выше":
      Да, оно будет не таким, таким оно будет только при счастливом случае:)
      Чтобы оно было таким предлагаю записывать время обслуживания в параметр транзакта, откуда ты его всегда сможешь извлечь для своих нужд, т.е.(с синтаксисом могу ошибатся)

      10 GENERATE 0.12,FN$EKSP ;В среднем новый заказ поступает каждые 0.12 дня или 57 минут
      30 TABULATE RASP_ZAKAZOV ;Поток заказов заносится в таблицу
      35 ASSIGN TYPE,FN$CLASS ;присвоение класса заявке (для определения оборудования на котором будет выполняться)
      _______36 ASSIGN Vrema,FN$EKSP ;присвоение класса заявке (для определения оборудования на котором будет выполняться)
      40 ISPR QUEUE document ;Фиксируется очередь на формление документов
      50 ENTER IN ;Поступает на оформление документов
      60 DEPART document ;Уходит из очереди на оформление документов
      70 SAVEVALUE TO,FN$EKSP ;это попытка записи в переменную времени, но ведь оно будет не таким как в строчке выше?
      _______100 ADVANCE 0.065,P$Vrema ;В среднем на оформление документов требуется пол часа распределено по эксп закону
      250 ASSIGN TO,(P$Vrema#10) ;Записывает в параметр TO время окончания выполнения заказа (и это тоже)
      200 LEAVE IN ;Уходит из очереди

      "Зписывает в параметр TO время окончания выполнения заказа (и это тоже)" - это неверно, время окончания должно определяться как текущее время модели, а именно(опять же из хелпа)
      M1 - Transit Time. M1 returns the absolute system clock minus the “Mark Time” of the Transaction.
        используй переменную NORM. В этом примере 500 - среднее значение (подставь свое значение), 50 - отклонение от среднего (также подставь свое значение)

        ExpandedWrap disabled
          NRAS FUNCTION RN5,C25
          0,-5/.00003,4/.00135,-3/.00621,-2.5
          .02275,-2/.06681,-1.5/.11507,-1.2/.15899,-1
          .21186,-.8/.-7425,-.6/.34458,-.4/.42074,-.2
          .5,0/.57926,.2/.65542,.4/.72575,.6/.78814,.8
          .8413,1/.88493,1.2/.93313,1.5/.97725,2
          .9979,2.5/.99865,3/.99997,4/1,5
          NORM FVARIABLE 500+50*FN$NRAS
          ...
          ASSIGN  TO,V$NORM
          ADVANCE P$TO

        Переменную V$NORM следует вычислять лишь один раз, а у тебя время обработки вычислялось дважды:
        ExpandedWrap disabled
          100 ADVANCE 0.065,FN$EKSP    
          250 ASSIGN  TO,(FN$eksp#10)

        , что неверно, так как при этом будут получены разные значения
          Не получается записать на примере:
          10 GENERATE EXPONENTIAL(1, 0.12, 1 ) - и оно не работает, говорит неправильный операнд А

          В свою очередь вот это
          100 ADVANCE Normal(1,0.065,0.02) тоже не работает говорит неправильный операнд Б
          Есть у кого-нибудь примеры задач использующие встроенные функции распределения?
            Цитата p1ma @
            Не получается записать на примере:
            10 GENERATE EXPONENTIAL(1, 0.12, 1 ) - и оно не работает, говорит неправильный операнд А

            В свою очередь вот это
            100 ADVANCE Normal(1,0.065,0.02) тоже не работает говорит неправильный операнд Б

            операнд А - EXPONENTIAL(1
            операнд В - 0.065

            эти функции надо записывать в скобках
            ExpandedWrap disabled
              100 ADVANCE (Normal(1,0.065,0.02))
              Eugen, спасибо. :) вроде заработало
                Уважаемые знатоки, думаю, вам не составит труда найти ошибку в данной программе:Задание во вложении.
                Помогите исправить ошибку.
                Прикреплённый файлПрикреплённый файлzadanie.txt (1,33 Кбайт, скачиваний: 228)
                  извиняюсь
                  Прикреплённый файлПрикреплённый файлzadanie.txt (1,33 Кбайт, скачиваний: 283)
                  Прикреплённый файлПрикреплённый файлzadanie.txt (1,33 Кбайт, скачиваний: 286)
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0360 ]   [ 19 queries used ]   [ Generated: 10.12.22, 05:32 GMT ]