Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > GPSS > GPSS


Автор: Ura2007 06.10.08, 19:23
Помогите понять что делает программа.Все команды я понимаю но что сам листинг делает не могу понять.

Заранее спасибо за любую помощь!!!

Автор: TEMENb 06.10.08, 20:36
ну эм.. ты имел ввиду листинг или линкинг?
если линкинг, то он тама не такой, как скажем в паскале или сях.
каждій транзакт движеться индивидуально.
т.е. в каждый новый момент времени кажый транзакт проверяет че ему делать дальше. стоять ждать или ити в след блок.

как проводиться листинг в жпсс/рс я незнаю. В жпсс/в он проводиться след образом -
1. запускаешь симуляцию, получаешь отчет.
2. клацаешь в главной панели window-> simulation window ->bloks window
3. нажимаешь ctrl+alt+r и быстренько жмешь на кнопочку Halt
4. потом нажимая на кнопочку step можешь смотреть как движуться транзакты

прошу заметить, при нажатии на step происходит одно ПЕРЕМЕЩЕНИЕ транзакта от блока к блоку, а вовсе не истечение одной ЕМВ. как меняються ЕМВ прийдеться смотреть в окошке Jornal

теперь касаемо программы.... ОХ И НАС№#АЛ =)))
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    fun FUNCTION    RN1,C13
    0,0/0.1,0.104/0.2,0.222/0.3,0.357/0.4,0.511/0.5,0.693/
    0.6,0.915/0.7,1.304/0.8,1.610/0.9,2.303/0.97,3.507/
    0.995,5.298/0.999,7
    tab TABLE   Mp1,0,60,50    ;незнаю что имел ввиду автор - сделал время пребывания транзакта в системе
    var1    VARIABLE    3600/X1
    var2    VARIABLE    60#X2
        GENERATE    V$var1,FN$fun
        mark    1              ;запомнил текущее внемя в первом транзакте
        QUEUE   1
        SEIZE   1
        DEPART  1
        ADVANCE V$var2,FN$fun
        RELEASE 1
        TABULATE    tab
        TERMINATE   1
        INITIAL X1,20
        INITIAL X2,1
        START   10000

програмку подредактировал в жпсс/в (симулейт и енд лишние)
МР1 - разницца между текущим временем и тем, что лежит в первом параметре транзакта (МР2 - во втором, MP$param - в параметре, заданном символьным именем param (блок марк тогда выглядит так - "mark param"))


Видишь ли, числовые имена не всегда применимы, а если тебе надо именно числовые имена, то надо делать так..
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var2     VARIABLE   60#X2
    var2     equ   1


и тогда можешь смело обращаться к переменной V1

вовторых символ $ ставиться перед символьным именем, а если используеться числовое имя, то оно пишеться слитно с СЧА.

движемся дальше... если ты прокрутишь страничку в самый верх - ты увидишь красный восклиццательный знак возле ссылки GPSS (ru). Очень рекомендую.

Если препод деревянный, если хоть дырку ему в голове пропили, а ему надо именно в жпсс/рс, то
1. проставь нумерацию строк как в бейсике
2. ни в коему случае не пользуйся кнопочкой Tab. Форматирование бесспорно получаеться красивое, вот только интерпритатор понимает табулятор как неизвестный символ и выдает ошибку.

фух, вроде все )

Автор: Ura2007 07.10.08, 10:38
Спасибо за объяснения! Начинаю больше понимать!

Не знаю где в листинге найти статистические данные о прохождении транзактами блоков модели и не очень понимаю что выдается в некоторых таблицах?

Насколько я понял транзакты это абстрактные подвижные элементы,которые могут моделировать различные объекты реального мира.

Автор: TEMENb 07.10.08, 10:46
ну если взять на примере пункта обмена валют, то

кассир - это устройство (2 кассира - двухканальное МКУ)
человке - это транзакт (каждые N минут заходит в дверь)
занимает устройство, юзает его в течении какого то времени, а потом двигает снова в дверь. На его место движет следующий чел..

не совсем понимаю какие именно данные ты ищешь. посути ВСЕ данные отчета показывают статистику движения транзактов по модели ;)

а данные таблиц описаны все на том же ресурсе, выделенном красным восклиццательным знаком.

Автор: Ura2007 07.10.08, 10:47
Закоментировал таблицу не знаю правильно или нет.

Автор: TEMENb 07.10.08, 10:52
TOTAL ENTRIES - всего входов в очередь
ZERO ENTRIES - нулевыых входов

а так вроде ничего больше слух не режет.

Автор: Ura2007 07.10.08, 10:58
Спасибо!
на Gpss.ru в каком разделе можно посмотреть данные таблиц?
Мскал пока не нвшёл!

Автор: TEMENb 07.10.08, 11:06
Отчет об эксперименте

ссылка с правой стороны - последняя в разделе "документация по OPEN GPSS"

Там 4 страниццы (счетчик страниц справа сверху) - сходу хрен увидишь.

Автор: Ura2007 07.10.08, 12:19
Там не все параметры есть.Скажем для последней таблицы почти нету.

Автор: TEMENb 07.10.08, 12:36
там есть абсолютно все параметры.
листай страниццы. на вторй страницце начанаються и на третьей заканчиваеться описалово статистики по таблиццам
Информация о сохраняемых величинах (SAVEVALUE) - в самом начале четвертой страниццы

Автор: Ura2007 07.10.08, 19:59
Появилось нескоко вопросов.
1)Что значит абсолютное и относительное время (где 1851099).
2) почему в BLOCK COUNTS в 1 блоке 10001 а в остальных 10000.
3) Что означает это строка не нашёл описание параметров
TABLE M$1,0,60,50

Заранее огромное спасибо за то что помогаешь!!!

Автор: TEMENb 08.10.08, 07:55
Цитата

1)Что значит абсолютное и относительное время (где 1851099).


абсолютное время - время существования модели (AC1), относительно - время существования транзакта (получаем блоком MARK)

Цитата

2) почему в BLOCK COUNTS в 1 блоке 10001 а в остальных 10000.


в блоке побывало 10001 транзакт, в момент завершения моделирования в блоке остался 1 транзакт.
соответственно в остальных побывало 10000 транзактов.

Цитата

3) Что означает это строка не нашёл описание параметров
TABLE M$1,0,60,50


плохо искал
Оператор определения TABLE

Что означает M$1 - понятия не имею
Цитата

MPj Значение времени, равное разности абсолютного модельного времени и содержимого j-го параметра текущего транзакта.
MBj Флаг синхронизации: 1, если транзакт в блоке j принадлежит тому же семейству, что и текущий транзакт; 0 - в противном случае.
SMj Максимальное содержимое многоканального устройства j.
QMj Максимальная длина очереди j.
MXj(a,b) Содержимое элемента матрицы ячеек j, расположенного в строке a, столбце b.

вот все СЧА, с буквой М. Выбирай сам.

Автор: Ura2007 08.10.08, 08:03
Понятно спасибо большущее!!! А в чем оно измеряется 1851099 это в микросекундах.

"в блоке побывало 10001 транзакт, в момент завершения моделирования в блоке остался 1 транзакт.
соответственно в остальных побывало 10000 транзактов."
Почему же тогда 10001 не в псоледнем блоке не пойму.

Автор: TEMENb 08.10.08, 08:18
Цитата
А в чем оно измеряется 1851099 это в микросекундах.

В единиццах модельного времени. А там уже приравнивай как хочешь. хочешь 1 ЕМД будет секундой, хочешь - часом.
Обычно за ЕМД берут самый маленький рассматриваемвы интервал времени.

Цитата
"в блоке побывало 10001 транзакт, в момент завершения моделирования в блоке остался 1 транзакт.
соответственно в остальных побывало 10000 транзактов."
Почему же тогда 10001 не в псоледнем блоке не пойму.


транзакт идет последовательно от первого блока к последнему


движение транзакта

появился транзакт
Цитата

1 блок 1 1
2 блок 0 0
3 блок 0 0

перешел к след блоку
Цитата

1 блок 1 0
2 блок 1 1
3 блок 0 0

перешел к след блоку (и его там задержали)
Цитата

1 блок 1 0
2 блок 1 0
3 блок 1 1

появился новый транзакт
Цитата

1 блок 2 1
2 блок 1 0
3 блок 1 1

новый транзакт перешел к след блоку
Цитата

1 блок 2 0
2 блок 2 1
3 блок 1 1


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

Автор: Ura2007 08.10.08, 08:21
Еще раз спасибо за объяснение.Теперь вроде понял!

Автор: dazhdbog 09.10.08, 06:12
На сборочный участок цеха предприятия через 10 ± 4 минут поступают партии, каждая из которых состоит из трех деталей. Половина всех поступающих деталей перед сборкой должна пройти предварительную обработку в течение 7 ± 3 минуты. На сборку поступают обработанная и необработанная детали. Процесс сборки занимает 6 ± 2 минут.
Смоделировать работу производственного участка в течение 8 часов.

вот до чего я дошел только не знаю правильно ли исходя из логики языка.

GENERATE 10,4 ; генерируем транзакт
SPLIT 3,PARTY ; создаем партию из трех транзактов
TERMINATE ; уничтожаем транзакт
PARTY TRANSFER 0.5,OBR,SBOR ; половину на обработку
OBR QUEUE que_obr ; занятие очереди перед обработкой
SEIZE obr1 ; занятие обработки
DEPART que_obr ; очищение очереди перед обработкой
ADVANCE 7,3 ; обработка
RELEASE obr1 ; очищение бработки
TRANSFER ,SBOR ; отправление на сборку
SBOR QUEUE que_sbor ; занятие очереди перед сборкой
ASSEMBLE 2 ; соединение двух транзактов
SEIZE sbor1 ; занятие сборки
DEPART que_sbor ; очищение очереди перед сборкой
ADVANCE 6,2 ; сборка
RELEASE sbor1 ; очищение сборки
TERMINATE ; уничтожение транзактов
GENERATE 480 ; 480 транзактов 8*60=480
TERMINATE 1 ; уничтожаем по одному

Автор: TEMENb 09.10.08, 06:48
а у меня получилось вот что

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ;На сборочный участок цеха предприятия через 10±4 минут поступают партии, каждая из которых состоит из трех деталей.
    ;Половина всех поступающих деталей перед сборкой должна пройти предварительную обработку в течение 7±3 минуты.
    ;На сборку поступают обработанная и необработанная детали. Процесс сборки занимает 6±2 минут.
    ;Смоделировать работу производственного участка в течение 8 часов.
     
    ;------------------------------------;
    SBOR    STORAGE 2   ;
    ;------------------------------------;
                GENERATE    ,,,1    ;геним транзакт
    MET1        ADVANCE 10,4    ;задержка генерации на 10+-4 мин
                SPLIT   3,MET2  ;клоним 3 транзакта, отправляем их на метку
                TRANSFER    ,MET1   ;отправляем родителя на метку
    MET2        TRANSFER    .5,MET3 ;половину пропускаем, половину отправляем на метку
                QUEUE   OCH1    ;занять очередь 1
                SEIZE   PREDV   ;первичная обработка
                DEPART  OCH1    ;покинуть очередь
                ADVANCE 7,3 ;задержка на время обработки
                RELEASE PREDV   ;покинуть первичную обработку
    MET5        MATCH   MET3    ;ждать, пока в MET3 прийдет транзакт
                TRANSFER    ,MET4   ;перейти на метку
    MET3        MATCH   MET5    ;ждать, пока в MET5 прийдет транзакт
    MET4        QUEUE   OCH2    ;занять очередь 2
                ENTER   SBOR    ;занять устройство сборки
                DEPART  OCH2    ;покинуть очередь 2
                ASSEMBLE    2   ;собрать из двух деталей одну
                ADVANCE 6,2 ;Задержка на время обработки
                LEAVE   SBOR    ;покидаем сборку
                LEAVE   SBOR    ;пришло две детали, а входит одно. потому покидаем два раза.
                TERMINATE       ;транзакт покидает систему
    ;------------------------------------;
                GENERATE    (8#60)  ;геним транзакт через 8 часов
                TERMINATE   1   ;из счетчика завершений вычитаем 1
    ;------------------------------------;
                START   1   ;
    ;------------------------------------;


щя гляну-покритикую твое решение ))

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ;------------------------------------;
        GENERATE    10,4    ;
        SPLIT   3,PARTY ;Если генить транзакты таким образом, то они будут из разных семейств => соединяться асемблом не будут
        TERMINATE       ;
    ;------------------------------------;
    PARTY   TRANSFER    0.5,OBR,SBOR    ;
    OBR QUEUE   que_obr ;Желательно, что б имена были не длиннее 5 символов, хотя это не пренципиально
        SEIZE   obr1    ;
        DEPART  que_obr ;
        ADVANCE 7,3 ;
        RELEASE obr1    ;
        TRANSFER    ,SBOR   ;
    SBOR    QUEUE   que_sbor    ;
        ASSEMBLE    2   ;необходимо различать транзакты, какие проходили первичную обработку, а какие нет. иначе будешь склеивать два, которые не проходили первичную, пока третий будет на первичной обработке
        SEIZE   sbor1   ;не пренципиально, но сборка предполагаеться внутри устройства, хотя так тоже можно.
        DEPART  que_sbor    ;
        ADVANCE 6,2 ;
        RELEASE sbor1   ;
        TERMINATE       ;
    ;------------------------------------;
        GENERATE    480 ;
        TERMINATE   1   ;
    ;------------------------------------;
        start   1   ;
    ;------------------------------------;

Автор: dazhdbog 09.10.08, 06:58
спасибо но ведь они соединялись только действительно там были одни обработанные и необработанные детали, просто в методе про match ничего небыло, и принцип его я чет не догоняю, можно на пальцах объяснить а что он собственно делает

Автор: TEMENb 09.10.08, 10:30
Вырезка из отчета
Цитата
SBOR 11 QUEUE 139 0 0
12 ASSEMBLE 139 45 0
13 SEIZE 47 0 0

Хорошенькое соединялись. на момент окончания моделирвоания в блоке асембл зависло 45 транзактов из 139. Это треть от всех транзактов, побывавших в модели. Т.е. как я и говорил - два транзакта из партии склеились, а третьему склеиваться нескем, ибо транзактов его семейства в модели больше не осталось. Если увеличишь время моделирования скажем раз в 10.. или 100, то увидишь, что асембл стабильно задерживает ровно треть транзактов.
Только ненадо думать, что сборка обрабатывать не успевает. у сборки загрузенность 61%, это почти две трети от идеала.

Блок Асембл клеит не все транзакты, а только те, которые пренадлежат к одному семейству.

Если на пальцах - транзакты одного семейства - это те, у которых один родитель (самый простой вариант)
Как видишь в моем варианте модели все транзакты модели одного семейтсва (один родитель генит все транзакты), а в товем каждая новая партия - новое семейство (из дженерейта выходит новый родитель, к предыдущему транзакту никакого отношения не имеющий).

Блок MATCH - синхронизирует два транзакта ОДНОГО семейтсва. В его параметр ложится метка на другой блок MATCH, с которым он синхронизируеться. т.е. транзакт приходит в блок MATCH и ждет, пока в другой блок MATCH прийдет транзакт ТОГО ЖЕ семейства. Когда такой приходит - они оба одновременно покидают блоки MATCH. В данном случае так работают оба блока MATCH, поскольку завязаны друг на друга.

Подробнее тут - Блок MATCH, Семейства транзактов

З.Ы.: "Полезные ссылки" читать надо. Вверху страниццы выделено красным восклиццательным знаком.

Автор: TEMENb 10.10.08, 19:36
я тут мозгами пораскинул на досуге..
то что я написал раньше - туфта.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ;------------------------------------;
    SBOR    STORAGE 2   ;
    ;------------------------------------;
        GENERATE    ,,,1    ;геним транзакт
    MET1    ADVANCE 10,4    ;задержка генерации на 10+-4 мин
        SPLIT   3,MET2  ;клоним 3 транзакта, отправляем их на метку
        TRANSFER    ,MET1   ;отправляем родителя на метку
    MET2    TRANSFER    .5,MET3 ;половину пропускаем, половину отправляем на метку
        QUEUE   OCH1    ;занять очередь 1
        SEIZE   PREDV   ;первичная обработка
        DEPART  OCH1    ;покинуть очередь
        ADVANCE 7,3 ;задержка на время обработки
        RELEASE PREDV   ;покинуть первичную обработку
        QUEUE   OCH2    ;занять очередь 2
        LINK    2,FIFO  ;ПОСТАВИТЬ В 2-Й СПИСОК ПОЛЬЗОВАТЕЛЯ
    ;------------------------------------;
    MET3    QUEUE   OCH2    ;занять очередь 2
        LINK    1,FIFO  ;ПОСТАВИТЬ В 1-Й СПИСОК ПОЛЬЗОВАТЕЛЯ
    ;------------------------------------;
    MET4    ENTER   SBOR    ;занять устройство сборки
        DEPART  OCH2    ;покинуть очередь 2
        ASSEMBLE    2   ;собрать из двух деталей одну
        ADVANCE 6,2 ;Задержка на время обработки
        LEAVE   SBOR    ;покидаем сборку
        LEAVE   SBOR    ;пришло две детали, а входит одно. потому покидаем два раза.
        TERMINATE       ;транзакт покидает систему
    ;------------------------------------;
        GENERATE    ,,,1    ;геним
    POVT    TEST G  CH1,0   ;если первый список пользователя больше нуля, то дальше
        TEST G  CH2,0   ;если второй список пользователя больше нуля, то дальше
        UNLINK  1,MET4,1    ;отправить из 1-го списка пользователя на метку МЕТ4 один транзакт
        UNLINK  2,MET4,1    ;отправить из 2-го списка пользователя на метку МЕТ4 один транзакт
        TRANSFER    ,POVT   ;перейти на метку
    ;------------------------------------;
        GENERATE    (8#60)  ;геним транзакт через 8 часов
        TERMINATE   1   ;из счетчика завершений вычитаем 1
    ;------------------------------------;
        START   1   ;
    ;------------------------------------;


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

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

Автор: Ura2007 11.10.08, 18:59
Поставил gpss world попробовал сделать то что ты передевылал для меня.Так вот во время симуляции на 2 пункте описания которое ты писал у меня зависает программа.Не знаю в чём дело.Может я что то неправильно делаю!

Автор: TEMENb 11.10.08, 19:13
всмысле на втором пункте? что пишет?

Автор: Ura2007 11.10.08, 19:18
Вот сам листинг который ты писал я его вбил в gpss/world

fun FUNCTION RN1,C13
0,0/0.1,0.104/0.2,0.222/0.3,0.357/0.4,0.511/0.5,0.693/
0.6,0.915/0.7,1.304/0.8,1.610/0.9,2.303/0.97,3.507/
0.995,5.298/0.999,7
tab TABLE Mp1,0,60,50 ;незнаю что имел ввиду автор - сделал время пребывания транзакта в системе
var1 VARIABLE 3600/X1
var2 VARIABLE 60#X2
GENERATE V$var1,FN$fun
mark 1 ;запомнил текущее внемя в первом транзакте
QUEUE 1
SEIZE 1
DEPART 1
ADVANCE V$var2,FN$fun
RELEASE 1
TABULATE tab
TERMINATE 1
INITIAL X1,20
INITIAL X2,1
START 10000



В жпсс/в он проводиться след образом -
1. запускаешь симуляцию, получаешь отчет.
2. клацаешь в главной панели window-> simulation window ->bloks window
3. нажимаешь ctrl+alt+r и быстренько жмешь на кнопочку Halt
4. потом нажимая на кнопочку step можешь смотреть как движуться транзакты

Так вот после запуска симуляции в панели window программа зависает и выходит.

Автор: TEMENb 11.10.08, 19:19
1. выделяешь текст программы.
2. создаешь текстовый файл
3. кидаешь в него текст программы.
4. стираешь, если там моявилось что то лишнее
5. копируешь текст из блокнота
6. запускаешь ЖПСС
7. копируешь туда текст
8. запускаешь
9. радуешья ))

Автор: TEMENb 11.10.08, 19:30
Цитата Ura2007 @
В жпсс/в он проводиться след образом -
1. запускаешь симуляцию, получаешь отчет.
2. клацаешь в главной панели window-> simulation window ->bloks window
3. нажимаешь ctrl+alt+r и быстренько жмешь на кнопочку Halt
4. потом нажимая на кнопочку step можешь смотреть как движуться транзакты


Это если ты хочешь по шагу посмотреть как транзакты движуться.. зачем тебе это? =)

-Added
Цитата Ura2007 @
Окей,спасибо попробую так!

Добавлено
быстренько жмешь на кнопочку Halt

Это какая кнопка? Где её найти?

2. клацаешь в главной панели window-> simulation window ->bloks window

в этом окошке

Автор: Ura2007 11.10.08, 19:31
Всё нормально теперь всё ок.Заработало.

Автор: TEMENb 11.10.08, 19:36
чет не отсылается письмо. давай я тебе по аське перекину

Автор: Ura2007 11.10.08, 19:36
Кстати вот эта функция зачем нужна в программе это точки для графика какого-то распределения?
fun FUNCTION RN1,C13
0,0/0.1,0.104/0.2,0.222/0.3,0.357/0.4,0.511/0.5,0.693/
0.6,0.915/0.7,1.304/0.8,1.610/0.9,2.303/0.97,3.507/
0.995,5.298/0.999,7

Добавлено
Можно залить сюда http://webfile.ru/ я скачаю по ссылке которую тебе дадут

Автор: TEMENb 11.10.08, 19:57
да откуда ж я знаю зачем она нужна?
распредиление какое то, в блоке адванс. как то задержка колебаеться в зависимости от значений функции.

Автор: TEMENb 11.10.08, 22:01
пдэфник боева и киев жпсс - оч советую. остальное так.. можно посмотреть
rapidshar.come
зеркало ifolder.ru
зеркало webfile.ru
зеркало sharemania.ru

Автор: artyomst 10.11.08, 18:40
из другой темы
Цитата
Но лучше для этих целей использовать параметры транзакта. Т.к. в этой задаче у вас один транзакт (пакет), а реально в сети их дофига. Маркер должен быть у каждого свой.

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кбайт

Автор: TEMENb 11.11.08, 07:41
variable - это вычисляемое выражение...
Вам же нужна сохраняемая величина (я б сказал переменная, но это вводит в заблуждение)))

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


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

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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.о
Я думал дипломик...

Автор: Eugen 11.11.08, 17:52
Цитата 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$ от реализации)

Автор: MEGERA 17.11.08, 08:38
Ребят! Помогите советом!
Задача:
В цех сборки поступает три типа деталей: детали первого типа с интервалом 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, у тебя был ряд претензий по этой задаче ))) выкладывай! а то так и не научусь задачи нормально решать )))

Автор: TEMENb 17.11.08, 09:08
Цитата
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 мин". чуствуете разниццу?

Автор: MEGERA 17.11.08, 14:37
Цитата 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 минут, так что здесь неважно, через какие промежутк времени эта самая упаковка происходит.

Автор: TEMENb 17.11.08, 16:46
угу, нащет упаковщика не доглядел. Действительно отдельный сегмент на него не нужен.

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

у вас ведь генерируется три типа деталей. так? =)
вот идет транзакт. он проходит через первый сплит, появляется потомок, которого отправляют на метку ММ2, родитель движет дальше. т.е. по прохождении одного сплита получается два транзакта.
Далие родитель попадает во второй сплин - потомок идет на ММ3, а родитель - дальше.. а дальше - это мм1 =)))
два сплита - три транзакта. все верно =)

Автор: MEGERA 17.11.08, 17:02
ага, действительно ))) правильно все!спасибо за помощь!

Автор: MissStone 17.11.08, 22:08
а вот задача такого плана: даны графы состояния системы...имеется система вероятности состояний. для их получения проделала кучу математики : составлялась матрица интенсивности по указанному графу состояния системы, получаем систему уравнений Колмогорова,решаем методом Крамера, применяем обратное преобразование Лапласа и далее, по полученным преобразованиям, постоена зависимость р(t), где р-стационарная вероятность системы в Маткаде).. и мне осталось постоить модель такой системы в GPSS. ума не приложу как делать это((. :wall: .может кто объяснит..с чего начать то ..
буду очень рада за помошь

Автор: Veto4ka 20.11.08, 15:01
Подскажите,пожалуйста,как узнать время переходного(неустановившегося)режима?!оч нужно!

Автор: Ююю 20.11.08, 20:50
Задан экспоненциальный закон распределения интенсивности поступления клиентов. Почему при построении графика зависимости вероятности отказа от интенсивности поступления в нескольких точках при одинаковой интенсивности поступления и разной интенсивности обслуживания получается одна и та же вероятность отказа?

Автор: TEMENb 20.11.08, 20:56
код в студию

Автор: makingbeauty 21.11.08, 07:34
Помогите пожалуйста решить задачу на MICRO-GPSS (STUDENT VERSION 95-01-01).

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

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


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

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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'ов:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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 раз... не знаю почему...

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

Автор: TEMENb 21.11.08, 08:43
эээээээээээээ.........
А что за микроверсия и с чем ее едят?
Де можно ее качнуть и есть ли мануалы по ней?

Сам я юзаю 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" и сишные коментарии, вызывающие ошибку.

Автор: TEMENb 21.11.08, 09:57
Вообщем программа совсем не соответствует заданию. :o

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

НО!! Это еще не все!! :wacko:
Контейнеры заполняются только один раз!! :whistle:
Даже не заполняются, а позволяют войти десяти деталям.
А потом грят - "наша суточная норма закончена, приходите завтра" - и никого не пускают больше :tong:
Ээээ.... вам такая модель нада была? :D

Автор: makingbeauty 21.11.08, 10:20
TEMENb, спасибо, прежде всего, за развёрнутый ответ.

Да, насколько я понимаю в микро-версии просто нет части команд:


"Модели на micro-GPSS компактны, часто состоят из меньшего числа операторов, чем такие же модели, написанные на процедурных языках (например, на Фортране или Бейсике). Это объясняется тем, что в micro-GPSS встроено максимально возможное число логических программ, необходимых для моделирующих систем. В него также входят специальные средства для описания динамического поведения систем, меняющихся во времени, причем изменение состояний происходит в дискретные моменты времени.
Micro-GPSS очень удобен при программировании, поскольку интерпрета-тор micro-GPSS (здесь и далее интерпретатором называется моделирующая часть системы micro-GPSS) многие функции выполняет автоматически. На-пример, micro-GPSS без специального на то указания пользователя собирает статистические данные, описывающие поведение модели, автоматически печа-тает итоговую статистику по завершении моделирования. Пользователю нет необходимости включать в модель операторы для сбора и накопления этих данных или задавать формат, указывающий, в каком виде должны быть распе-чатаны итоговые данные."

Вот сам интепретатор, который нам дали - http://poiskolog.ru/trash/gpss-rus.EXE
А вот краткая методичка по командам - http://poiskolog.ru/trash/Micro_GPSS.doc

Касаемо самой программы - я уже написала, что тоже считаю что найденный мною вариант нерабочий - я просто привела его как пример. Именно по этой причине я постаралась сделать несколько своих вариантов - как я считаю правильным. Так вот по-возможности хотелось бы получить подсказку что у меня неправильно в _моих_ вариантах решения этой задачи, а не в том, который я привела первым для примера ;)

Автор: TEMENb 21.11.08, 10:32
Методу скачаим. А сам микрожпсс я уже нашел.. вроде (не скачал, но еще не запускал)))
Судя по нагугленному - микрожпсс - это слабенькая попытка сделать жпсс более гибким.. эм... с возможностью создания своих блоков и "улучшением" уже имеющихся. Срезана половина команд (заменена на ифы и вайлы).. и вроде теперь он проще учится )))

Вообщем это надо в среду лезть.. смотреть - пробовать... :ph34r:

Добавлено
ааааааааааааааааааааа :D
фигасее улучшили :lool:

эта писец, детишки )))))
этот черный экранчик вызывает у меня благоговейный трепет ))))
Цитата

MICRO-GPSS STUDENT VERSION 95-01-01
C INGOLF STAHL

Введите имя файла с программой на GPSS
Длинна имени должна 4-25



Интересно, конечно, кому и что должна длинна :P


Да уж, он полюбасу легче для изучения, особенно с учетом того, что программу надо писать в блокноте, а потом каждый раз прописывать путь к файлу в програмке-интерпритаторе

"таких извращений Иван не видл" (с)
:D

Автор: Ююю 22.11.08, 12:18
Что происходит при изменении команды START 1 на команду START 10? При 10 прогонах получатся более точные результаты?

Автор: TEMENb 22.11.08, 14:07
Ююю, стыдно должно быть за такие вопросы ))
Это самая первая лекция/лаба/глава.
START А - означает промоделировать, со счетчиком завершений равным А.
TERMINATE A - когда транзакт покидает модель, из вчетчика завершений вычитается значение А.

Когда значение счетчика завершений становится равным нулю (или меньше нуля), то моделирование заканчивается.

Цитата Ююю @
Что происходит при изменении команды START 1 на команду START 10? При 10 прогонах получатся более точные результаты?

В данном случае вы либо увеличиваете время моделирования в 10 раз, либо увеличиваете в 10 раз колличество обработанных транзактов, либо... вообщем все зависит от конкретно вашей задачи.

А результаты станосятся точнее, т.к. по теории вероятности, чем больше проведено экспериментов (чем дольше проводился эксперимент), тем точнее результат.

Автор: Milaya 08.12.08, 16:00
привет всем! подскажите пожалуйста правильно ли я решила задачу!!!!
Абоненты звонят каждые 10 сек., время приема вызова распределено по экспоненц. з-ну со средним знач. 12 сек. , в случае неудачи дозвониться абонент попыток дозвониться больше не предпринимает. Смоделировать работу в течение 8 ч.

TELEPHON STORAGE 2
GENERATE 10
GATE NU TEL,OUT
ENTER TELEPHON
ADVANCE (Exponential (1,0,12))
LEAVE TELEPHON
OUT TERMINATE

GENERATE 28800
TERMINATE 1

один из подвопросов - определить наименьшее число телефонов , при котором вызов принимается не менее чем от 90% абонентов. минимальное число телефонов использую - 2 шт., а отчет выдает что загруженность всего 61%. А я должна ответить какое число телефонов при 90%!
ничего уже не понимаю!

Автор: artyomst 08.12.08, 16:32
Подскажите как реализовать: Интервалы времени в потоке распределены по экспоненциальному закону со средним временим, распределенным равномерно от 20 до 40 единиц времени. Имеется ввиду что в GENERATE указывать?

Автор: Milaya 08.12.08, 16:42
GENERATE 30,10 вроде как...

Автор: TEMENb 08.12.08, 16:43
Milaya, все верно. поступающий поток - 0.1 в секунду, а обрабатывающий поток - 0,1(6).

Итого 0.1/0.1(6)=0.6

60%

идите компосируйте мозг преподу ))

Добавлено
Цитата artyomst @
Интервалы времени в потоке распределены по экспоненциальному закону со средним временим, распределенным равномерно от 20 до 40 единиц времени


среднее значение - 30
отклонение - 10
закон - экспоненциальнй

итого смещение - 20
коефиыиент растягивания - 20

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE (Exponential (1,20,20))


Добавлено
Цитата Milaya @
GENERATE 30,10 вроде как...

Это равномерный закон

Добавлено
Вроде разрулил.. :D

Автор: jaguar555 09.12.08, 17:49
Некий производитель выпускает центробежные насосные агрегаты, которые собираются по заказам клиентов. Заказы поступают в среднем каждые 5 часов (экспоненциальное распределение). При поступлении заказа с него снимают две копии. Исходный заказ используется для получения со склада двигателя и подготовки его к сборке (200+100 минут). Первая копия используется для заказа и подгонки насоса (180+120 минут), а вторая копия -для производства опорной плиты (80+20 минут).
Когда насос и опорная плита готова, производится проверочный монтаж (50+10 минут). После того как будут готовы все три компонента, производится окончательная сборка. Агрегат разбирается, насос и двигатель окрашиваются, а опорная плита оцинковывается. Затем агрегат собирается окончательно (150+30 минут). Необходимо:
Смоделировать сборку 50 насосных агрегатов

Вот что я смог:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    zakaz storage 2
     
    generate 300,,,,50
    queue engine //очередь для получения двигателя
    depart engine
    advance 200,100 // время получения двигателя
     
    queue nasos // очередь для насоса
    enter zakaz
    depart nasos
    advance 180,120 // подгонка насоса
     
    queue plita // очередь для плиты
    enter zakaz
    depart plita
    advance 80,20 // производство опорной плиты
     
    leave zakaz
    leave zakaz

а вот дальше что использовать для

Цитата
Когда насос и опорная плита готова, производится проверочный монтаж

Автор: TEMENb 09.12.08, 18:46
1. копии не снимаются (spleet)
2. одна деталь проходит обе обработки, а должна проходить одна копия одну. а джругая - другу.
Цитата jaguar555 @
того как будут готовы все три компонента

откуда ТРИ компонента?
3. потом их надо обьеденить (acemble) и сделать проверочный монтаж.
4. потом снова разбивается и отдельно части обрабатываются
5. и снова собирается.

и моделирование заканчивается когда ОБРАБОТАЛОСЬ 50 деталей. не обязательно задавать на вход 50. Да и экспоненциальным распредилением на входе не пахнет.

Автор: jaguar555 09.12.08, 19:37
TEMENb
Цитата
4. потом снова разбивается и отдельно части обрабатываются
5. и снова собирается.


Преп сказал, что это 2 advance делается

вот что то еще мне удалось придумать
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        generate (exponential(1,0,300))
        queue engine
        seize stockman
        depart engine
        advance 200,100
        split 1,nasos
        split 1,plita
     
    nasos   queue get_nasos
        seize worker
        depart get_nasos        
        advance 180,120
     
    plita   queue make_plita
        seize worker1
        depart make_plita
        advance 80,20
        
        assemble 3
        queue check
        seize worker2
        depart check
        advance 50,10
        advance 150,30
        release worker2
        terminate
        
    GENERATE 1000
    TERMINATE 1
    START 1

Модель работает но как то странно: если ее запустить не 1 раз а 10, то получится что двигателей заказано 30 с лишним, а насосов и плит для них только 2, а в assemble их попадает около 50

Автор: TEMENb 09.12.08, 21:25
о, появился сплит )
Это радует. только сплитов много сильно ;)
попробуй второй салит заменить на трансфер ;)

и ассембл надо с параметром 2

после обработки на метке насос - трансфер на асембл (насос ведь не участвует в заказе плиты)

после асембла еще сплин, обработка и еще асембл.


Другими словами: теперь больше похоже на правду, но всеравно еще не то, что надо )

Автор: jaguar555 10.12.08, 11:52
Сдал седня такой вариант. поставили мне 4 бала и сказали что можно было все сделать проще, но не сказали как
Спасибо за помощь
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    worker storage 2
    generate (exponential(1,0,300))
        queue engine
        enter worker,2
        depart engine
        advance 200,100
        leave worker,2
        split 1,plita
     
        queue get_nasos
        enter worker
        depart get_nasos        
        advance 180,120
        leave worker
        transfer ,pribor
     
    plita   queue make_plita
        enter worker
        depart make_plita
        advance 80,20
        leave worker
        
    pribor  assemble 2
        queue check
        enter worker,2
        depart check
        advance 50,10
        advance 150,30
        leave worker,2
        terminate
        
    GENERATE 1000
    TERMINATE 1
    START 1

Автор: TEMENb 10.12.08, 12:02
ну попрежнему не выполнено
Цитата jaguar555 @
Агрегат разбирается, насос и двигатель окрашиваются, а опорная плита оцинковывается. Затем агрегат собирается окончательно

хотя на похоже это подрядидущие сплит и асембл которыми можно пожертвовать.
а в остальном вроде соответствует заданию =)

Где можно было упростить/добавить - незнаю, т.к. в задание особо не вчитывался. вы уж извините ;)


З.Ы.: м.. мдя.
действительно нужен еще один сплит (плита, насос есть, а мотора нет), а после него уже трансфер..
Соответственно и асембл 3..

Цитата TEMENb @
откуда ТРИ компонента?

Извините недосмотрел...

Автор: B@mbr48rus 10.12.08, 16:05
На комплектовочный конвейер сборочного цеха каждые Т1 минут поступают N1 деталей первого типа и каждые Т2 минут – N2 деталей второго типа. Изделие комплектуется из N3 деталей каждого типа. Комплектация начинается только при наличии деталей обоих типов в необходимом количестве (рис. 1.)






Конвейер движется ритмично с шагом Т3 минут. При отсутствии необходимого количества деталей секция конвейера перемещается пустой («холостой ход»).
Определить целесообразность перехода на другие режимы работы конвейера, оперируя такими параметрами:
1)размерами секции – количеством деталей каждого типа, из которых комплектуется изделие (возможны дополнительные варианты – по N4 и N5 изделий);
2) шагом конвейера (возможны дополнительные варианты – Т4 и Т5 минут).
Оценить вероятность «холостого хода», средних и максимальных длин очередей каждого типа изделий.

Варианты заданий

Вариант Параметры
Т1 N1 Т2 N2 N3 Т3 N4 N5 Т4 Т5
1 5±1 5 20±5 20 10 10 20 5 20 5
2 10±3 8 40±10 32 16 20 32 8 36 9
3 15±5 12 60±12 36 24 30 36 12 45 15
4 12±4 6 48±10 24 24 24 24 6 45 15



Есть код на GPSS, но он почему то не компелируется. Помогите пожайлуста!!!

izd1 storage 10 объявление накопителя для изделий 1
izd2 storage 10 объявление накопителя для изделий 2
pust variable 0
poln variable 0
generate 480 задание общего времени моделирования
terminate 1
generate 5,1 генерация деталей 1 первого типа
QUEUE o1
enter izd1 вход деталей в накопитель 1
terminate
generate 20,7 генерация деталей 1 первого типа
QUEUE o1
split 1 создание 1 копии выходящего в блок транзакта
enter izd2,2 вход деталей 2 в накопитель
terminate
generate 10 задание числа секций
test GE s$izd2,1,pst проверка наличия деталей в накопителе 1
test GE s$izd1,2,pst проверка наличия деталей в накопителе 2
leave izd1,2 освобождение накопителя 1
leave izd2,1 освобождение накопителя 2
advance 10 обработка
savevalue poln+,1 подсечет кол-ва полных секций
terminate
pst savevalue pust+,1 кол-во пустых секций
terminate
start 1

Автор: TEMENb 10.12.08, 16:22
для начала можно поудалять коментарии
или хотя б отделить их точкой с запятой.. или звездочкой

Автор: VitaminkaKush 12.12.08, 10:00
Помогите !!!! запрограммить пожалуйста!!!

В небольшом кафе работают две официантки (А и B) обслуживая по 7 четырехместных столиков. Официантка А пользуется большей популярностью, чем официантка В. Приходя в кафе, клиент садится за столик официантки В только в том случае, если все места за столиками, которые обслуживает официантка А, заняты. Клиенты приходят в кафе через 2 ± 1 минут и, если не застают свободных мест, становятся в очередь.
Когда клиент садится на освободившееся место, он ждет, пока к нему подойдет официантка и примет у него заказ. Время приема заказа у официантки А занимает 35 ± 6 секунд, у официантки В соответст¬венно 22 ± 6 секунд. Приняв заказ у клиента, официантки сразу же его выполняют. Время выполнения заказа обеими официантками составляет 180 ± 30 секунд. После получения заказа клиент на протяжении 10 ± 3 минут обедает и уходит из кафе. Официантки обслуживают клиентов по принципу FIFO и в каждый момент времени могут об¬служивать не более одного клиента.
Определить время ожидания в очереди и время, которое клиент проводит за столиком кафе. Промоделируйте работу кафе на протяжении 10 ч.

помогите...

Автор: TEMENb 12.12.08, 10:14
Скрытый текст
запрограммируйте за меня, пажалста-пажалста
:D

VitaminkaKush, задавайте вопросы, где не понятно. Поможем. А уже кодить всеравно прийдеться вам.

клиенты приходят
клиенты пытаются войти в МКУ РЕСТОРАН
Клиенты смотрят, а не занята ли первая официантка.. и идут к соответствующей официантке
клиенты садятся за столик (станосятся в МКУ-очередь к официантке)
обслуживаются официанткой
покидают МКУ столик
покидают МКУ ресторат
покидают модель


вот и вся ваша модель.

Автор: B@mbr48rus 12.12.08, 16:46
Посмотрите пожалуйста правильно я запрограммировал в GPSS для варианта !?

izd1 storage 10; объявление накопителя для изделий 1
izd2 storage 10; объявление накопителя для изделий 2
pust variable 0;
poln variable 0;
generate 480; задание общего времени моделирования
terminate 1;
generate 5,1; генерация деталей 1 первого типа
queue o1;
enter izd1; вход деталей в накопитель 1
terminate;
generate 20,5; генерация деталей 1 первого типа
queue o2;
split 1; создание 1 копии выходящего в блок транзакта
enter izd2,2; вход деталей 2 в накопитель
terminate;
generate 10; задание числа секций
test GE s$izd2,1,pst; проверка наличия деталей в накопителе 1
test GE s$izd1,2,pst; проверка наличия деталей в накопителе 2
leave izd1,2; освобождение накопителя 1
leave izd2,1; освобождение накопителя 2
advance 10; обработка
savevalue poln+,1; подсечет кол-ва полных секций
terminate;
pst savevalue pust+,1; кол-во пустых секций
terminate;
start 1;

Добавлено
Всмысле для варианта №1, в задаче выше про комплектовочный конвейер!?

Автор: TEMENb 12.12.08, 17:02
структура программы похожа на правильную, хотя я б использовал пользовательские списки вместо МКУ (наличие деталей)

касаемо цифр задачи - особо не сверялся.. ну есть подозрение. что напартачил с колличеством деталий в партии при поступлении.. но может я просто условие понял не так хорошо как автор ;)

отсутствуют доп задания.

А вообще СЧА прошарил - зачет.

Совет: Сделай размер МКУ соответствующий колличеству деталей для одного перемещения. тогда можно будет просто проверять контейнеры на заполненость => на ходу можно будет поменять параметры моделирования.

Автор: Ji$er 13.12.08, 16:11
Помогите пожалуйста решить задачу...GPSS World...student version...

Постановка задачи: На сборочный участок цеха предприятия через интервалы времени, распределенные экспоненциально со средним значением 10 мин, поступают партии, каждая из которых состоит из трех деталей. Половина всех поступающих деталей перед сборкой должна пройти предварительную обработку в течение 7 мин. На сборку подаются обработанная и необработанная детали. Процесс сборки занимает всего 6 мин. Затем изделие поступает на регулировку, продолжающуюся в среднем 8 мин (время выполнения ее распределено экспоненциально). В результате сборки возможно появление 4% бракованных изделий, которые не поступают на регулировку, а направляются снова на предварительную обработку.
Смоделировать работу участка в течение 24 ч. Определить возможные места появления очередей и их вероятностно-времен¬ные характеристики. Выявить причины их возникновения, пред¬ложить меры по их устранению и смоделировать скорректированную систему.

Начал решать,но выводит следующие...поясните пожалуйста

12/13/08 19:04:29 START 1
12/13/08 19:04:29 Simulation in Progress.
12/13/08 19:04:29 Error Stop.
12/13/08 19:04:29 Halt.
12/13/08 19:04:29 Clock:0.000000.
12/13/08 19:04:29 There are no Transactions. Check Transaction Limits and Blocking.
____________________________________________________________________________________

SBOR STORAGE 2 ;
;------------------------------------;
GENERATE ,,,1 ;геним транзакт
MET1 ADVANCE (Exponential(1,0,10));задержка генерации по экспоненциальному закону на 10 мин
SPLIT 3,MET2 ;клоним 3 транзакта, отправляем их на метку
TRANSFER ,MET1 ;отправляем родителя на метку
MET2 TRANSFER .5,MET3 ;половину пропускаем, половину отправляем на метку
QUEUE OCH1 ;занять очередь 1
SEIZE PREDV ;первичная обработка
DEPART OCH1 ;покинуть очередь
ADVANCE 7 ;задержка на время обработки
RELEASE PREDV ;покинуть первичную обработку
QUEUE OCH2 ;занять очередь 2
LINK 2,FIFO ;ПОСТАВИТЬ В 2-Й СПИСОК ПОЛЬЗОВАТЕЛЯ
;------------------------------------;
MET3 QUEUE OCH2 ;занять очередь 2
LINK 1,FIFO ;ПОСТАВИТЬ В 1-Й СПИСОК ПОЛЬЗОВАТЕЛЯ
;------------------------------------;
MET4 ENTER SBOR ;занять устройство сборки
DEPART OCH2 ;покинуть очередь 2
ASSEMBLE 2 ;собрать из двух деталей одну
ADVANCE 6 ;Задержка на время обработки
ADVANCE (Exponential(1,0,8)); изделие поступает на регулировку продолжающуюся 8 мин по экспоненциальному закону
TRANSFER .04,MET4;4% браковых изделий отправляем на предварительную обработку
LEAVE SBOR ;покидаем сборку
LEAVE SBOR ;пришло две детали, а входит одно. потому покидаем два раза.
TERMINATE ;транзакт покидает систему
;------------------------------------;
GENERATE ,,,1 ;геним
POVT TEST G CH1,0 ;если первый список пользователя больше нуля, то дальше
TEST G CH2,0 ;если второй список пользователя больше нуля, то дальше
UNLINK 1,MET4,1 ;отправить из 1-го списка пользователя на метку МЕТ4 один транзакт
UNLINK 2,MET4,1 ;отправить из 2-го списка пользователя на метку МЕТ4 один транзакт
TRANSFER ,POVT ;перейти на метку
;------------------------------------;
GENERATE (24#60) ;геним транзакт через 8 часов
TERMINATE 1 ;из счетчика завершений вычитаем 1
;------------------------------------;
START 1 ;
;------------------------------------;

Автор: TEMENb 13.12.08, 16:15
Это может показаться странным, но ваша задача у меня промоделировалась (на правильность реализации не смотрел).

вот отчет
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                  GPSS World Simulation Report - Untitled Model 1.3.1
     
     
                       Saturday, December 13, 2008 18:12:33  
     
               START TIME           END TIME  BLOCKS  FACILITIES  STORAGES
                    0.000           1440.000    31        1          1
     
     
                  NAME                       VALUE  
              MET1                            2.000
              MET2                            5.000
              MET3                           13.000
              MET4                           15.000
              OCH1                        10001.000
              OCH2                        10003.000
              POVT                           25.000
              PREDV                       10002.000
              SBOR                        10000.000
     
     
     LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE             1             0       0
    MET1                2    ADVANCE            146             1       0
                        3    SPLIT              145             0       0
                        4    TRANSFER           145             0       0
    MET2                5    TRANSFER           435             0       0
                        6    QUEUE              201            19       0
                        7    SEIZE              182             0       0
                        8    DEPART             182             0       0
                        9    ADVANCE            182             1       0
                       10    RELEASE            181             0       0
                       11    QUEUE              181             0       0
                       12    LINK               181           180       0
    MET3               13    QUEUE              234             0       0
                       14    LINK               234           233       0
    MET4               15    ENTER                2             0       0
                       16    DEPART               2             0       0
                       17    ASSEMBLE             2             0       0
                       18    ADVANCE              1             0       0
                       19    ADVANCE              1             0       0
                       20    TRANSFER             1             1       0
                       21    LEAVE                0             0       0
                       22    LEAVE                0             0       0
                       23    TERMINATE            0             0       0
                       24    GENERATE             1             0       0
    POVT               25    TEST               182             1       0
                       26    TEST               181             0       0
                       27    UNLINK             181             0       0
                       28    UNLINK             181             0       0
                       29    TRANSFER           181             0       0
                       30    GENERATE             1             0       0
                       31    TERMINATE            1             0       0
     
     
    FACILITY         ENTRIES  UTIL.   AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
     PREDV              182    0.883       6.988  1      398    0    0     0     19
     
     
    QUEUE              MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME   AVE.(-0) RETRY
     OCH1               21   19    201     13     6.316     45.252     48.381   0
     OCH2              413  413    415      1   207.152    718.792    720.528   0
     
     
    STORAGE            CAP. REM. MIN. MAX.  ENTRIES AVL.  AVE.C. UTIL. RETRY DELAY
     SBOR                2    0   0     2        2   1    1.988  0.994    0  361
     
     
    USER CHAIN         SIZE RETRY  AVE.CONT   ENTRIES  MAX     AVE.TIME
     1                   53    0     21.214      234    53      130.548
     2                    0    1      0.006      181     2        0.047
     
     
    FEC XN   PRI         BDT      ASSEM  CURRENT  NEXT  PARAMETER    VALUE
       398    0        1442.223      1      9     10
         1    0        1457.824      1      2      3
       439    0        2880.000    439      0     30


Попробуйте закоментировать ВЕСЬ код.
и запускайте моделирование. после успешных попыток - открывайте несколько блоков. таким образом вы найдете то мето, в котором программа дает сбой.

Автор: Ji$er 13.12.08, 16:32
спасибо...все заработало

Автор: yolko 13.12.08, 17:37
добрый вечер вот решаю задачу на gpssh (преподаватель очень придирчевый :( а я почти неразбираюсь в gpss)
немогу понять в задаче как вычислить производительность зала?

вот задание
Система обслуживания запросов с двумя различными ЭВМ и общим терминалом.
В зал поисковой системы из двух специализированных ЭВМ с общим терминалом ввода-вывода через экспоненциально распределенные интервалы времени со средним – 2 мин заходят по одному клиенты и с вероятностями 0,7 и 0,3 обращаются к ЭВМ1 и к ЭВМ2, если в зале не более 10 клиентов. На подготовку запроса на терминале тратится 2+-1 мин, на вывод найденного ответа – 0,5 мин работы терминала "вне очереди"(без участия ЭВМ). ЭВМ1 «ищет» 3+-2 мин, ЭВМ2 - 6+-4 мин.
По концептуальной модели разработать программную модель системы с использованием ЯИМ GPSS/H. Экспериментально найти: коэффициент отказа клиентам (войти в зал) и загрузку ЭВМ, гистограмму и среднее значение времени пребывания клиента в зале, производительность зала.
user posted image

вот что я написал
SIMULATE ;начать моделирование.
1 TABLE M1,3,3,30 ;определение таблицы 1.
1 STORAGE 10 ;определение вместимости H1.
RMULT 1E5 ;Установить начальное значение ГСЧ.
GENERATE RVEXPO(1,2) ;генерировать заявки = 2 мин експ.
TRANSFER BOTH,ME1,ME2 ;Если в Н1 есть свободные места, заявка входит внего, иначе идет на выход из КМ
ME2 TERMINATE ;выход заявки из системы
ME1 ENTER 1 ;вход заявки в накопитель H1
QUEUE H2 ;Вход заявки в накопитель Н2
SEIZE 1 ;Вход заявки в ОУ1
DEPART H2 ;Выход заявки из накопителя Н2, освобождение очереди.
ADVANCE 2,1 ;Задержка в ОУ1, от 1 до 3 минут.
RELEASE 1 ;Выход заявки из ОУ1
TRANSFER .7,ME4,ME3 ;С вероятностью 0,7 заявки будут переданы в Н3 и с вероятностью 0.3 в Н4.
ME3 QUEUE H3 ;Вход заявки в накопитель Н3
SEIZE 2 ;Вход заявки в ОУ2
DEPART H3 ;Выход заявки из накопителя Н3, освобождение очереди.
ADVANCE 3,2 ;Задержка в ОУ2, от 1 до 5 минут.
RELEASE 2 ;Выход заявки из ОУ2
TRANSFER ,ME5 ;Безусловный переход на ФЭК "Присвоить приоритет 1"
ME4 QUEUE H4 ;Вход заявки в накопитель Н4
SEIZE 3 ;Вход заявки в ОУ3
DEPART H4 ;Выход заявки из накопителя Н4, освобождение очереди.
ADVANCE 6,4 ;Задержка в ОУ3, от 2 до 10 минут.
RELEASE 3 ;Выход заявки из ОУ3
TRANSFER ,ME5 ;Безусловный переход на ФЭК "Присвоить приоритет 1"
ME5 PRIORITY 1 ;Присвоить заявке приоритет 1
QUEUE H5 ;Вход заявки в накопитель Н5
SEIZE 1 ;Вход заявки в ОУ1
DEPART H5 ;Выход заявки из накопителя Н5, освобождение очереди.
ADVANCE .5 ;Задержка в ОУ1, 0,5 минуты.
RELEASE 1 ;Выход заявки из ОУ1
LEAVE 1 ;Выход заявки из накопителя Н1, освобождение 1 места в очереди.
TABULATE 1 ;Занести значение t в таблицу 1
SAVEVALUE 1,(N3*1000)/N30,XL ;Cохранение значения коэффициента отказа клиентам (войти в зал)
SAVEVALUE 2,FR2,XL ;Cохранение значения загрузки ЭВМ1
SAVEVALUE 3,FR3,XL ;Cохранение значения загрузки ЭВМ2
SAVEVALUE 4,ST1,XL ;Cохранение значения времени пребывания заявок в зале
TERMINATE ;выход заявки из системы
GENERATE 2E6 ;задание времени моделирования.
TERMINATE 1 ;Значение счетчика завершений уменьшить на 1
START 1 ;Выполнение модели и задание начального значения счетчика завершений
END ;Окончание программы

Автор: TEMENb 13.12.08, 17:45
yolko, выглядит, как будто вы решили похвастаться.
Невижу вопросительного знака в посте ))
Если у вас что то не работает или где-то модель себя ведеть некоректно - спрашивайте.
Проверять весь код на правильность не буду. т.к. это на порядок сложнее, чем написать с нуля.

Автор: yolko 13.12.08, 17:49
нужно вычислить производительность зала , тоесть H1. как это сделать недоходит :(
поставил вопросительный знак.

Автор: TEMENb 13.12.08, 17:53
ну насколько я понимаю, производительность зала, это отношение принятых студентов, к общему колличеству студентов.
Если вам надо пощитать это програмно - N$ME1 и (N$ME1+N$ME2) дадут вам эти значения. Вам надо только в последний момент времени пощитать N$ME1/(N$ME1+N$ME2).

Автор: yolko 13.12.08, 18:08
спасибо TEMENb , попробую так сделать. как сдам напишу.

Автор: TEMENb 13.12.08, 18:15
ИМХО это намного удобнее посмотреть в отчете и на калькуляторе разделить два числа.
покрайней мере, пока я был маленьким и глупым :D - я именно так и делал

Автор: Opex 13.12.08, 20:16
Здравствуйте! я с проблемой решения задачи :
Транспортный цех объединения обслуживает три филиала
А, В и С. Грузовики перевозят изделия из А в В и из В в С, возвращаясь затем
в А без груза. Погрузка в А занимает 20 мин, переезд из А в В длится 30 мин,
разгрузка и погрузка в В – 40 мин, переезд в С – 30 мин, разгрузка в
С – 20 мин и переезд в А – 20 мин. Если к моменту погрузки в А и В
отсутствуют изделия, грузовики уходят дальше по маршруту. Изделия в А
выпускаются партиями по 1000 шт. через 20±3 мин, в В – такими же
партиями через 20±5 мин. На линии работает 8 грузовиков, каждый
перевозит 1000 изделий. В начальный момент все грузовики находятся в А.
Смоделировать работу транспортного цеха объединения в течение
1000 ч. Определить частоту пустых перегонов грузовиков между А и В, В и С
и сравнить с характеристиками, полученными при равномерном начальном
распределении грузовиков между филиалами и операциями.

По вашему совету воспользовался решением задачи с http://vuithelp.ru/files/42.html ,но меня смущают (и не то слово) выходные данные,особенно размер очереди и ваще сам алгоритм решения задачи..... Пытался делать с использованием GATE и TEST блоков,но запутался..... Направте на путь истинный
Вот нездоровый код программы :
10 GENERATE 20,3 ; В филиале А генерируются изделия
20 QUEUE H1 ; В филиале А образуется очередь
30 SEIZE K1 ; Занять К1
40 DEPART H1 ; K1 покидает очередь
50 ADVANCE 70 ; Задержка на переезд
60 RELEASE K1 ; Освобождаем К1
70 TERMINATE
80 GENERATE 20,3 ; В филиале А генерируются изделия
90 QUEUE H1 ;В филиале А образуется очередь
100 SEIZE K2 ; Занять К2
110 DEPART H1 ; K2 покидает очередь
120 ADVANCE 70 ; Задержка на переезд
130 RELEASE K2 ; Освобождаем К2
140 TERMINATE
150 GENERATE 20,3 ; В филиале А генерируются изделия
160 QUEUE H1 ; В филиале А образуется очередь
170 SEIZE K3 ; Занять К3
180 DEPART H1 ; Освобождаем К3
190 ADVANCE 70 ;Задержка на переезд
200 RELEASE K3 ; Освобождаем К3
210 TERMINATE
220 GENERATE 20,3 ; В филиале А генерируются изделия
230 QUEUE H1 ; В филиале А образуется очередь
240 SEIZE K4 ; Занять К4
250 DEPART H1 ; K4 покидает очередь
260 ADVANCE 70 ;Задержка на переезд
270 RELEASE K4 ; Освобождаем К4
280 TERMINATE
290 GENERATE 20,5 ; В филиале B генерируются изделия
300 QUEUE H2 ; В филиале B образуется очередь
310 SEIZE K5 ; Занять К5
320 DEPART H2 ; K5 покидает очередь
330 ADVANCE 70 ;Задержка на переезд
340 RELEASE K5 ; Освобождаем К5
350 TERMINATE
360 GENERATE 20,5 ; В филиале B генерируются изделия
370 QUEUE H2 ; В филиале B образуется очередь
380 SEIZE K6 ; Занять К6
390 DEPART H2 ; K6 покидает очередь
400 ADVANCE 70 ; Задержка на переезд
410 RELEASE K6 ; Освобождаем К6
420 TERMINATE
430 GENERATE 20,5 ; В филиале B генерируются изделия
440 QUEUE H2 ; В филиале B образуется очередь
450 SEIZE K7 ; Занять К7
460 DEPART H2 ; K7 покидает очередь
470 ADVANCE 70 ; Задержка на переезд
480 RELEASE K7 ; Освобождаем К7
490 TERMINATE
500 GENERATE 20,5 ; В филиале B генерируются изделия
510 QUEUE H2 ; В филиале B образуется очередь
520 SEIZE K8 ; Занять К8
530 DEPART H2 ; K8 покидает очередь
540 ADVANCE 70 ;Задержка на переезд
550 RELEASE K8 ; Освобождаем К8
560 TERMINATE

Что странно в проге ни слова о переходах.... Что делать?

Автор: TEMENb 13.12.08, 20:17
56 строк кода в задаче максимум строк на 30...

гляну на досуге.

Автор: Opex 13.12.08, 20:27
Буду благодарен.... ;)

Автор: Opex 15.12.08, 18:41
:no-sad: очень сильно надо! Хоть что то....

Автор: TEMENb 15.12.08, 18:48
небыло времени глянуть сори :no-sad:
и сегодня похоже не будет :'(

Автор: Opex 15.12.08, 20:05
ну а ваще там че как просто,нет? мне прост на неделе надо сдать,типа курсач.... вот.... падможешь? время буит?

Автор: TEMENb 15.12.08, 20:06
ну не так уже и сложно, просто много ты всего написал. это разбирать надо.
Чужой код - темный лес - сам знаешь.

Автор: Opex 15.12.08, 20:10
во во.... я вот эту прогу сам не понял! толи тока часть,толи... хз че.... пытался сам делать-ниче в голову не приходит! вроде задание ясно,а вот как реализовать.... :wall:

Добавлено
и через GATE и через TEST думал.... никак.... сломал мозг весь.... и препод ище хер че обьяснит,сам ведет первый семестр дисциплину! вот вся надежда на вас! :yes-sad:

Автор: TEMENb 17.12.08, 09:26
Цитата
test ne r$stolikiA,0,rabota2


Добавлено
в остальном похоже на правду )
молодец =)

Автор: VitaminkaKush 17.12.08, 09:34
спасибки вот теперь все работает!!!!.. только как работает СЧА R?
то есть почему ставим r$stolikiA

Автор: TEMENb 17.12.08, 09:37
колличество свободных мест

Автор: VitaminkaKush 17.12.08, 09:39
Ок все большое -пребольшое спасибо!!!!!

Автор: TEMENb 17.12.08, 09:41
Эта ссылка находиться на этой страницце (в самом верху), причем еще и красным восклиццательным знаком выделена ))

Автор: jaguar555 18.12.08, 18:08
не подскажете как задать приоритет при экспоненциальном распределении?
я пишу так generate (exponential(1,0,0.2),,,,3), но gpss говорит не правильно заданы параметры

Автор: TEMENb 18.12.08, 18:24
jaguar555, для начала можно убрать скобки.
Вовторых время не должно быть дробным (хотя жпсс верд вполне переваривает дробное время, но всеравно лучше не делать дробного..)
Я так понимаю вам надо генить с лямдой 0.2 и приоритетом транзактов 3?
тогда ваш код должен выглядеть так

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate (exponential(1,0,5)),,,,3


если вы хотите с лямдой 0.2 всего 3 транзакта, то тогда так

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate (exponential(1,0,5)),,,3

Автор: jaguar555 18.12.08, 19:17
попробовал первый вариант, все равно не работает, раньше писал "Ожидаю правильные параметры",
а теперь пишет "Неверный параметр А в generate exponential(1,0,5),,,,3"

Автор: TEMENb 18.12.08, 19:22
найди 10 отличий
Цитата TEMENb @
generate (exponential(1,0,5)),,,,3

Цитата jaguar555 @
generate exponential(1,0,5),,,,3

Автор: Opex 18.12.08, 20:42
Про меня не забыли? :'(

Автор: TEMENb 18.12.08, 20:44
времени нету ((
и в ближайшее время не предвидяться :(((

Автор: Opex 18.12.08, 21:04
блиииииин.... :'( как ж так.... до понед никак?

Автор: TEMENb 18.12.08, 21:06
я не буду обещать, ибо не хочу подвести.
Скорее всего никак.

Автор: Opex 18.12.08, 21:10
ясно.... ну тогда хоть скажи если там сделать транзактами и изделия и грузовики,то что нить из этого можно сотворить?

Автор: TEMENb 18.12.08, 22:20
если б я делал - я б сделал грузовики - многоканальными устройствами, а груз - транзактами

накапливаются в мку (синхронизация) потом перевозка, и выгружаются (грузовик свободен)

Автор: B@mbr48rus 19.12.08, 19:34
Помогите пожайлуста сделать дополнительные задания в задаче про комплектовочный конвейер на стр 4. листинг программы есть на странице 5 (он рабочий)
и вроде бы сказали что он написан правильно. только вот что надо добавить чтобы доп условия заработали?????заранее спасибо!!!

Автор: TEMENb 19.12.08, 19:40
В этом посте ярко отражается стремление человека к совершенству!! вроде все есть, а чего то всеравно нехватает )))

Добавлено
B@mbr48rus, вы действительно хотите, что бы я перерыл весь форум в поисках вопросов и соответственно ответов на них?

Автор: B@mbr48rus 19.12.08, 19:51
TEMENb, помогите пожайлуста если для Вас это не трудно!

Автор: TEMENb 19.12.08, 19:53
Сначала задайте нормально вопрос. А потом (возможно) я поищу на него ответ.

Автор: B@mbr48rus 19.12.08, 20:00
Ну Вы же мне сами написали что:
"отсутствуют доп задания" (стр5).
Значит Вы понимаете о чем идет речь! :)

Автор: TEMENb 21.12.08, 10:52
Я не археолог, что б перерывать страниццы форума.
Вы нашли задание в готовом виде. Ни капли усилий не приложив.
Так почему вы щитаете, что я должен покопаться, найти ваше задание, да еще и дополнительные вопросы к нему порешать?

Автор: chekist 21.12.08, 10:56
У меня возник вопрос по поводу использования режима IA (inter arrival) в TABLE.

пишу:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TAB1 TABLE IA,0,10,10
     
    .....
     
    TABULATE TAB1



Выдает ошибку, Datum hasn't been initialized.
Использую GPSS World Student. В хелпе по поводу IA-режима ни слова, GPSS World вообще его поддерживает ?


Препод дал методу, в которой следующая фраза:


Статистика о распределении интервалов между прибытием транзактов в некоторую точку P модели. В указанную точку помещается блок TABULATE, причем в поле аргумента карты TABLE (операнд А) записывается аббревиатура IA (IA режим использования таблицы).


Погуглива нашел еще вот такое описание

Специальные режимы работы таблиц
Режим IA (Inter arrival) используют для оценки распределения
промежутков времени между приходом транзактов в определенную точку
модели. В этом случае при попадании транзактов в блок TABULATE
фиксируется абсолютное модельное время и из него вычитается время
прихода предыдущего транзакта. Полученный интервал вводится в таблицу.

Пример:

1 TABLE IA,0,100,10

Но у меня в GPSS World это не работает.

Автор: TEMENb 21.12.08, 11:11
Очень интересно..
Впринципе это можно организовать, использовав сохраняемую величину..
Я поищу - напишу ответ =)

Добавлено
Такс, вообщем про IA в GPSS/W я ничего не нашел.
Попробуйте сделать так

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    INITIAL X$TIM,0
    TAB1 TABLE (AC1-X$TIM),0,10,10
     
    .....
     
    TABULATE TAB1
    SAVEVALUE TIM,AC1


Добавлено
правда время прихода ПЕРВОГО транзакта будет временем, за которое транзакт достигает табулейта.. т.е. не совсем то, что надо
Но это можно с легкостью решить
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TAB1   TABLE     (AC1-X$TIM),0,10,10
     
    .....
        
           TEST G    N$MET1,0,MET1)
           TABULATE  TAB1
    met1   SAVEVALUE TIM,AC1


Таким образом первый транзакт пойдет на метку МЕТ1, а остальные пойдут прямехонько через табулейт.

Автор: chekist 21.12.08, 11:32
Спасибо, попробую. А режим IA, он вообще откуда взялся. Из GPSS/H ?

Автор: TEMENb 21.12.08, 11:35
может GPSS/H, а может GPSS/РС, а может Turbo GPSS.. может даже GPSS'95 student )))
откуда мне знать? ;)

Автор: Petroid 22.12.08, 05:05
Здравствуйте, у меня один большой вопрос по этой задаче.
Еще раз, условие:
В системе передачи данных осуществляется обмен пакетами данных между пунктами А и В по дуплексному каналу связи. Пакеты поступают в пункты системы от абонентов с интервалами времени 10 ± 3 мс. Передача пакета занимает 10 см. В пунктах имеются буферные регистры, которые могут хранить два пакета (включая передаваемый). В случае прихода пакета в момент занятости регистров пунктам системы предоставляется выход на спутниковую полудуплексную линию связи, которая осуществляет передачу пакетов данных за 10 ± 5 мс. При занятости спутниковой линии пакет получает отказ.
Смоделировать обмен информацией в системе передачи данных в течение 1 мин. Определить частоту вызовов спутниковой линии и ее загрузку. В случае возможных отказов определить необходимый для безотказной работы системы объем буферных регистров.
Вот немного модифицированный мной код из того же самого поста:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
               SIMULATE
    001        INPUT "Емкость буфера A", &CAPA=2
    002        INPUT "Емкость буфера B", &CAPB=2
    003 BUFA   STORAGE      &CAPA               ; буферный регистр на пункте А
    004 BUFB   STORAGE      &CAPB               ; буферный регистр на пункте В
     
    005        SAVEVALUE    PAKAB,0
    006        SAVEVALUE    PAKBA,0
    007        SAVEVALUE    CALLSAT,0
    008        SAVEVALUE    PAKSAT,0
    009        SAVEVALUE    OTAKZSAT,0
    *********A->B**********************************************
    010        GENERATE     10,3            ; поступление пакетов в пункт А
    020        GATE SNF     BUFA,SAT        ; если буфер заполнен то выход на спутник SAT
    030        ENTER        BUFA            ; Заполнение буфера в пункте А
    040        SEIZE        AB              ; занять устройство - линию от A к B
    050        LEAVE        BUFA            ; освобождение буфера пункта А
    060        ADVANCE      10              ; передача пакета
    065        SAVEVALUE    PAKAB+,1        ; увеличение числа переданных пакетов из А в В
    ;066        ENTER        BUFB            ; Заполнение буфера в пункте В
    070        RELEASE      AB              ; осовободить устройство - линию от A к B
    ;071        LEAVE        BUFB            ; освобождение буфера пункта В
    080 OUT    TERMINATE                    ;            
    085 OTKAZ  SAVEVALUE    OTKAZSAT+,1     ; отказ передачи, увеличение числа отказов
    090        TRANSFER     ,OUT          
     
    **********B->A*********************************************
    100        GENERATE     10,3            ; поступление пакетов в пункт В
    110        GATE SNF     BUFB,SAT        ; если буфер заполнен то выход на спутник SAT
    120        ENTER        BUFB            ; Заполнение буфера в пункте В
    140        SEIZE        BA              ; занять устройство - линию от В к А
    160        LEAVE        BUFB            ; освобождение буфера пункта В
    170        ADVANCE      10              ; передача пакета
    175        SAVEVALUE    PAKBA+,1        ; увеличение числа переданных пакетов из B в A
    ;176        ENTER        BUFA            ; Заполнение буфера в пункте А
    180        RELEASE      BA              ; осовободить устройство - линию от В к А
    ;181        LEAVE        BUFA            ; освобождение буфера пункта А
    190        TRANSFER     ,OUT            ;
     
    **********SATELLITE****************************************
    195 SAT    SAVEVALUE    CALLSAT+,1      ; увеличение числа частоты вызова спутника
    200        GATE NU      LINES,OTKAZ     ; если линия спутника не занята то вниз иначе на отказ
    210        SEIZE        LINES           ; занять устройство - спутниковую линию связи
    220        ADVANCE      10,5            ; передача пакета
    225        SAVEVALUE    PAKSAT+,1       ; увеличение числа переданных пакетов через спутник
    230        RELEASE      LINES           ; осовободить устройство - спутниковую линию связи
    240        TRANSFER     ,OUT            ;          
     
    ***************************************************************************************
    500        GENERATE     60000           ; работа системы в течние 1 мин = 60000 мс
    550        TERMINATE    1               ;
    555        START 1
    560        END

В таком виде результаты моделирования вполне логичны. Видите закоментенные строки? Если их раскоментить, то результаты моделирования ни в какие ворота не лезут. Собственно, вопрос: а почему оно так?
Если я правильно понял условие, буферы используются как для входящих, так и для исходящих пакетов, т.е. при передаче одного пакета занимаются буферы обоих сторон. Если это так, то что не правильно?
Спасибо заранее!
ЗЫ Это все для GPSS/PC делалось

Добавлено
Еще интерессный вопрос (скорее, риторический): почему в GPSS/PC не работает такой кусок кода?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    040        *какой-то код
    045        GATE LR      BVT,MET5        
    050        *опять какой-то код
    055 MET5   TEST GE      P1-V$M,100,MET6  
    060        *тут тоже что-то есть

Ругается на несуществующее имя блока MET5...
Причем после вот такого шаманства все работает:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    040        *какой-то код
    045        GATE LR      BVT,MET5
    050        *опять какой-то код
    055 MET5   ADVANCE      0                ; черная магия, не редактировать
    060        TEST GE      P1-V$M,100,MET6  
    065        *тут тоже что-то есть

Автор: TEMENb 22.12.08, 08:27
Ну прежде всего, перед тем как отвечать на ваши вопросы, надо ответить, что жпсс - язык загадочный, а жпсс/рс - это загадка для наимудрейших мужей!!

Цитата
GPSS - это больше, чем язык программирования. Это не только система имитационного моделирования а, прежде всего, это неординарное явление в мире программирования конца 60-х/начала 70-х годов.
(с) цитатко из очень умной книжки по имитационному моделированию.

предупреждаю сразу. программу подробненько не смотрел, более того, условие задачи не читал.
касаемо
Цитата Petroid @
;066 ENTER BUFB ; Заполнение буфера в пункте В
070 RELEASE AB ; осовободить устройство - линию от A к B
;071 LEAVE BUFB ; освобождение буфера пункта В

вероятней всего что статистика и должна поменяться. и насколько точно она будет отображать суровую действительность зависит только от понимания модели автором. ИМХО я б убрал, строки 66 и 71 вообще, и пояснил преподу, что типа сообщение дошло, буферизация не требуется. Возможно автор задачи на это и расчитывал.

Касаемо черной магии - блок адванс без параметров - это явление стандартное. Используется обычно, когда надо сделать обязательный переход на блок, ктороый возможно может быть занят. т.е. например
Цитата

transfer both,met1,met2
met1 seize 1
..............
met2 advance
seize 2

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

Возможно в вашей модели транзакт не может перейти по метке. А возможно вы гдето ткнули табулятор... а РС их не любит.. незнаю даже почему.. наверно детские страхи... загадочный он этот РС......

Добавлено
Цитата
005 SAVEVALUE PAKAB,0
006 SAVEVALUE PAKBA,0
007 SAVEVALUE CALLSAT,0
008 SAVEVALUE PAKSAT,0
009 SAVEVALUE OTAKZSAT,0

может конечно я старомоден, но для инициализации переменных используется блок INITIAL, а блок SAVEVALUE используется для присвоения значения в процесе моделироватия.
Хотя конкретно в этом тексте задачи негативных последствий сия запись не несет.. но и позитивных тоже.. мусор ))

Добавлено
нумеруются обычно только функциональные блоки.. хотя это тоже не ошибка.

так же РС рекомендует использовать идентификаторы не длиннее пяти символов. т.е. на "PAKSAT" он уже вполне может ругнуться.. хотя может и не ругнуться ;)

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

Автор: Petroid 22.12.08, 16:41
Спасибо за ответ!
Собственно, мои предположения оправдались.
Сдал сегодня в таком виде (с убранными строками 66, 71, 176 и 181). Тоже без замечаний :D

Воистину, GPSS/PC - наизагадочнейшее явление... Сегодня практически тот же код заработал без advance 0 ...

ЗЫ Просто я привык к C/C++, и лично мне advance без параметров показался шаманством вроде if(false){}; :rolleyes:

Добавлено
Цитата TEMENb @
вероятней всего что статистика и должна поменяться. и насколько точно она будет отображать суровую действительность зависит только от понимания модели автором

Статистика меняется кардинально! Количество обслуженных основным каналом связи пакетов понижается до малоправдоподобной величины 0,33% зато количество потерянных пакетов возрастает до 62% :blink:

Автор: TEMENb 22.12.08, 17:05
Цитата Petroid @
if(false){};

)))

Автор: pil69 22.12.08, 17:57
;066 ENTER BUFB ; Заполнение буфера в пункте В
070 RELEASE AB ; осовободить устройство - линию от A к B
;071 LEAVE BUFB ; освобождение буфера пункта В


Рассмешили меня этим кодом :D

Автор: TEMENb 22.12.08, 18:14
а что смешного?
Если буфер заполнен входящим сигналом. то пакет не выйдет из устройства. Может в этой задаче небыло такой задумки, но впринципе такой код вполне возможен.

Автор: jaguar555 22.12.08, 21:36
Подскажите пожалуйста как проводить факторный анализ, т.е. по какому принципу вводить значения в нем, value1 и value2. и еще откуда брать данные для:
1. Средняя длительность прохождения через систему
2. Средневзвешенное время ожидания в очереди
3. линейная выпуклая комбинация всех факторов

Автор: TEMENb 22.12.08, 22:16
Цитата jaguar555 @
по какому принципу вводить значения в нем, value1 и value2

скорее всего у вас там есть какой то параметр (F), который нужно оптимизировать. вводите значения методом научного тыка и смотрите на изменения. В особо тяжких случаях можно нарисовать график F(value1;value2) по результатам моделирования.

Цитата jaguar555 @
1. Средняя длительность прохождения через систему

блоки MARK, TABLE, TABULATE, и СЧА М1 тебе в помощь ))

Цитата jaguar555 @
2. Средневзвешенное время ожидания в очереди

статистика по очереди

Цитата jaguar555 @
3. линейная выпуклая комбинация всех факторов

незнаю что это такое...

Автор: Rita_r 30.12.08, 18:04
В методичке нашла программу. В состав GPSS-модели входит 16 терминалов. Время подготовки пользователем запроса распределено равномерно в интервале [500,1500]. Время обслуживания запроса вычислительной системой распределено по нормальному закону со средним 500 и среднеквадратичным отклонением 50. Организовать моделирование в течение 100000 единиц модельного времени.

TERM STORAGE 16
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/.2425,-.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
GENERATE ,,,16
BAHT ENTER TERM,1
ADVANCE 1000,500
LEAVE TERM,1
QUEUE OCHER
SEIZE COMP
DEPART OCHER
ADVANCE V$NORM
RELEASE COMP
TRANSFER ,BAHT
GENERATE 580
TERMINATE 1
START 1


Возникает ошибка

Line 9, Col 24. Syntax error. Unidentified character.
NORM FVARIABLE 500 + 50 *FN$NRAS
**** Model Translation Aborted ****

Может у меня версия GPSS не подходящая? (у меня версия 5.2.2)

Автор: TEMENb 30.12.08, 19:14
все дело в том, что умножение в жпсс выглядит так - "#", а не так - "*".

Добавлено
Цитата
TERM STORAGE 16
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/.2425,-.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
GENERATE ,,,16
BAHT ENTER TERM,1
ADVANCE 1000,500
LEAVE TERM,1
QUEUE OCHER
SEIZE COMP
DEPART OCHER
ADVANCE V$NORM
RELEASE COMP
TRANSFER ,BAHT
GENERATE 580
TERMINATE 1
START 1


и как жпсист жпэсисту советую - старайтесь делать поменьше либших пробелов ;)

Автор: TEMENb 31.12.08, 10:50
GPSS - то понятно. А какая среда?
это явно не GPSS WORLD собственно и не GPSS/PC.
Дык что ж это за зверь то такой?

Автор: TEMENb 01.01.09, 23:35
я умею GPSS/PC и GPSS world, и даже некое самопальное чудо GPSS'95.

То что в архиве вижу впервые. Вообщем как и половину операторов программы, написаной выше.

Это вроде как turbo GPSS - вроде основа та же, но налеплено кучу наворотов которые дадо учить и в которых надо разбираться.
Дык по турбо жпсс у меня хоть мануал был ))

Похоже это именно тот случай, когда спасение утопающих - дело рук самих утопающих.
Сори.

Автор: TEMENb 02.01.09, 01:53
Тут
Кстати ссылка на этот ресурс находится на этой же страницце. и даже выделена красным восклиццательным знаком ))

Автор: Robotex 02.01.09, 03:56
Цитата TEMENb @
Тут
Кстати ссылка на этот ресурс находится на этой же страницце. и даже выделена красным восклиццательным знаком ))

Благодарствую... Почитаю...

А вы задание не смотрели? Как может выглядеть алгоритм решения (словесно хотя бы)

Автор: serg_fanat 02.01.09, 11:28
Добрый день!В GPSS вообще не разбираюсь,но нужно сделать курсовой проект по моделированию ИС...помогите пожалуйста....
задача: Ниже в подразделе 4.2 будут приведены индивидуальные задания для выполнения курсового проекта. В этих заданиях приведены различные структуры вычислительной системы.
В заданиях предполагается, что каждая СМО, входящая в сеть, имеет простейший поток обслуживания, один канал обработки заявок и беско-нечный накопитель. Дисциплина обслуживания заявки не зависит от вре-мени ее обработки и от длины очереди. Это позволяет проводить аналити-ческое моделирование приведенных вариантов структур контуров боевого управления. Для этого в заданиях указан вектор интенсивности потока обслуживаний в отдельных СМО а также приведена матрица вероятностей перехода потока заявок между системами массового обслуживания. Номера СМО, входящих в сеть, обозначены на приведенных рисунках цифрами, которые помещены в прямоугольники, соответствующие элементам структуры.
В качестве нулевой СМО взята среда. При этом предполагается, что все потоки данных о целях объединяются в общий входной поток, имеющий интенсивность . Для решения задач аналитического моделирования пред-полагается, что входной поток является простейшим. В этом случае реша-ется задача определения условий существования стационарного режима в стохастической сети. При построении графика зависимости математиче-ского ожидания времени обработки заявки от интенсивности входного потока рассматриваются значения  от 0 до максимального, обеспечиваю-щего стационарный режим работы сети.
При определении вероятностно-временных характеристик стохастиче-ской сети (пункт 3 задания) используются значения  равные 0,01 с-1 .
При определении значений вероятностно-временных характеристик се-ти при изменении скорости обработки информации операторами (пункт 4 задания) используются значения  равные 0,01 с-1. Затем следует рассмот-реть изменение этих характеристик при увеличении интенсивности входно-го потока. Это позволит построить графики зависимости значений матема-тического ожидания времени нахождения заявки в системе от интенсивно-сти входного потока для разных значений интенсивности обслуживания заявок операторами.
Имитационные модели следует строить из предположения, что все по-токи обслуживания остаются простейшими а входной поток варьируется. Следует рассмотреть простейший входной поток, поток, в котором время между заявками подчинено нормальному закону распределения, детерми-нированный поток и равномерный поток.
При построении регрессионной модели в качестве факторов следует выби-рать значения интенсивности входного потока и математических ожида-ний времени обработки заявки операторами. Эта регрессионная модель позволит сравнить полученные зависимости при аналитическом и имита-ционном моделировании. При определении границ изменения факторов следует иметь в виду, что должны быть обеспечены условия стационарно-сти стохастической сети. Следовательно, значения интенсивности входно-го потока, должны изменяться от минимального до значения, рассчитанно-го при решении задачи № 2 задания, в которой определялись условия су-ществования стационарного режима. Минимальные интенсивности обра-ботки заявки операторами, которые позволяют определить математические ожидания времени обработки заявки операторами, должны удовлетворять соотношению min i  ai max.

user posted image
user posted image

Автор: Yznau 13.01.09, 07:01
Здравствуйте! Мне надо решить задачу:
Скрытый текст
Имеется некоторый производственный процесс, который реали¬зуется линией с тремя последовательно установленными агрегатами:
A, B и C. Поток продукции, который поступает от агрегата А, является пуассоновским со средней нормой выработки 15 изделий за час. Аг¬регат B функционирует по равномерному закону, продолжительность обработки изделия составляет 4 ± 1 мин. Закон распределения време¬ни обслуживания изделий агрегатом C приведен в таблице:
Вероятность 0,1 0,2 0,4 0,2 0,1
Продолжительность обслуживания, мин. 2 3 4 5 6
При скоплении на входе агрегата C двух или более изделий в технологической линии возникает затор. Промоделировать функционирование линии на протяжении 100 ч. Определить общее время затора на входе агрегата C. Построить гистограмму распределения продолжительности заторов.

Я все сделал, однако есть одна загвоздка:
КАК можно определить общее время затора(общее время жизни очередей) и каким образом построить гистограмму распределения ПРОДОЛЖИТЕЛЬНОСТИ заторов? Как строить диаграмму в GPSS World я знаю..но как вообще получить данные о распределении продолжительности очередей? Какой СЧА вообще за это отвечает? Перерыл 4 книги, ни в одной не нашел зацепку. QTABLE? Пробовал. Совсем там не распределение продолжительности очередей:(:(:(
Сдавать задачу уже 15.
Подскажите пожалуйста, как вообще определяется это время продолжительности очередей?

Автор: TEMENb 13.01.09, 07:38
РАСПРЕДИЛЕНИЕ ДЛИННЫ ОЧЕРЕДИ (ЕСЛИ Я ВСЕ ПРАВИЛЬНО ПОНЯЛ)

Цитата
*************************************
;-----------------------------------;
TAB TABLE Q$OCH,-.5,1,1000
;-----------------------------------;
*************************************
;-----------------------------------;
GENERATE 1
TABULATE TAB
TERMINATE
;-----------------------------------;
*************************************


ЗАТОР

Цитата
*************************************
;-----------------------------------;
INITIAL X$ZATOR,0
;-----------------------------------;
*************************************
;-----------------------------------;
GENERATE ,,,1
POVT TEST GE Q$OCH,2
MARK
TEST L Q$OCH,2
SAVEVALYE ZATOR+,M1
TRANSFER ,POVT
;-----------------------------------;
*************************************


ТАКУЮ СТАТИСТИКУ ВСЕГДА УДОБНО ДЕЛАТЬ ОТДЕЛЬНЫМИ СЕГМЕНТАМИ, ЧЕМ ЗАГРОМОЖДАТЬ МОДЕЛЬ.

З.Ы.: ПИСАЛ НА КОЛЕНКЕ, ИЗВИНИТЕ, ЕСЛИ ДЕТО ЗАПОРОЛ, НО СУТЬ ЭТА.
З.З.Ы: СОРИ ЗА КАПС )

Автор: QxMIPS 13.01.09, 13:57
может мне тож кто подскажет??


Нашел решение своей задачи. незнаю правильно ли выполнено или нет((... подскажите плиZzzz.

Детали, необходимые для работы цеха, находятся на цеховом и центральных складах. На цеховом складе хранится 20 комплектов деталей, потребность в которых возникает через 60+-10 минут и составляет один комплект. В случае снижения запасов до трех комплектов, формируется в течении 60 минут заявка на пополнение запасов цехового склада до полного объема в 20 комплектов, которая посылается на центральный склад, где в течении 60+-20 минут происходит комплектовка и за 60+-5 минут осуществляется доставка деталей в цеховой склад.
Смоделировать работу цеха в течении 400 часов. Определить вероятность простоя цеха из-за отсутствия деталей и среднюю загруженность цехового склада. Определить момент пополнения запасов цехового склада при котором вероятность простоя цеха равна 0.

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

simulate
initial x$och,20;

generate 24000;
terminate 1;
generate 60,10;
test NE x$och,0,vihod0;
SAVEVALUE och-,1;
test e x$och,3,vihod;
split 1,centrskl;
vihod terminate ;
vihod0 terminate;
centrskl advance 60;
advance 60,20;
advance 60,5;
SAVEVALUE och,20;
terminate;
start 1;

Нашел по адресу GPSS задача . сообщение от Koluchiy. правильно ли он находит неизвестные???

Автор: TEMENb 13.01.09, 14:00
Неправильно

Автор: Yznau 13.01.09, 15:01
Спасибо, TEMENb, за помощь:) Буду пробовать. Если не трудно будет, поясни пожалуйста действие кода оценки времени затора, то есть что там с транзактом происходит.

Автор: Eugen 13.01.09, 19:42
проверка в цикле (если очередь >2) запомнить время этого события перейти вниз.
нижний цикл проверки. Состояние затор, очередь >2. если очередь <2 записать длительность затора и перейти на верхний цикл и т.д. :whistle:

Автор: Yznau 14.01.09, 13:34
Фух....вроде получилось, успокойте меня пожалуйста, скажите, что здесь все правильно :rolleyes: :
***Имеется некоторый производственный процесс, который реали¬зуется линией с тремя последовательно установленными агрегатами:
A, B и C. Поток продукции, который поступает от агрегата А, является пуассоновским со средней нормой выработки 15 изделий за час. Аг¬регат B функционирует по равномерному закону, продолжительность обработки изделия составляет 4 ± 1 мин. Закон распределения време¬ни обслуживания изделий агрегатом C приведен в таблице:
Вероятность 0,1 0,2 0,4 0,2 0,1
Продолжительность обслуживания, мин. 2 3 4 5 6
При скоплении на входе агрегата C двух или более изделий в технологической линии возникает затор. Промоделировать функционирование линии на протяжении 100 ч. Определить общее время затора на входе агрегата C. Построить гистограмму распределения продолжительности заторов.
***
Единица модельного времени - одна минута.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    PUASSON FUNCTION RN1,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/.9998,8
    OAC FUNCTION RN4,D5     ;Определение функции продолжительности обслуживания деталей агрегатом C.
    .1,2/.3,3/.7,4/.9,5/1,6
    INITIAL X$ZATOR,0       ;Инициализация сохраняемой величины ZATOR (Время затора).
    TAB TABLE Q$QPribC,0,5,7    ;Сбор в таблицу статистических данных об очереди к агрегату C.
    *************************
    Generate 4,FN$PUASSON   ;Генерация пуассоновского потока с интенсивностью 15 изделий в час.
    Queue QPribB        ;Транзакт занимает очередь к агрегату B.
    Seize PribB     ;Транзакт занимает агрегат B.
    Depart QPribB       ;Транзакт покидает очередь к агрегату B.
    Advance 4,1     ;Обработка изделия агрегатом B.
    Release PribB       ;Транзакт покидает агрегат B.
    Queue QPribC        ;Транзакт занимает очередь к агрегату C.
    Seize PribC     ;Транзакт занимает агрегат C.
    Depart QPribC       ;Транзакт покидает очередь к агрегату B.
    Advance FN$OAC      ;Обработка изделия агрегатом C.
    Release PribC       ;Транзакт покидает агрегат C.
    Tabulate TAB        
    Terminate           ;Транзакт покидает производственную линию.
    *************************  
    GENERATE ,,,1       ;Определение общего времени затора
    POVT TEST GE Q$QPribC,2 ;Сравнение количества транзактов в очереди к агрегату C.
    MARK            ;Запись текущего значения времени.
    TEST L Q$QPribC,2       ;Сравнение количества транзактов в очереди к агрегату C.
    SAVEVALUE ZATOR+,M1     ;Увеличение и сохранение величины ZATOR на значение времени продолжительности последнего затора.
    TRANSFER ,POVT      ;Возврат к блоку с меткой POVT.
    *************************
    Generate 6000       ;Моделирование 100 часов работы линии.
    Terminate 1
    Start 1

Автор: TEMENb 14.01.09, 14:05
особо не вглядывался, но динамика длинны очереди считается не верно. должны быть значения по каждой ЕМВ, а у вас колличество значений равно колличеству обработаных транзактов.. хотя может так задумано )

Автор: Yznau 14.01.09, 18:17
О! Я понял! TEMENb, ты меня прямо просветляешь :D . Надо было так и писать, как ты говорил.

Автор: TEMENb 15.01.09, 02:35
Цитата Yznau @
Надо было так и писать, как ты говорил.

:yes:

Автор: Eugen 15.01.09, 15:49
Цитата Yznau @
TEMENb, ты меня прямо просветляешь .
прям как лампочка Ильича :wub:

Добавлено
;)

Автор: vedmochka 17.01.09, 15:37
подскажите пожалуйста,как задать вначале количество деталей(600 штук),и что в конце писать возле start?

Автор: TEMENb 17.01.09, 16:15
GENERATE A,B,C,600 - это если всего надо сгенерировать 600 транзактов


START 600 - это если 600 транзактов должно пройти через TERMINATE 1

Автор: BabaYaga 19.01.09, 17:41
Добрый день уважаемые Разработчики.


На ВЦ через 30+- 10 мин поступают задания длиной 500+-200 байт. Скорость ввода, вывода и обработки заданий соответственно: 100+-30 байт/мин, 150+- 50 байт/мин и 100+-70 байт/мин. Задания проходят последовательно ввод, обработку и вывод. После вывода 5% заданий из-за ошибок возвращаются на повторное решение на общих основаниях. При обслуживании задания, имеющие меньшую длину обслуживаются в первую очередь.

Написать модель на языке GPSS/PC-2.
Определить:
1) Основные характеристики времени реакции системы.
2) Какой процент повторных ошибок будет у исправленных заданий.


Я не понимаю, как сделать, чтобы наибольший приоритет был у самого короткого транзакта. (Видела на форуме такую запись "priority 400-P1", но не догоняю. И как сделать отказ для 5% заданий. Очень прошу, помогите пожалуйста с решением. Заранее благодарна. P.S. Стыжусь своей безграмотности. :(

Автор: TEMENb 19.01.09, 17:46
Цитата BabaYaga @
priority 400-P1

я когда то такую бодягу писал. для РС она не прокатит.
Вопервых потому, что в качестве параметра нельзя использовать выражения. вовторых потому что максимальное значение приоритета может быть 127.
Используйте вычисляемые выражения или параметры.. вообщем поступайте так же, как поступаете с сременем передачи в адвансах.

Цитата BabaYaga @
как сделать отказ для 5% заданий

Цитата
TRANSFER .05,,otkaz

Автор: Eugen 19.01.09, 18:26
Цитата BabaYaga @
такую запись "priority 400-P1"
такую запись нужно использовать осторожно
Цитата TEMENb @
потому что максимальное значение приоритета может быть 127.

Идеально подходит блок LINK/UNLINK

Цитата BabaYaga @
как сделать отказ для 5% заданий
первый вариант: пошукай в ранее написанном в других темах.
второй - TRANSFER 0.05,met95,met5

Автор: TEMENb 19.01.09, 18:33
Цитата Eugen @
потому что максимальное значение приоритета может быть 127.

ну это только в GPSS/PC.
GPSS world это значение не ограничивает как в положительную, так и в отридцательную сторону, посему можно использовать просто
Цитата
priority (-1#P1)

Автор: BabaYaga 20.01.09, 20:13
Вопрос еще про приоритет... Как я буду сравнивать транзакты друг с другом по длине, у меня же очередь не ограничена никаким числом транзактов? Было бы их штук 10, например, тогда еще как-то понятно...

Автор: TEMENb 20.01.09, 20:18
Цитата
PRIOR VARIABLE (127-(P1\4)) ;Лабаем из диапазона в 400 приоритетов диапазон в 100 приоритетов.
;и ненадо про меня гадости думать.. деление там правильно написано )
********************
********************
********************
********************
PRIORITY V$PRIOR
QUEUE********

Автор: BabaYaga 20.01.09, 21:18
Мега-спасибище!!! :rolleyes:

Автор: BabaYaga 20.01.09, 23:01
Посмотрите пожалуйста, похоже хоть отдаленно на мою задачу? Знаю, что безграмотно. Пыталась написать что-то на GPSS вообще в первый раз в жизни.

[ code ]
10 GENERATE 30,10 ;
20 VIP VARIABLE (127-(P1\4))
30 PRIORITY VIP
40 OTKAZ QUEUE OCHER
50 SEIZE VVOD
60 ADVANCE 100,30
80 RELEASE VVOD
81 TERMINATE VVOD
90 SEIZE OBRAB
100 ADVANCE 150,50
110 RELEASE OBRAB
111 TERMINATE OBRAB
120 SEIZE VIVOD
130 ADVANCE 100,70
140 RELEASE VIVOD
141 TERMINATE VIVOD
150 DEPART OCHER
160 TRANSFER 0.05,,OTKAZ

[ /code ]

Автор: TEMENb 20.01.09, 23:03
отдаленно похоже.. а оно работает разве? или вы не на РС пишете?

Добавлено
Правда похоже весьма отдаленно ))))

поудаляйте все терминейты из модели и поставьте один. где то строчке на 170-й.

Вынесите значение приоритета в качетве вариэйбла, как я писал выше, иначе на скомпилится.

З.Ы.: очередь у вас сурезная получилась.. но на правильность работы модель не влияет )

Автор: BabaYaga 20.01.09, 23:13
На PC. Насчет терминейтов... Я без них вначале и пыталась, но GPSS ругнулся, что out of memory

Автор: TEMENb 20.01.09, 23:17
гык ))

Цитата
var variable (127-(P1\4))
Здесь могла бы быть ваша реклама
start 1


Корявенько, но должно работать )

Автор: BabaYaga 20.01.09, 23:23
Благодарю. Пойду спать. Завтра на свежую голову буду пробовать втыкать

Добавлено
А там очередь-то вообще нужна???

Автор: TEMENb 20.01.09, 23:28
Там где она есть - не нужна :D
А впринципе нужна, конечно.. ну не помешала бы по крайней мере 8-)

Автор: TEMENb 21.01.09, 07:07
Цитата
GENERATE 8,2
gate nu oa1,oaa2
; TRANSFER BOTH,OAA1,OAA2
OAA1 SEIZE OA1
ADVANCE x$p_st1,x$p_ot1
RELEASE OA1
TRANSFER ,OUT
OAA2 SEIZE OA2
ADVANCE x$p_st2,x$p_ot2
RELEASE OA2
OUT TERMINATE 1

initial x$p_st1,5
initial x$p_ot1,3
initial x$p_st2,7
initial x$p_ot2,2
start 1000
clear
reset
initial x$p_st1,6
initial x$p_ot1,2
initial x$p_st2,6
initial x$p_ot2,1
start 1000


Цитата
MEM STORAGE 3
GENERATE 8,2
TRANSFER BOTH,met1,out
;GATE SNF MEM,OUT
met1 ENTER MEM
SEIZE DEV
LEAVE MEM
ADVANCE 10,4
RELEASE DEV
OUT TERMINATE 1


start 1000
clear
reset
MEM STORAGE 5
start 1000

Автор: BabaYaga 22.01.09, 18:49
Подскажите пожалуйста, в этой задаче основные характеристики реакции системы - это: время ввода задания, время обработки и время вывода?

Автор: BabaYaga 22.01.09, 22:19
Попробовала через LINK написать. Но как в UNLINKе изобразить, что 5% ошибочных идут на повторную обработку???

Автор: TEMENb 22.01.09, 22:38
ПРРРР
не влазьте в дебри
ненужен там линк

Цитата
transfer .05,povt
5% пойдут на метку, остальные пойдут дальше

Автор: Yamakasi 26.01.09, 08:03
народ помогите навалять программку очеень буду признателен

На обрабатывающий участок цеха поступают детали в среднем через 50 мин. Первичная обработка деталей производится с вероятностью 60% на первом станке и с вероятностью 40% на втором станке. Первый станок обрабатывает деталь в среднем 40 мин и имеет 4% брака, второй соответственно 60 мин и 8% брака. Все бракованные детали возвращаются на повторную обработку каждый в свой станок.
Разработать по концептуальной модели программную модель системы с использованием ЯИМ GPSS. Определить среднюю длину очередей перед обработкой на станках.

Автор: TEMENb 26.01.09, 08:08
Безусловно поможем. Где ваш исходный текст?

З.Ы.: Между "поможем" и "напишем" принципиальная разница. Последнее обычно за деньги делается.

Автор: Yamakasi 26.01.09, 08:31
Ну собственно вот и есть задание
Текст задания:
На обрабатывающий участок цеха поступают детали в среднем через 50 мин. Первичная обработка деталей производится с вероятностью 60% на первом станке и с вероятностью 40% на втором станке. Первый станок обрабатывает деталь в среднем 40 мин и имеет 4% брака, второй соответственно 60 мин и 8% брака. Все бракованные детали возвращаются на повторную обработку каждый в свой станок.

Автор: TEMENb 26.01.09, 09:05
Текст программы, которую вы пытались написать по заданию

Автор: Yamakasi 26.01.09, 09:34
я даже не пытался делать! вот и прошу помоши! конечно не безвозместно!

Автор: Eugen 26.01.09, 15:11
15$ - обрабатывающий участок
подобная задача должна быть в этом разделе

Автор: Eugen 28.01.09, 19:26
фрагмент решения такой:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE 50
        TRANSFER 0.4,,met1
     
    met2    SEIZE   Stаnоk1
        ADVANCE 40
        RELEASE Stanok1
        TRANSFER    0.04,,met2
     
    ...
        GENERATE    1440
        TERMINATE   1
    start1

и снова 2варианта: попытаешься сделать и/или не безвозместно
Цитата Yamakasi @
я даже не пытался делать! вот и прошу помоши! конечно не безвозместно!

+ халява тоже здесь есть GPSS задача (сообщение #2181443)

Автор: SMRBR 29.01.09, 23:33
Господа, подскажите правильно ли я понял условие задачи...
В начале работы на фирме на счёт корпоративного пользователя мобильной связью перечислено 500р. Ежедневный расход средств – случайная величина, распределенная по случайному закону со средним значением 50 руб. и средним квадратичным отклонением 10 руб. По договору с оператором мобильной связи в конце каждой недели производится контроль остатка средств на счету пользователя. Если на счету меньше 150р. то счёт автоматически в течении 2 плюс минус 1 день пополняется до 500 р. Требуется смоделировать работу системы пополнения счёта в течение 180 дней. Какова вероятность остаться пользователю без мобильной связи?


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SchAb   STORAGE 500 ;средства на счёте абонента
    SostSch TABLE S$SchAb 0,1,502   ;статистические данные о состоянии счёта абонента
    PopSc   VARIABLE NahKol-S$SchAb ;объём соедств, необходимый для пополнения счёта абонента
    EzRas   VARIABLE RN1@20+40  ;ежедневный расход средств абонентом
    NahKol  EQU 500     ;начальное количество средств на счету абонента
    GrPop   EQU 150     ;сумма после которой необходимо пополнение счёта
    *Сегмент процесса заказа*
        GENERATE    7,,,,1  ;генерация транзакта каждые 7 дней
        TEST L S$SchAb,GrPop,Met1   ;проверка необходимости пополнения счёта
        ASSIGN 2,V$PopSc    ;величина заказа заносится во второй параметр транзакта
        ADVANCE 2,1 ;время задержки пополнения счёта
        ENTER SchAb,P2  ;пополнение счёта абонента
    Met1    TERMINATE       ;завершение заказа
    *Сегмент расхода средств*
        GENERATE 1  ;генерация транзакта каждый день
        ASSIGN 1,V$EzRas    ;дневной расход средств записывается в первый параметр
        TABULATE SostSch    ;средства на счёте на текущий день
        TEST GE S$SchAb,P1,Met2 ;проверка возможности снятия денег со счёта
        LEAVE SchAb,P1  ;списание необходимого количества средств со счёта абонента
        TERMINATE 1 ;завершение дня
    Met2    TERMINATE 1 ;
        START 180       ;количество дней
    *Инициализация счёта*
        GENERATE ,,,1,10    ;порождается 1 транзакт
        ENTER SchAb,NahKol  ;запись начального количества средств на счёт абонента
        TERMINATE       ;

Я сомневаюсь насчёт использования блока ADVANCE для моделирования данной ситуации "то счёт автоматически в течении 2 плюс минус 1 день пополняется"

Автор: TEMENb 30.01.09, 07:03
Какой интересный подход к реализации )
Я б делал щет сохраняемой величиной.
так же, исходя из кода, если у абонента не хватит денег совершить запланированный звонок - то звонить он не будет вообще )

Автор: Eugen 30.01.09, 21:26
Цитата
*Сегмент процесса заказа*
GENERATE 7,,,,1 ;генерация транзакта каждые 7 дней
- Лучше поменять блоки, тогда не нужна единица
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    *Сегмент расхода средств*
        GENERATE 1  ;генерация транзакта каждый день
и только затем
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    *Сегмент процесса заказа*
        GENERATE    7  ;генерация транзакта каждые 7 дней

Цитата
Met2 TERMINATE 1 ;
- поменяй на
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Met2    LEAVE SchAb,S$SchAb
        TERMINATE 1
тогда абонент сможет расходовать средства со счета до 0

- и тоже самое с вариантом до
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        TEST GE S$SchAb,P1,Met2
        LEAVE SchAb,P1
        TERMINATE 1
    Met2    LEAVE SchAb,S$SchAb
        TERMINATE 1
после
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        LEAVE   SchAb,V$write_off
        TERMINATE 1
+
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    write_off   VARIABLE    ((S$SchAb'GE'P1)#P1 + (S$SchAb'L'P1)#S$SchAb)


Добавлено
модельная ед.времени 1 день - 2й вариант
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ADVANCE 2,1 ;время распределено на интвале [1,3)
    ADVANCE (uniform(1,1,4)\1) ;время дискретно 1 или 2 или 3

Автор: TEMENb 06.02.09, 06:54
Цитата
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE 10
    ADVANCE (Normal(1,10,3))
     
    TERMINATE
     
    GENERATE 1000000
    TERMINATE 1
    START 1


При большом числе опытов возникает следующая ошибка:
02/05/09 17:46:18 ADVANCE (Normal(1,10,3))
02/05/09 17:46:18 Negative time increment.

Где и как можно вставить проверку, чтобы отрицательные значения приравнивались к 0?
Писать свое "нормальное" распределение не хочется...


Ну вопервых подумайте, действительно ли это то распредиление, которое вам нужно.
Вовторых "свое" нормальное распредиление писать ненужно. все уже придумано до вас.
Цитата
NORM FUNCTION RN2,C25
0,-5/.00003,-4/.00135,-3/.00621,-2.5/.02275,-2
.06681,-1.5/.11507,-1.2/.15866,-1/.21186,-.8/.2725,-.6
.34458,-.4/.42074,-.2/.5,0/.57296,.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

Как видите значения меняются от -5 до 5. Следовательно (Normal(1,10,3)) или (10+3#FN$NORM) вернет значения [-5,25] что действительно не подходит под опредиление "временной интервал".

Если вы всетаки уверены, что интервал задан верно, то решение следующее:
Цитата
GENERATE 10
POVT ASSIGN 1,(Normal(1,10,3))
TEST GE P1,0,POVT
ADVANCE P1

TERMINATE

GENERATE 1000000
TERMINATE 1
START 1

Автор: Eugen 06.02.09, 16:20
Цитата TEMENb @
Цитата
Где и как можно вставить проверку, чтобы отрицательные значения приравнивались к 0?

отв. только на это
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    testing_P1   VARIABLE    ((P1'G'0)#P1)
     
    ASSIGN 1,(Normal(1,10,3))
    ASSIGN 1,V$testing_P1

Автор: TEMENb 06.02.09, 16:58
Ух
Цитата Eugen @
testing_P1 VARIABLE ((P1'G'0)#P1)


Цитата
testing_P1 VARIABLE ((P1>0)#P1)


Расшифровал :D

Цитата Eugen @
testing_P1 VARIABLE ((P1'G'0)#P1)

ASSIGN 1,(Normal(1,10,3))
ASSIGN 1,V$testing_P1

Этот метод, помоему, более правильный.

Автор: Eugen 06.02.09, 18:05
не совсем ;) 2 разных вопроса. 1й - где вставить проверку. 2й - для Negative time increment.
Цитата TEMENb @
Цитата
Где и как можно вставить проверку, чтобы отрицательные значения приравнивались к 0?

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    testing_P1 VARIABLE ((P1'G'0)#P1)
     
    ASSIGN 1,(Uniform(1,-5,100))
    ASSIGN 1,V$testing_P1


Цитата TEMENb @
Цитата
При большом числе опытов возникает следующая ошибка:
02/05/09 17:46:18 ADVANCE (Normal(1,10,3))
02/05/09 17:46:18 Negative time increment.

Где и как можно вставить проверку, чтобы отрицательные значения приравнивались к 0?

Цитата
GENERATE 10
POVT ASSIGN 1,(Normal(1,10,3))
TEST GE P1,0,POVT
ADVANCE P1

TERMINATE

Автор: MEGERA 09.02.09, 07:41
Слушайте, я понимаю, что это немного не в тему, но все равно. Кто-нибудь знает чем GPSS лучше сетей Петри? Или не лучше, но область применения отличается? Просто я так понимаю, что моделировать можно и на том, и на том, в какой угодно отрасли..... Просто срочно надо найти какие-то недостатки сетей Петри! :wall:

Автор: Eugen 23.02.09, 17:45
GPSS задача (сообщение #2201319)
Цитата bobkOFF @
Здравствуйте! Подскажите, пожалуйста, с чего начать решать задачу. С преподом на словах обговорили вроде все понятно, а вот с чего начинать даже не представляю. Сделайте хоть примерный набросок этой задачки. Пытаюсь сам разобраться ничего не получается. Заранее спасибо за любые подсказки.
Задания на обработку данных, поступающие на ЭВМ, характеризуются известным требуемым временем работы процессора и условно подразделяются на короткие и длинные. Короткие задания требуют менее 6 мин времени работы процессора. Задания поступают на ЭВМ через каждые 8 ± 3 мин и требуют для своей обработки 4 ± 3 мин времени работы процессора. Короткие задания вводятся в ЭВМ с помощью дисплея за 3 ± 2 мин. Дисплей остается занятым коротким заданием до момента окончания выдачи результатов на печать. Короткие задания имеют абсолютный приоритет над длинным при использовании процессора, т. е. они прерывают выполнение длинных заданий. Длинные задания предварительно готовятся на дискетах на ПЭВМ за 8 ± 5 мин и вводятся в ЭВМ дисковода за 3 ± 2 мин. После обработки на процессоре как коротких, так и длинных заданий производится вывод результатов на печать в течение 2 ± 1 мин. Одновременно на PC обрабатывается только одно задание.
Смоделировать процесс функционирования PC при условии, что обработать необходимо 100 заданий. Определить число коротких и длинных заданий, ожидающих обработки, а также число обработанных коротких заданий и коэффициент загрузки процессора.

Сообщение отредактировано: bobkOFF - 21.02.09, 16:34


ХАЛЯВА:
ЧКЗОО - число коротких заданий ожидающих обработки
КДЗОО - число динных
ВсД - ввод длинного задания с дисковода

Автор: bobkOFF 24.02.09, 04:24
Больщое спасибо! Буду разбираться..

Автор: MEGERA 01.03.09, 15:25
Знатоки GPSS, помогите разобраться!

RMULT 1187
Checkout_2 EQU 2
Checkout_N EQU 5
Time_work VARIABLE 12#60#60
N_Purchases VARIABLE (RN1@96+5)

Это кусочек кода. Не могу понять смысл использования RMULT 1187 и строки N_Purchases VARIABLE (RN1@96+5). Я понимаю, что генерируется переменная на основе ГСЧ RN1, но что означает "@96+5"? и каким образом этот RN1 обращается к RMULT?

Автор: Eugen 01.03.09, 15:30
RMULT 1187 - начальное значение для RN1
(RN1@96+5) - (целый остаток от деления RN1 на 96 + 5)

Автор: TEMENb 01.03.09, 15:33
Цитата MEGERA @
RMULT 1187
Checkout_2 EQU 2
Checkout_N EQU 5
Time_work VARIABLE 12#60#60
N_Purchases VARIABLE (RN1@96+5)

задаем общий множитель для генератора случайных чисел номер 1
обьявляем константу Checkout_2 равной 2
обьявляем константу Checkout_N равной 5
обьявляем вычисляемое выражение Time_work равным 12#60#60 (тупизм полнейший V$Time_work будет равно 12*60*60. проще было один раз числом написать)
обьявляем вычисляемое выражение N_Purchases равным (RN1@96+5) (@ - остаток от деления. RN1 - генератор случайных чисел, дает число от 0 до 999).

Добавлено
З.Ы.: Евген выстрелил быстрее ))

Автор: Eugen 01.03.09, 15:45
Цитата TEMENb @
общий множитель для генератора случайных чисел
?
от 0 до 999
или
от 0 до 1

Автор: TEMENb 01.03.09, 15:51
общий множитель - это число, которое задает последовательность случайных чисел. т.к. генераторы случайных чисел на самом деле псевдо случайны, то если не менять это чило, то запуски программы дадут одни и те же значения..

А значения генератора случайных чисел действительно от 0 до 999.

Хотя если честно меня иногда терзают смутные сомнения. каким образом в функциях ГСЧ генять числа 0..1

Автор: Eugen 01.03.09, 15:52
не охота проверять - все написано здесь Боев Д.В. стр 188-9

Автор: TEMENb 01.03.09, 15:58
Цитата
sss table p1,.5,1,10000
generate 1
assign 1,rn1
tabulate sss
terminate 1
start 1000


Добавлено
Цитата Eugen @
не охота проверять - все написано здесь Боев Д.В. стр 188-9

угу. 189 стр. третий абзац..

Автор: Eugen 01.03.09, 16:14
Все так от 0 до 999
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Rasp FUNCTION RN6,D5
    .15,2/.35,5/.6,8/.82,9/1,12
в этом месте - от 0 до 0.999999 стр.196

Автор: MEGERA 01.03.09, 16:39
Цитата TEMENb @
N_Purchases VARIABLE (RN1@96+5)

наверняка имеется ввиду равномерное распредиление от 5 до 100.

как раз в том-то и беда, что неизвестно, что это за распределение вообще! инфы практически нет, есть это горе-код, который мне нужно воплотить в Arena. и вот это-то и составляет основную проблему: не знаю, что это за распределение. здесь оно отталкивается от множителя RMULT, а в арене-то нет такого... :wall:

Автор: TEMENb 01.03.09, 16:40
кстати, будь я преподом - я б пристебался

N_Purchases VARIABLE (RN1@96+5)

наверняка имеется ввиду равномерное распредиление от 5 до 100.
так вот в данной формуле выпадание числа 5..45 более вероятно, чем 46..100. А это уже не равномерный закон получается..

Я бы советовал использовать конструкцию типа (RN1#95/1000+5) для непрерывного или (RN1#95\1000+5) для дискретного распредиления(в GPSS/PS оба варианта дискретны)
можно еще попробовать использовать Uniform и DUniform (в PC их использовать нельзя).

Добавлено
забй на RMULT. Его можно смело удалить.

Добавлено
распредиление равномерное. интервал распредиления 5..100. Причем распредиление дискретное.

Добавлено
кстати. раз такое дело.. весь код в студию )

Автор: MEGERA 01.03.09, 16:50
мммм, клева! спасибо за консалтинг! ща попробую добить модельку в арене! вот, собссно, код:

RMULT 1187
Checkout_2 EQU 2
Checkout_N EQU 5
Time_work VARIABLE 8#60#60
N_Purchases VARIABLE (RN1@96+5)
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
Cart STORAGE 100
Park STORAGE 100
Cashier VARIABLE P$Qty_purchases#2
Time_shop VARIABLE P$Qty_purchases#100
INITIAL X$Customer,0


Parking TRANSFER Both,,Lost
ENTER Park
ADVANCE 60,40
ENTRY SAVEVALUE Customer+,1
ASSIGN Qty_purchases,V$N_Purchases
TEST LE P$Qty_purchases,10,QCart
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

QUEUE Xpress_Q
SEIZE Xpress
DEPART Xpress_Q
ADVANCE V$Cashier
RELEASE Xpress
LEAVE P$Container
TRANSFER ,Fin

Norm SELECT MIN Minque,Checkout_2,Checkout_N,,Q
QUEUE P$Minque
SEIZE P$Minque
DEPART P$Minque
ADVANCE V$Cashier
RELEASE P$Minque
LEAVE P$Container


Fin TABULATE Time_system
TABULATE Purchases
SAVEVALUE Customer-,1
ADVANCE 60,50
LEAVE Park
TERMINATE

Lost TERMINATE

*****************************************************************************

* 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
*****************************************************************************

GENERATE V$Time_work
TABULATE N_Customer
TERMINATE 1
START 1

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

Добавлено
аааааааа!!! есть контакт! наконец-то результаты сошлись!
Eugen, TEMENЬ, респект вам огромный за помощь!

Автор: MEGERA 02.03.09, 14:27
Кстати, а если б нужно было, например, равномерное распределение не от 5 до 100, а от 0 до 30, то как бы это тогда выглядело?

Автор: TEMENb 02.03.09, 14:53
DUniform(1,0,30) ;дискретное
Uniform(1,0,30) ;непрерывное
RN1#30\1000 ;дискретное
RN1#30/1000 ;непрерывное

Автор: Eugen 02.03.09, 16:18
еще точнее ;) :
RN1#30\999 ;дискретное
RN1#30/999 ;непрерывное
и общаяя формула для равномерного распределения A+/-B:
A-B+(2#B#RNn)/999,
A-B - наименьшее значение;
2#B - ширина выборки. стр.191

Автор: MEGERA 02.03.09, 16:43
ага, точно, врубилась! спасибо, ребят! :)

Автор: TEMENb 02.03.09, 17:06
мой вариант точнее. делим то мы не на верхнее значение, а на колличество значений ))
А это 0..999 итого 1000 штук ;)

Автор: MEGERA 04.03.09, 15:43
Цитата 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 в обход парковки). И я не могу допетрить, как их идентифицировать. Т.е. Надо тем, кто на машине, присвоить один уникальный параметр, а тем, кто пришел пешком - другой, чтоб потом я могла их разделить, когда дело дойдет до возвращения на парковку... Только как?

Автор: Eugen 04.03.09, 15:53
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ASSIGN 1,1
    TRANSFER ,Parking
     
    ASSIGN 1,2
    TRANSFER ,ENTRY

Автор: MEGERA 04.03.09, 16:04
ага, а когда мне потребуется их разделить, использую конструкцию

TEST NE 1,1,Fin
LEAVE Park
Fin TERMINATE

Правильно?

Автор: Eugen 04.03.09, 17:12
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TEST E P1,1,Fin

ASSIGN A,B - операнд A задает номер параметра или его имя..
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ASSIGN 1,123
    ASSIGN 1,P$name
     
    ASSIGN name,123
    ASSIGN name,P1

во всех(как правило) остальных местах (в т.ч. и в операнде B), - P$имя параметра или P и номер
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TEST E P1,123,Fin
    TEST E P$name,123,Fin

Автор: MEGERA 04.03.09, 17:40
фу ты, блин! все-таки пора заняться серьезно изучением гпсс, чтоб так не тупить :whistle: спасибо!

Автор: MEGERA 04.03.09, 19:36
И последний вопрос!
Нужно сгенерить транзакты по экспоненте таким образом, чтоб в первые 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

Правильно делаю?

Автор: TEMENb 04.03.09, 20:39
вообще то нет. транзакты если начнут поступать - уже не остановятся. просто последующие дженерейты генят с задержкой.

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

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-и часов)?

Автор: MEGERA 05.03.09, 07:05
Вот-вот, как раз моих-то генераторах все генерилось наоборот (не по нарастающей, а по убывающей, да и вообще неправильно), щас понимаю, почему ))) а насчет 12 часов, это просто я условие изменила. раньше моделировала для 8 часов в секундах, а теперь для 12, потому и получается 4 промежутка по 3 часа. Спасибо! Кажется, на этом все ))))

Автор: TEMENb 05.03.09, 07:37
Кстати на будущее. Plus (exponential - plus-функция) функции лучше всегда брать в кавычки. Они вроде формул и ставить их без кавычек на место параметров нежелательно. В блоке assign можно найти тому подтверждение - без скобок модель попросту не скомпилится.

Автор: MEGERA 06.03.09, 11:03
мда.... думала я, что наконец покончила с этой задачей, но не тут-то было ((( все же 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 ждут в очереди, хотя свободные кассы еще есть! с чем это может быть связано?

Автор: Eugen 07.03.09, 09:31
Все верно. SELECT'тами выбираешь очередь минимальной длинны и занимаешь ее, несмотря на то что до 8 касс могут
быть в этот момент свободними. Самый простой случай: обслуживается только 1 покупатель у 1ой кассы. Приходит второй,
SELECT проверяет очереди - все пустые, и выбирает первую попавшуюся очередь минимальной длинны. Эта очередь к первой кассе.
И того, на 1ой кассе обслуживается покупатель и второй - ждет в очереди в эту же кассу и т.п.

Решение здесь GPSS задача (сообщение #2181443)

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    1 SELECT MIN Xque,Check_1,Check_N,,F
    2 TEST E F$Xque,1,met1
     
    3 SELECT MIN Xque,Check_1,Check_N,,Q ; выбирает кассу с минимальной очередью
    4 met1 QUEUE P$Xque
    5 SEIZE P$Xque
    6 DEPART P$Xque
    7 ADVANCE V$Cashier
    8 RELEASE P$Xque
    9 LEAVE P$Container
    10 TRANSFER ,go
     
    11 Norm SELECT MIN Xque,Checkout_1,Checkout_N,,F
    12 TEST E F$Xque,1,met2
     
    13 SELECT MIN Minque,Checkout_1,Checkout_N,,Q ; выбирает кассу с минимальной очередью
    14 met2 QUEUE P$Minque
    15 SEIZE P$Minque
    16 DEPART P$Minque
    17 ADVANCE V$Cashier
    18 RELEASE P$Minque
    19 LEAVE P$Container

1-2,11-12 есть ли свободные кассы
1 проверка параметра F$ каждого из устройств Check_1 - Check_N. В параметр P$Xque записывается номер устройства с мин F$.
2 проверка на занятость выбранного устройства. Не занято - переход на метку met1. Занято, - и только в этом случает выбор
минимальной очереди.

F$ -занятость устройства. 1 - занято, 0 - не занято

Автор: MEGERA 07.03.09, 10:13
ой, и правда ведь! я как-то раньше и не подумала, что нужно учесть занятость устройства :wall: Евгений, Вы гений! (уж простите за тавтологию) :rolleyes:

Автор: Eugen 07.03.09, 10:32
;)
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    1 TEST LE P$Qty_purchases,10,QCart ; если покупок меньше 10, то он встает в очередь за корзиной, если больше - то за тележкой
    2 GATE SNF Basket,QCart
    3 QUEUE Basket_Q
    4 ENTER Basket
    5 DEPART Basket_Q
    6 ASSIGN Container,Basket
    7 TRANSFER ,Shop
     
    8 QCart QUEUE Cart_Q
    9 ENTER Cart
    10 DEPART Cart_Q
    11 ASSIGN Container,Cart

от блоков 3,5 пользы никакой т.к. заранее определяем в блоке 2, что корзины есть, и покупатель никогда не задерживается, чтобы войти в блок 4 т.е. статистика по очереди Basket_Q всегда фиксирует только нулевые входы..
Для случая менее 10 покупок и отсутствия корзин, покупатель проходит в очередь за тежками и остается в ней. Здесь возможна ситуация, нет тележек и есть корзины, и покупать при этом остается ждать телегу.

вариант 1
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    1 TEST LE P$Qty_purchases,10,Qcart30
    2 QUEUE Basket_Q
    3 TEST NE (R$Basket+R$Cart),0
    4 TRANSFER BOTH,,QCart
     
    5 ENTER Basket
    6 DEPART Basket_Q
    7 ASSIGN Container,Basket
    8 TRANSFER ,Shop
     
    9 QCart ENTER Cart
    10 DEPART Basket_Q
    11 ASSIGN Container,Cart
    12 TRANSFER ,Shop
     
    13 Qcart30 QUEUE Cart_Q
    14 ENTER Cart
    15 DEPART Cart_Q
    16 ASSIGN Container,Cart
     
    17 Shop..

Действия покупателей:
если покупок <= 10 - берем карзину, если корзин нет берез тележку, иначе ожидаем корзину/телегу;
если покупок > 10 - берем телегу.
функционирование очередей:
очередь Basket_Q - выделена для ожидающих корзины, назначение фиксировать время ожидания корзины/телеги;
очередь Cart_Q - выделена только для ожидающих тележки.

1 разделяем покупателей на тех кому нужны корзины и тележки
13-16 только для тех кому нужны тележки
2 встать в очередь за корзиной/тележкой
3 если ((R$Basket + R$Cart) !=0) пройти вниз, иначе продолжать проверять то условие. R - число свободные ед. памяти
4 пройти вниз или на метку QCart, туда где есть свободные корзины или тележки, сначале проверяестя наличие корзин, затем телег
5-6,9-10 занятие Basket/Cart, выход из очереди Basket_Q

вариант 2(оптимизация кода, не более)
Для организации очередей использовать блоки LINK/UNLINK, причина: убрать проверку TEST NE (R$Basket+R$Cart),0 - проверка выполняется для каждого транзакта после измененния модельного времени на 0.000001

Автор: MEGERA 07.03.09, 15:50
Цитата Eugen @
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    1 SELECT MIN Xque,Check_1,Check_N,,F
    2 TEST E F$Xque,1,met1
     
    3 SELECT MIN Xque,Check_1,Check_N,,Q ; выбирает кассу с минимальной очередью
    4 met1 QUEUE P$Xque
    5 SEIZE P$Xque
    6 DEPART P$Xque
    7 ADVANCE V$Cashier
    8 RELEASE P$Xque
    9 LEAVE P$Container
    10 TRANSFER ,go
     
    11 Norm SELECT MIN Xque,Checkout_1,Checkout_N,,F
    12 TEST E F$Xque,1,met2
     
    13 SELECT MIN Minque,Checkout_1,Checkout_N,,Q ; выбирает кассу с минимальной очередью
    14 met2 QUEUE P$Minque
    15 SEIZE P$Minque
    16 DEPART P$Minque
    17 ADVANCE V$Cashier
    18 RELEASE P$Minque
    19 LEAVE P$Container

1-2,11-12 есть ли свободные кассы
1 проверка параметра F$ каждого из устройств Check_1 - Check_N. В параметр P$Xque записывается номер устройства с мин F$.
2 проверка на занятость выбранного устройства. Не занято - переход на метку met1. Занято, - и только в этом случает выбор
минимальной очереди.

F$ -занятость устройства. 1 - занято, 0 - не занято

насчет очередей за корзинами и телегами, это действиетльно хорошая мысль, потому что я уже заметила, что код неоптимальный получился! а вот насчет предыдущей темы про выбор очередей, я всю логику отлично поняла. более того, задачку про коммутаторы я в свое время решала даже ))) только другим способом, но вот сейчас смотрю выходную статистику, и вижу, что транзакты второй select (строка 13) упорно огибают: 0 входов.... :huh:

Автор: Eugen 08.03.09, 10:17
MEGERA С 8 марта! ;)
13 строка выполняется только при отсутствии свобдных касс, т.е. в момент прихода транзакта есть хотя бы одна свободная касса и нет необходимости становиться в очередь. Чтобы проверить правильность кода, увелич интенсивность прихода покупателей в магазин, в строке 13 должны появиться транзакты.

Автор: MEGERA 08.03.09, 10:31
Спасибо, Eugen! :wub:
Я себя с этим кодом ощущаю, как в твоей цитате про изображение трехногой лошади :yes-sad:
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
PARKING 1 TRANSFER 1528 0 0
2 ENTER 536 0 0
3 ADVANCE 536 0 0
ENTRAR 4 ASSIGN 2081 0 0
5 TEST 2081 0 0
6 QUEUE 666 22 0
7 TEST 644 0 0
8 TRANSFER 644 0 0
9 ENTER 644 0 0
10 DEPART 644 0 0
11 ASSIGN 644 0 0
12 TRANSFER 644 0 0
QCART 13 ENTER 0 0 0
14 DEPART 0 0 0
15 ASSIGN 0 0 0
16 TRANSFER 0 0 0
QCART_1 17 QUEUE 1415 326 0
18 ENTER 1089 0 0
19 DEPART 1089 0 0
20 ASSIGN 1089 0 0
SHOP 21 ADVANCE 1733 49 0
22 SELECT 1684 0 0
23 TEST 1684 0 0
24 SELECT 0 0 0
MET9 25 QUEUE 1684 96 0
26 SEIZE 1588 0 0
27 DEPART 1588 0 0
28 ADVANCE 1588 5 0

Видишь, как получается? 96 человек стоит в очереди, но через select (24) они будто и не проходили!!! :'(

Автор: TEMENb 08.03.09, 14:32
MEGERA, изображение трехногой лошади - это совсем не о том ) Это про правильно поставленное ТЗ. А у тебя нормальный творческий процесс )

С 8-м Марта тебя =)

А где собсно последний вариант кода? я тоже хо посмотреть )

Автор: MEGERA 08.03.09, 14:40
Спасибо, TEMENb! В таком случае, моя лошадь была безногой, ибо ТЗ звучит примерно так: "Сделай модель в Арене, по GPSS-модели, которая взялась, х.з. откуда, и х.з., правильно ли работает" :D

Checkout_1 EQU 1
Checkout_N EQU 5 ; есть 5 очередей
N_Purchases VARIABLE Uniform(1,0,30) ;количество покупок, которые покупатель собирается совершить
Basket STORAGE 50 ; 50 корзин
Cart STORAGE 100 ; 100 тележек
Park STORAGE 40 ; 40 парковочных мест
Cashier VARIABLE (P$Qty_purchases#0.05)+ 0.7 ; время обслуживания на кассе
Time_shop VARIABLE P$Qty_purchases#1.3 ; время, проведенное в магазине за выбором товаров


Parking TRANSFER Both,,Lost
ENTER Park ; покупатель занимает место на парковке
ADVANCE 1,0.7 ; идет от машины к магазину
Entrar ASSIGN Qty_purchases,V$N_Purchases ; ему назначается количество покупок, которые он собирается совершить
TEST LE P$Qty_purchases,10,QCart_1 ; если покупок больше 10, то покупатель идет в очередь за карзинами QCart_1
QUEUE Basket_Q ; если меньше 10, то ему нужна корзина, но он может взять и телегу, поэтому он ждет
TEST NE (R$Basket+R$Cart),0 ; пока что-нибудь из них не освободится
TRANSFER BOTH,,QCart ; сначалы пытается взять корзину. если их нет, идет за телегой QCart

ENTER Basket
DEPART Basket_Q
ASSIGN Container,Basket
TRANSFER ,Shop

QCart ENTER Cart
DEPART Basket_Q
ASSIGN Container,Cart
TRANSFER ,Shop

QCart_1 QUEUE Cart_Q
ENTER Cart
DEPART Cart_Q
ASSIGN Container,Cart

Shop ADVANCE V$Time_shop ; выбирает товары

SELECT MIN Minque,Checkout_1,Checkout_N,,F ;проверяет есть ли свободная касса
TEST E F$Minque,1,met9 ; если есть - занимает ее
SELECT MIN Minque,Checkout_1,Checkout_N,,Q ; если нет, ищет кассу с наименьшей очередью

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

TEST E P$Transport,2,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)
TERMINATE 1
START 1

Вот такой стала эта горе-модель, благодаря вашим с Евгением советам ))) однако, как ты уже видел выше, есть проблемка, из-за которой я не могу сопоставить результат с ареновским...

Автор: TEMENb 08.03.09, 15:07
Цитата MEGERA @
Checkout_1 EQU 1
Checkout_N EQU 5 ; есть 5 очередей
N_Purchases VARIABLE Uniform(1,0,30) ;количество покупок, которые покупатель собирается совершить
Basket STORAGE 50 ; 50 корзин
Cart STORAGE 100 ; 100 тележек
Park STORAGE 40 ; 40 парковочных мест
Cashier VARIABLE (P$Qty_purchases#0.05)+ 0.7 ; время обслуживания на кассе
Time_shop VARIABLE P$Qty_purchases#1.3 ; время, проведенное в магазине за выбором товаров


Parking TRANSFER Both,,Lost
ENTER Park ; покупатель занимает место на парковке
ADVANCE 1,0.7 ; идет от машины к магазину
Entrar ASSIGN Qty_purchases,V$N_Purchases ; ему назначается количество покупок, которые он собирается совершить
TEST LE P$Qty_purchases,10,QCart_1 ; если покупок больше 10, то покупатель идет в очередь за карзинами QCart_1
QUEUE Basket_Q ; если меньше 10, то ему нужна корзина, но он может взять и телегу, поэтому он ждет
TEST NE (R$Basket+R$Cart),0 ; пока что-нибудь из них не освободится
TRANSFER BOTH,,QCart ; сначалы пытается взять корзину. если их нет, идет за телегой QCart

ENTER Basket
DEPART Basket_Q
ASSIGN Container,Basket
TRANSFER ,Shop

QCart ENTER Cart
DEPART Basket_Q
ASSIGN Container,Cart
TRANSFER ,Shop

QCart_1 QUEUE Cart_Q
ENTER Cart
DEPART Cart_Q
ASSIGN Container,Cart

Shop ADVANCE V$Time_shop ; выбирает товары

SELECT MIN Minque,Checkout_1,Checkout_N,,F ;проверяет есть ли свободная касса
TEST E F*Minque,1,met9 ; если есть - занимает ее
SELECT MIN Minque,Checkout_1,Checkout_N,,Q ; если нет, ищет кассу с наименьшей очередью

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

TEST E P$Transport,2,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)
TERMINATE 1
START 1



:P

Добавлено
Остальной код не разбирал. уж очень большой )
А ошибочка - нормальная. совсем не сразу ее заметил )

Автор: MEGERA 08.03.09, 15:34
:lool: ну ты юморист, ага!
вот здесь ошибка? ;)

SELECT MIN Minque,Checkout_1,Checkout_N,,F ;проверяет есть ли свободная касса
TEST E F*Minque,1,met9 ; если есть - занимает ее
SELECT MIN Minque,Checkout_1,Checkout_N,,Q ; если нет, ищет кассу с наименьшей очередью

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

Автор: TEMENb 08.03.09, 16:22
Цитата MEGERA @
TEST E F*Minque,1,met9 ; если есть - занимает ее

* - вот тут ошибка (10-й символ )))

называется ошибка - "косвенная адресация"

F$Minque - индикатр занятсти устройства с именем Minque
F*Minque - индикатр занятсти устройства, номер которого лежит в параметре транзакта с именем Minque

кстати, для таких вещей есть тотал командер с его незаменимой функцией "Файлы->Сравнить по содержимому..." ;)

Автор: Eugen 08.03.09, 20:02
Цитата Eugen @
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    1 SELECT MIN Xque,Check_1,Check_N,,F
    2 TEST E F$Xque,1,met1
     
    3 SELECT MIN Xque,Check_1,Check_N,,Q ; выбирает кассу с минимальной очередью
    4 met1 QUEUE P$Xque
    5 SEIZE P$Xque
    6 DEPART P$Xque
    7 ADVANCE V$Cashier
    8 RELEASE P$Xque
    9 LEAVE P$Container
    10 TRANSFER ,go
     
    11 Norm SELECT MIN Xque,Checkout_1,Checkout_N,,F
    12 TEST E F$Xque,1,met2
     
    13 SELECT MIN Minque,Checkout_1,Checkout_N,,Q ; выбирает кассу с минимальной очередью
    14 met2 QUEUE P$Minque
    15 SEIZE P$Minque
    16 DEPART P$Minque
    17 ADVANCE V$Cashier
    18 RELEASE P$Minque
    19 LEAVE P$Container

точно косвенная адресация стороки 2,11 и 11-12
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    2 TEST E F*Xque,1,met1
    11 Norm SELECT MIN Minque,Checkout_1,Checkout_N,,F
    12 TEST E F*Minque,1,met2

Автор: MEGERA 10.03.09, 11:26
ого! ничего себе ошибка! я бы еще 3 месяца ее выискивала, точно! :D все исправила, вроде, работает ;)

Автор: TEMENb 10.03.09, 13:46
осталось плюсануть "ну, за рыбалку" и "-=За ВДВ...=-" :D

Автор: MEGERA 15.03.09, 05:38
да запросто! :D только на рыбалку мы вместе не ходили, и в армию я, слава богу, не призывалась :D :D

Автор: kant1288 10.04.09, 12:40
Здравствуйте! Моё задание:В специализированной вычислительной системе периодически выполняется три вида заданий, которые характеризуются уровнями приоритета: нулевым, первым и вторым. Каждый новый запуск задания оператор производит при помощи дисплея, работая на нем 20-80 секунд. После запуска задания оно требует для своего выполнения 50-150 секунд времени работы процессора, причем задания более высокого приоритета прерывают выполнение задач более низкого приоритета. Результаты обработки задания выводятся на печать без прерываний в течение 20-40 секунд, после чего производится их анализ в течение 40-80 секунд, и задание запускается снова. Можно считать, что при работе дисплея и при выводе результатов на печать процессор не используется.
Смоделировать процесс работы системы при условии, что задание второго уровня приоритета выполняется 100 раз. Подсчитать число циклов выполнения остальных заданий и определить коэффициенты загрузки технических средств системы.

Мой код:
Generate 30,20
queue CPU
seize display
advance 50,30
release display
seize CP
advance 100,50
release CP
depart CPU
advance 30,10
advance 60,20
assign P1,(PR+1)
savevalue P1+,1
terminate

Generate 30,10,,,1
queue CPU
seize display
advance 50,30
release display
prempt CP,PR
advance 100,50
return CP
depart CPU
advance 30,10
advance 60,20
assign P1,(PR+1)
savevalue P1+,1
terminate

Generate 30,5,,100,2
queue CPU
seize display
advance 50,30
release display
prempt CP,PR
advance 100,50
return CP
advance 100,50
return CP
depart CPU
advance 30,10
advance 60,20
assign P1,(PR+1)
savevalue P1+,1
test L x3,100,met1
terminate
met1 TERMINATE 1

У меня возникает ошибка:
Model Translation Begun.
Line 21, Col 7. Invalid identifier. Expecting a GPSS Verb.
prempt CP,PR
Тоже самое и в 36 строчке(во втором Premt), я не понимаю почему. И скажите пожалуйста, в целом код правильный?

Автор: Eugen 10.04.09, 16:54
Line 21, Col 7. Invalid identifier. Expecting a GPSS Verb. - > PREEMPT

Автор: kant1288 10.04.09, 17:47
Во блин, извиняюсь, глупо получилось) Ещё подскажите почему возникает ошибка:
Halt. XN: 3. Block 40 Next.
Clock:308.916490. Next: ASSIGN. Line 42.
assign P1,(PR+1)
Reference to a non-existent Parameter.

не совсем понимаю, почему на несуществующий параметр ссылка?

Автор: Eugen 10.04.09, 18:58
assign P1,(PR+1)
здесь ошибка. Нужно так
assign 1,(PR+1)
Как правило, в первом операнде блока ASSIGN указывается номер параметра - ASSIGN 1,1000 или его имя ASSIGN P$name,1000

assign 1,(PR+1)
savevalue P1+,1
эти строки лишниие..

достачно
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Generate 30,20
    ...
    advance 60,20
    savevalue 1+,1 // счеткик транзактов с приоритетом 0
    terminate
     
    Generate 30,10,,,1
    ...
    advance 60,20
    savevalue 2+,1 // счеткик транзактов с приоритетом 1
    terminate
     
    Generate 30,5,,100,2
    ...
    advance 60,20
    savevalue 3+,1 // счеткик транзактов с приоритетом 2
    test L x3,100,met1
    ..

Автор: Anomaly 10.04.09, 20:32
Здравствуйте!ЛЮДИ ДОБРЫЕ! Помогите пожалуйста с лабой! Пол университета опросила, никто не может помочь. Нужно написать программу: МКУ с 8 каналами. число мест в очереди = 7 Своего ума хватило только на это:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    VREMA FVARIABLE -1#LOG((1+RN1)/1000)/74
    OBS     FVARIABLE -1#LOG((1+RN2)/1000)/5
               GENERATE V$VREMA
    TEST L  Q$OCHERED,8,REFUS
    SMO       STORAGE 8
               QUEUE   OCHERED
              ENTER   SMO        
              DEPART  OCHERED        
              ADVANCE V$OBS        
              LEAVE SMO
              TERMINATE 1
              GENERATE  480
    REFUS     TRANSFER ,OUT      
    OUT    TERMINATE    1
              START        200

Автор: TEMENb 10.04.09, 21:12
ну вообщем все верно, кроме размера очереди.
Цитата
VREMA FVARIABLE -1#LOG((1+RN1)/1000)/74
OBS FVARIABLE -1#LOG((1+RN2)/1000)/5
SMO STORAGE 8
GENERATE V$VREMA
TEST L Q$OCHERED,7,REFUS
QUEUE OCHERED
ENTER SMO
DEPART OCHERED
ADVANCE V$OBS
LEAVE SMO
REFUS TERMINATE 1
START 200,np
SMO STORAGE 9
START 800

Всего будет обслужено 1000 заявок.
А какое у вас условие завершения моделирования?

Автор: Anomaly 11.04.09, 12:10
Цитата
ну вообщем все верно, кроме размера очереди.

Цитата
VREMA FVARIABLE -1#LOG((1+RN1)/1000)/74
OBS FVARIABLE -1#LOG((1+RN2)/1000)/5
SMO STORAGE 8
GENERATE V$VREMA
TEST L Q$OCHERED,7,REFUS
QUEUE OCHERED
ENTER SMO
DEPART OCHERED
ADVANCE V$OBS
LEAVE SMO
REFUS TERMINATE 1
START 200,np
SMO STORAGE 9
START 800

Всего будет обслужено 1000 заявок.
А какое у вас условие завершения моделирования?


Спасибо за помощь.
Но теперь при компилировании выдается ошибка:
Error Stop.
Halt. XN: 244. Block 7 Next.
Clock:3.596054. Next: LEAVE. Line 10.
LEAVE SMO
Attempt to release more storage than existed.

Моделирование нужно завершить после того как будут обработаны 1000 заявок. И сделать это моделирование нужно 10 раз

Автор: Dennis 12.04.09, 14:45
У первого устройство ADVANCE равно 7.5,1,5 , у второго 8,2.5.

Цитата

AA FUNCTION P1,D2
1,7.5/2,8
BB FUNCTION P1,D2
1,1.5/2,2.5

GENERATE 3
QUEUE XX
TRANSFER 0.75,MET1,MET2
MET1 ASSIGN 1,1
TRANSFER ,NN
MET2 ASSIGN 1,2
NN SEIZE P1
DEPART XX
ADVANCE FN$AA,FN$BB
RELEASE P1
TERMINATE
GENERATE 480
TERMINATE 1


Объясните, почему в отчете значение AVE.TIME не попадает в эти интервалы (у 1го - 11.250, у 2го - 19.875). Кстати, если задаю конкретное число, то ADVANCE ему не равно. Использую GPSS World Student Version 5.2.2.

Автор: TEMENb 12.04.09, 15:08
вот так должно быть. Незнаю даже с чем связано.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ADVANCE FN$AA,(FN$BB)


А значения такие получаются.. скорее всего это связано с кривоватенькой реализацией непрерывного времени.
В жпсс верд реализовано непрерывное время ;)

Цитата Anomaly @
Спасибо за помощь.
Но теперь при компилировании выдается ошибка:
Error Stop.
Halt. XN: 244. Block 7 Next.
Clock:3.596054. Next: LEAVE. Line 10.
LEAVE SMO
Attempt to release more storage than existed.

мда. вероятно нельзя менять емкость МКУ без обнуления счетчиков и удаления транзактов из модели (clear и reset).
Возможно прокатит такая вот реализация
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    VREMA FVARIABLE -1#LOG((1+RN1)/1000)/74
    OBS FVARIABLE -1#LOG((1+RN2)/1000)/5
    SMO STORAGE 9
    GENERATE V$VREMA
    TEST L Q$OCHERED,7,REFUS
    QUEUE OCHERED
    test e ((tg1<800)|(s$smo<8)),1
    ENTER SMO
    DEPART OCHERED
    ADVANCE V$OBS
    LEAVE SMO
    REFUS TERMINATE 1
    START 1000

Автор: Anomaly 12.04.09, 15:47
СПАСИБО ОГРОМНОЕ!!! Работает! И результат очень похож на ответы :)

Автор: Kappi4 14.04.09, 16:46
Здравствуйте господа...помогите плз...проверте правильность проги...и если что-то неправильно...исправте...Заранее благодарен...

В системе передачи цифровой информации передается речь в цифровом виде. Речевые пакеты передаются через два транзитных канала, буферизуясь в накопителях перед каждым каналом. Время передачи пакета по каналу составляет 5 мс. Пакеты поступают через 3-9 мс. Пакеты, передававшиеся более 10 мс, на выходе системы уничтожаются, так как их появление в декодере значительно снизит качество передаваемой речи. Уничтожение более 30% пакетов недопустимо. При достижении такого уровня система за счет ресурсов ускоряет передачу до 4 мс на канал. При снижении уровня до приемлемого происходит отключение ресурсов.
Смоделировать 10 с работы системы. Определить частоту уничтожения пакетов и частоту подключения ресурса.

INITIAL X$T,1
INITIAL X$B,1
GENERATE 6,3
MARK 2
QUEUE OCH1

SEIZE PR_1
DEPART OCH1
Test L (X$B#100/X$T),30,POS1
ADVANCE 1
POS1 ADVANCE 4
RELEASE PR_1

QUEUE OCH2

SEIZE PR_2
DEPART OCH2
Test L (X$B#100/X$T),30,POS2
ADVANCE 1
POS2 ADVANCE 4
RELEASE PR_2
ASSIGN 1+,MP2
TEST L P1,11,BYBY
SAVEVALUE T+,1
TERMINATE

BYBY SAVEVALUE B+,1
TERMINATE

GENERATE 10000
TERMINATE 1
START 1

Автор: Eugen 15.04.09, 14:59
хорошо написано
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ASSIGN 1+,MP2     // + ничего не делает
    TEST L P1,11,BYBY // по условию <= 10

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ASSIGN 1,MP2
    TEST LE P1,10,BYBY


не использую блок MARK, поэтому вместо строк
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MARK 2
    ...
    ASSIGN 1,MP2
    TEST LE P1,10,BYBY
написал бы
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ASSIGN time,AC1
    ...
    TEST LE (AC1-P$time),10,BYBY
AC1 - абсолютное модельное время

чтобы подсчитать частоту подключения ресурса
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SEIZE PR_1
    DEPART OCH1
    SAVEVALUE countAllMode+,1
    Test L (X$B#100/X$T),30,POS1
    ADVANCE 5
    TRANSFER ,met1
    POS1 SAVEVALUE countFastMode+,1
    ADVANCE 4
    met1 RELEASE PR_1
аналогично для второго канала
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE 10000
    SAVEVAKUE fr_brak,(x$B/x$T) // вероятность уничтожение пакета
    SAVEVALUE fr_useResource,(x$countFastMode/x$countAllMode) // вероятность использования ресурса при передачи
    TERMINATE 1


Добавлено
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SAVEVAKUE fr_brak,(x$B/(x$B+x$T)) // вероятность уничтожение пакета

Автор: TEMENb 15.04.09, 17:12
Цитата Eugen @
не использую блок MARK, поэтому вместо строк
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MARK 2
    ...
    ASSIGN 1,MP2
    TEST LE P1,10,BYBY
написал бы
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ASSIGN time,AC1
    ...
    TEST LE (AC1-P$time),10,BYBY
AC1 - абсолютное модельное время

можно ышо красивше

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MARK 2
    ...
    TEST LE MP2,10,BYBY


собственно MARK 2 делает абсолютно то же самое, что и ASSIGN 2,C1. А MP2 это ничто иное как AC1-P2. Нет смысла помещать эти данные в первый параметр. (Поскольку оператором RESET вы не пользуетесь, С1 всегда равно АС1)

Или ваашэ сделать вот как
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MARK
    ...
    TEST LE M1,10,BYBY

Минимализьм ))

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

Автор: Nymphadora 18.04.09, 12:32
Помогите, пожалуйста. Я отчаялась.
В общем, мне нужно выбрать многоканальное устройство из 3-х, которое меньше всего занято.


3 ESKAL STORAGE 35
4 GENERATE 3,1
5 SELECT MIN 1,1,3,,S
7 ENTER P1
9 ADVANCE 400
10 LEAVE P1


Проблема в том, что я не знаю, что писать в блок ENTER. Если пишу Р1, GPSS выдает, что "обращение к несуществующему устр-ву" ну или как-то так.

Посоветуйте?

Автор: TEMENb 18.04.09, 12:33
Цитата Nymphadora @
3 ESKAL STORAGE 35
4 GENERATE 3,1
5 SELECT MIN 1,1,3,,S
7 ENTER P1
9 ADVANCE 400
10 LEAVE P1


Все дело в том, что у вас несуществует МКУ с именами 1, 2, 3.
соответственно селект ничего не выбирает и никуда не ложит.
Поэтому необходимо обьявить три МКУ с именами 1, 2, 3.
Но конструкция
1 STORAGE 35 - не допустима ;)
поэтому выход такой.
Сначала обьявить некую константу, а потом обьявлять МКУ по имени константы. т.о. получаем МКУ с числовым(значение константы) и символьным(имя константы) именем


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    stor1   equ 1
    stor2   equ 2
    stor3   equ 3
    stor1   STORAGE 35
    stor2   STORAGE 35
    stor3   STORAGE 35
        GENERATE    3,1
        assign  1,1
        SELECT MIN 1,1,3,,S
        ENTER   P1
        ADVANCE 400
        LEAVE   P1
        terminate   1
        start   1000


в отчете видим
Цитата
STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY
STOR1 35 0 0 35 370 1 33.688 0.963 0 287
STOR2 35 0 0 35 368 1 33.539 0.958 0 0
STOR3 35 0 0 35 367 1 33.478 0.957 0 0

и знаем, что STOR1 - устройство номер 1, STOR2 - устройство номер 2, STOR3 - устройство номер 3.

Я ж говорил, что все просто ;)

Добавлено
Оооооооооооо, так фотку сразу надо было ставить.. помощь пришла бы в три раза быстрее!! :D

Автор: Nymphadora 18.04.09, 12:53
Абалдеть... и правда просто. СПАСИБО! Ну, блин, наш препод! Примеры не правильные приводил!

Но у меня ещё один тупик.

Нужно вывести транзакты из цепи пользователя, причём кол-во выводимых транзактов 50+-20. В UNLINK вроде функцию нельзя записывать? Или я страшно туплю???

14 LINK PERRON,FIFO
15 GENERATE 300,100
17 UNLINK PERRON,POSADKA,_(?)_
18 POSADKA ADVANCE 150
19 TERMINATE

Я так понимаю, нужно ввести в модель что-то типа ячейки... Или как? :wall:

Автор: TEMENb 18.04.09, 13:11
(DUniform(1,30,70))
(30+41#RN1\1000)

И первое и второе выражение дают значение от 30 до 70, с равномерным законом распредиления с использованием первого генератора случайных чисел.
Использовать можно так: предварительно схоранить в парамер, а потом в анлинке использовать параметр, или искользовать напрямую в анлинке. Использовать в кавычках обязательно!

Добавлено
хух.. сурово вас в КГТУ учат )

Автор: Nymphadora 18.04.09, 13:25
Ой, ёлки... что это: "Out of memory"? :wacko:

И что за такое DUniform? :huh:

Жесть...
Ну что здесь не так?

1 PAS FUNCTION RN1,C2
0,2/1,4
3 STOR1 EQU 1
4 STOR2 EQU 2
5 STOR3 EQU 3
6 STOR1 STORAGE 35
7 STOR2 STORAGE 35
8 STOR3 STORAGE 35
9 GENERATE 3,1
10 ASSIGN 1,1
11 SELECT MIN 1,1,3,,S
12 ENTER P1
13 ADVANCE 400
14 LEAVE P1
15 LINK PERRRON,FIFO
16 GENERATE 300,100
18 UNLINK PERRON,POSADKA,(DUniform(1,30,70)) - ???
19 POSADKA ADVANCE 150
20 TERMINATE
21 GENERATE 400,150
22 ADVANCE 3,2
23 SPLIT FN$PAS,PERRON
24 TERMINATE
25 PERRON SELECT MIN 1,1,3,,S
26 ENTER P1
27 ADVANCE 400
28 LEAVE P1
29 TERMINATE
30 GENERATE 72000
31 TERMINATE 1
32 START 1

Автор: Eugen 18.04.09, 15:09
Цитата Nymphadora @
"Out of memory"?
это откуда? - весь текст отчета в студию
18 UNLINK PERRON,POSADKA,(DUniform(1,30,70)) - ???
строка как строка ничего криминального

возможно, ошибка возникает если пытаетесь выводить количество транзактов, из списка, болеше, чем в нем находится.
Тогдавместо строки
18 UNLINK PERRON,POSADKA,(DUniform(1,30,70)) - ???
следует написать
ASSIGN var,(DUniform(1,30,70))
UNLINK PERRON,POSADKA,(V$funk)
и добавить в самое начало модели
funk VARIABLE ((P$var'GE'CH$PERRON)#CH$PERRON + (P$var'L'CH$PERRON)#P$var)

DUniform - дискретное равномерное распределение в границах [30,70] или [30,70)

Автор: TEMENb 18.04.09, 15:18
Eugen, GPSS/PC + кривое задание )
Пассажиры прибывают с интервалом 0,3 сек, а поезд приезжает каждые 30 сек, вмещает по 30-70 человек. Как результат - афигенное переполнение перона ну и собсно аут оф мемори ))

Автор: Eugen 18.04.09, 15:43
причем тут моделирование и ошибка out of memory? люди по 1000000000 транзактов генерят и ничего

Автор: TEMENb 18.04.09, 15:53
Цитата Eugen @
причем тут моделирование и ошибка out of memory? люди по 1000000000 транзактов генерят и ничего

В верде - никаких проблем. только думает долго. а ПС выдает аут оф мемори.

Добавлено
Собсно текст.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    qqq      variable   (30+41#RN1\1000)
    PAS      FUNCTION   RN1,C2
             0,2/1,4
    STOR1    EQU        1
    STOR2    EQU        2
    STOR3    EQU        3
    STOR1    STORAGE    35
    STOR2    STORAGE    35
    STOR3    STORAGE    35
    10       GENERATE   3,1
    30       SELECT MIN 1,1,3,,S
    40       ENTER      p1
    50       ADVANCE    400
    60       LEAVE      p1
    70       LINK       1,FIFO
    75       terminate
    80       GENERATE   300,100
    90       assign     1,v$qqq
    100      UNLINK     1,met1,p1
    110 met1 ADVANCE    150
    120      TERMINATE
    130      GENERATE   400,150
    140      ADVANCE    3,2
    150      SPLIT      FN$PAS,met2
    160      TERMINATE
    170 met2 SELECT MIN 1,1,3,,S
    180      ENTER      P1
    190      ADVANCE    400
    200      LEAVE      P1
    210      TERMINATE
    220      GENERATE   72000
    230      TERMINATE  1
             START      1

Автор: flatline 18.04.09, 17:00
помогите пожалуйста... у меня есть задачка.. я вроде бы как то ее сделал.. отчет выдает.. но не знаю правильно ли она работает? проверьте пожалуйста!

задача: в вычислительном центре в обработку принимаются 3 класса заданий: А, В, С. Исходя из наличия памяти в ЭВМ задания классов А и В могут решаться одновременно, а задача класса С монополизирует ЭВМ. ну там про время тыры пыры не столь важно... Задачи класса С запускается в ЭВМ если она полностью свободна. Задачи класса А и В могут дозагружаться к решающей задаче.

у меня опасения больше всего вызывает 3ий блок... я в нем попытался реализовать проверку свободны ли буферы и если да то загружаем задание С которые у нас выполняется монопольно

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    buf1 STORAGE 3
    buf2 storage 3
     
    TABL1 TABLE M1,10,10,20
    TABL2 TABLE M1,900,10,20
    TABL3 TABLE M1,1200,100,200
    generate 20,5
    queue och1
    povtor gate snf buf1,metka
    enter buf1
    advance 20,5
    leave buf1
    depart och1
    tabulate TABL1
    terminate
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    generate 20,10
    queue och1
    metka gate snf buf2,zanyt
    enter buf2
    advance 21,3
    leave buf2
    depart och1
    tabulate TABL2
    terminate
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    generate 20,10
    queue och1
    gate snf buf1,h
    h gate snf buf2
    enter buf1
    advance 21,3
    leave buf1
    depart och1
    tabulate TABL3
    terminate
    zanyt advance 61,11
    transfer, povtor
    generate 4800
    terminate 1
    start 1

Автор: Eugen 19.04.09, 03:15
Цитата
gate snf buf1,h
h gate snf buf2
enter buf1
advance 21,3
здесь не правильно
Цитата
buf1 STORAGE 3
buf2 storage 3
что это, для чего Вам МКУ. Сколько ед.памяти МКУ должна занять задача класса С что ее приняли на обработку? все 6 или от каждого МКУ по 1 ед.памяти?

Автор: flatline 19.04.09, 10:52
Eugen да наверно все 6... типо тогда будет монопольно и ниче не подгрузится... никакая другая задача... ну вот реализовать как это.. чет не могу пока придумать :(

а насчет
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    gate snf buf1,h
    h gate snf buf2
    enter buf1
    advance 21,3


у меня тоже были смонения...а в чем тут ошибка тогда?

Автор: Eugen 19.04.09, 14:08
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TEST E (S$buf1 + S$buf2),0  ;S - текущее содержимое памяти. Только когда оба bufХ будут свободны транзакт пройдет вниз
    ENTER buf1,3
    ENTER buf2,3
    ADVANCE ..
    LEAVE buf2,3
    LEAVE buf1,3

Здесь статистика queue och1 собирается по времени ожидания в очереди + время обработки на ЭВМ
Цитата
queue och1
povtor gate snf buf1,metka
enter buf1
advance 20,5
leave buf1
depart och1

обычно depart ставится сразу за enter. В этом случае статистика собирается о времени ожидания в очереди
queue och1
povtor gate snf buf1,metka
depart och1
enter buf1
advance 20,5
leave buf1

Автор: flatline 19.04.09, 15:17
Eugen смотри вот текст проги
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    buf1 STORAGE 4
    buf2 storage 4
    TABL1   TABLE M1,10,10,20
    TABL2   TABLE M1,900,10,20
    TABL3   TABLE M1,1200,100,200
    generate 20,5
    queue och1
    povtor gate snf buf1,metka
    enter buf1,3
    advance 20,5
    leave buf1,3
     
    tabulate TABL1
    terminate
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    generate 20,10
    queue och1
    metka gate snf buf2,zanyt
    enter buf2,3
    advance 21,3
    leave buf2,3
    depart och1
    tabulate TABL2
    terminate
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    generate 20,10
    queue och1
    TEST E(S$buf1+S$buf2),0
    enter buf1,3
    enter buf2,3
    advance 21,3
    leave buf2,3
    leave buf1,3
    depart och1
    tabulate TABL3
    terminate
    zanyt advance 61,11
    transfer, povtor
    generate 4800
    terminate 1
    start 1


я изменил storage +1 добавил к нему так как у меня не получалось выставлять нужное мне время... ды к вот... работает но меня пугает отчет...

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE           239             0       0
                        2    QUEUE              239             0       0
    POVTOR              3    GATE               239             1       0
                        4    ENTER              238             0       0
                        5    ADVANCE            238             1       0
                        6    LEAVE              237             0       0
                        7    TABULATE           237             0       0
                        8    TERMINATE          237             0       0
                        9    GENERATE           239             0       0
                       10    QUEUE              239             0       0
    METKA              11    GATE               239            10       0
                       12    ENTER              229             0       0
                       13    ADVANCE            229             1       0
                       14    LEAVE              228             0       0
                       15    DEPART             228             0       0
                       16    TABULATE           228             0       0
                       17    TERMINATE          228             0       0
                       18    GENERATE           238             0       0
                       19    QUEUE              238           238       0
                       20    TEST                 0             0       0
                       21    ENTER                0             0       0
                       22    ENTER                0             0       0
                       23    ADVANCE              0             0       0
                       24    LEAVE                0             0       0
                       25    LEAVE                0             0       0
                       26    DEPART               0             0       0
                       27    TABULATE             0             0       0
                       28    TERMINATE            0             0       0
    ZANYT              29    ADVANCE              0             0       0
                       30    TRANSFER             0             0       0
                       31    GENERATE             1             0       0
                       32    TERMINATE            1             0       0


P.S. 19 строчка... в очереди зависло 238 транзактов... :(

Автор: TEMENb 19.04.09, 15:24
Цитата
STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY
BUF1 4 1 0 3 714 1 2.942 0.735 238 1
BUF2 4 1 0 3 687 1 2.984 0.746 238 10


Логично предположить, что за время моделирования условие ниразу не выполнилось.

Добавлено
эксперимента ради, увеличте время прихода в первом и втором дженерейте до 60 - и вы увидете, что транзакты успешно пройдут двадцатый блок.

Автор: flatline 19.04.09, 15:28
TEMENb а ты как думаешь задача правильно решена?

Автор: TEMENb 19.04.09, 15:34
Для этого надо сесть и разобрать задачу. сори. с временем проблемки )

Автор: flatline 19.04.09, 15:43
TEMENb пожскажите плиз в каком направлении хоть думать :( а то даже не могу предположить где ошибка :wall:

Автор: Eugen 19.04.09, 16:12
flatline в самом первом посте вы привели урезанный текс задания и вашу версию модели. А дальше гадание на кофейной гуще почему не работает.
Условие правильное TEST E (S$buf1 + S$buf2),0 Но. Чтобы оно выполнилось необходимо наличие полностью свободной памяти МКУ buf1 и buf2. Это событие произойти не может т.к. всегда будет хотя бы одна подгружаемая задача. Интенсивность появления задач больше чем интенсивность обработки
Цитата
generate 20,10
queue och1
metka gate snf buf2,zanyt
enter buf2,3
advance 21,3
здесь постоянно накапливается очередь

Решение здесь одно, чтобы задача сама занимала память(захватывая или вытесняя подгружаемые задачи)

не охота 'флеймить'. Приведите весь текст задачи или пишите в PM если нужна помощь Все по 10$

Автор: flatline 19.04.09, 16:26
задача: в вычислительном центре в обработку принимаются 3 класса заданий: А, В, С. Исходя из наличия памяти в ЭВМ задания классов А и В могут решаться одновременно, а задача класса С монополизирует ЭВМ. задания класса А поступают через 15-25 мин, класса В через 10-30 мин, класса С через 20-40. И требуют для выполнения класса А 15-25 мин, класс В 18-24, класс С - 23-33 мин. Задачи класса С запускается в ЭВМ если она полностью свободна. Задачи класса А и В могут дозагружаться к решающей задаче.

вот последний код программы (с времененм было не так.. но чет ниче не изменилось в итоге):
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    buf1 STORAGE 4
    buf2 storage 4
    TABL1   TABLE M1,10,10,20
    TABL2   TABLE M1,900,10,20
    TABL3   TABLE M1,1200,100,200
    generate 20,5
    queue och1
    povtor gate snf buf1,metka
    depart och1
    enter buf1,3
    advance 20,5
    leave buf1,3
    tabulate TABL1
    terminate
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    generate 20,10
    queue och1
    metka gate snf buf2,zanyt
    depart och1
    enter buf2,3
    advance 21,3
    leave buf2,3
    tabulate TABL2
    terminate
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    generate 30,10
    queue och1
    TEST E(S$buf1+S$buf2),0
    depart och1
    enter buf1,3
    enter buf2,3
    advance 28,5
    leave buf2,3
    leave buf1,3
    tabulate TABL3
    terminate
    zanyt advance 69,13
    transfer, povtor
    generate 4800
    terminate 1
    start 1


P.S. если сам не додумаюсь то обращусь... а че значит ВСЕ по 10 $.. что понимается под словом ВСЕ ?:)

Автор: Eugen 19.04.09, 16:40
TEST E(S$buf1+S$buf2),0 условие по прежнему работает

Последние изменений
Цитата flatline @
buf1 STORAGE 4
buf2 storage 4
...
enter buf1,3
...
позволяют убрать условие. Тогда задачи класса C будут сначала захватявать память buf1 затем buf2.

depart och1(2) - ставится после ENTER xx

Автор: flatline 19.04.09, 16:47
Eugen спасибо!!!! ты в этой ветке Задачи с решениями по GPSS привел решение задачи №6... я глянул задачник у меня под номером 6 такое же задание.. у тебя нету случайно 12го задания?:)

Автор: Eugen 19.04.09, 16:50
лучше так
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 30,10
    PRIORITY 1 // чтобы приоритет был выше чем у задач класса A,B
    queue och1
    enter buf1,3
    enter buf2,3
    depart och1
    ..

Автор: flatline 19.04.09, 16:51
оооооо у меня прошло 14 транзактов из 155!!!!!! я убрал условие проверять память!!!!

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     10    GENERATE           240             0       0
                       11    QUEUE              240             0       0
    METKA              12    GATE               240            29       0
                       13    ENTER              211             0       0
                       14    DEPART             211             0       0
                       15    ADVANCE            211             1       0
                       16    LEAVE              210             0       0
                       17    TABULATE           210             0       0
                       18    TERMINATE          210             0       0
                       19    GENERATE           159             0       0
                       20    QUEUE              159           145       0
                       21    ENTER               14             1       0
                       22    ENTER               13             0       0
                       23    DEPART              13             0       0
                       24    ADVANCE             13             0       0
                       25    LEAVE               13             0       0


Добавлено
убрал проверку на буферы и поставил приоритет на класс С...
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE           243             0       0
                        2    QUEUE              243             0       0
    POVTOR              3    GATE               243           242       0
                        4    ENTER                1             0       0
                        5    DEPART               1             0       0
                        6    ADVANCE              1             0       0
                        7    LEAVE                1             0       0
                        8    TABULATE             1             0       0
                        9    TERMINATE            1             0       0
                       10    GENERATE           235             0       0
                       11    QUEUE              235             0       0
    METKA              12    GATE               235           137       0
                       13    ENTER               98             0       0
                       14    DEPART              98             0       0
                       15    ADVANCE             98             0       0
                       16    LEAVE               98             0       0
                       17    TABULATE            98             0       0
                       18    TERMINATE           98             0       0
                       19    GENERATE           158             0       0
                       20    PRIORITY           158             0       0
                       21    QUEUE              158            60       0
                       22    ENTER               98             0       0
                       23    ENTER               98             0       0
                       24    DEPART              98             0       0
                       25    ADVANCE             98             1       0
                       26    LEAVE               97             0       0
                       27    LEAVE               97             0       0
                       28    TABULATE            97             0       0
                       29    TERMINATE           97             0       0
    ZANYT              30    ADVANCE              0             0       0
                       31    TRANSFER             0             0       0
                       32    GENERATE             1             0       0
                       33    TERMINATE            1             0       0



Eugen спасибо большое! думаю что то боле менее уже получилось ))

Автор: Eugen 19.04.09, 16:56
количество обработанных заданий класса A и B должно при этом уменьшиться
может и есть №12. списка задание не нашел..

Автор: flatline 19.04.09, 16:58
а у меня вопрос!!!!

чем отличается строка
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 30,10
    PRIORITY 1


от
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 30,10,,1

в обоих случаях приоритеты же ставим...

Автор: Eugen 19.04.09, 17:08
Недостаток прошлого решения это частый бесполезный простой задания класса С в ожидание ресурса buf2 и аналогичный простой заданий класса А.
Следующий вариант немного улучшает ситуацию. Задание класса сначала занимают один из ресурсов buf1 или buf2 и только после этого становится в 'очередь' на занятие второго ресурса.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE 30,10,,1
    QUEUE och3
    TRANSFER BOTH,,met111
    ENTER buf1
    ENTER buf2
    TRANSFER , met222
     
    met111 ENTER buf2
    ENTER buf1
     
    met222 DEPART och3
    ADVANCE ..


Добавлено
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE 30,10,,1
    QUEUE och3
    SEISE MUTEX // что бы в следующем участке модели мог находится только 1 транзакт. Иначе  возможны deadlock'и
    TRANSFER BOTH,,met111
    ENTER buf1
    ENTER buf2
    TRANSFER , met222
     
    met111 ENTER buf2
    ENTER buf1
     
    met222 DEPART och3
    ADVANCE 28,5
    LEAVE buf2,3
    LEAVE buf1,3
    RELEASE MUTEX // освободить..
    TABULATE TABL3

Автор: flatline 19.04.09, 18:13
Eugen спасибо огромное!!! а то у нас gpss на самообучение дали... :wall:

Автор: JAM13 20.04.09, 05:14
Имеется некоторая конвейерная автоматизированная линия по выпуску баночек фруктового сока.


Пустые баночки для фруктового сока поступают в накопитель 1 автоматизированной ли-нии каждые 3,5 ± 1,1 секунд. После этого в них автоматически заливает¬ся сок. Одновременно может заливаться лишь одна баночка, на что расходуется 1,5 секунды. Потом баночки поступают в накопитель 2 для выполнения операции закупоривания. Для этого расходуется 1,6 секунд времени на каждую баночку. Одновременно может обраба-тываться одна баночка. Потом они попадают в накопитель 3 для следующей операции. В конце конвейера баночки устанавливаются в ящики. Время установки одной баночки представляет собой равно¬мерно распределенную случайную величину в интервале 2,0 ± 0,8 секунд. Одновременно может устанавливаться в ящик не боль¬ше двух баночек. В начале смены в накопителе 2 находится 20 баночек, а в накопителе 3 – 36 баночек. Определить, какие размеры должны иметь накопители. Промодели¬руйте работу линии на протяжении одной смены (8 часов).


Добрый день!!
можете глянуть текст? все правильно?
большое спасибо!

UPAKOVKA STORAGE 3
GENERATE 3.5,1.1

;Заливка сока
QUEUE Q_ZALIVKA
SEIZE ZALIVKA
DEPART Q_ZALIVKA
ADVANCE 1.5
RELEASE ZALIVKA

;Закупоривание
L1 QUEUE Q_ZAKUPORKA
SEIZE ZAKUPORKA
DEPART Q_ZAKUPORKA
ADVANCE 1.6
RELEASE ZAKUPORKA

;упаковка в ящик
L2 QUEUE Q_UPAKOVKA
ENTER UPAKOVKA
DEPART Q_UPAKOVKA
ADVANCE 2,0.8
LEAVE UPAKOVKA
TERMINATE

;начальная очередь для устройства закупоривания
GENERATE ,,,20
TRANSFER ,L1

;начальная очередь для МКУ упаковки
GENERATE ,,,36
TRANSFER ,L2

;моделируем 8-ми часовой рабочий день
GENERATE 28800
TERMINATE 1
START 1

Автор: Eugen 20.04.09, 13:17
ОШИБКА. Здесь нужна двойка
UPAKOVKA STORAGE 3 //Одновременно может устанавливаться в ящик не больше двух баночек

Автор: JAM13 20.04.09, 15:06
да, спасибо огромное!!
а остальное?
то, что я использовала одноканальные устаройства, а не мку?

Автор: TEMENb 20.04.09, 15:15
вроде верно, только одно замечание.
Время должно быть дискретным.
Хотя, если честно, GPSS World адекватно моделирует и с дробными значениями.

Автор: Eugen 20.04.09, 15:46
1 tick времени в GPSS (или точность вычисления времени или дискретность времени) это 6 знак после запятой. А дальше дело каждого выбрать ед. модельного вренени год, минуту или пикосенды.

Как задать "равномерно распределенную случайную величину в интервале 2,0 ± 0,8" чтобы она была не дробная? ;)

Автор: TEMENb 21.04.09, 10:50
Цитата Eugen @
1 tick времени в GPSS (или точность вычисления времени или дискретность времени) это 6 знак после запятой

шесть знаков после запятой - это особенность жпсс верд. больше ни одна версия жпсс не тянет дробного времени.
Кроме того, gpss задумывался как дискретно-событийный подход к моделированию.
Собсно, как я уже писал, жпсс верд схавает дробное значение времени без вопросов, но препод может пристебаться в этом моменте.
Есть мнение, что преподы учились на жпсс РС, а там не то что дробного времени - дробных чисел вообще нет, как таковых ;)

З.Ы.: я б выбрал милисекунды. как вариант децисекунды.. но эт звучит хуже 8-)

Автор: Eugen 21.04.09, 15:13
"равномерно распределенная случайная величина в интервале 2,0 ± 0,8" выраженная в децисекундах выгдядит так 20±8 :whistle:

Автор: Azick 22.04.09, 12:42
Плз, помогите с задачей: :wall:

в специализированной вычислительной системе периодически выполняются три вида заданий, которые характеризуются уровнями приоритета: нулевым, первым и вторым. Каждый новый запуск задания оператор производит при помощи дисплея, работая на нем 50+-30сек.После запуска задания оно требует для своего выполнения 100+-50 сек с времени работы процессора, причем задания более высокого приоритета прерывают выполнение задач более низкого приоритета. Результаты обработки задания выводятся на печать без прерываний в течение 30+-10сек., после чего производится их анализ в течении 60+-20сек, и задание запускается снова. Можно считать, что при работе дисплея и при выводе результатов на печать процессор не используется.Смоделировать процесс работы системы при условии, что задание второго уровня приоритета выполняется 100 раз. подсчитать число циклов выполнения остальных заданий и определить коэфициенты загрузки технических средств системы.

Автор: kant1288 22.04.09, 14:32
Ого)), Azick, вы откуда?? У меня такая же задача, вроде работает, правда хочу попросить помощи у знатоков gpssw, посмотрите пожалуйста мою блок-схему, правильная ли она, больше всего меня смущает условие перед занятием CP. Вот прога:

Generate 30,25
queue CPU
seize display
advance 50,30
release display
seize CP
advance 100,50
release CP
depart CPU
advance 30,10
advance 60,20
savevalue 1+,1
terminate

Generate 70,5,,,1
queue CPU
seize display
advance 50,30
release display
preempt CP,PR
advance 100,50
return CP
depart CPU
advance 30,10
advance 60,20
savevalue 2+,1
terminate

Generate 60,2,,100,2
queue CPU
seize display
advance 50,30
release display
preempt CP,PR
advance 100,50
return CP
depart CPU
advance 30,10
advance 60,20
savevalue 3+,1
terminate

generate 12000
TERMINATE 1
start 1

Автор: Mary 23.04.09, 13:43
TEMENbпорверь пожалуйста аську!!!

Добавлено
Привет! Мне очень нужна ваша помощь!!!
мне нужно задачу решить по gpss.. у меня че-то не получается..(((

ПОЖАЛУЙСТА!!!!!
вот задача:
На железнодорожную сортировочную горку прибывают составы с интенсивностью λ = 2 состава в час. Среднее время, в течение которого горка обслуживает состав, равно 0,4 час. Составы, прибывающие в момент, когда горка занята, становятся в очередь и ожидают в парке прибытия, где имеется три запасных пути, на каждом из которых может ожидать один состав. Состав, прибывший в момент, когда все три запасных пути в парке прибытия заняты, становится в очередь на внешний путь. Все потоки событий
простейшие. При установившемся режиме найдите:
среднее число составов, ожидающих в очереди (как в парке прибытия, так и вне его); среднее время ожидания в парке прибытия и на внешних путях; среднее время ожидания состава в системе обслуживания;
вероятность того, что прибывший состав займет место на внешних путях.

я пыталась сама решить, почему-то не работает. вот что я сама написала ( я считала в минутах, 30 минут - интенсивность, 20 минут - 0,4 часа):
generate 240
terminate 1
Generate 30
met2 Queue mainq
seize main
depart mainq
test NE q$qgorka,0,met1
test LE q$qzapas,3,met2
queue zapasq
seize zapas
depart zapasq
met1 queue gorkaq
seize gorka
advance 20
release gorka
depart gorkaq
terminate 1

Автор: TEMENb 23.04.09, 16:20
Vitalick, читайте литературу. Все доступно написано. Честно - мне лень лезть в учебники и копировать оттуда сюда справочную информацию.


Mary, програмка требует доработок, как с точки зрения реализации, так и с точки зрения логики.
Вопервых не моделирует она потому, что вы не организовали выход из устройства main. Вовторых основную линию надо выражать не ОКУ, а МКУ или вообще очередью, т.к. на ней может назодится несколько ожидающих поездов.


Собственно я вижу модель так
основная линия(очередь)->запасные пути(МКУ 3 канала)->горка(ОКУ)

и даже отпадает необходимость в тестах. Вся программа - 12 операторов, с учетом сегмента-таймера и оператора Start. Учачи.

Автор: Mary 24.04.09, 07:38
TEMENb
Я переделала, как ты сказал. посмотри, что неправильно. Напиши, пожалуйста, как должно быть.

Автор: Mary 24.04.09, 08:39
zapas storage 3
generate 30
queue qmain

queue qzapas
enter zapas
leave zapas
depart qzapas

depart qmain

queue qgorka
seize gorka
depart qgorka
advance 20
release gorka

generate 120
terminate 1

Автор: TEMENb 24.04.09, 09:29
Mary, вы вообще хоть пробовали запускать???
Сколько времени вы потратили на ЭТО?

Цитата
zapas storage 3
generate 30
queue qmain
enter zapas
depart qmain
seize gorka
leave zapas
advance 20
release gorka
terminate

generate 120
terminate 1

start 1

Автор: Mary 24.04.09, 18:10
TEMENb
Спасибо тебе огромное!
я только начинаю изучать gpss, мне простительно :)

Автор: TEMENb 24.04.09, 18:17
Mary, я привел простейшую реализацию. в этой реализации получается, что все поезда проходят через запасные пути, но останавливаются на них только если основной занят. Так что у вас есть простейшая реализация и есть куда стремиться.

Автор: Mary 24.04.09, 18:48
я поняла! пасиб!

Автор: Vesna 25.04.09, 16:46
Здравствуйте! Вроде написала программку, а при выполнении выдается ошибка. Помогите пожалуйста, подскажите что не правильно?

Двухколейная железная дорога имеет между станциями А и В одноколейный участок с разъездом С. На разъезде имеется запасной путь, на котором один состав может пропустить встречный поезд. К станциям А и В поезда прибывают с двухколейных участков каждые 40 ± 10 мин. Участок пути АС поезда преодолевают за 15 ± 3 мин, а участок пути ВС –
за 20 ± 3 мин. Со станций А и В поезда пропускаются на одноколейный участок до разъезда только при условии, что участок свободен, а на разъезде не стоит состав. После остановки на разъезде поезда пропускаются на участок сразу после его освобождения. Поезд останавливается на разъезде, если по лежащему впереди него участку пути движется встречный поезд. Смоделировать работу одноколейного участка железной дороги при условии, что в направлении АВ через него должны проследовать 50 составов. Определить среднее время ожидания составов на станциях А и В, а также среднее время ожидания на разъезде С и коэффициент загрузки запасного пути.

PunktA GENERATE 40,10 ; прибытие поездов на станцию А
QUEUE OchA ; встать в очередь на станции А
GATE NU AC ; проверка свободен ли участок АС
GATE NU C ; проверка свободен ли участок С
SEIZE AC ; Если свободны то занимаем участок АС, иначе ждем
DEPART OchA ; Убираем транзакт из очереди на пункте А
ADVANCE 15,3 ; Проезжаем АС
GATE NU BC,met1 ; Проверяем свободен ли для проезда участок ВС, Еcли не то то идем на met1
RELEASE AC ; освобождаем АС
met2 SEIZE BC ;занимаем ВС
ADVANCE 20,3 ;едем по ВС
TRANSFER ENDE ; переход на строчку ende

met1 SEIZE C ;занимаем запасной путь С
GATE NU BC ; проверяем не освободился ли ВС
RELEASE C ; освобождаем запасной путь, если ВС свободен
transfer met2 ; идем на метку met2

PunktB GENERATE 40,10 ; прибытие поездов на станцию В
QUEUE OchB ; встать в очередь на станции В
GATE NU BC ; проверка свободен ли участок ВС
GATE NU C ; проверка свободен ли участок С
SEIZE BC ; Если свободны то занимаем участок ВС, иначе ждем
DEPART OchB ; Убираем транзакт из очереди на пункте В
ADVANCE 20,3 ; Проезжаем ВС
GATE NU AC,met3 Проверяем свободен ли для проезда участок АС, Еcли не то то идем на met3
RELEASE BC освобождаем ВС
met4 SEIZE AC ;занимаем АС
ADVANCE 15,3 ;едем по АС
TRANSFER ENDE ;переход на строчку ende

met3 SEIZE C ;занимаем запасной путь С
GATE NU AC ; проверяем не освободился ли АС
RELEASE C ; освобождаем запасной путь, если АС свободен
transfer met4 ; идем на метку met4
ENDE TERMINATE
TERMINATE 1
start 50

ОШИБКА:
24/04/09 13:50:34 Model Translation Begun.
24/04/09 13:50:34 Line 27, Col 8. Invalid use of SNA Class Specifier. Operand A.
24/04/09 13:50:34 GATE NU AC,met3
24/04/09 13:50:34 **** Model Translation Aborted ****


Очень прошу, не игнорируйте. Мне правда очень нужна помощь.
Заранее благодарна.

Автор: Eugen 26.04.09, 16:17
вполне возможно, что AC - используется средой GPSS.
придумай названия посложнее, напр. distance_AC или AC_Segment

Автор: Arrrgh 28.04.09, 08:39
Доброго времени суток, проверьте пожалуйста правильность написания модели. Условие задачи : В аэропорту на ленту транспортера поступает багаж где он проходит проверку, 5% не проходят проверку и идут на дополнительную проверку после чего возвращаются обратно на ленту, после проверки багаж разделяется на четыре разных погрузочных ленты(и вот тут заключается основная проблема вроде все работает но как-то не так).
Вот то что я намоделировал:
SIMULATE
CHECK STORAGE 2
L STORAGE 4
OBR STORAGE 2
BAG STORAGE 8
INTEGER &I

* МОДУЛЬ ИСПОЛНЕНИЯ

GENERATE 1,1 поступление багажа
RETEST QUEUE CHECK организация очереди контроля
ENTER OBR
DEPART CHECK
ADVANCE 1,1
LEAVE OBR
TRANSFER .050,,TEST 5% багажа идет на дополнительную проверку

* TEST

TEST QUEUE MTEST организация очереди на дополнителую проверку
SEIZE TESTER
DEPART MTEST
ADVANCE 2,1
RELEASE TESTER
TRANSFER ,RETEST возврат на общий контроль

* Разделение на линии


L1 TEST E L1,1,OT проверка если не проходит то идет обратно на выбор линии
QUEUE LNB
ENTER BAG
DEPART LNB
ADVANCE 1
LEAVE BAG
TERMINATE 1
OT TRANSFER ,L2
L2 TEST E L2,2,OTH проверка если не проходит то идет обратно на выбор линии
QUEUE LNC
ENTER BAG
DEPART LNC
ADVANCE 1
LEAVE BAG
TERMINATE 1
OTH TRANSFER ,L3
L3 TEST E L3,3,OTHE проверка если не проходит то идет обратно на выбор линии
QUEUE LND
ENTER BAG
DEPART LND
ADVANCE 1
LEAVE BAG
TERMINATE 1
OTHE TRANSFER ,L4
L4 TEST E L4,4,L1 проверка если не проходит то идет обратно на выбор линии
QUEUE LNE
ENTER BAG
DEPART LNE
ADVANCE 1
LEAVE BAG
TERMINATE 1




* ПРОВЕРКА

DO &I=1,35,1
START 60
CLEAR
ENDDO
END

Заранее спасибо за помощь.

Автор: Eugen 28.04.09, 13:13
ошибки:
- нет полного текста задачи
- нет символа конца gpss кода перед коментариями
- метки TEST не может быть в gpss, это название исполняемого блока
- L1, L2, L3, L4 равны номерам строк, где они указаны как метки блокив. Так что устолия всегда false

что делает эта конструкция?
Цитата
DO &I=1,35,1
START 60
CLEAR
ENDDO
END

задача вроде не сложная, могу подправить за $

Автор: Arrrgh 28.04.09, 15:06
Eugen спасибо большое за помощь, но исправить хочу сам, я сейчас обучаюсь этому языку, Вы мне тока объясните пожалуйста, где я накасячил.
1.нет символа конца gpss кода перед комментариями –что это за символ
2.L1, L2, L3, L4 равны номерам строк, где они указаны как метки блокjв. Так что устолия всегда false- можно по подробнее обьяснить что необходимо сделать.
3.С меткой TEST это я просмотрел
4.А Эта конструкция задает петлю чтобы не надо было каждый раз писать Start Clear для получения различных данных.
Я пишу на GPSSH

Заранее спасибо

Автор: Eugen 28.04.09, 15:50
1. GENERATE 1,1 поступление багажа - разве их не нужно разделять ";" или "*"
2. L1 TEST E L1,1,OT - и далее еще 3 строки. При проверкb условия if(L1 == 1).. здесь L1 всегда = номеру строки в которой стоит этот TEST
4. DO &I=1,35,1 - что обозначет каждая цифра

Автор: Dzon 29.04.09, 04:07
Детали, необходимые для работы цеха, находятся на цеховом и центральных складах. На цеховом складе хранится 20 комплектов деталей, потребность в которых возникает через 60+-10 минут и составляет один комплект. В случае снижения запасов до трех комплектов, формируется в течении 60 минут заявка на пополнение запасов цехового склада до полного объема в 20 комплектов, которая посылается на центральный склад, где в течении 60+-20 минут происходит комплектование за 60+-5 минут осуществляется доставка деталей в цеховой склад.
Смоделировать работу цеха в течении 400 часов. Определить вероятность простоя цеха из-за отсутствия деталей и среднюю загруженность цехового склада. Определить момент пополнения запасов цехового склада при котором вероятность простоя цеха равна 0.
Вот моя программа.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    simulate
    initial x$och,20;
    generate 24000;
    terminate 1;
    generate 60,10;
    test NE x$och,0,vihod0;
    SAVEVALUE och-,1;
    test e x$och,3,vihod;
    split 1,centrskl;
    vihod terminate ;
    vihod0  terminate;
    centrskl  advance 60;
    advance 60,20;
    advance 60,5;
    SAVEVALUE och,20;
    terminate;
    start 1;

Нужно определить:
1)Вероятность простоя цеха из-за отсутсятвия деталей.
2)среднюю загрузженность цехового склада.
3)Определить момент пополнения запасов цехового склада при котором вероятность простоя цеха равна 0
Помогите опредилить эти значения?

Автор: Arrrgh 29.04.09, 08:26
2Eugen
Доброго времени суток,
1. нет их разделять не нужно их нужно просто писать в соответствующей колонке (25 вроде пробел от начала строки)
2.тоесть вместо L1 TEST E L1,1,OT необходимо написать FL TEST E L1,1,OT( например) я правильно понял?
3.сначала в блоке SIMULATE пишем INTEGER &I (для ввода петли)
&I=1 - индекс начала петли,представляющей собой целочисленную скалярную ампеерпеременную;
35 - характеризует собой предельный номер конечного члена петли(сколько раз прогонять)
1 - задает приращение индекса

Ещё раз спасибо за помощь

Автор: Vitalick 29.04.09, 12:04
Здрасти!
хотелось бы переделать задачку из GPSSWorld просто в GPSS
возможно ли это?!
VVrema variable (Exponential(1,0,X$Vrem))
initial X$Vrem,5

generate 6,3
savevalue Vsego+,1
assign PVrema1,V$VVrema
assign PVrema2,V$VVrema
queue Och1
seize Ustr1
depart Och1
advance P$PVrema1
release Ustr1

queue Och2
seize Ustr2
depart Och2
advance P$PVrema2
release Ustr2

test LE (P$PVrema1+P$PVrema2),10,MetBol
test L (X$Bol/X$Vsego),.3,MetTerm
savevalue Vrem,5
MetTerm terminate

MetBol savevalue Bol+,1
test GE (X$Bol/X$Vsego),.3,Met1
savevalue Vrem,4
MetTerm1 terminate

Met1 savevalue Vrem,5
transfer ,MetTerm1

generate 10000
terminate 1
start 1

Автор: TEMENb 29.04.09, 19:12
Возможно.
пронумеруйте каждый функциональный блок, все формулы вынесите вычисляемыми выражениями, в т.ч и условия для теста. Закон распредиления прийдется задать при помощи оператора FUNCTION
Удачи )

Автор: tigreg 01.05.09, 10:57
Привет! Не не понимаю, в чем ошибка...
Задача такая: На двухканальный телефон скорой помощи в среднем 1 раз в 100 секунд с равной вероятностью звонят старики, взрослые и дети. Время разговора с ними соответственно 180 с, 150 с, 210 с.
мой текст программы такой:
emerg storage 2
generate 100
transfer pick old,baby
old assign 1,(Uniform(1,160,200))
transfer ,old1
aged assign 2,(Uniform(1,130,170))
transfer ,aged1
baby assign 3,(Uniform(1,190,230))
transfer ,baby1
old1 enter emerg
advance P1
leave emerg
terminate

aged1 enter emerg
advance P2
leave emerg
terminate
baby1 enter emerg
advance P3
leave emerg
terminate
generate 86400
terminate 1

программа выдает такую ошибку:28
ADVANCE. Line 16.
advance P2
Reference to a non-existent Parameter.

Автор: TEMENb 01.05.09, 11:21
1. В операторе трансфер стоит пробел вместо запятой,
2. параметр пик кидает на случайную строку между метками. В результате чего транзакты попадают на адвансы, не попав на ассижены, следстиве - попытка задержатся на велечину параметра, которого еще вообще то не существует
3. метки baby1, aged1 и old1 - не пришей кобыле хвост. код то одинаковый. Упростим.
4. ИМХО лучше использовать DUniform. Он дает дискретные значения. В ЖПСС верд погоды не делает (прекрасно работает с дробным временем), но чисто теоритически так вроде как привильней.


Цитата
emerg storage 2
generate 100
transfer pick,met1,met2
met1 transfer ,old
transfer ,aged
met2 transfer ,baby
old assign 1,(DUniform(1,160,200))
transfer ,met3
aged assign 1,(DUniform(1,130,170))
transfer ,met3
baby assign 1,(DUniform(1,190,230))
transfer ,met3


met3 enter emerg
advance P1
leave emerg
terminate
generate 86400
terminate 1
start 1


А вообще, раз сказано про равные ВЕРОЯТНОСТИ, то помоему лучше задать переходы именно вероятностями

Цитата
emerg storage 2
generate 100
transfer (2/3),old
transfer .5,aged,baby

old assign 1,(DUniform(1,160,200))
transfer ,met3
aged assign 1,(DUniform(1,130,170))
transfer ,met3
baby assign 1,(DUniform(1,190,230))
transfer ,met3


met3 enter emerg
advance P1
leave emerg
terminate
generate 86400
terminate 1
start 1


З.Ы.: выделяйте код.

Добавлено
Ну и это тебе на закуску ))
Цитата
OLD VARIABLE (DUniform(1,160,200))
AGED VARIABLE (DUniform(1,130,170))
BABY VARIABLE (DUniform(1,190,230))

fun function RN2,E3
.33,V$OLD/.66,V$AGED/1,V$BABY
emerg storage 2
generate 100

assign 1,FN$FUN



enter emerg
advance P1
leave emerg
terminate
generate 86400
terminate 1
start 1

Автор: h4_botan 01.05.09, 13:27
Люди,спасайте. Короче у меня версия GPSS, в которой размер модели ограничен 180 блоками (180 операндов, строк кода).
Подскажите, кто знает, как снять это огранечение. Или если как я понимаю это ограничение именно версии программы, дайте ссылочкку плиз, где скачать, версию хотябы на 500 строк. (и желательно просто бесплатную ссылку <_< )

Спайте, курсач горит :(

Автор: TEMENb 01.05.09, 13:33
h4_botan, не попадалась еще ни одна программа, для которой не хватило бы 180 блоков.
Скорей всего вы что то делаете не так.

Добавлено
А способ снять ограничение весьма прост. для этого надо заплатить 500 бакинских минутеансофтвейру за комерческую версию программы :yes:

Добавлено
З.Ы.: для сравнения можешь перечитать предыдущие два поста. Я не напрягаясь уменьшил вдвое размер программы, без искажения условий и потери точности моделирования.

Автор: h4_botan 01.05.09, 18:40
Гы гы гы гы, давайте я к примеру выложу условие задачи, а вы мне,Уважаемый, скажите, уложитесь ли вы в 180 блоков.

На вход СМО поступает входной поток, в котором с вероятностью 0,58 имеются заявки первого типа; с остаточной вероятностью – второго. Заявки первого типа обслуживаются в 3-х канальном узле с общей очередью (устройства 1-3); второго типа – в двухканальном узле с индивидуальными очередями каждого устройства (устройства 4 и 5). СМО также располагает тремя безотказными резервными устройствами, которые могут быть использованы в случае отказа любого из основных устройств СМО. Отказы наступают в системе с заданной периодичностью, причем с вероятностью 0,75 наступает отказ одного устройства; с вероятность 0,2 – двух устройств; с вероятностью 0,05 – трех устройств (любого или любых равновероятно). В случае множественности отказа время восстановления индивидуально для каждого отказавшего устройства. Время обслуживания в используемом резерве эквивалентно времени обслуживания в резервируемом устройстве. На момент запуска системы одно резервное устройство находится в «горячем» резерве у первого устройства трехканального узла; второе – в «горячем» резерве у первого устройства двухканального узла; третье – в «холодном» резерве. Для первого отказа, если он происходит не в устройствах с «горячим» резервом, используется «холодный» резерв. Резерв считается использованным, если он отработал время восстановления устройства. Отключение использованного резерва от устройства (перевод в «холодное» состояние) происходит после наступления в системе очередного отказа в том случае, если отказ не наступил в устройстве, к которому подключен резерв. В случае отказа устройства СМО остаток незавершенного обслуживания ожидает продолжения обслуживания в резервном устройстве в течение времени, равного 1,25×МОп, где МОп – заданное математическое ожидание времени подключения резерва. Если за этот интервал подключения резерва не происходит (не успевает, нет свободных резервных устройств), то остаток направляется в кратчайшую очередь работающих устройств своего узла, где принимается при длине очереди не более 2-х заявок; в противном случае – теряется.

:D

Добавлено
Кстати, могу, приложить код ко всему этому....

Автор: Arrrgh 01.05.09, 19:00
2TEMENb, Вы случайно не можете мне помочь с задачей? я её выше описал, а то eugen пропал куда-то.. =\

Заранее спасибо

Автор: TEMENb 01.05.09, 19:07
ну обемная задачка, по преварительным оценкам до 60-90 блоков )

видели задачки и пообьемней :D

давай код. будем править.

Автор: h4_botan 01.05.09, 19:39
Лады, выдаю, правда он ещё не доделан малость, но уже около 170 строк, да из за размера окна форума, коменты малость расстануться, может неудобно читать будет:
;***********************************************************
;буква "М_" в начале имени переменной будет говорить о том, что данная переменная является меткой
;буква "U_" в начале имени переменной будет говорить о том, что данная переменная является устройством
;буква "Q_" в начале имени переменной будет говорить о том, что данная переменная является очередью

;___________Переменные очередей узлов 1-
2___________________________________________________________________________________
INITIAL X$K1QDLIN,0 ;переменная, содержащая количество заявок, находящихся в очереди 3-х канального узла
INITIAL X$K2U1QDLIN,0 ;переменные 2-х канального узла, содержащие количество заявок, находящихся в очередях
INITIAL X$K2U2QDLIN,0 ;устройств 1 и 2 соответственно

;___________Функции расперделения заявок____________________________________________________________________________________
tipe FUNCTION RN1,D2 ;дискретная фунцкия распеделения заявок 2-х типов
0.58,M_TIP_A/1,M_TIP_B ;Заявки первого типа обслуживаются в 3-х канальном узле с общей очередью
;Второго типа в 2-х канальном узле с индивидуальными очердьми устройств
KANAL1 FUNCTION RN1,D3 ;дискретная фунцкия распеделения заявок 1-го типа на обслуживание равновероятно
0.33,M_K1U1/0.66,M_K1U2/1,M_K1U3 ;среди трёх устройств

;***********ОСНОВНОЙ БЛОК***************************************************************************************************
GENERATE (Exponential(1,0,1)) ;генерация поступления заявок в СМО
ASSIGN 12,(Exponential(1,0,5)) ;назначаем 12-му парметру заявки время, равное отключени/подключению резервного устройства
TRANSFER ,FN$tipe ;распределение заявок по узлам, согласно их вероятности
;(по дискретной функции)

;___________распределение по типам заявок___________________________________________________________________________________
M_TIP_A ASSIGN 10,(Exponential(1,0,1.923)) ;назначаем 10 парметру заявки время, которое она будет обслуживаться в устр-ах 1 узла
M_QQUZEL1 QUEUE Q_UZEL1 ;заявки попадают в общую очередь, все обслуживаются
SAVEVALUE K1QDLIN+,1 ;добавляем к длинне очереди общей очереди 3-х канального узла 1
TRANSFER ,FN$KANAL1 ;расперделение на обслуживаник заявки типа А равновероятно по трём устройствам
;между тремя устройствами с общей очередью канала 1
M_TIP_B ASSIGN 10,(Exponential(1,0,1.923)) ;назначаем 10 парметру заявки время, которое она будет обслуживаться в устр-ах 2 узла
TRANSFER 0.5,M_K2U1,M_K2U2 ;расперделение на обслуживаник заявки типа В равновероятно
;между двумя устройствами с индивидуальными очередями канала 2

;___________Устройства канала 1_______________________________________________________________________________________________
M_K1U1 ASSIGN 11,1 ;назначаем 11 параметру заявки 1(порядковый номер устройства)
GATE FV U_K1UST1,M_RESERV ;проверка на доступность устройства 1, если не доступно, то в переход в блок резерва
SEIZE U_K1UST1 ;признак занятости устройства обслуживания 1 в канале 1
DEPART Q_UZEL1 ;выход заявки из общей очереди канала 1 на обслуживание
SAVEVALUE K1QDLIN-,1 ;отнимаем от длинны очереди общей очереди 3-х канального узла 1
ADVANCE (Exponential(1,0,1.923)) ;функция обслуживания заявки
RELEASE U_K1UST1 ;осовбождение устройства 1
TRANSFER ,OUT_OKU1 ;переход по метке OUT_OKU1
M_K1U2 ASSIGN 11,2 ;назначаем 11 параметру заявки 2(порядковый номер устройства)
GATE FV U_K1UST2,M_RESERV ;проверка на доступность устройства 2, если не доступно, то в переход в блок резерва
SEIZE U_K1UST2 ;признак занятости устройства обслуживания 2 в канале 1
DEPART Q_UZEL1 ;выход заявки из общей очереди канала 1 на обслуживание
SAVEVALUE K1QDLIN-,1 ;отнимаем от длинны очереди общей очереди 3-х канального узла 1
ADVANCE (Exponential(1,0,1.923)) ;функция обслуживания заявки
RELEASE U_K1UST2 ;осовбождение устройства 2
TRANSFER ,OUT_OKU1 ;переход по метке OUT_OKU1
M_K1U3 ASSIGN 11,3 ;назначаем 11 параметру заявки 3(порядковый номер устройства)
GATE FV U_K1UST3,M_RESERV ;проверка на доступность устройства 3, если не доступно, то в переход в блок резерва
SEIZE U_K1UST3 ;признак занятости устройства обслуживания 3 в канале 1
DEPART Q_UZEL1 ;выход заявки из общей очереди канала 1 на обслуживание
SAVEVALUE K1QDLIN-,1 ;отнимаем от длинны очереди общей очереди 3-х канального узла 1
ADVANCE (Exponential(1,0,1.923)) ;функция обслуживания заявки
RELEASE U_K1UST3 ;осовбождение устройства 3
TRANSFER ,OUT_OKU1 ;переход по метке OUT_OKU1

;___________Устройства канала 2_______________________________________________________________________________________________
M_K2U1 QUEUE Q_UZEL2_1 ;поступление заявки в очередь устройства 1,двухкнального узла
SAVEVALUE K2U1QDLIN+,1 ;добавляем к длинне очереди устройства 1-му из 2-х канального узла 1
ASSIGN 11,4 ;назначаем 11 параметру заявки 4(порядковый номер устройства)
GATE FV U_K2UST1,M_RESERV ;проверка на доступность устройства 4, если не доступно, то в переход в блок резерва
SEIZE U_K2UST1 ;признак занятости устройства обслуживания 1 в канале 2
DEPART Q_UZEL2_1 ;выход заявки из общей очереди канала 2 на обслуживание
SAVEVALUE K2U1QDLIN-,1 ;отнимаем от длинны очереди устройства 1 из 2-х канального узла 1
ADVANCE (Exponential(1,0,2.08333)) ;функция обслуживания заявки
RELEASE U_K2UST1 ;осовбождение устройства 1
TRANSFER ,OUT_OKU2 ;переход по метке OUT_OKU2
M_K2U2 QUEUE Q_UZEL2_2 ;поступление заявки в очередь устройства 2,двухкнального узла
SAVEVALUE K2U2QDLIN+,1 ;добавляем к длинне очереди устройства 2-му из 2-х канального узла 1
ASSIGN 11,5 ;назначаем 11 параметру заявки 5(порядковый номер устройства)
GATE FV U_K2UST1,M_RESERV ;проверка на доступность устройства 5, если не доступно, то в переход в блок резерва
SEIZE U_K2UST2 ;признак занятости устройства обслуживания 2 в канале 2
DEPART Q_UZEL2_2 ;выход заявки из общей очереди канала 2 на обслуживание
SAVEVALUE K2U2QDLIN-,1 ;отнимаем от длинны очереди устройства 2 из 2-х канального узла 1
ADVANCE (Exponential(1,0,2.08333)) ;функция обслуживания заявки
RELEASE U_K2UST2 ;осовбождение устройства 2
TRANSFER ,OUT_OKU2 ;переход по метке OUT_OKU2

;***********Моделирование возникновения отказак устройствам СМО************************************************************

;___________Генерация отказов______________________________________________________________________________________________
GENERATE ,,,1 ;генерирование заявки для создания отказов устройств
ASSIGN 15,0
M_otkaz TEST NE P15,1,KILL_KOPY
ADVANCE (Gamma(1,0,29.41176,2)) ;интервал времени отказа в доступе к устройству
TRANSFER ,FN$tipeotk ;переход заявки к функции FN$tipeotk
tipeotk FUNCTION RN1,D3 ;дискретная фунцкия распеделения заявок отказа
0.75,M_OTK1/0.95,M_OTK2/1,M_OTK3 ;отказ 1-го устр-ва с вероятностью 0.75 или одновременно двух с
;вероятностью 0,2 ,или одновременно трёх, вероятность 0,05
M_OTK1 TRANSFER ,M_MET0 ;переход заявки по метке otkaz_ustr
M_OTK2 SPLIT 1,M_METK ;создание второй заявки-клона
TRANSFER ,M_MET0 ;переход двух заявок по метке otkaz_ustr
M_OTK3 SPLIT 2,M_METK ;создание второй и третий заявки-клонов
TRANSFER ,M_MET0 ;переход трёх заявок по метке otkaz_ustr


;___________Равновероятное распределение заявок отказа______________________________________________________________________
M_METK ASSIGN 15,1
M_MET0 TRANSFER 0.2,,M_OTKU1
TRANSFER 0.248,,M_OTKU2
TRANSFER 0.335,,M_OTKU3
TRANSFER 0.507,,M_OTKU4
TRANSFER ,M_OTKU5

;___________Oтказы усторйств________________________________________________________________________________________________
M_OTKU1 GATE FV U_K1UST1,M_MET0 ;проверка доступности отказываемое устройства, если устройство уже
;находится в отказе, то направление заявки на перераспределение отказа
FUNAVAIL U_K1UST1,RE,M_RESERVREL,10 ;отказ устройства K1U1, перевод заявки из устройства в резервное устройство
ADVANCE 35,15 ;время восстановления устройства K1U1
FAVAIL U_K1UST1 ;восстановление работоспособности устройства K1U1
TRANSFER ,M_otkaz ;переход заявки по метке otkaz для создания последующих отказов

M_OTKU2 GATE FV U_K1UST2,M_MET0 ;проверка доступности отказываемое устройства, если устройство уже
;находится в отказе, то направление заявки на перераспределение отказа
FUNAVAIL U_K1UST2,RE,M_RESERVREL,10 ;отказ устройства K1U2, перевод заявки из устройства в резервное устройство
ADVANCE 35,15 ;время восстановления устройства K1U2
FAVAIL U_K1UST2 ;восстановление работоспособности устройства K1U2
TRANSFER ,M_otkaz ;переход заявки по метке otkaz для создания последующих отказов

M_OTKU3 GATE FV U_K1UST3,M_MET0 ;проверка доступности отказываемое устройства, если устройство уже
;находится в отказе, то направление заявки на перераспределение отказа
FUNAVAIL U_K1UST3,RE,M_RESERVREL,10 ;отказ устройства K1U3, перевод заявки из устройства в резервное устройство
ADVANCE 35,15 ;время восстановления устройства K1U3
FAVAIL U_K1UST3 ;восстановление работоспособности устройства K1U3
TRANSFER ,M_otkaz ;переход заявки по метке otkaz для создания последующих отказов

M_OTKU4 GATE FV U_K2UST1,M_MET0 ;проверка доступности отказываемое устройства, если устройство уже
;находится в отказе, то направление заявки на перераспределение отказа
FUNAVAIL U_K2UST1,RE,M_RESERVREL,10 ;отказ устройства K2U1, перевод заявки из устройства в резервное устройство
ADVANCE 35,15 ;время восстановления устройства K2U1
FAVAIL U_K2UST1 ;восстановление работоспособности устройства K2U1
TRANSFER ,M_otkaz ;переход заявки по метке otkaz для создания последующих отказов

M_OTKU5 GATE FV U_K2UST2,M_MET0 ;проверка доступности отказываемое устройства, если устройство уже
;находится в отказе, то направление заявки на перераспределение отказа
FUNAVAIL U_K2UST2,RE,M_RESERVREL,10 ;отказ устройства K2U2, перевод заявки из устройства в резервное устройство
ADVANCE 35,15 ;время восстановления устройства K2U2
FAVAIL U_K2UST2 ;восстановление работоспособности устройства K2U2
TRANSFER ,M_otkaz ;переход заявки по метке otkaz для создания последующих отказов

;***********Блок резервных устройств*****************************************************************************************
;___________Переменные резервного устройства 1_______________________________________________________________________________
INITIAL X$RES_U1M,1 ;при старте системы первое резервное устройство находится в "горячем" состоянии
;у первого устройста 3-х канального узла (позиция 1)
INITIAL X$RES_U1S,1 ;переменная состояния устройства: 1 - "горячее",0 - "холодное"
INITIAL X$RES_U1I,0 ;переменная использования резеврного устройства: 1 - используется, 0 - свободен


;___________Переменные резервного устройства 2_______________________________________________________________________________
INITIAL X$RES_U2M,4 ;при старте системы второе резервное устройство находится в "горячем" состоянии
;у первого устройста 2-х канального узла (позиция 4)
INITIAL X$RES_U2S,1 ;переменная состояния устройства: 1 - "горячее",0 - "холодное"
INITIAL X$RES_U2I,0 ;переменная использования резеврного устройства: 1 - используется, 0 - свободен


;___________Переменные резервного устройства 3_______________________________________________________________________________
INITIAL X$RES_U3M,0 ;при старте системы тертье резервное устройство находится в "холодном" состоянии
;(позиция 0)
INITIAL X$RES_U3S,0 ;переменная состояния устройства: 1 - "горячее",0 - "холодное"
INITIAL X$RES_U3I,0 ;переменная использования резеврного устройства: 1 - используется, 0 - свободен


M_RESERVREL TEST NE P11,1,M_ES1 ;в этой и следующих 4-х строках проверяем из какого устройства пришла заявка
TEST NE P11,2,M_ES2 ;в зависимотси от этого будет осуществлён переход по метке с последующим
TEST NE P11,3,M_ES3 ;освобождением от прерванного осблуживания устройства,из которого прибыла заявка
TEST NE P11,4,M_ES4
TEST NE P11,5,M_ES5

M_ES1 RELEASE U_K1UST1 ;осовбождение от прерванного осблуживания устройства 1 канала 1
TRANSFER ,M_RESERV ;переход по метке M_RESERV
M_ES2 RELEASE U_K1UST2 ;осовбождение от прерванного осблуживания устройства 2 канала 1
TRANSFER ,M_RESERV ;переход по метке M_RESERV
M_ES3 RELEASE U_K1UST3 ;осовбождение от прерванного осблуживания устройства 3 канала 1
TRANSFER ,M_RESERV ;переход по метке M_RESERV
M_ES4 RELEASE U_K2UST1 ;осовбождение от прерванного осблуживания устройства 4 канала 2
TRANSFER ,M_RESERV ;переход по метке M_RESERV
M_ES5 RELEASE U_K2UST2 ;осовбождение от прерванного осблуживания устройства 5 канала 2
TRANSFER ,M_RESERV ;переход по метке M_RESERV

M_RESERV MARK ;метка остчёта времени "просиживания" заявки в резерве
M_TIME TEST NE P11,RES_U1M,M_U1RES ;после того,как заявка попала в блок резерва идёт серия проверок, находится ли
TEST NE P11,RES_U2M,M_U2RES ;одно из трёх резервных устройств в "горячем" состоянии к отказавшему устройству
TEST NE P11,RES_U3M,M_U3RES ;из которого и прибыла заявка, если да ,то заявка переходит по метке и осблуживается
;без ожидания откл./подкл. резервного устройства.
TEST NE RES_U1S,0,M_U1RESH ;серия проверок на "холодный" резерв, т.е. если имеется свободный резерв то заявка
TEST NE RES_U2S,0,M_U2RESH ;переходит в енго и ждёт время подключения резерва, затем обслуживается
TEST NE RES_U3S,0,M_U3RESH

TEST NE RES_U1I,0,M_U1RESF ;серия проверок на свободные резервы, это тот случай когда резерв отработал время
TEST NE RES_U1I,0,M_U2RESF ;восстановления устройства, но остался в "горячем" состоянии, ожидая следующего
TEST NE RES_U1I,0,M_U3RESF ;отказа в системе,найдя такой резер заявка переходит в него и ждёт время, равное
;вермени отключения+вермя подключения резервного устройства
TEST LE M1,P12,M_TIMEOUT ;если вермя ожидания обслуживания в резерве заявки истекло, то она напраляевтся
;по метке M_TIMEOUT, на распределение в кратчайшую очередь, илиже теряется
ADVANCE (Exponential(1,0,4))
TRANSFER ,M_TIME ;переход по метке, с последующим повторение проверок устройств резерва

M_TIMEOUT TEST G P11,3,M_QUZEL1
TEST NE P11,4,M_QUZEL2U1
TEST NE P11,5,M_QUZEL2U2

M_QUZEL1 TEST G K1QDLIN,2,bej ;M_QQUZEL1
TRANSFER ,M_LOST
M_QUZEL2U1 TEST G K2U1QDLIN,2,bej ;M_K2U1
TRANSFER ,M_LOST
M_QUZEL2U2 TEST G K2U2QDLIN,2,bej ;M_K2U2
TRANSFER ,M_LOST
bej TERMINATE
;Резервное устройство 1
M_U1RESF SAVEVALUE RES_U1M,0 ;снятие резерва номера устройства прошлого "горячего" состояния
ADVANCE (Exponential(1,0,2)) ;ожидание время отключения резервного устройства 1
SAVEVALUE RES_U1S,0 ;перевод резервного устройства 1 в "холодное" состояние
TRANSFER ,M_TIME ;переход по метке M_TIME
M_U1RESH ADVANCE (Exponential(1,0,2)) ;ожидание время подключения резервного устройства 1
SAVEVALUE RES_U1M,P11 ;назначение резервному устройства номера устройства нового "горячего" состояния
SAVEVALUE RES_U1S,1 ;перевод резервного устройства 1 в "горячее" состояние
SAVEVALUE RES_U1I,1 ;Перевод устройства в режим "используется"
TRANSFER ,M_TIME ;переход по метке M_TIME
M_U1RES QUEUE Q_RES1 ;поступление заявки в очередь резервного устройства 1
SEIZE U_RESERV1 ;признак занятости устройства резерва
DEPART Q_RES1 ;выход заявки из очереди резервного устройства 1 на обслуживание
TEST NE P11,1,M_ESL1 ;в этой и следующих 4-х строках проверяем из какого устройства пришла заявка
TEST NE P11,2,M_ESL2 ;в зависимотси от этого будет осуществлён переход по метке с последующей
TEST NE P11,3,M_ESL3 ;проверкой на истечение время восстановления отказавщего устройства, из которого
TEST NE P11,4,M_ESL4 ;и прибыла заявка
TEST NE P11,5,M_ESL5
M_U1RESAD ADVANCE P10 ;время обслуживания заявки равно её 10 параметру
RELEASE U_RESERV1 ;осовбождение резервного устройства 1
TRANSFER ,OUT_RES1 ;переход по метке OUT_RES1

M_ESL1 SAVEVALUE K1QDLIN-,1 ;отнимаем от длинны очереди общей очереди 3-х канального узла 1
GATE FV U_K1UST1,FN$M_RELRES1 ;проверка на доступность устройства 1, если доступно,т.е. время восстановления
TRANSFER ,M_U1RESAD ;устройства истекло, то перходим по метке M_RELRES1, в противном случае заявка
M_ESL2 SAVEVALUE K1QDLIN-,1 ;просто переходит по метке M_U1RESAD, дяльше идут аналогичные проверки
GATE FV U_K1UST2,FN$M_RELRES1 ;для оставшихся устройств,т.е. всего производится одна из пяти проверок,
TRANSFER ,M_U1RESAD ;в зависимости от поступившей заявки.
M_ESL3 SAVEVALUE K1QDLIN-,1 ;отнимаем от длинны очереди общей очереди 3-х канального узла 1
GATE FV U_K1UST3,FN$M_RELRES1 ;
TRANSFER ,M_U1RESAD ;
M_ESL4 SAVEVALUE K2U1QDLIN-,1 ;отнимаем от длинны очереди устройства 1 из 2-х канального узла 1
GATE FV U_K2UST1,FN$M_RELRES1 ;
TRANSFER ,M_U1RESAD ;
M_ESL5 SAVEVALUE K2U2QDLIN-,1 ;отнимаем от длинны очереди устройства 2 из 2-х канального узла 1
GATE FV U_K2UST2,FN$M_RELRES1 ;
TRANSFER ,M_U1RESAD ;
M_RELRES1 SAVEVALUE RES_U1I,0 ;Переводим резервное устройство 1 в режим "Свободно"
TRANSFER ,M_U1RESAD ;переход по метке M_U1RESAD

KILL_KOPY TERMINATE ;выход копии заявки отказов из СМО
OUT_RES1 TERMINATE ;выход заявки из СМО
OUT_OKU1 TERMINATE ;выход заявки из СМО
OUT_OKU2 TERMINATE ;выход заявки из СМО
M_LOST TERMINATE ;выход заявки из СМО



GENERATE 10000
TERMINATE 1
START 1 ;прогонов
*************************************************************************************************
Да, могут встретиться "мёртвые" блоки,парвда их не много и это те, которые рассчитаны на будущее увеличение кода например, когда дело пойдёт про резеврные устойства.
Дополнение ещё ок всему таблица параметров:
входной поток отказ восстан под/отк резерва устр1-3 устр4-5
закон распределения эксп. гамма равн. эксп. эксп. эксп.
параметры l=1 l=0,034; b=2 35±15 l=0,5 l=0,52 l=0,48



З.Ы. Помогите чем сможете, а то я уже :wall:

Автор: TEMENb 01.05.09, 20:44
очень очень очень много лишнего :yes:

Седня ночью накидаю примерный каркас твоей задачи.
Ато явно видно, что работа проделана колоссальная, а результат - тупик. Грех не помочь )

Автор: h4_botan 01.05.09, 23:12
Заранее спасибо ;)

Автор: TEMENb 02.05.09, 00:38
h4_botan, а это принципиально должны быть устройства 1-3? трехканальное МКУ не катит?

Arrrgh, Если появиться свободная минутка )

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

Добавлено
Каков период возникновения отказов?
Каково время на восстановление?
Цитата h4_botan @
Дополнение ещё ок всему таблица параметров:
входной поток отказ восстан под/отк резерва устр1-3 устр4-5
закон распределения эксп. гамма равн. эксп. эксп. эксп.
параметры l=1 l=0,034; b=2 35±15 l=0,5 l=0,52 l=0,48

не могу расшифровать )

Добавлено
суровая Q-схема получилась )
без 100 грам не разберешься :D

Добавлено
такс.
Цитата
RASP FUNCTION RN5,D3
.75,1/.95,2/1,3

INITIAL X1,1 ;ВОЗЛЕ ПЕРВОГО УСТРОЙСТВА
INITIAL X2,4 ;ВОЗЛЕ ЧЕТВЕРТОГО
INITIAL X3,0 ;В ГОРЯЧЕМ РЕЗЕРВЕ (НИ ВОЗЛЕ КАКОГО)
GENERATE (Exponential(1,0,1000))
transfer .58,SECTYP
QUEUE FIR
TEST L (F1+F2+F3),3
SELECT MIN 1,1,3,,F ;из за этого у устройства 1 загрузка будет выше чему у 2, а у 2 выше чем у 3. Это не принципиально?
SEIZE P1
DEPART FIR
ADVANCE (Exponential(2,0,520))
RELEASE P1
TERMINATE
SECTYP SELECT MIN 1,4,5,,Q ;ОПЯТЬ ТАКИ, К УСТРОЙСТВУ 4 БОЛЕЕ ПОВЫШЕННОЕ ВНИМАНИЕ, ЧЕМ К УСТРОЙСТУ 5
QUEUE P1
SEIZE P1
DEPART P1
ADVANCE (Exponential(3,0,480))
RELEASE P1
TERMINATE

GENERATE ,,,1
POVT ADVANCE (Gamma(4,0,34,2))
ASSIGN 1,(FN$RASP)
SPLIT P1,NEX
TRANSFER ,POVT
NEX TERMINATE


GENERATE (60#60#1000)
TERMINATE 1

start 1

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

З.Ы.: время в микросекундах.
З.З.Ы: проблема неравномерного распредиления по устройствам решается конструкцией типа
Цитата
SELECT MIN 1,1,CREG,,Q ;------;находим очередь с минимальной длинной и ложим ее номер в первый параметр
ASSIGN 2,(((CREG#RN2)\1000)+1) ;во второй параметр генерируем число в интервало от 1 до CREG
MET1 ASSIGN 2,((P2@CREG)+1) ;------;во второй параметр положить значение (остаток от деления второго параметра на CREG плюс единица) (увеличиваем второй параметр на 1, если он становится больше CREG, то присваиваем ему единицу)
TEST E Q*1,Q*2,MET1 ;Если длинна очереди, номер которой записан в первом параметре равна длинне очереди, номер которой записан во втором параметре, дальше, иначе на метку
QUEUE P2 ;занять очередь к стойке

Автор: Doggy_Style 02.05.09, 07:28
Помогите срочно. Мне завтра сдавать курсовую в GPSS/PC, а я профан в этом.
Задание такое:
В узел коммутации сообщений, состоящий из входного буфера, процессора, двух исходящих буферов и двух выходных линий, поступают сообщения с двух направлений. Сообщения с одного направления поступают во входной буфер, обрабатываются в процессоре, буферизуются в выходном буфере первой линии и передаются по выходной линии. Сообщения со второго направления обрабатываются аналогично, но передаются по второй выходной линии. Применяемый метод контроля потоков требует одновременного присутствия в системе не более трех сообщений на каждом направлении. Сообщения поступают через интервалы 15±7 мс. Время обработки в процессоре равно 7 мс на сообщение, время передачи по выходной линии равно 15+5 мс. Если сообщение поступает при наличии трех сообщений в направлении, то оно получает отказ.
Смоделировать работу узла коммутации в течение 10 с. Определить загрузки устройств и вероятность отказа в обслуживании из-за переполнения буфера направления. Определить изменения в функции распределения времени передачи при снятии ограничений, вносимых методом контроля потоков.

Наткнулся в инете на это ( типа решение моей задачи )

SIMULATE
1 GENERATE 15,7 //создать транзакт
3 TEST LE Q$OCH2,3,XXX //проверить емкость очереди 2
5 LOGIC S FLAG1 //открыть клапан а
7 XXX TEST LE Q$OCH3,3,YYY //проверить емкость очереди 3
9 LOGIC S FLAG2 //открыть клапан b
11 YYY GATE LS FLAG1,OTKAZ //если клапан а открыт
13 GATE LS FLAG2,OTKAZ //если клапан b открыт
15 QUEUE OCH1 //встать в очередь 1
17 SEIZE CPU //занять устройство процессор
19 DEPART OCH1 //выйти из очереди 1
21 ADVANCE 7 //задержаться на 7мс.
23 RELEASE CPU //освободить процессор
25 TRANSFER .5,LINE1,LINE2 //перейти к одной из линий
27 LINE1 QUEUE OCH2 //встать в очередь 2
29 SEIZE OUT1 //занять выходную линию 1
31 DEPART OCH2 //выйти из очереди 2
33 ADVANCE 15,5 //задержаться на время
35 RELEASE OUT1 //освободить линию 1
37 LOGIC R FLAG1 //закрыть клапан а
39 LOGIC R FLAG2 //закрыть клапан b
41 GATE LS FLAG1,ZZZ //если клапан а открыт
43 LINE2 QUEUE OCH3 //встать в очередь 3
45 SEIZE OUT2 //занять выходную линию 2
47 DEPART OCH3 //выйти из очереди 3
49 ADVANCE 15,5 //задержаться на время
51 RELEASE OUT2 //освободить линию 1
53 LOGIC R FLAG1 //закрыть клапан а
55 LOGIC R FLAG2 //закрыть клапан b
57 GATE LS FLAG1,ZZZ //если клапан а открыт
59 OTKAZ GATE LS FLAG1,WWW //если клапан а открыт
61 QUEUE OCH1 //встать в очередь 1
63 SEIZE CPU //занять процессор
65 DEPART OCH1 //выйти из очереди 1
67 ADVANCE 7 //задержаться на 7 мс.
69 RELEASE CPU //освободить процессор
71 QUEUE OCH2 //встать в очередь 2
73 SEIZE OUT1 //занять выходную линию 1
75 DEPART OCH2 //выйти из очереди 2
77 ADVANCE 15,5 //задержаться на время
79 RELEASE OUT1 //освободить линию 1
81 LOGIC R FLAG1 //закрыть клапан а
83 LOGIC R FLAG2 //закрыть клапан b
85 GATE LS FLAG1,ZZZ //если клапан а открыт
87 WWW QUEUE OCH1 //встать в очередь 1
89 SEIZE CPU //занять процессор
91 DEPART OCH1 //выйти из очереди 1
93 ADVANCE 7 //задержаться на 7мс.
95 RELEASE CPU //освободить процессор
97 QUEUE OCH3 //встать в очередь 3
99 SEIZE OUT2 //занять выходную линию 2
101 DEPART OCH3 //выйти из очереди 3
103 ADVANCE 15,5 //задержаться на время
105 RELEASE OUT2 //освободить линию 2
107 LOGIC R FLAG1 //закрыть клапан а
109 LOGIC R FLAG2 //закрыть клапан b
111 GATE LS FLAG2,ZZZ //если клапан b открыт
113 ZZZ TERMINATE //уничтожить транзакт
115 GENERATE 60000 //специальный блок для
117 TERMINATE 1 //прогона модели на время
START 1

Но в программе не работает - выдает море ошибок.
ПЛЗ ХЕЛП.

Автор: h4_botan 02.05.09, 10:55
TEMENb
Давай короче я скину тебе на мыло (скинь мне его в приват или тут) там у меня и схема есть, да и таблича задания будет понятней). Правда пока ты пишешь, половина непонятно :)))
А распределение между устройствами равновероятно, т.е. первый трёх канальный узел, очередь одна на всех, три устройства и заявки типа равноверотно на обслуживание между ними идут, во втором узле заявки идут равновероятно между 2 устройствами, у каждого из них своя очередь.
На счёт непоняток как уходят в 4 5
(эт ты наверн про отказы) Короче когда возникает отказ заявка проверят какое из устройств доступно,а потом чтобы длина очереди не была больше 2, чтобы пойти в очередь к нормально функционирующему устройству.
Отказ возникает по гамма закону, L=0.034 ,b=2 .ВОсстановление идёт по равномерному 35+-15

Автор: TEMENb 02.05.09, 11:50
Doggy_Style, 20$ и программа моментально оказывается на вашем ПС. +10$ к програмке появляются q-схема, структурная схема и блоксхема в символике GPSS.

Тут палка о двух концах, или делайте сами или платите, что б за вас делали.

h4_botan, моя аська у меня в подписи.

Автор: TEMENb 02.05.09, 15:59
Цитата Arrrgh @
Я пишу на GPSSH

а я на нем не пишу :no-sad:

Автор: Doggy_Style 02.05.09, 17:28
TEMENb - ты тупой? я прошу помощи как избавиться от ошибок а не заново переписывать программу.

Автор: TEMENb 02.05.09, 17:33
Doggy_Style, походу это ты тупой. Кроме того что мозг не шурупает самому написать, так ты и в чужом готовом мелкие ошибки исправить не можешь.
Тебе тут никто ничего не должен. Хочешь - плати, а не хочешь вали [CENSORED]!
Бить неучей рублем!

Добавлено
Arrrgh, дело в том что весь код
Цитата Arrrgh @
L1 TEST E L1,1,OT проверка если не проходит то идет обратно на выбор линии
QUEUE LNB
ENTER BAG
DEPART LNB
ADVANCE 1
LEAVE BAG
TERMINATE 1
OT TRANSFER ,L2
L2 TEST E L2,2,OTH проверка если не проходит то идет обратно на выбор линии
QUEUE LNC
ENTER BAG
DEPART LNC
ADVANCE 1
LEAVE BAG
TERMINATE 1
OTH TRANSFER ,L3
L3 TEST E L3,3,OTHE проверка если не проходит то идет обратно на выбор линии
QUEUE LND
ENTER BAG
DEPART LND
ADVANCE 1
LEAVE BAG
TERMINATE 1
OTHE TRANSFER ,L4
L4 TEST E L4,4,L1 проверка если не проходит то идет обратно на выбор линии
QUEUE LNE
ENTER BAG
DEPART LNE
ADVANCE 1
LEAVE BAG

какоето непойми шо )
почему его не заменить на

Цитата
QUEUE LNB
ENTER lenta
DEPART LNB
ADVANCE 1
LEAVE lenta
TERMINATE 1


предварительно описав устройство Lenta как МКУ с четырьмя каналами?
Если я чего то недопонял - поправь :rolleyes:

Автор: Doggy_Style 03.05.09, 01:06
Слышь мудлон варежку хлопни! я тебя лично не о чем не просил. не хочешь не помогай. А если хочешь пообщаться скажи я дам номер позвонишь выясним отношения.

Автор: TEMENb 03.05.09, 01:12
Doggy_Style, к тебе уже выехала бригада. сейчас тебя зачистят :D

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

Автор: NoVa 06.05.09, 04:35
Ребята помогите решить задачу, сессия уже почти на шее, очень нужна помощь !

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

Добрые умы помогите пожалуйста

Автор: TEMENb 06.05.09, 04:47
стоимость решения+коментарии+пояснения - 15$
Стоимость помощи - бэсплатно, но нужен исходный код, который вы писали сами.

Автор: inna 07.05.09, 07:18
Спасибо за ответ! но могли ли вы сказать как применить распределение именно к памяти? и как сделать увеличение на 20 % при повторном обращении?
"Характер распределения емкости памяти вероятностный для 1 потока: зависит от длины запроса (1 единица длины – 1 место в памяти). Распределение длины – равномерное от 1 до 10. При каждом повторном входе в память (фаза S2,1) выделяется на 20% больше места в памяти. При нехватке памяти – отказ в обслуживании."

Автор: Vanessa 07.05.09, 10:42
Здравствуйте, помогите пожалуйста решить задачки:

Магистраль передачи данных состоит из двух кана­лов (основного и резервного) и общего накопителя. При нормаль­ной работе сообщения передаются по основному каналу за 7 ± 3 с. В основном канале происходят сбои через интервалы времени 200 ± 35 с. Если сбой происходит во время передачи, то за 2 с запус­кается запасной канал, который передает прерванное сообщение с самого начала. Восстановление основного канала занимает 23 ± 7 с. После восстановления резервный канал выключается и основной канал продолжает работу с очередного сообщения. Сообщения по­ступают через 9 ± 4 с. и остаются в накопителе до окончания пере­дачи. В случае сбоя передаваемое сообщение передается повторно по запасному каналу.
Смоделировать работу магистрали передачи данных в течение 1 ч. Определить загрузку запасного канала, частоту отказов канала и число прерванных сообщений. Определить функцию распреде­ления времени передачи сообщений по магистрали.

К ЭВМ подключено четыре терминала, с которых осуществляется решение задач. По команде с терминала выполня­ют операции редактирования, трансляции, планирования и реше­ния. Причем, если хоть один терминал выполняет планирование, остальные вынуждены простаивать из-за нехватки оперативной памяти. Если два терминала выдают требование на решение, то ос­тавшиеся два простаивают, и если работают три терминала, вы­дающих задания на трансляцию, то оставшийся терминал блоки­руется. Интенсивности поступления задач различных типов рав­ны. Задачи одного типа от одного терминала поступают через экс­поненциально распределенные интервалы времени со средним значением 160 с. Выполнение любой операции длится 10 с.
Смоделировать работу ЭВМ в течение 4 ч. Определить загрузку процессора, вероятности простоя терминалов и частоту одновре­менного выполнения трансляции с трех терминалов.

Автор: СоучастнеГ 07.05.09, 13:30
Привет! У меня возник вопрос.
Построить программу модели процесса прохождения 70 заявок, поступающих с интервалом времени 25±4 единицы. На предварительную обработку заявки затрачивается 4±1 единиц времени. Процесс обслуживания занимает 4±2 единиц времени. Все процессы подчинены экспоненциальному закону.

Так то задача проста, но как понять момент - "Все процессы подчинены экспоненциальному закону"? и главное как записать это?

Автор: stas-perm 07.05.09, 15:04
Всем привет! Возможно кто подскажет, не могу доделать курсач из-за одной мелочи)) Короче, есть готовые полностью детали, а есть недоделанные. Гтовые идут на дальнейшее обслуживание, а недоделанные с указанием в первом параметре их готовности в процентном соотношении (например, готова на 50 % - в перовм параметре записывается 50) отправляются в дополнительную очередь. Ну и вот, приходит новая неготовая деталька на метку, например, у нее в P1 40. Начинается проверка предыдущих поступивших деталей, хранящихся в дополнительной очереди. Если есть в очереди деталька с P1 = 100 - 40, они объединяются (ASSEMBLE 2), и как полная деталь идут на дальнейшую обработку. Если дополнение из дополнительной очереди нельзя сделать, эта деталька кидается в эту же дополнительную очередь.
Может, кто поможет)) Хотя бы подсказкой метода)))

Автор: TEMENb 07.05.09, 15:45
СоучастнеГ, задание ваше - откровенная туфта. Все величины у вас заданы равномерным законом.
Цитата
25±4
средним и отклонением характеризуется только равномерный закон!
Если бы у вас условие звучало вот так:
Цитата
Построить программу модели процесса прохождения 70 заявок, поступающих с интервалом времени 25 единицы. На предварительную обработку заявки затрачивается 4 единиц времени. Процесс обслуживания занимает 4 единиц времени. Все процессы подчинены экспоненциальному закону.
то тогда разговор другой. например поступление с интервалом времени в 25 с экспоненциальным распредилением будет выглядеть вот так:
Цитата
GENERATE (Exponential(1,0,25))
Более подробно - читайте хелп. он конечно на английском, но как говориться без труда..
____________________

inna, я не могу дать вам 100% правильный ответ, т.к. я не вижу условия задачи.
Для начала было бы весьма интересно узнать, чем у вас выражена память? Если это очередь, то решение будет одно, если МКУ - то совсем другое. К мтоу же я так понял, память у вас дискретна. поэтому 20% (0.20) по отношению к памяти представляется сложно.. Округлять надо. Тем более если от 1 до 10.. например имея память 1, прибавив 20% и округливо получаем все ту же единицу..

З.Ы.: Для МКУ
Цитата
enter qqq,3 ;занять в мку qqq 3 ячейки памяти
...
leave qqq,3 ;освободитьв мку qqq 3 ячейки памяти

можно ставить числа, выражения и СЧА.
____________________

Цитата stas-perm @
Всем привет! Возможно кто подскажет, не могу доделать курсач из-за одной мелочи)) Короче, есть готовые полностью детали, а есть недоделанные. Гтовые идут на дальнейшее обслуживание, а недоделанные с указанием в первом параметре их готовности в процентном соотношении (например, готова на 50 % - в перовм параметре записывается 50) отправляются в дополнительную очередь. Ну и вот, приходит новая неготовая деталька на метку, например, у нее в P1 40. Начинается проверка предыдущих поступивших деталей, хранящихся в дополнительной очереди. Если есть в очереди деталька с P1 = 100 - 40, они объединяются (ASSEMBLE 2), и как полная деталь идут на дальнейшую обработку. Если дополнение из дополнительной очереди нельзя сделать, эта деталька кидается в эту же дополнительную очередь.

полный текст в студию.
____________________

Цитата Vanessa @
Магистраль передачи данных состоит из двух кана­лов (основного и резервного) и общего накопителя. При нормаль­ной работе сообщения передаются по основному каналу за 7 ± 3 с. В основном канале происходят сбои через интервалы времени 200 ± 35 с. Если сбой происходит во время передачи, то за 2 с запус­кается запасной канал, который передает прерванное сообщение с самого начала. Восстановление основного канала занимает 23 ± 7 с. После восстановления резервный канал выключается и основной канал продолжает работу с очередного сообщения. Сообщения по­ступают через 9 ± 4 с. и остаются в накопителе до окончания пере­дачи. В случае сбоя передаваемое сообщение передается повторно по запасному каналу.
Смоделировать работу магистрали передачи данных в течение 1 ч. Определить загрузку запасного канала, частоту отказов канала и число прерванных сообщений. Определить функцию распреде­ления времени передачи сообщений по магистрали.

К ЭВМ подключено четыре терминала, с которых осуществляется решение задач. По команде с терминала выполня­ют операции редактирования, трансляции, планирования и реше­ния. Причем, если хоть один терминал выполняет планирование, остальные вынуждены простаивать из-за нехватки оперативной памяти. Если два терминала выдают требование на решение, то ос­тавшиеся два простаивают, и если работают три терминала, вы­дающих задания на трансляцию, то оставшийся терминал блоки­руется. Интенсивности поступления задач различных типов рав­ны. Задачи одного типа от одного терминала поступают через экс­поненциально распределенные интервалы времени со средним значением 160 с. Выполнение любой операции длится 10 с.
Смоделировать работу ЭВМ в течение 4 ч. Определить загрузку процессора, вероятности простоя терминалов и частоту одновре­менного выполнения трансляции с трех терминалов.


30$ и 20$

Автор: СоучастнеГ 07.05.09, 17:59
Спасибо! :)

Автор: Arrrgh 08.05.09, 08:49
Доброго времени суток

вот вроде подправил свою задачу но не доконца уверен что все правильно проверьте пожалуйста
SIMULATE
CHECK STORAGE 2
A STORAGE 4
B STORAGE 4
C STORAGE 4
D STORAGE 4
OBR STORAGE 2
BAG STORAGE 8
INTEGER &I

* МОДУЛЬ ИСПОЛНЕНИЯ

GENERATE 1,1 поступление багажа
RETEST QUEUE CHECK организация очереди контроля
ENTER OBR
DEPART CHECK
ADVANCE 1,1
LEAVE OBR
TRANSFER .050,,TESTER 5% багажа идет на дополнительную проверку

* TESTER

TESTER QUEUE MTEST организация очереди на дополнителую проверку
SEIZE TESTER
DEPART MTEST
ADVANCE 2,1
RELEASE TESTER
TRANSFER ,RETEST возврат на общий контроль

* Разделение на линии


FL TEST E A,1,OT проверка если не проходит то идет обратно на выбор линии
QUEUE LNB
ENTER BAG
DEPART LNB
ADVANCE 1
LEAVE BAG
TERMINATE 1
OT TRANSFER ,SL
SL TEST E B,2,OTH проверка если не проходит то идет обратно на выбор линии
QUEUE LNC
ENTER BAG
DEPART LNC
ADVANCE 1
LEAVE BAG
TERMINATE 1
OTH TRANSFER ,TL
TL TEST E C,3,OTHE проверка если не проходит то идет обратно на выбор линии
QUEUE LND
ENTER BAG
DEPART LND
ADVANCE 1
LEAVE BAG
TERMINATE 1
OTHE TRANSFER ,FOL
FOL TEST E D,4,FL проверка если не проходит то идет обратно на выбор линии
QUEUE LNE
ENTER BAG
DEPART LNE
ADVANCE 1
LEAVE BAG
TERMINATE 1




* ПРОВЕРКА

DO &I=1,35,1
START 60
CLEAR
ENDDO
END

и еще вопрос когда запускаю процесс моделирования возникает ошибка: ERROR NUMBER 411 - Out of COMMON: Add/change REALLOCATE Stmt? See release notes
как от нее избавиться?

заранее спасибо

Автор: inna 08.05.09, 09:59
Здравствуйте! привожу задание и текст программы:
"Требуется разработать и исследовать модели системы. Тип модели - Q-схема. Модели транзактные.
Система состоит из устройств S1, S3, S4, памяти S2 (фаза выделения памяти – S2,1, фаза освобождения памяти – S2,2, S2,3).
Внешняя среда представлена источником запросов (узел S0), приемником обслуженных запросов (узел S7).
Число типов потоков запросов Q – 2 (40% заявок первого типа). Потоки различаются параметрами законов поступления и обслуживания. Закон поступления запросов – треугольный и равномерный. Законы обслуживания 1 и 2 типов соответственно – гамма и произвольный.
Характер распределения емкости памяти вероятностный для 1 потока: зависит от длины запроса (1 единица длины – 1 место в памяти). Распределение длины – равномерное от 1 до 10. При каждом повторном входе в память (фаза S2,1) выделяется на 20% больше места в памяти. При нехватке памяти – отказ в обслуживании. Характер распределения емкости памяти для второго потока – 1 запрос – 1 единица."
текст программы (для одгоно потока заявок):
b_1 STORAGE 2
b_2 STORAGE 10 ; multichanel node - facility N 2
b_3 STORAGE 2
INITIAL X$Otkaz,0
INITIAL X$OB,1
KOL VARIABLE 10#rn1 \\ генерация равномерного распределения от 1 до 10 (так ли это ?)
KOL1 VARIABLE 1.2#X$OB \\ увеличение объема выделяемой памяти на 20 % (так ли это ?)

*****************************************
GENERATE (TRIANGULAR(1,140,405,275))
queue U_system
queue p1_U_system

queue w_b_1
queue p1_w_b_1
queue u_b_1
queue p1_u_b_1
ENTER b_1
depart w_b_1
depart p1_w_b_1
ADVANCE 20,10
LEAVE b_1
depart u_b_1
depart p1_u_b_1
savevalue OB, V$KOL \\ присваиваем сохраняемой величине OB(объем выделяемой памяти) значение пер-й KOL
Metka1
GATE SNF b_2,Lab_term1
ENTER b_2, X$OB
queue w_b_3
queue p1_w_b_3
queue u_b_3
queue p1_u_b_3
ENTER b_3
depart w_b_3
depart p1_w_b_3
ADVANCE 20,10
LEAVE b_3
depart u_b_3
depart p1_u_b_3
TRANSFER .4,,Metka2
queue w_b_4
queue p1_w_b_4
queue u_b_4
queue p1_u_b_4
SEIZE b_4
depart w_b_4
depart p1_w_b_4
ADVANCE 41.7,20.8
RELEASE b_4
depart u_b_4
depart p1_u_b_4
LEAVE b_2, X$OB
savevalue OB, V$KOL1 \\ увеличиваем объем памяти на 20%
TRANSFER ,Metka1

depart U_system
depart p1_U_system

Metka2 LEAVE b_2,X$OB
TERMINATE 1
Lab_term1 savevalue Otkaz+,1
TERMINATE 1

Пожалуйста помогите правильно сделать это выделение памяти!!! :wall: не хочет работать :(

Добавлено
И еще. подскажите пожалуйста, как сделать гамма распределение(в advance)

Автор: Vanessa 08.05.09, 14:58
TEMENb Хорошо! Сделай, пожалуйста, пока только вторую за $20, попозже попрошу первую. Напиши куда прислать деньги! Только мне нужно в понедельник уже сдавать, сдалай пожалуйста за выходные!

Автор: TEMENb 08.05.09, 17:14
Vanessa,уже готово. напишите мне в аську. 400852874.

Автор: Eugen 08.05.09, 18:27
нужно избегать простых названий A,B,C,D..AC,AB,..CH,..FL и т.п. это может быть зарезервированное или недопустимое слово в gpss
Arrrgh вот Вы спрашаваете про свою задачу 2ю недели, и даже не привели полного текста условий. Какая может быть помощь???

Автор: Arrrgh 11.05.09, 14:50
Eugen sorry условие по запарке забыл написать. Там не задача а описательный процесс системы тарнспортировки багажа в аэропорту. необходимо было описать следующее: В аэропорту на ленту транспортера поступает багаж где он проходит проверку, 5% не проходят проверку и идут на дополнительную проверку после чего возвращаются обратно на ленту, после проверки багаж разделяется на четыре разных погрузочных ленты.

Автор: Arrrgh 12.05.09, 07:28
TEMENb Заинтересовала ваша идея:
Цитата
QUEUE LNB
ENTER lenta
DEPART LNB
ADVANCE 1
LEAVE lenta
TERMINATE 1


предварительно описав устройство Lenta как МКУ с четырьмя каналами.

Как это реализуется(я про описание Lenta как МКУ с четырьмя каналами) ?

Автор: TEMENb 12.05.09, 10:40
Arrrgh, все четыре ленты будут выглядеть как одно устройство. собственно многоканальное устройство.
Цитата
lenta storage 4
generate 1
QUEUE LNB
ENTER lenta
DEPART LNB
ADVANCE 4
LEAVE lenta
TERMINATE 1

вот как то так
в один момент времени в устройстве lenta может находится одновременно 4 транзакта.

Автор: Arrrgh 12.05.09, 15:51
TEMENb, спасибо приму к сведению

Автор: Eugen 12.05.09, 15:59
Цитата TEMENb @
Цитата
lenta storage 4
generate 1
QUEUE LNB
ENTER lenta
DEPART LNB
ADVANCE 4
LEAVE lenta
TERMINATE 1

вот как то так
в один момент времени в устройстве lenta может находится одновременно 4 транзакта.

Нормально. Этот кусок задерживает багаж, до иомента освобождения одной из лент.

Чтобы собрать статистику для отдельных лент, напиши:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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

все по 10$ для ускорения

Автор: TEMENb 12.05.09, 16:11
Цитата 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

Вот как то так =)

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

заменяестя на
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SELECT MIN LEN,1,4,,F


Добавлено
ЗерГуд!
Цитата TEMENb @
ASSIGN LEN,RN1
POVT ASSIGN LEN,((P$LEN@4)+1)
TEST xxx POVT

Автор: NoVa 12.05.09, 17:59
Ребята помогите решить задачу, сессия уже почти на шее, очень нужна помощь !

Условие: К 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

Автор: TEMENb 12.05.09, 18:14
Цитата Eugen @
Цитата TEMENb @
POVT ASSIGN LEN,((P$LEN@4)+1)
TEST E F*LEN,0,POVT

заменяестя на
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SELECT MIN LEN,1,4,,F

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

Автор: Arrrgh 13.05.09, 07:39
Eugen,TEMENb спасибо за помощь. А если багаж при разделении на ленты идет на разные рейсы по каждой ленте?

Автор: TEMENb 13.05.09, 07:53
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
............

Автор: Eugen 13.05.09, 15:40
Цитата TEMENb @
не, не заменяется. в этом вся соль.
селект выберет первый по списку.

Точно выберет первое свободное устройство :whistle:

Автор: Blond 14.05.09, 05:09
Помогите несчастной блондинке :( . Не работает ссылка на 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

Автор: tigreg 14.05.09, 09:03
Привет! Адекватно ли мое решение поставленной задаче? :)
Задача:
На 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

Спасибо!

Автор: TEMENb 14.05.09, 09:11
tigreg, впринципе похоже на правильное, и очень даже симпатично использованы фукнции (респект))), только лень разбираться зачем вы использовали пользовательские списки.
почему вам не сделать еще одну функцию, которая будет попросту задавать приоритеть транзакта? ну а дальше очередь и мку. и никакхи СП ненадо.

Автор: tigreg 14.05.09, 11:24
: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

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

напиши так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    transfer .5,kp1,out
    KP2 RELEASE kp
    kp1 seize kp
    ...
    generate 600,300
    funavail kp,re,KP2

Автор: h4_jester 14.05.09, 14:51
HELP!
Формирование размера пакета
ASSIGN 1,(Gamma(1,0,769.23,2))
Необходимо сделать разбиение по след. принципу:
Пакеты имеют переменный размер в знаках и при передаче разбиваются на фрагменты: пакеты размером до 1000 знаков – на фрагменты по 200; от 1000 до 1800 – по 300; сверх 1800 – по 500. Последний фрагмент разбиения содержит остаточное количество знаков.

Автор: Figaro-serg 14.05.09, 21:31
Подскажите пожалуйста (немогу пересчитать исходные данные) Задача: На станцию технического обслуживания автомобилей (СТО) поступают в смену (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

Заранее благодарю!

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

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

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

учи мат часть. В отчете в таблице FACILITY колонка AVT.TIME.

Автор: RazorM 17.05.09, 07:07
Здравствуйте. У меня есть вопрос. Если в моей модели есть 3 очереди, с номерами 1,2 и 3. Как выбрать минимальную из 2х - 1й и 3й? В Select нужно вводить диапазон, тогда получается, что захватывается и 2я очередь, а этого не нужно - SELECT MIN 3,1,3,,Q?

Автор: TEMENb 17.05.09, 07:24
RazorM, ответов на ваш вопрос как минимум два
1. можно сравнить
Цитата
TEST L Q1,Q3,MET1
ASSIGN 3,1
TRAMSFER ,MET2
ASSIGN 3,3
MET1 ................


можно чуть короче но мудреней
Цитата
ASSIGN 3,((Q1<Q3)+(Q1>=Q3)#3)


впринципе такими сравнениями можно сравнить любое колличество очередей, только размер кода этих сравнений растет в геометрической прогрессии от колличества очередей ))

2. можно обозвать одну очередь двумя именами

Цитата
queue 1
queue 11
seize 1
depart 1
depart 11
advance 1
release 1
...
queue 2
seize 2
depart 2
advance 1
release 2
...
queue 3
queue 12
seize 3
depart 3
depart 12
advance 1
release 3
...
SELECT MIN 3,11,12,,Q

ну а далее действовать либо от этих значений, либо преобразовать их
Цитата
ASSIGN 3,((p3=11)#1+(p3=12)#3)

Автор: tigreg 17.05.09, 10:11
Привет!
Пытаюсь создать матрицу состоящую из одной строки и присвоить ей заданные значения:
bit0 matrix ,1,2
initial MX1(1,1),1
Но GPSS выдает ошибку:
Reference to a non-existent Matrix entity.
Что я делаю не правильно?
Спасибо!

Автор: Soldat_13 17.05.09, 10:28
Здравствуйте, помогите пожалуйста решить задачку:

На обработку в вычислительную систему поступают задания с интенсивностью λ=4 (заданий в секунду). Задания обрабатываются одним из 5-ти компьютеров. Время обработки имеет интенсивность μ=1 (заданий в секунду). Все потоки, протекающие в системе, простейшие пуассоновские. При имитационном моделировании задайте количество обслуженных заявок равным 2000.

Заранее благодарен.

Автор: TEMENb 17.05.09, 10:38
Цитата tigreg @
bit0 matrix ,1,2
initial MX1(1,1),1

обратите внимание, определили вы мартицу с символьным именем bit0 , а обращаетесь к матрице с числовым именем 1. нужно обращаться либо по символьному имени, либо задать соответствие между числовым и символьным именем.
Цитата tigreg @
bit0 equ 1
bit0 matrix ,1,2
initial MX1(1,1),1

Автор: tigreg 17.05.09, 10:51
:D ура! спасибо, TEMENb!!!

Автор: Angellina 17.05.09, 17:38
Помогите пожалуйста!!
В курсаче есть следующий момент

Объект моделирования – экспертная система, пополняемая записями экспертов. В начальный момент времени вероятность выдачи правильного ответа по запросу каждого типа равна нулю. По проектным прогнозам, в связи с работой экспертов по пополнению системы, со временем эксплуатации системы вероятность выдачи правильного результата возрастает. С остаточной вероятностью для каждого типа запроса выдается неверный результат. Выведены функции зависимости для вычисления вероятности выдачи правильного ответа.

Вопрос следующий: можно ли при распределении по типу заявки (ответа (верный, неверный)) в операторе FUNCTION вероятность задавать не числовым значением, а через имя переменной?

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    VER1 FVARIABLE   0
     
    ;или INITIAL X$VER1,0
     
     MARK
     
    tipA FUNCTION RN1 D2
    FV$VER1,T_A1/1,T_A2
     
    ;или X$VER1,T_A1/1,T_A2
     
             GENERATE (Exponential(1,0,14.286))
     SAVEVALUE   VER1,(-3#10^(-24)#M1^6+3#10^(-19)#M1^5-2#10^(-14)#M1^4+4#10^(-10)#M1^3-5#10^(-6)#M1^2+0.0317#M1+11.3)
     TRANSFER ,FN$tipA
     
    ...
     
    T_A1 ASSIGN 10,11
     TRANSFER ,TA_SERV
     
    T_A2 ASSIGN 10,12
     TRANSFER ,TA_SERV
     
    ...


В обоих случаях у меня выдает ошибку

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ;Для FVARIABLE:
    Line 17, Col 1. Expecting a numeric value.
    FV$VER1,T_A1/1,T_A2
     
    ;Для INITIAL:
    Line 17, Col 1. Invalid list sequence number.
    X$VER1,T_A1/1,T_A2


Если реализация через FUNCTION невозможна, то каким образом можно реализовать этот момент???

Автор: RazorM 17.05.09, 19:09
TEMENb, спасибо. Про первый вариант че-то не подумал). Есть еще одна загвоздка: нужно определить количество транзактов в этой минимальной очереди, и если их число больше 3х, идет переход к выходу из модели. Делаю что-то типа такого TEST G Q$P3 3 EXIT. В отчете получается так, что в блок, следующий после этого TEST не попадает ВООБЩЕ ни один транзакт (0). Если же пишу TEST G QP3 3 EXIT или TEST G Q11 3 EXIT , то симуляция зацикливается.

Автор: TEMENb 17.05.09, 19:26
если ты хочешь обратиться к очереди, номер которой записан в третьем параметре транзакта, то косвенная адресация тебе в помощь
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TEST G Q*3,3,term

называть метку словом exit настоятельно нерекомендую.. есть у меня суеверия на сей щет ;)

Добавлено
Angellina, ну почему прям таки невозможна?
просто вы недостаточно знаете про функции. только и всего )
Цитата
Оператор определения FUNCTION
Описание Имя функции должно записываться в поле метки оператора описания FUNCTION. Поле А оператора FUNCTION должно содержать аргумент независимую переменную функции. Аргументом может быть любой из стандартных числовых атрибутов, за исключением матрицы ячеек; в качестве аргумента функции может быть использовано и значение любой другой функции. Если в качестве аргумента функции используется случайное число RNj, то значениями аргумента будут числа, равномерно распределенные в интервале 0<=RNj<1. Следует отметить, что во всех других случаях использование случайных чисел RNj дает значение в диапазоне 0<=RNj<999. Запись в поле В определяет тип и число точек функции (число пар значений X[i] и Y[i]). Например, в выражении Cn определяет тип, а n - число точек функции. Ниже перечислены функции каждого типа:
непрерывная числовая - С;
дискретная числовая - D;
табличная числовая - L;
дискретная атрибутивная - E;
табличная атрибутивная - М.


Добавлено
Если кто знает, как задавать табличную числовую или табличную атрибутивную - просвятите неуча =)

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

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

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

учи мат часть. В отчете в таблице FACILITY колонка AVT.TIME.

TEMENb, спасибо за ответ! Правда все это я и так вроде бы знал... :)
Извиняюсь, немного ошибся: не "кол-во машин/минуту", а "кол-во минут/машину". Поясню, у меня не стоит задача перевести из часов в минуты, сантичасы и т.д. А задача в том чтобы выразить за сколько будет обслужена одна машина! Как выяснилось я не знаю как работать с интервалами :(

Напомню задачу: "На станцию технического обслуживания автомобилей (СТО) поступают в смену (8 часов) 50±10 машин. На станции работают 4 бригады. Каждая бригада обслуживает за смену 10±3 автомобиля. На стоянке перед СТО могут ожидать обслуживания 5 машин."

Еще раз, поводу среднего значения... Даже не знаю как правильнее сформулировать вопрос, что бы услышать все же в ответ то, что хочу выяснить. У меня при рассчете двумя разными способами получается разное значение среднего времени. Например: если учесть что, рабочая смена длится 480 минут, а за смену возможно отремонтировать 10±3 автомобиля, то:
- по первому моему способу получается, среднее время обслуживавния автомобиля равно 480 минут/10 авто = 48 минут/авто. Т.е. одну машину ремонтируем за 48 минут.
- по второму способу получется, что раз за день мы ремонтируем от 7 до 13 авто, значит на ремонт уходит от 480/7 = 68,6 минут/авто до 480/13 = 36,9 минут/авто. Т.е. среднее время будет равно (68,6 + 36,9)/2 = 52,75 минут/авто. Т.е. одну машину ремонтируем за 52,75 минут.
Это нужно вычислить до проведения машинного моделирования! Так что просто посмотреть AМE.TIME. не прокатит :)

Какой из способов правильный?

Помогите пожалуста, а то я туплю не подецки, просто уже весь курсовик практически готов, осталось только в программе правильные задержки вбить, рассчитать с помощью формул все и сравнить результаты.

Помогите посчитать правильно среднее время, плиз, Т.е. что же мне всетаки писать в advance, какие два числа (или функцию)? Пусть даже с грубым округлением (до минут).

P.S: Встретил решение подобной задачи. Цех по ремонту промышленных станков имеет 5 мастеров. В течение рабочего дня в мастерскую поступает в среднем 20±10 неисправных станков. Каждый из мастеров в течение рабочего дня успевает отремонтировать 4±3 станков. Бла бла бла...

GENPR FUNCTION RN1,D7
.143,480/.286,240/.429,160/.572,120/.715,96/.858,80/1,69
GENIN FUNCTION RN1,D11
.091,48/.182,40/.273,34/.364,30/.455,27/.546,24/
.637,22/.728,20/.819,18/.91,17/1,16
......
GENERATE FN$GENIN
......
ADVANCE FN$GENPR
......

Что после запятой идут минуты я понял, но что указано до запятой у каждой описываемой точки, я так и не воткнул... Может можно как-то и у меня аналогичное применить?

Вобщем огромная просьба ответить, что же мне писать в advance, конкретные числа для моего случая

Добавлено
Добавлю, дабы, съакцентировать внимание на сути проблеммы. В подавляющем большинстве задач, в формулировке указано, к примеру: N сообщений обрабатывается за X±h ед. времени, а у меня Y±H сообщений обрабатывается за T ед. времени. Вот я и хочу привести формулировку задачи к "номальному виду".

Автор: TEMENb 18.05.09, 05:55
Цитата Figaro-serg @
Что после запятой идут минуты я понял, но что указано до запятой у каждой описываемой точки, я так и не воткнул... Может можно как-то и у меня аналогичное применить?

Цитата TEMENb @
Оператор определения FUNCTION
Описание Имя функции должно записываться в поле метки оператора описания FUNCTION. Поле А оператора FUNCTION должно содержать аргумент независимую переменную функции. Аргументом может быть любой из стандартных числовых атрибутов, за исключением матрицы ячеек; в качестве аргумента функции может быть использовано и значение любой другой функции. Если в качестве аргумента функции используется случайное число RNj, то значениями аргумента будут числа, равномерно распределенные в интервале 0<=RNj<1. Следует отметить, что во всех других случаях использование случайных чисел RNj дает значение в диапазоне 0<=RNj<999. Запись в поле В определяет тип и число точек функции (число пар значений X[i] и Y[i]). Например, в выражении Cn определяет тип, а n - число точек функции.

невнимательно читаете форум!! >:(
Эта цитата из предыдущего сообщения.

Цитата Figaro-serg @
А задача в том чтобы выразить за сколько будет обслужена одна машина!

T=1/L

т.е. если частота - две машины в час, то интервал - 1/2=0.5 машин в час. т.е. одна машина в полчаса.
Цитата Figaro-serg @
Добавлю, дабы, съакцентировать внимание на сути проблеммы. В подавляющем большинстве задач, в формулировке указано, к примеру: N сообщений обрабатывается за X±h ед. времени, а у меня Y±H сообщений обрабатывается за T ед. времени. Вот я и хочу привести формулировку задачи к "номальному виду".

тебе даны средние значения. я так понял заданы частотой. и дан (дан ведь?) закон распредиления.
пусть твое среднее значение равняется L, тогда

експоненциальное распредиление
FN$EXPON/L
или
Exponential(1,0,(1/L))

нормальное
FN$GAMA/L
или
Gamma(1,0,(1/L),1)

и так далее.
прошу заметить, что в случае использование сча FNj функцию необходимо определить.

Автор: Eugen 18.05.09, 12:33
Цитата RazorM @
Делаю что-то типа такого TEST G Q$P3 3 EXIT.
это баг gpss - делайте так
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TEST G Q*3 3 EXIT

Автор: TEMENb 18.05.09, 16:47
Цитата Eugen @
это баг gpss - делайте так

Баг?
Мне почемуто кажется, что так задумано )

$ предпологиет, что далее будет написано символьное имя.
* - что имя параметра с числовым/символьным именем СЧА

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

Автор: Angellina 18.05.09, 16:53
TEMENb, я знаю определение этого оператора, но не знаю, как с его помощью реализовать то, что мне надо.
И если вы считаете это элементарным, то не могли бы вы подсказать как именно решить этот вопрос

Автор: TEMENb 18.05.09, 17:06
Angellina, а я и подсказал. В определении я нужное выделил жирным.

Добавлено
вы упорно пытаетесь записать атребут в дискретную числовую функцию. вам нужна дискретная атребутивная.
другими слоами замените свое D на E и будет вам счастие.

Автор: Angellina 18.05.09, 17:48
При замене D на E все равно выдаются следующие ошибки
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ;Для FVARIABLE
    Line 17, Col 1. Expecting a numeric value.
    FV$VER1,T_A1/1,T_A2
     
    ;Для INITIAL
    Line 17, Col 1. Expecting a numeric value.
    X$VER1,T_A1/1,T_A2

Автор: TEMENb 18.05.09, 17:53
Цитата Angellina @
VER1 FVARIABLE 0

;или INITIAL X$VER1,0

MARK

tipA FUNCTION RN1 D2
FV$VER1,T_A1/1,T_A2

;или X$VER1,T_A1/1,T_A2

GENERATE (Exponential(1,0,14.286))
SAVEVALUE VER1,(-3#10^(-24)#M1^6+3#10^(-19)#M1^5-2#10^(-14)#M1^4+4#10^(-10)#M1^3-5#10^(-6)#M1^2+0.0317#M1+11.3)
TRANSFER ,FN$tipA

...

T_A1 ASSIGN 10,11
TRANSFER ,TA_SERV

T_A2 ASSIGN 10,12
TRANSFER ,TA_SERV

...



мм.. действительно, я невнимательно прочитал условие вашей задачи. Кроме атребутов в значениях функции, вы пытаетесь использовать атребут в качетсве значения аргумента...
получается вроде как плавающая вероятность..
Хотя конкретно в вашем примере нет смысла вообще использовать функции.

TRANSFER ,FN$tipA
заменяем на
TRANSFER x$VER1,T_A1,T_A2

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

Автор: Angellina 18.05.09, 17:59
TEMENb, спасибо большое

Автор: TEMENb 18.05.09, 18:02
или так..
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE (Exponential(1,0,14.286))
    SAVEVALUE VER1,(-3#10^(-24)#M1^6+3#10^(-19)#M1^5-2#10^(-14)#M1^4+4#10^(-10)#M1^3-5#10^(-6)#M1^2+0.0317#M1+11.3)
    ASSIGN 10,(11+((RN1/1000)>x$VER1))
    TRANSFER ,TA_SERV
    ...


нема за шо ))))

Автор: Kappi4 18.05.09, 18:44
Здравствуйте господа программисты...Помогите пожалуйста в понимании языка гпсс...


Задание 10. В системе передачи цифровой информации передается речь в цифровом виде. Речевые пакеты передаются через два транзитных канала, буферируясь в накопителях перед каждым каналом. Время передачи пакета по каналу составляет 6 мс. Пакеты поступают через 7 ? 2 мс. Пакеты, передававшиеся более 11 мс, на выходе системы уничтожаются, т.к. их появление в декодере значительно снизит качество передаваемой речи. Уничтожение более 35% пакетов недопустимо. При достижении такого уровня система за счет ресурсов ускоряет передачу по 3 мс на канал. При снижении уровня до приемлемого происходит отключение ресурсов. Смоделировать 12 с работы системы. Определить частоту уничтожения пакетов и частоту подключения ресурса.

INITIAL X$T,1 /?
INITIAL X$B,1 /?
GENERATE 7,2
ASSIGN time,AC1 /?
QUEUE OCH1

SEIZE PR_1
DEPART OCH1
SAVEVALUE countAllMode+,1 /?
Test L (X$B#100/X$T),35,POS1
ADVANCE 6
TRANSFER ,met1
POS1 SAVEVALUE countFastMode+,1 /?
ADVANCE 4
met1 RELEASE PR_1

QUEUE OCH2

SEIZE PR_2
DEPART OCH2
SAVEVALUE countAllMode+,1
Test L (X$B#100/X$T),35,POS2
ADVANCE 6
TRANSFER ,met2
POS2 SAVEVALUE countFastMode+,1
ADVANCE 4
met2 RELEASE PR_2

ASSIGN 1+,MP2 /?
TEST LE (AC1-P$time),11,BYBY // по условию <= 11 /?
SAVEVALUE T+,1 /?
TERMINATE

BYBY SAVEVALUE B+,1 /?
TERMINATE

GENERATE 12000
SAVEVAKUE fr_brak,(x$B/(x$B+x$T)) /?
SAVEVALUE fr_useResource,(x$countFastMode/x$countAllMode) /?
TERMINATE 1
START 1


Вот задание и решение его...но у мя возникли проблемы с обьяснением написаного преподавателю...елси несложно опишите плз что делается в строчках помеченые знаком вопроса...заранее благодарю...

Автор: TEMENb 18.05.09, 18:55
у меня тоже такое бывает, как напишу чего - потом полдня разбираю, шо ж это за фигню за такую я написал. :D

Автор: dimon_tb 19.05.09, 09:21
Задача:
На обрабатывающий участок цеха поступают детали в среднем через 50 мин. Первичная обработка деталей производится на одном из двух станков. Первый станок обрабатывает деталь в среднем 40 мин и имеет до 4% брака, второй соответственно 60 мин. и 8% брака. Все бракованные детали возвращаются на повторную обработку на второй станок. Детали, попавшие в разряд бракованных дважды, считаются отходами. Вторичную обработку проводится также два станка в среднем 100 мин каждый. Причём первый станок обрабатывает имеющиеся в накопителе после первичной обработки детали, а второй станок подключается при образовании в накопителе задела больше трех деталей. Все интервалы времени распределены экспоненциальному закону.
Смоделировать обработку на участке 500 деталей. Определить загрузку второго станка на вторичной обработке и вероятность появления отходов. Определить возможность снижения задела в накопителе и повышения загрузки второго станка на вторичной обработке.

SIMULATE
NAC1 STORAGE 500; накопитель NAC1 ёмкостью 500
10 GENERATE 50; каждые 50 мин по 1 детали
20 GATE NU STANOK1,SSS; если 1 станок занят посылаем на 2
30 SEIZE STANOK1; занимаем 1 станок.
40 ADVANCE 40; обработка детали 40 мин
50 TRANSFER 0.04,Pov,EXT; 4% возможность брака
60 POV RELEASE STANOK1; Освобождение устройства.
70 ENTER NAC1; Добавление в накопитель браковоной детали
80 SSS SEIZE STAN;
90 ADVANCE 60; обработка детали 60 мин
100 TRANSFER 0.08,POV2,EXTT ; 8% возможность брака
110 POV2 RELEASE STAN; Освобождение устройства.
120 ENTER NAC1;
130 EXT TERMINATE STANOK1;
140 EXTT TERMINATE STAN;
Start 500

как теперь обработать бракованные детали из накопителя.
или тут надо по другому что то писать.
GPSS Word

Автор: tigreg 19.05.09, 09:29
Привет! как в GPSS задать косинус в generate? кто-нибудь знает?
Заранее спасибо.

Автор: TEMENb 19.05.09, 09:51
Цитата tigreg @
Привет! как в GPSS задать косинус в generate? кто-нибудь знает?
Заранее спасибо.


GENERATE (COS(3.14#2#RN1/1000))

Добавлено
dimon_tb, TRANSFER тебе в помощь..

Автор: tigreg 19.05.09, 10:24
Спасибо, TEMENb!
если мне надо, чтоб две гармоники задавались, можно так:
GENERATE (COS(3.14#2#RN1/1000)+COS(3.14#2#RN2/1000))?

Автор: TEMENb 19.05.09, 10:55
Цитата tigreg @
Спасибо, TEMENb!
если мне надо, чтоб две гармоники задавались, можно так:
GENERATE (COS(3.14#2#RN1/1000)+COS(3.14#2#RN2/1000))?

ну тут уже чисто ваша фантазия. Я привел класcический пример COS(x), где x [0;2*pi)

Автор: tigreg 19.05.09, 11:01
еще раз thanks :)

Автор: Figaro-serg 19.05.09, 11:51
Цитата TEMENb @
Цитата Figaro-serg @
Что после запятой идут минуты я понял, но что указано до запятой у каждой описываемой точки, я так и не воткнул... Может можно как-то и у меня аналогичное применить?

Цитата TEMENb @
Оператор определения FUNCTION
Описание Имя функции должно записываться в поле метки оператора описания FUNCTION. Поле А оператора FUNCTION должно содержать аргумент независимую переменную функции. Аргументом может быть любой из стандартных числовых атрибутов, за исключением матрицы ячеек; в качестве аргумента функции может быть использовано и значение любой другой функции. Если в качестве аргумента функции используется случайное число RNj, то значениями аргумента будут числа, равномерно распределенные в интервале 0<=RNj<1. Следует отметить, что во всех других случаях использование случайных чисел RNj дает значение в диапазоне 0<=RNj<999. Запись в поле В определяет тип и число точек функции (число пар значений X[i] и Y[i]). Например, в выражении Cn определяет тип, а n - число точек функции.

невнимательно читаете форум!! >:(
Эта цитата из предыдущего сообщения.

Это сообщение читал. Я имел ввиду что не понял, откуда были взяты числа, т.е. что мне можно было бы написать у себя.

-Added
Цитата TEMENb @
тебе даны средние значения. я так понял заданы частотой. и дан (дан ведь?) закон распредиления.
пусть твое среднее значение равняется L, тогда

експоненциальное распредиление
FN$EXPON/L
или
Exponential(1,0,(1/L))

нормальное
FN$GAMA/L
или
Gamma(1,0,(1/L),1)

Ни какого закона распределения у меня не указано, только сказано что обслуживается 10±3 автомобиля за 8 часов. И все таки просьба, подскажите что же всетаки мне написать в advance (конкретную функцию или числа), плииииз, плиииз, плииииз. А то я окончательно запутался, причем тут законы экспоненциального и нормального распределения, если у мена ни слова про них в условии, а только "10±3"

Добавлено
очень-очень прошу ответить в следующей форме :) :

" advance первое_число, второе_число "
или
" advance функция(параметры) "


TEMENb, огромное спасибо за время которое вы уже уделили мне

Автор: TEMENb 19.05.09, 13:02
Цитата Figaro-serg @
обслуживается 10±3 автомобиля за 8 часов

Выше я уже приводил формулу T=1/L.

Если все еще не ясно что с ней делать, то поясняю. интенсивность у вас распределена по равномерному закону ((10±3)/8)машин в час.

значит одна машина будет в среднем обслужена 1/((10±3)/8)часов=(8/(10±3))часов=(8/[7;13])часов=[(8/13);(8/7)]часов=((8*13+8*7)/(13*7*2))±((8*13-((8*13+8*7)/2))/(13*7))часов=(80/91)±((4*26-4*20)/91)=(80/91)±(24/91)часов

вот как то так.

Цитата Figaro-serg @
advance первое_число, второе_число

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ADVANCE (80/91),(24/91) ;Если моделируете в часах


З.Ы.:Советую перепроверить правильность моих вычислений, принцип правильный, а вот в числах мог ошибиться.

Добавлено
перепроверил
user posted image

Автор: Flames 19.05.09, 15:09
TEMENb, доброго дня, ночи. А подскажи, пожалуйста, где можно взять, найти информацию по СЧА нужно для реферата. У меня тема реферата так и называется "Стандартные Числовые Атрибуты". Просто хотелось бы (да и так требует препод) конкретный пример/ы моделирования в GPSS с применением СЧА. Помимо основной теории про СЧА, написать.

Буду очень благодарен за помощь! :yes:

Автор: Eugen 19.05.09, 15:29
да TEMENb мне тоже интересен этот материал ;)

Автор: tigreg 19.05.09, 16:37
еще вопрос. Мне необходимо использовать в программе текущее значение функции. Функция - косинус. По-моему, текущее знчение определяется так: FN1.
Вопрос: как задать косинус в FUNCTION, и как затем сделать на нее ссылку в GENERATE?

Автор: TEMENb 19.05.09, 16:38
Flames, в вверху страницы есть ссылка, даже выделена красным восклиццательным знаком!

Добавлено
Цитата
Стандартные числовые атрибуты (СЧА)
В процессе моделирования интерпретатор OpenGPSS автоматически регистрирует и корректирует информацию, касающуюся различных элементов, используемых в модели. Большая часть информации доступна только интерпретатору. Однако, к некоторым атрибутам объектов может обращаться и программист, манипулируя их значениями согласно логики модели. Такие атрибуты называются стандартными числовыми атрибутами (СЧА). Каждый объект OpenGPSS имеет свой набор СЧА. Кроме СЧА объектов существуют еще системные числовые атрибуты, к которым пользователь может обращаться в модели, но не может изменять их значение. Имя СЧА состоит из двух частей. Первая часть указывает групповое имя, идентифицирующее тип объекта и тип информации об объекте. Вторая часть идентифицирует конкретного члена группы. Групповое имя состоит из одной-двух букв, фиксированных для информации об объектах определенного типа, например, Q - ссылка на текущее значение длины очереди, QA - целая часть среднего значения очереди и т.д. Объекты OpenGPSS могут быть идентифицированы с помощью числовых или символьных имен. Если объект идентифицирован с помощью номера, то ссылка на его стандартный числовой атрибут записывается как СЧАj, где j - номер объекта (целое число). При символической идентификации объекта ссылка на его стандартный атрибут записывается как СЧА$<имя>, где <имя> - символьное имя объекта. Системные СЧА
RN Числовые последовательности считываются из датчиков псевдослучайных чисел (ДПЧ) с помощью СЧА RNj. Все датчики генерируют последовательность равномерно распределенных случайных дробных чисел от 0 до 0,999999999999999 (пятнадцать девяток после нуля). Количество датчиков не ограничено.
C1 Текущее значение условного времени. Автоматически изменяется программой и устанавливается в 0 управляющими операторами CLEAR или RESET.
AC1 Текущее значение абсолютного времени. Автоматически изменяется программой. Эта величина не меняется под действием управляющего оператора RESET и устанавливается в 0 лишь под действием оператора CLEAR.
TG1 Число, равное текущему значению счетчика завершений. Транзакты, вошедшие в блоки TERMINATE с ненулевым операндом А, уменьшают значение этого счетчика на число, равное значению операнда А.
Z1 Размер свободной оперативной памяти в байтах.
М1 Время пребывания в модели транзакта, обрабатываемого программой в данный момент. Эта величина может изменяться блоком MARK. Время пребывания вычисляется следующим образом: М1 равно разнице текущего значения абсолютного времени и отметки времени обрабатываемого транзакта.
PR Приоритет обрабатываемого в данный момент транзакта. Эта величина может изменяться блоком PRIORITY. По умолчанию приоритет равен 0.
СЧА транзактов
XN1 Номер активного транзакта.
Pj или *j, или *<имя>, или *$<имя> значение параметра j текущего транзакта или значение параметра с именем <имя> текущего транзакта.
MPj Значение времени, равное разности абсолютного модельного времени и содержимого j-го параметра текущего транзакта.
MBj Флаг синхронизации: 1, если транзакт в блоке j принадлежит тому же семейству, что и текущий транзакт; 0 - в противном случае.
СЧА блоков
Nj Общее число транзактов, которое должно войти в j-й блок. Подсчет ведется программой автоматически. Например, N$MET1 - счетчик числа входов в блок МЕТ1. Этот счетчик изменяется при каждом входе транзакта в блок МЕТ1.
Wj Текущее число транзактов, которое находится в блоке j. Значение этого счетчика подсчитывается автоматически. Например, $MET2 - счетчик текущего числа транзактов в блоке МЕТ2.
СЧА МКУ
Sj Текущее содержимое многоканального устройства j. Содержимое многоканального устройства может изменяться блоками ENTER и LEAVE.
Rj Число свободных единиц многоканального устройства j. Эта величина может изменяться блоками ENTER и LEAVE.
SRj Коэффициент использования многоканального устройства j в тысячных долях, т.е., если коэффициент равен 0.65, то SRj равно 650.
SAj Среднее содержимое многоканального устройства j (целая часть).
SMj Максимальное содержимое многоканального устройства j.
SCj Общее число входов в многоканальное устройство j.
STj Среднее время пребывания транзактов в многоканальном устройстве j.
SEj Флаг незанятости многоканального устройства j: 1 - свободно, 0 - занято.
SFj Флаг заполненности многоканального устройства j: 1 - заполнено, 0 - не заполнено.
SVj Флаг готовности многоканального устройства j: 1 - готово, 0 - не готово.
SNVj Флаг неиспользуемости многоканального устройства j: 1 - неиспользуется, 0 - используется.
СЧА устройств
Fj Текущее состояние устройства j. Эта величина равна 0, если устройство свободно, и 1 - во всех остальных случаях. Этот атрибут изменяется блоками SEIZE, RELEASE, PREEMPT и RETURN.
FIj Флаг прерывания устройства: 1, если устройство находится в состоянии прерывания, 0 - в противном случае.
FVj Флаг готовности устройства к использованию: 1, если готово, 0 - в противном случае.
FRj Коэффициент использования устройства j в тысячных долях, т.е., если коэффициент равен 0.88, то FRj равен 880.
FCj Общее число входов в устройство j.
FTj Среднее время использования устройства одним транзактом.
СЧА очередей
Qj Длина соответствующей очереди j. Эта величина изменяется блоками QUEUE и DEPART.
QAj Средняя длина очереди j.
QMj Максимальная длина очереди j.
QCj Общее число входов в очередь j.
QZj Число нулевых входов в очередь j.
QTj Среднее время пребывания транзакта в очереди j (включая нулевые входы).
QXj Среднее время пребывания транзакта в очереди j (без нулевых входов).
СЧА таблиц
TBj Вычисленное среднее таблицы j. Для занесения в таблицу используется блок TABULATE.
TCj Общее число включений в таблицу j.
TDj Вычисленное среднеквадратичное отклонение для таблицы.
СЧА сохраняемых величин
Xj Содержимое ячейки j.
СЧА матриц
MXj(a,b) Содержимое элемента матрицы ячеек j, расположенного в строке a, столбце b.
СЧА функций
FNj Вычисленное значение функции j. От значения функции берется целая часть, за исключением тех случаев, когда это значение используется в качестве модификатора в блоках GENERATE, ADVANCE или ASSIGN или в качестве аргумента другой функции.
СЧА переменных
Vj Вычисленное значение переменной j. При вычислении значения переменной с фиксированной точкой получается целое число. При вычислении значения переменной с плавающей точкой дробная часть конечного результата отбрасывается.
BVj Вычисленное значение (1 или 0) булевской переменной.
СЧА числовых групп
GNj Текущее число элементов в числовой группе с номером j.
СЧА групп транзактов
GTj Текущее число элементов в группе транзактов с номером j.
СЧА списков пользователя
CHj Текущее число транзактов в j-том списке пользователя.
CAj Среднее число транзактов в j-том списке пользователя.
CMj Максимальное число транзактов в j-м списке пользователя.
CCj Число входов в j-й список пользователя.
CTj Среднее время пребывания транзакта в j-том списке пользователя.
СЧА логических переключателей
LSj Возвращает состояние логического переключателя j: 1 - установлен, 0 - не установлен.
LRj Возвращает инверсное состояние логического переключателя j: 0 - установлен, 1 - не установлен.


Добавлено
Цитата tigreg @
еще вопрос. Мне необходимо использовать в программе текущее значение функции. Функция - косинус. По-моему, текущее знчение определяется так: FN1.
Вопрос: как задать косинус в FUNCTION, и как затем сделать на нее ссылку в GENERATE?

Вопервых, что бы обратиться к функции по числовому имени - надо задать функцию по числовому имени. Это сделать возможно.. желаю вам удачи :D
Вовторых, берете случайным образом выбираете на графике стук пиццот (25 точек вполне хватит) точек и записываете
FCOS FUNCTION RN1,C25 ;25 ТОЧЕК
а далее записываете полученные точки. абсцысу и ординату. координаты точек пишете через запятую, сами точки отделяете значком деления. точки должны быть расставлены так, что бы абсцыса возрастала.

З.Ы.: пользуйтесь встроенной plus функцией COS и не иите мозги ни себе ни людям.
З.З.Ы.:надоело отвечать по 7 раз на один и тот же вопрос на одной странице форума..

Добавлено
З.З.З.Ы: вырезка из жпссного хелпа (так ведь сложно глянуть почитать..)
Цитата
COS( Expression ) - Cosine. Expression must be in radians.
что в переводе означает, что аргумент коссинуса должен быть в радианах. надеюсь ненадо обьяснять как градусы в радианы переводить? :D

Автор: tigreg 19.05.09, 18:17
за ответ спасибо. со всем остальным... :) согласна. исправлюсь :)

Автор: TEMENb 19.05.09, 18:32
tigreg, и еще, если вы будете использовать косинус в качестве параметра - есть один маленький ньюанс.
В качетсве параметров жпсс адекватно воспринимает числа, символьные константы, СЧА и выражения, заключенные в скобки. Так вот Puls-функции - это выражения. обязательно нужно заключать в скобки.

Например
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE (COS(3.14))

Автор: Figaro-serg 19.05.09, 20:48
Цитата TEMENb @
Цитата Figaro-serg @
advance первое_число, второе_число

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ADVANCE (80/91),(24/91) ;Если моделируете в часах

(80/91),(24/91) - не знал что так можно! клево :-)

если пересчитать в минуты, то (80/91)±(24/91)часов = (80/91)*60 ± (24/91)*60 минут = 52.74±15.82 минут.

до этого получил аналогичные результаты: 52±16 мин, только вот округление конечно здесь было не корректным.
получается что я чисто интуитивно рассчитал интервалы правильно, не зная формул 8-). Теперь запишу дробью и все будет вери гуд! :D Спасибо!


TEMENb, еще раз огромнейшее человеческое спасибо за оказанную помошь!

Автор: h4_jester 20.05.09, 16:24
Имеется 5 входных накопителей (емкость -1 сообщение), и 5 выходных очередей. При определенном условии необходимо освободить эти 5 накопителей и 5 выходных очередей только от заявок 2 и 3 типов, заявки же первого типа не трогать(всего в системе 3 типа заявок). Какими глаголами это можно сделать?

Автор: TEMENb 20.05.09, 16:55
h4_jester, что ты подразумеваешь под словом "накопитель"?
варианты ответов:
1 queue/depart
2 enter/leave
3 seize/release

Добавлено
Цитата
..................
queue nakopitel
Test e ((f$yst=0)|(p$type=2)|(p$type=3)),1
Test e f$yst,0,osvobodit
seize yst
...................

Автор: h4_jester 20.05.09, 17:39
накопитель - enter/leave.

Автор: TEMENb 20.05.09, 18:15
h4_jester, ну такой вариант немного сложнее.
Тут вообщем есть два пути.
первый - сохранить время пребывания в накопителе в параметр.....
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ..................
    assign tim,(duniform(1,10,14))
    queue och
    enter nak
    depart och
    advance 1
    assign tim-,1
    Test e ((p$tim<=0)|((x$del=1)&((p$type=2)|(p$type=3)))),1
    Test le p$tim,0,osvobodit
    leave nak
    ...................
    osvobodit leave nak
    ...................

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

Автор: inna 21.05.09, 11:06
Здравствуйте! Скажите пожалуйста, если к одноканальному устройству ограничен накопитель, это устройство в программе как память записывать(с фазами выделения и освобождения памяти) или как устройство? Если как устройство, то как показать что ограничен накопитель?
Если возможно, ответьте сегодня. до вечере нужно сделать.

Автор: TEMENb 21.05.09, 11:38
inna, вы взрываете мой мозг!

думаю вам надо что то типа
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        TEST L  Q$och,10,OTK    ;если очередь короче 10, то дальше, иначе на метку (отказ)
        QUEUE   och
        SEIZE   ND
        DEPART  och ;покинуть очередь
        ADVANCE 120,25  
        RELEASE ND  ;


В следующий раз потрудитель изъяснятся попонятней.

Автор: inna 21.05.09, 11:52
Спасибо большое!! Но как я понимаю, мне надо задать сначали емкость накопителя (или очереди) . Подскажите пожалуйста, где это указать.

Автор: TEMENb 21.05.09, 12:08
Цитата TEMENb @
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TEST L  Q$och,10,OTK    ;если очередь короче 10, то дальше, иначе на метку
(отказ)

в данном примере размер очереди ограничен десяткой.

Автор: inna 21.05.09, 17:37
огромное спасибо! Вы мне очень помогли :)

Автор: ourlifeforus 22.05.09, 06:08
Есть ряд задачек, простых, которые нужно решить, может кто-либо поможет? :)

Составить задание на моделирование прохождения заявок которые могут обрабатываться на одном из двух устройств, причем предпочтительнее на первом. Поступление заявок по равномерному закону распределения с интервалом [6...10] единиц времени, время обработки на первом устройстве в интервале [2...8] по РР, на втором - [5...9].
Исследовать модель, где заявки поступают на обработку в устройство с ограниченным числом мест в очереди, равным 3. Если очередь заполнена, то заявка покидает систему.



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


1. Требуется промоделировать решение задач в двухпроцессорной ЭВМ с общей памятью, разделенной на восемь блоков. Каждой задаче отводится при ее решении один блок. Интервалы времени между поступлениями задач распределены равномерно в интервале [2,14] единиц времени, время обработки порции информации подчинено экспоненциальному закону с интенсивностью v1=5 в процессоре CPU1 и с v2=2 в процессоре CPU2. Выполнение задачи сводится к обработке порций информации. Между обработкой порций с вероятностью 0.6 возможно обращение к внешней памяти, в которой время обслуживания распределено равномерно в диапазоне [2,8]. С вероятностью 0.3 задачи оказываются решенными и покидают систему. Моделирование выполнить на отрезке времени, соответствующем решению не менее 100 задач.




Модель: Два сетевых принтера.
Принт-сервер обслуживает два принтера: цветной и монохроматический. Поток заявок на печать - пуассоновский со средним значением 1,5 с. 40% заявок требуют использования цветного принтера, остальные - монохроматического. Имеется общая очередь заявок (буферная память). Емкость буферной памяти соответствует 10 заявкам. Если при поступлении заявки нет свободного буфера, заявка покидает принт-сервер без обслуживания. Время вывода на печать распределено по нормальному закону, причем для монохроматического принтера математическое ожидание = 8, а среднеквадратическое отклонение = 1. Для цветного математическое ожидание = 6, а среднеквадратическое отклонение = 1. Построить модель. Определить процент необслуженных заявок. Построить таблицу очереди заявок.






Модель магазина - гипермаркета "unreal,-".
Покупатель заходит в магазин, ищет нужные товары и идёт с ними к кассе.
Время работы: с 9.00 до 22.00.
Количество покупателей: утром - 1 покупатель в минуту, в обед - 8 в минуту, после обеда - 3 в минуту, вечером - 15 в минуту, после 19.00 - 5 в минуту.
Среднее время поиска нужного товара покупателем - 40 ±20 секунд.
Средний объём корзины – от 0 до 10 товаров до 17.00, от 0 до 50 товаров - до 19.00 и от 0 до 8 - до 22.00 (количество товаров соответствует экспоненциальному распределению на указанном интервале).
Средняя стоимость товара - 100 руб.
Среднее время обработки товара кассиром - 10 ±8 секунд
Покупатель идёт к кассе, у которой самая короткая очередь. Каждый покупатель согласен ждать своей очереди в течении 10 минут. Если он видит, что ждать придётся не менее часа, то вероятность того, что он встанет в очередь равна 0.1. (и плавно изменяется до 1 с уменьшением предполагаемого времени стояния в очереди). Если покупатель встал в очередь, то он её уже не покинет. Чем дольше покупатель стоит в очереди, тем сильнее портится его настроение (покупатель злится). Если покупатель стоит в очереди менее 10 минут, то его озлобленность равна нулю, 1 час – 0.3, 2 часа - 1. Озлобленность покупателя является вероятностью того, что он смертельно обидится на магазин unreal и больше никогда туда не придёт. Покупатель без товаров никогда не обижается, покупатель, не вставший в очередь из-за её слишком большой длины, обижается в зависимости от проведённого в магазине времени - если больше часа, то обида == 1, если меньше 10 минут - обида == 0.
Надо определить, какое количество касс должно работать в каждое время суток, чтобы обиженных покупателей было не больше 0.01% и привести всю возможную статистику - среднее время нахождения в очереди и т.д.

Автор: SHARKY-88 23.05.09, 12:55
Petroid
Можешь кинуть работу
В системе передачи данных осуществляется обмен пакетами данных между пунктами А и В по дуплексному каналу связи. Пакеты поступают в пункты системы от абонентов с интервалами времени 10 ± 3 мс. Передача пакета занимает 10 см. В пунктах имеются буферные регистры, которые могут хранить два пакета (включая передаваемый). В случае прихода пакета в момент занятости регистров пунктам системы предоставляется выход на спутниковую полудуплексную линию связи, которая осуществляет передачу пакетов данных за 10 ± 5 мс. При занятости спутниковой линии пакет получает отказ.
Смоделировать обмен информацией в системе передачи данных в течение 1 мин. Определить частоту вызовов спутниковой линии и ее загрузку. В случае возможных отказов определить необходимый для безотказной работы системы объем буферных регистров.
SHARKY-88@mail.ru

Автор: tigreg 23.05.09, 14:19
Подскажите, пожалуйста, почему не работают параметры? (в отчете их нет)

INPUT TABLE IN,0,20,25
OUTPUT TABLE OUT,0,20,25

GTD MATRIX ,1,3
INITIAL MX$GTD(1,1),0.02
INITIAL MX$GTD(1,2),-0.79
INITIAL MX$GTD(1,3),12.9

GENERATE 10
ASSIGN 1,(COS(3.14#2#RN1/1000)+COS(3.14#2#RN2/1000))
ASSIGN 2,1

IN VARIABLE P1
OUT VARIABLE MX$GTD(1,P2)#P1
TABULATE INPUT
TABULATE OUTPUT

QUEUE QUE
OUT VARIABLE P2+1
DEPART QUE
TERMINATE 1

Автор: TEMENb 23.05.09, 14:31
Вопервых, если ты хочешь занести в таблицу вычисляемое выражение, то заноси вычисляемое выражение, а не значение его числового имени.
поясняю разницу
IN - значение числового имени (равняется порядка десяти тысяч)
V$IN - значение вычисляемого выражения

Вовторых, если мне не изменяет память, косинус выдает результат в интервале -1..1. знач косинус плюс косинус - -2..2
Внимание вопрос, что ты собираешься рассмотреть в таблице с начальным значением 0 и шагом 20?

Втретьих,строчечки с вариейблами вынеси куданибудь повыше. Эти блоки не являются функциональными (если в них входит транзакт, то ничего не происходит) и среди функциональных им делать нечего

Добавлено
И еще, если тебе нужен был график cos(x)+cos(x), то ты немного промахнулся.
У тебя сейчас график cos(x1)+cos(x2), x1,x2 э 0..2*pi

ну так.. к слову.. я незаю как именно тебе нужно, просто предупредил )

Автор: tigreg 23.05.09, 14:54
Спасибо!!!

Автор: RetiF 23.05.09, 23:13
Задача на Многоканальное устройство

Цитата
Магазин состоит из 3 отделов и одной кассы на выходе. Интенсивность прихода покупателей 2+-l мин. Вероятность покупок в отделах и время покупок соответственно распределено равномерно:
  • 1 отдел - вероятность покупки 0.75 - время покупки 120+-60
  • 2 отдел - вероятность покупки 0.55 - время покупки 150+-30
  • 3 отдел - вероятность покупки 0.82 - время покупки 120+-45

Время обслуживания у кассы 2+,-1 мин. Составить модель работы магазина в течение 8 часов


Если бы время покупки во всех трёх отделах было бы одинаковым и в условии бы не было разных вероятностей совершения покупки, то я, кажется, справился с задачей:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    market STORAGE 3
     
    GENERATE 2,1
     
    ENTER market
          
    TRANSFER .75,exitgone,done
     
    done ADVANCE 120,60
         LEAVE market
         QUEUE PayTurn
         SEIZE pay
         DEPART PayTurn
         ADVANCE 2,1
         RELEASE pay
         TERMINATE
     
    exitgone LEAVE market
             TERMINATE
     
    GENERATE 60
    TERMINATE 1
    START 8


Но как быть с тремя разными вероятностями и разным временем на совершение покупки?

Автор: andreynov 24.05.09, 12:11
TEMENb
Доброго времени суток.
Задача: На сборочный участок цеха предприятия через интервалы времени, распределенные экспоненциально со средним значением 10 мин, поступают партии, каждая из которых состоит из трех деталей. Половина всех поступающих деталей перед сборкой должна пройти предварительную обработку в течение 7 мин. На сборку подаются обработанная и необработанная детали. Процесс сборки занимает всего 6 мин. Затем изделие поступает на регулировку, продолжающуюся в среднем 8 мин (время выполнения ее распределено экспоненциально). В результате сборки возможно появление 4% бракованных изделий, которые не поступают на регулировку, а направляются снова на предварительную обработку.
Смоделировать работу участка в течение 24 ч. Определить возможные места появления очередей и их вероятностно-временные характеристики. Выявить причины их возникновения, предложить меры по их устранению и смоделировать скорректированную систему.

Эта задача уже приводилась в этой теме на стр. 2 и 5: на второй Вы приводили решение похожей задачи, а на 5-ой задача 1 в 1. Задача выполняется, но вот только очереди забиты уж очень сильно... Не подскажете, в чем может быть дело?

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ;------------------------------------;
    SBOR    STORAGE 2   ;
    ;------------------------------------;
            GENERATE    ,,,1    ;геним транзакт
    MET1    ADVANCE (Exponential(1,0,10));  ;задержка генерации на 10 мин (эксп)
        SPLIT   3,MET2  ;клоним 3 транзакта, отправляем их на метку
        TRANSFER    ,MET1   ;отправляем родителя на метку
    MET2    TRANSFER    .5,MET3 ;половину пропускаем, половину отправляем на метку
    MET5    QUEUE   OCH1    ;занять очередь 1
        SEIZE   PREDV   ;первичная обработка
        DEPART  OCH1    ;покинуть очередь
        ADVANCE 7   ;задержка на время обработки
        RELEASE PREDV   ;покинуть первичную обработку
        QUEUE   OCH2    ;занять очередь 2
        LINK    2,FIFO  ;ПОСТАВИТЬ В 2-Й СПИСОК ПОЛЬЗОВАТЕЛЯ
    ;------------------------------------;
    MET3    QUEUE   OCH2    ;занять очередь 2
        LINK    1,FIFO  ;ПОСТАВИТЬ В 1-Й СПИСОК ПОЛЬЗОВАТЕЛЯ
    ;------------------------------------;
    MET4    ENTER   SBOR    ;занять устройство сборки
        DEPART  OCH2    ;покинуть очередь 2
        ASSEMBLE    2   ;собрать из двух деталей одну
        ADVANCE 6   ;Задержка на время обработки
        TRANSFER    .04,MET5    ;4 % деталей возвращаются на предв. обработку
        ADVANCE (Exponential(1,0,8));регулировка
        LEAVE   SBOR    ;покидаем сборку
        LEAVE   SBOR    ;пришло две детали, а входит одно. потому покидаем два раза.
        TERMINATE       ;транзакт покидает систему
    ;------------------------------------;
        GENERATE    ,,,1    ;геним
    POVT    TEST G  CH1,0   ;если первый список пользователя больше нуля, то дальше
        TEST G  CH2,0   ;если второй список пользователя больше нуля, то дальше
        UNLINK  1,MET4,1    ;отправить из 1-го списка пользователя на метку МЕТ4 один транзакт
        UNLINK  2,MET4,1    ;отправить из 2-го списка пользователя на метку МЕТ4 один транзакт
        TRANSFER    ,POVT   ;перейти на метку
    ;------------------------------------;
        GENERATE    (24#60) ;геним транзакт через 8 часов
        TERMINATE   1   ;из счетчика завершений вычитаем 1
    ;------------------------------------;
        START 1     ;
    ;------------------------------------;


Отчет:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                  GPSS World Simulation Report - forum.9.1
     
     
                       Sunday, May 24, 2009 21:12:16  
     
               START TIME           END TIME  BLOCKS  FACILITIES  STORAGES
                    0.000           1440.000    31        1          1
     
     
                  NAME                       VALUE  
              MET1                            2.000
              MET2                            5.000
              MET3                           13.000
              MET4                           15.000
              MET5                            6.000
              OCH1                        10001.000
              OCH2                        10003.000
              POVT                           25.000
              PREDV                       10002.000
              SBOR                        10000.000
     
     
     LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE             1             0       0
    MET1                2    ADVANCE            157             1       0
                        3    SPLIT              156             0       0
                        4    TRANSFER           156             0       0
    MET2                5    TRANSFER           468             0       0
    MET5                6    QUEUE              230            24       0
                        7    SEIZE              206             0       0
                        8    DEPART             206             0       0
                        9    ADVANCE            206             1       0
                       10    RELEASE            205             0       0
                       11    QUEUE              205             0       0
                       12    LINK               205           204       0
    MET3               13    QUEUE              239             0       0
                       14    LINK               239           238       0
    MET4               15    ENTER                2             0       0
                       16    DEPART               2             0       0
                       17    ASSEMBLE             2             0       0
                       18    ADVANCE              1             0       0
                       19    TRANSFER             1             0       0
                       20    ADVANCE              0             0       0
                       21    LEAVE                0             0       0
                       22    LEAVE                0             0       0
                       23    TERMINATE            0             0       0
                       24    GENERATE             1             0       0
    POVT               25    TEST               206             1       0
                       26    TEST               205             0       0
                       27    UNLINK             205             0       0
                       28    UNLINK             205             0       0
                       29    TRANSFER           205             0       0
                       30    GENERATE             1             0       0
                       31    TERMINATE            1             0       0
     
     
    FACILITY         ENTRIES  UTIL.   AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
     PREDV              206    0.999       6.982  1      421    0    0     0     24
     
     
    QUEUE              MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME   AVE.(-0) RETRY
     OCH1               35   24    230      1    22.825    142.901    143.525   0
     OCH2              442  442    444      1   223.818    725.896    727.535   0
     
     
    STORAGE            CAP. REM. MIN. MAX.  ENTRIES AVL.  AVE.C. UTIL. RETRY DELAY
     SBOR                2    0   0     2        2   1    1.988  0.994    0  408
     
     
    USER CHAIN         SIZE RETRY  AVE.CONT   ENTRIES  MAX     AVE.TIME
     1                   34    0     21.579      239    37      130.016
     2                    0    1      0.000      205     1        0.000
     
     
    FEC XN   PRI         BDT      ASSEM  CURRENT  NEXT  PARAMETER    VALUE
         1    0        1440.443      1      2      3
       421    0        1443.715      1      9     10
       472    0        2880.000    472      0     30

Автор: Eugen 24.05.09, 17:30
может здесь чтото нето
Цитата andreynov @
UNLINK 1,MET4,1 ;отправить из 1-го списка пользователя на метку МЕТ4 один транзакт
UNLINK 2,MET4,1 ;отправить из 2-го списка пользователя на метку МЕТ4 один транзакт


Добавлено
RetiF это лишнее -
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    market STORAGE 3

И дальше добавь 2 и 3 отделы.

Автор: andreynov 24.05.09, 23:24
EugenСпасибо, конечно. Но я тоже не совсем понимаю действие этих строк и вообще блоков LINK | UNLINK. И что тут может быть не так, на твой взгляд?

Автор: Eugen 25.05.09, 13:33
andreynov, да не понятно где ошибка или пропущены блоки, напишите автору, возможно здесь GPSS задача этот вопрос разрешится быстрее

Автор: andreynov 25.05.09, 14:32
EugenВ теме, на которую ты дал ссылку, за деньги решают задачи что-ли?

Автор: Eugen 25.05.09, 15:06
так точно, кому охота тратить время, решать задачи за так ..
в Вашей задаче не корректна работа с МКУ. Не понятна как устроена модель, особенно здесь
Цитата andreynov @
LEAVE SBOR ;пришло две детали, а входит одно. потому покидаем два раза.
Спросите у автора 8-)

Автор: andreynov 25.05.09, 16:22
Eugen, да это не для меня задача, так что платить за неё не хочется :)
Уже забыл, что такое МКУ...
Спрошу... если найду, кто это :)

Добавлено
TEMENb, объясни пожалуйста, почему память нужно освобождать дважды?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        LEAVE   SBOR    ;покидаем сборку
        LEAVE   SBOR    ;пришло две детали, а входит одно. потому покидаем два раза.

Автор: TEMENb 25.05.09, 18:16
Eugen, ох, ну зачем стебать то так жестоко? =)
незнал я тогда еще, что можно одним ливом освободить сразу два канала МКУ. теперь я старый мудрый воин и знаю как..


andreynov, потому что в этом разделе есть два вида помощи
1. мы подсказываем как организовать логику модели
2. мы подсказываем, в какие у лично вашей реализации есть недостатки (я лично в этом участвую редко, т.к. не всегда есть желание разбирать чужой код) или как можно было бы лучше организовать модель.

но брать свой же ранее написанный код и разжовывать его - вы уж простите.

Автор: Los_Caballeros 25.05.09, 18:17
Предметная область:
Роботизированная производственная система имеет два станка с числовым программным управлением, три робота, пункт прибытия и склад обработанных деталей. Детали прибывают на пункт прибытия в соответствии с экспоненциальным законом распределения со средним значением t0 секунд, захватываются одним из свободных роботов и перемещаются к первому станку, после чего робот освобождается. После завершения обработки на первом станке деталь захватывается одним из роботов и перемещается на второй станок, а после обработки на втором станке одним из роботов перемещается на склад обработанных деталей.
Время перемещения робота между пунктом прибытия и первым станком, первым и вторым станками, вторым станком и складом составляет t1, t2, t3 секунд, соответственно, независимо от того, «холостой» это ход или нет. Роботу необходимо время t4 ± t5 секунд на захват или освобождение деталей. Время обработки на первом станке распределено по нормальному закону со средним значением t6 секунд и имеет стандартное отклонение t7 секунд. Время обработки на втором станке имеет экспоненциальный закон распределения со средним значением t8 секунд.
Каждый робот может использоваться на каждом из путей перемещения деталей (при этом должен использоваться ближайший
из роботов).

Ниже приводится получившаяся модель на GPSS. В её коде можно условно выделить три аналогичные части, отделённые "***". Так вот проблема в том, что первые две части и третья по отдельности работают, а вместе, как приведено ниже, нет. Подскажите, пожалуйста, в чём дело!

; исходные данные
INITIAL X$t_0,70
INITIAL X$t_1,10
INITIAL X$t_2,15
INITIAL X$t_3,20
INITIAL X$t_4,15
INITIAL X$t_5,3
INITIAL X$t_6,140
INITIAL X$t_7,20
INITIAL X$t_8,180

INITIAL X$pos1,0 ; приёмный пункт
INITIAL X$pos2,1 ; станок 1
INITIAL X$pos3,2 ; станок 2

INITIAL X$progon,0 ; нужно для учёта времени холостого прогона робота к нужному станку

GENERATE (EXPONENTIAL(1,X$t_0#2,(X$t_0)))

QUEUE priem

; ищем робота находящегося возле приёмного пункта
proverka_pos1 TEST NE X$pos1,0,seize_robot1
proverka_pos2 TEST NE X$pos2,0,seize_robot2
proverka_pos3 TEST NE X$pos3,0,seize_robot3
; ищем робота находящегося возле 1-го станка
proverka_pos1_1 TEST NE X$pos1,1,izm_progon1
proverka_pos2_1 TEST NE X$pos2,1,izm_progon2
proverka_pos3_1 TEST NE X$pos3,1,izm_progon3
; ищем робота находящегося возле 2-го станка
proverka_pos1_2 TEST NE X$pos1,2,izm_progon11
proverka_pos2_2 TEST NE X$pos2,2,izm_progon22
proverka_pos3_2 TEST NE X$pos3,2,izm_progon33
; ищем робота находящегося возле 3-го станка
proverka_pos1_3 TEST NE X$pos1,3,izm_progon111
proverka_pos2_3 TEST NE X$pos2,3,izm_progon222
proverka_pos3_3 TEST NE X$pos3,3,izm_progon333

TRANSFER ,proverka_pos1

; определение времени движения ближайшего робота до станка
izm_progon1 SAVEVALUE progon,X$t_1
TRANSFER ,seize_robot1
izm_progon2 SAVEVALUE progon,X$t_1
TRANSFER ,seize_robot2
izm_progon3 SAVEVALUE progon,X$t_1
TRANSFER ,seize_robot3
izm_progon11 SAVEVALUE progon,(X$t_1 + X$t_2)
TRANSFER ,seize_robot1
izm_progon22 SAVEVALUE progon,(X$t_1 + X$t_2)
TRANSFER ,seize_robot2
izm_progon33 SAVEVALUE progon,(X$t_1 + X$t_2)
TRANSFER ,seize_robot3
izm_progon111 SAVEVALUE progon,(X$t_1 + X$t_2 + X$t_3)
TRANSFER ,seize_robot1
izm_progon222 SAVEVALUE progon,(X$t_1 + X$t_2 + X$t_3)
TRANSFER ,seize_robot2
izm_progon333 SAVEVALUE progon,(X$t_1 + X$t_2 + X$t_3)
TRANSFER ,seize_robot3

; моделирование работы робота
seize_robot1 SEIZE robot1
SAVEVALUE pos1,1
DEPART priem
ADVANCE (X$t_1+X$t_4+X$t_5 + X$progon)
RELEASE robot1
TRANSFER ,metka_stanok1

seize_robot2 SEIZE robot2
SAVEVALUE pos2,1
DEPART priem
ADVANCE (X$t_1+X$t_4+X$t_5 + X$progon)
RELEASE robot2
TRANSFER ,metka_stanok1

seize_robot3 SEIZE robot3
SAVEVALUE pos3,1
DEPART priem
ADVANCE (X$t_1+X$t_4+X$t_5 + X$progon)
RELEASE robot3
TRANSFER ,metka_stanok1

;моделирование работы станка
metka_stanok1 QUEUE pered_stankom1
SEIZE stanok1
DEPART pered_stankom1
ADVANCE (normal (1, X$t_6, X$t_7))
RELEASE stanok1

**************************************************************************************

QUEUE posle_stanka1

;
a_proverka_pos1 TEST NE X$pos1,1,a_seize_robot1
a_proverka_pos2 TEST NE X$pos2,1,a_seize_robot2
a_proverka_pos3 TEST NE X$pos3,1,a_seize_robot3
;
a_proverka_pos1_1 TEST NE X$pos1,0,a_izm_progon1
a_proverka_pos2_1 TEST NE X$pos2,0,a_izm_progon2
a_proverka_pos3_1 TEST NE X$pos3,0,a_izm_progon3
;
a_proverka_pos1_2 TEST NE X$pos1,2,a_izm_progon11
a_proverka_pos2_2 TEST NE X$pos2,2,a_izm_progon22
a_proverka_pos3_2 TEST NE X$pos3,2,a_izm_progon33
;
a_proverka_pos1_3 TEST NE X$pos1,3,a_izm_progon111
a_proverka_pos2_3 TEST NE X$pos2,3,a_izm_progon222
a_proverka_pos3_3 TEST NE X$pos3,3,a_izm_progon333

TRANSFER ,a_proverka_pos1

a_izm_progon1 SAVEVALUE progon,X$t_1
TRANSFER ,a_seize_robot1
a_izm_progon2 SAVEVALUE progon,X$t_1
TRANSFER ,a_seize_robot2
a_izm_progon3 SAVEVALUE progon,X$t_1
TRANSFER ,a_seize_robot3
a_izm_progon11 SAVEVALUE progon,X$t_2
TRANSFER ,a_seize_robot1
a_izm_progon22 SAVEVALUE progon,X$t_2
TRANSFER ,a_seize_robot2
a_izm_progon33 SAVEVALUE progon,X$t_2
TRANSFER ,a_seize_robot3
a_izm_progon111 SAVEVALUE progon,(X$t_2 + X$t_3)
TRANSFER ,a_seize_robot1
a_izm_progon222 SAVEVALUE progon,(X$t_2 + X$t_3)
TRANSFER ,a_seize_robot2
a_izm_progon333 SAVEVALUE progon,(X$t_2 + X$t_3)
TRANSFER ,a_seize_robot3

a_seize_robot1 SEIZE robot1
SAVEVALUE pos1,2
DEPART posle_stanka1
ADVANCE (X$t_2+X$t_4+X$t_5 + X$progon)
RELEASE robot1
TRANSFER ,a_metka_stanok2

a_seize_robot2 SEIZE robot2
SAVEVALUE pos2,2
DEPART posle_stanka1
ADVANCE (X$t_2+X$t_4+X$t_5 + X$progon)
RELEASE robot2
TRANSFER ,a_metka_stanok2

a_seize_robot3 SEIZE robot3
SAVEVALUE pos3,2
DEPART posle_stanka1
ADVANCE (X$t_2+X$t_4+X$t_5 + X$progon)
RELEASE robot3
TRANSFER ,a_metka_stanok2

a_metka_stanok2 QUEUE pered_stankom2
SEIZE stanok2
DEPART pered_stankom2
ADVANCE (EXPONENTIAL(1,0,(1/X$t_8)))
RELEASE stanok2

************************************************************************************

QUEUE posle_stanka2

;
b_proverka_pos1 TEST NE X$pos1,2,b_seize_robot1
b_proverka_pos2 TEST NE X$pos2,2,b_seize_robot2
b_proverka_pos3 TEST NE X$pos3,2,b_seize_robot3
;
b_proverka_pos1_1 TEST NE X$pos1,1,b_izm_progon1
b_proverka_pos2_1 TEST NE X$pos2,1,b_izm_progon2
b_proverka_pos3_1 TEST NE X$pos3,1,b_izm_progon3
;
b_proverka_pos1_2 TEST NE X$pos1,3,b_izm_progon11
b_proverka_pos2_2 TEST NE X$pos2,3,b_izm_progon22
b_proverka_pos3_2 TEST NE X$pos3,3,b_izm_progon33
;
b_proverka_pos1_3 TEST NE X$pos1,0,b_izm_progon111
b_proverka_pos2_3 TEST NE X$pos2,0,b_izm_progon222
b_proverka_pos3_3 TEST NE X$pos3,0,b_izm_progon333

TRANSFER ,b_proverka_pos1

b_izm_progon1 SAVEVALUE progon,X$t_2
TRANSFER ,b_seize_robot1
b_izm_progon2 SAVEVALUE progon,X$t_2
TRANSFER ,b_seize_robot2
b_izm_progon3 SAVEVALUE progon,X$t_2
TRANSFER ,b_seize_robot3
b_izm_progon11 SAVEVALUE progon,X$t_3
TRANSFER ,b_seize_robot1
b_izm_progon22 SAVEVALUE progon,X$t_3
TRANSFER ,b_seize_robot2
b_izm_progon33 SAVEVALUE progon,X$t_3
TRANSFER ,b_seize_robot3
b_izm_progon111 SAVEVALUE progon,(X$t_1 + X$t_2)
TRANSFER ,b_seize_robot1
b_izm_progon222 SAVEVALUE progon,(X$t_1 + X$t_2)
TRANSFER ,b_seize_robot2
b_izm_progon333 SAVEVALUE progon,(X$t_1 + X$t_2)
TRANSFER ,b_seize_robot3

b_seize_robot1 SEIZE robot1
SAVEVALUE pos1,3
DEPART posle_stanka2
ADVANCE (X$t_3+X$t_4+X$t_5 + X$progon)
RELEASE robot1
TRANSFER ,konec

b_seize_robot2 SEIZE robot2
SAVEVALUE pos2,3
DEPART posle_stanka2
ADVANCE (X$t_3+X$t_4+X$t_5 + X$progon)
RELEASE robot2
TRANSFER ,konec

b_seize_robot3 SEIZE robot3
SAVEVALUE pos3,3
DEPART posle_stanka2
ADVANCE (X$t_3+X$t_4+X$t_5 + X$progon)
RELEASE robot3

konec TERMINATE

main GENERATE 28800
TERMINATE 1
start 10

Автор: Eugen 25.05.09, 18:33
Сенсей снова с нами TEMENb в чем же тогда причина, что очереди забиты уж очень сильно..??
Los_Caballeros Основной гемор здесь
Цитата
(при этом должен использоваться ближайший из роботов).
тут возникает много вариантов и лучше спросить у препода, уточнить процедуру перехода роботов из А в Б... моделька оч.большая и ошибокой мож. быть много. Логику управления передвижениями роботов лучше вынести в PLUS процедуры...

Автор: Angellina 25.05.09, 20:25
Исходные данные к проектированию: средство реализации GPSS World.
Объект моделирования – экспертная система, пополняемая записями экспертов. В начальный момент времени вероятность выдачи правильного ответа по запросу каждого типа равна нулю. По проектным прогнозам, в связи с работой экспертов по пополнению системы, со временем эксплуатации системы вероятность выдачи правильного результата возрастает. Проектные прогнозы представлены в таблице.

дни 1 2 3 4 5 6 7 8
Вер.А 47,7 71,6 84,7 89,3 94,5 97,1 97,1 96,4
Вер.В 31,3 51,5 65,2 77,8 82,1 84,2 89,2 92,0
Вер.С 24,0 47,1 57,7 65,7 74,5 81,4 83,3 84,2

дни 9 10 11 12 13 14 15 16
Вер.А 97,8 96,4 97,9 99,5 98,0 97,1 98,0 98,8
Вер.В 92,4 92,2 95,6 94,2 93,1 94,6 95,4 96,4
Вер.С 87,9 90,9 90,3 89,2 91,6 92,0 90,6 92,5

дни 17 18 19 20
Вер.А 98,0 97,1 98,0 99,2
Вер.В 94,9 93,4 95,0 93,7
Вер.С 94,2 93,6 92,8 94,0

Система начинает принимать к обслуживанию запросы пользователей типа А, когда вероятность выдачи правильного ответа для этого типа достигнет 58%; запросы типа В – при 65%; типа С – при 80%. С остаточной вероятностью для каждого типа запроса выдается неверный результат. Запросы типа С обладают абсолютным приоритетом, прерванное обслуживание завершается после обслуживания приоритетного запроса. Если по какому-либо из типов запросов неверный результат выдается три раза подряд, то работы системы приостанавливается для корректировки. Запросы, поступающие во время корректировки, ожидают ее завершения во входной очереди. Время обработки запроса зависит от типа; начальные значения параметров распределения времен обработки представлены в таблице. С момента начала обслуживания запросов каждого типа математическое ожидание времени обработки уменьшается на 0,05% от начального значения после обслуживания очередного запроса до тех пор, пока не достигнет 0,35 от начального значения; далее эта величина не изменяется. Единица измерения времени в таблице исходных данных – минуты.

тип А тип В тип С обсл. А обсл. В обсл. С корректировка
эксп. эксп. эксп. эксп. эксп. эксп. эксп.
l=0,07 l=0,028 l=0,02 l=0,5 l=0,2 l=0,083 l=0,1



Вот что у меня получилось.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    PROV1   BVARIABLE X$VER1'L'0.58
    ;
    PROV2   BVARIABLE X$VER2'L'0.65
    ;
    PROV3   BVARIABLE X$VER3'L'0.80
    ;
    PROVA   BVARIABLE   (P10'E'11)'OR'(P10'E'12)
    ;булева переменная проверяющая, что заявка является заявкой типа A
     
    INITIAL X$VER1,0
    ;Переменная, которая хранит вероятность выдачи верного результата на запрос типа A
    INITIAL X$VER2,0
    ;Переменная, которая хранит вероятность выдачи верного результата на запрос типа B
    INITIAL X$VER3,0
    ;Переменная, которая хранит вероятность выдачи верного результата на запрос типа C
    INITIAL X$MO1,2
    ;Переменная, которая хранит математическое ожидание обслуживания запроса типа A
    INITIAL X$MO2,5
    ;Переменная, которая хранит математическое ожидание обслуживания запроса типа B
    INITIAL X$MO3,12.048
    ;Переменная, которая хранит математическое ожидание обслуживания запроса типа C
    INITIAL X$COUNT1,0
    ;Переменная, которая хранит значение счетчика неверных ответов на запрос типа A
    INITIAL X$COUNT2,0
    ;Переменная, которая хранит значение счетчика неверных ответов на запрос типа B
    INITIAL X$COUNT3,0
    ;Переменная, которая хранит значение счетчика неверных ответов на запрос типа C
     
     
    T_A GENERATE (Exponential(1,0,14.286))
    ;генерирование заявок типа A
        MARK    20
    ;в параметр 20 каждой заявки записывается значение времени прошедшего с начала моделирования
        SAVEVALUE   VER1,((-3#10^(-24)#P20^6+3#10^(-19)#P20^5-2#10^(-14)#P20^4+4#10^(-10)#P20^3-5#10^(-6)#P20^2+0.0317#P20+11.3)/100)
    ;вычисление значения вероятности выдачи правильного ответа по запросу типа A и сохранение значения в переменной VER1
        TEST NE BV$PROV1,1,OUT1
    ;проверка, определяющая может ли начинаться обработка запросов типа A,
    ;если вероятность выдачи правильного ответа >=58%, то далее
        TRANSFER    X$VER1,T_A1,T_A2
     
    T_B GENERATE (Exponential(1,0,35.714))
    ;генерирование заявок типа B
        MARK    20
    ;в параметр 20 каждой заявки записывается значение времени прошедшего с начала моделирования
        SAVEVALUE   VER2,((3#10^(-20)#P20^5-3#10^(-15)#P20^4+10^(-10)#P20^3-2#10^(-6)#P20^2+0.0225#P20+3.431)/100)
    ;вычисление значения вероятности выдачи правильного ответа по запросу типа B и сохранение значения в переменной VER2
        TEST NE BV$PROV2,1,OUT1
    ;проверка, определяющая может ли начинаться обработка запросов типа B,
    ;если вероятность выдачи правильного ответа >=65%, то далее
        TRANSFER    X$VER2,T_B1,T_B2
     
    T_C GENERATE    (Exponential(1,0,50))
    ;генерирование заявок типа C
        MARK    20
    ;в параметр 20 каждой заявки записывается значение времени прошедшего с начала моделирования
        SAVEVALUE   VER3,((-6#10^(-16)#P20^4+4#10^(-11)#P20^3-10^(-6)#P20^2+0.0171#P20+4.0942)/100)
    ;вычисление значения вероятности выдачи правильного ответа по запросу типа С и сохранение значения в переменной VER3
        TEST NE BV$PROV3,1,OUT1
    ;проверка, определяющая может ли начинаться обработка запросов типа С,
    ;если вероятность выдачи правильного ответа >=80%, то далее
        PRIORITY    2
    ;установка приоритета запросов типа С равным 2
        TRANSFER    X$VER3,T_C1,T_C2
     
    ;запись типов заявок в 10 параметр каждой заявки
    ;где 11,21,31 правильные ответы на запросы типа A, B, C соответственно и
    ;где 12,22,32 неверные ответы на запросы типа A, B, C соответственно
    T_A1    ASSIGN  10,11
        TRANSFER    ,TAB_SERV
     
    T_A2    ASSIGN  10,12
        TRANSFER    ,TAB_SERV
     
    T_B1    ASSIGN  10,21
        TRANSFER    ,TAB_SERV
     
    T_B2    ASSIGN  10,22
        TRANSFER    ,TAB_SERV
     
    T_C1    ASSIGN  10,31
        TRANSFER    ,TC_SERV
     
    T_C2    ASSIGN  10,32
        TRANSFER    ,TC_SERV
     
    ;Блок обслуживания заявок
     
    TAB_SERV    QUEUE   O1
    ;помещение заявок в очередь
        SEIZE   DEVICE_S1          
    ;Проверка занятости устройства DEVICE_S1
        DEPART  O1          
    ;Выход заявки из очереди О1
        TEST E  BV$PROVA,1,TB_SERV
    ;проверка, если запрос типа A, переход далее, иначе на обслуживание заявок типа B
     
    TA_SERV ADVANCE (Exponential(1,0,MO1))
    ;задержка заявки типа A на время, необходимое для обработки
        RELEASE DEVICE_S1          
    ;Освобождение устройства DEVICE_S1
        SAVEVALUE   MO1-,0.001
    ;уменьшение значения мат.ожидания на 0.05% oт начального значения после обслуживания очередного запроса
        TEST LE X$MO1,0.7,TA_ERR
        SAVEVALUE   MO1,0.7
    ;проверка, не достигло ли мат.ожидание 0,35 от начального значения
    ;если достигло, то мат.ожидание становится равным этому значению
     
    TA_ERR  TEST E  P10,12,OUT_OK
    ;проверка, если тип заявки 12 (неверный ответ на запрос типа A) переход далее к счетчику
        SAVEVALUE   COUNT1+,1
    ;увеличение значения счетчика на 1
        TEST E  X$COUNT1,3,OUT_OK
    ;проверка, если значение счетчика=3, то переход далее на корректировку системы и обнуление счетчика
        ADVANCE (Exponential(1,0,10))    
        SAVEVALUE   COUNT1,0
        TRANSFER    ,OUT_OK
     
    TB_SERV ADVANCE (Exponential(1,0,MO2))
    ;задержка заявки типа B на время, необходимое для обработки
        RELEASE DEVICE_S1          
    ;Освобождение устройства DEVICE_S1
        SAVEVALUE   MO2-,0.0025
    ;уменьшение значения мат.ожидания на 0.05% oт начального значения после обслуживания очередного запроса
        TEST LE X$MO2,1.75,TB_ERR
        SAVEVALUE   MO2,1.75
    ;проверка, не достигло ли мат.ожидание 0,35 от начального значения
    ;если достигло, то мат.ожидание становится равным этому значению
     
    TB_ERR  TEST E  P10,22,OUT_OK
    ;проверка, если тип заявки 22 (неверный ответ на запрос типа B) переход далее к счетчику
        SAVEVALUE   COUNT2+,1
    ;увеличение значения счетчика на 1
        TEST E  X$COUNT2,3,OUT_OK
    ;проверка, если значение счетчика=3, то переход далее на корректировку системы и обнуление счетчика
        ADVANCE (Exponential(1,0,10))    
        SAVEVALUE   COUNT2,0
        TRANSFER    ,OUT_OK
     
    TC_SERV QUEUE   O_PR            
    ;Вход заявки в очередь О_PR для запросов типа С обладающих абсолютным приоритетом
        PREEMPT DEVICE_S1,PR    
    ;Прерывание обслуживания заявки первого типа в устройстве DEVICE_S1
        DEPART  O_PR            
    ;Выход заявки из очереди О_PR
        ADVANCE (Exponential(1,0,MO3))
    ;задержка заявки типа C на время, необходимое для обработки
        RETURN  DEVICE_S1          
    ;Освобождение устройства DEVICE_S1
        SAVEVALUE   MO3-,0.006024
    ;уменьшение значения мат.ожидания на 0.05% oт начального значения после обслуживания очередного запроса
        TEST LE X$MO3,4.2168,TC_ERR
        SAVEVALUE   MO3,4.2168
    ;проверка, не достигло ли мат.ожидание 0,35 от начального значения
    ;если достигло, то мат.ожидание становится равным этому значению
     
    TC_ERR  TEST E  P10,32,OUT_OK
    ;проверка, если тип заявки 32 (неверный ответ на запрос типа С) переход далее к счетчику
        SAVEVALUE   COUNT3+,1
    ;увеличение значения счетчика на 1
        TEST E  X$COUNT3,3,OUT_OK
    ;проверка, если значение счетчика=3, то переход далее на корректировку системы и обнуление счетчика
        ADVANCE (Exponential(1,0,10))    
        SAVEVALUE   COUNT3,0
        TRANSFER    ,OUT_OK
     
    OUT1    TERMINATE 1
     
    OUT_OK  TERMINATE 1
        
    START 1000000


У меня возникли следующие проблемы:
1) Как в программе прописать определенное время моделирования;
2) Как учесть то, что заявки, обслуживание которых прервано из-за обслуживания более приоритетной типа C, должны дообслуживаться;
3) Как учесть то, что запросы, поступающие во время корректировки, ожидают ее завершения во входной очереди;
4) И как сделать так, чтобы вероятность выдачи правильного ответа не могла превышать 1.

Добавлено
И еще при любом числе прогонов от 1000 до 10000000 (1000, 10000, 100000, 1000000, 10000000) количество запросов типа A, которые заходят в систему всегда равно 554, по-моему это как-то странно

Автор: TEMENb 25.05.09, 22:51
Los_Caballeros, я в прошлом семестре гемороился над реализацией этой задачи три дня. Сделал без плюс процедур, но блин программа вышла такая, что черт ногу сломит.
90 функциональных блоков, если мне память не изменяет.

Добавлено
Цитата Angellina @
1) Как в программе прописать определенное время моделирования;
для этого надо поставить еще один сегмент.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 1000
    terminate 1
что означает, что моделирование закончится через 100 емв. (не забудьте поубирать единицы их прочих терминейтов)
Цитата Angellina @
2) Как учесть то, что заявки, обслуживание которых прервано из-за обслуживания более приоритетной типа C, должны дообслуживаться;
блок примит сам по себе ставит заявки в список будущих событий, т.е. на дообслуживание. исключение, если вы посылаете транзакты, получившие отказ, в альтернативный блок. Впрочем даже в этом случае транзакт стоит в списке будущих событий и устройство вроде как не покидал, но я не вкурсе как его тогда вернуть на дообслуживание. Впрочем на сколько я вижу вы не посылаете на альтернативный блок => транзакты сами по себе дообслуживаются после обслуживания более приоритетного транзакта. более подробно тут.
Цитата Angellina @
3) Как учесть то, что запросы, поступающие во время корректировки, ожидают ее завершения во входной очереди;
сразу признаюсь, что код ваш я не читал. и зарание приношу извинения, если отвечу невпопад.
Но.
Если вам надо сделать какую то задержку по условию - попробуйте воспользоваться блоком TEST.
Как ваша система выглядит во время коректировки?
Если ввести переменную, которая в начале коректировки получает значение 1, а по окончании коректировки получает значение 0, то должна подойти структура вроде этой
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    test ne x$kor,1 ;если флаг коректировки не равен единице (значит коректировка не осуществляется), то дальше. иначе ожидать
ну или на метку отправить - в очередь, а выход из очереди - по аналогичному условию.
Цитата Angellina @
4) И как сделать так, чтобы вероятность выдачи правильного ответа не могла превышать 1.
А как сделать так, что бы ВЕРОЯТНОСТЬ могла превысить 1? :D

Автор: andreynov 25.05.09, 23:06
TEMENb, всё с тобой ясно, короче... Дольше отмазываешься, мог бы уже 5 раз объяснить, если бы хотел...

Автор: TEMENb 25.05.09, 23:09
Eugen, причина забитости очередей абсолютно всегда одна и та же - высокая интенсивность входящего потока и маленькая интенсивность пропускной способности канала.. что то вроде забитого унитаза :whistle:
а я к сожалению вантус дома забыл.. :D

Добавлено
andreynov, в этом нет ничего удивительного. я помогаю только тем, кто что то делает сам. Ито, к сожалению не хватает времени всем помочь. отдыхать всетаки мне тоже надо.
У вас же МОЙ код. я не считаю нужным его разжовывать.

Автор: andreynov 25.05.09, 23:16
TEMENb, я и не отрицаю, что твой! Задача схожая, всё что требуется в моем варианте, я подправил.
Отдыхать всем надо, но три строчки написать - не большой труд.

Автор: TEMENb 25.05.09, 23:31
пересмотрел свой архив. оба моих решения этой программы нормально функционируют. из этого делаю вывод, что причина плохого поведения модели в ваших апгрейдах.

Автор: andreynov 25.05.09, 23:39
Ну ты же знаешь эту задачу, делал уже... Посмотри, может где ошибку увидишь?
Вот например, после сборки 4% деталей отправляется на предварительную обработку, но они уже собраны, их опять надо разобрать на 2 части? Хотя, я думаю не в этом дело...

Автор: murzik 26.05.09, 11:00
Люди добрые помоги!!!!нужно решить задачу на языке GPSS/PS.Этот язык вообще не понимаю и не знаю!!!!
Задание:
В центре координации работ в одном из подразделений предполагается организовать обслуживание так же, как в системе с одним прибором и очередью; входящий поток является пуассоновсим с интенсивностью 4.5 клиентов в день. Несмотря на то, что клиенты делятся на три различных типа, время, необходимое для направления на работу, для них одинаково, распределено по экспоненциальному закону и имеет среднее значение 0.2 дня. Обслуживание клиентов происходит по принципу "первым пришел - первым обслужен". Однако важно то, что клиенты первого типа не могут долго ждать. Клиенты второго типа спешат, но не очень, а клиентам третьего типа почти безразлично время ожидания. Клиенты трех типов приходят со средней интенсивностью 1.5; 2.0 и 1.0 в день соответственно. Поскольку для всех трех типов среднее время ожидания достаточно велико, было предложено обслуживать клиентов на приоритетной основе.
Сравните время ожидания (включая время обслуживания) по каждому типу клиентов при дисциплине обслуживания:

• "первым пришел - первым обслужен";

• "первым пришел - первым обслужен внутри одного класса приоритетов".
Зарание огромное спасибо!!!!

Автор: tigreg 26.05.09, 12:05
Привет! В моей программе не работает параметр с именем ONE. В чем может быть причина?
INPUT TABLE V$IN,-2,0.2,20
OUTPUT TABLE V$OUT,-50,2,50

GTD MATRIX ,1,9
INITIAL MX$GTD(1,1),0.15
INITIAL MX$GTD(1,2),-1.45
INITIAL MX$GTD(1,3),6.29
INITIAL MX$GTD(1,4),6.29
INITIAL MX$GTD(1,5),24.74
INITIAL MX$GTD(1,6),-25.18
INITIAL MX$GTD(1,7),16.21
INITIAL MX$GTD(1,8),-6.04
INITIAL MX$GTD(1,9),1

IN VARIABLE P1
OUT VARIABLE P2
ONE EQU 1

SEG2 GENERATE 10
ASSIGN 1,(COS(3.14#2#RN1/1000)+COS(3.14#2#RN2/1000))
ASSIGN 2,(MX$GTD(1,ONE)#P1)
ASSIGN ONE+,1
TABULATE INPUT
TABULATE OUTPUT

QUEUE QUE
TEST L ONE,10,SEG1
depart que
TERMINATE 1

SEG1 ASSIGN ONE,1
TRANSFER ,SEG2

Автор: mds86 26.05.09, 12:59
Petroid
Можешь кинуть мне эту работу, уже в пятницу сдавать!
В системепередачиданныхосуществляетсяобмен пакетамиданных между пунктами А и В по дуплексному каналу связи. Пакеты поступают в пункты системы от абонентов с интервалами времени 10 ± 3 мс. Передача пакета занимает 10 см. В пунктах имеются буферные регистры, которые могут хранить два пакета (включая передаваемый). В случае прихода пакета в момент занятости регистров пунктам системы предоставляется выход на спутниковую полудуплексную линию связи, которая осуществляет передачу пакетовданных за 10 ± 5 мс. При занятости спутниковой линии пакет получает отказ.
Смоделироватьобмен информацией в системепередачиданных в течение 1 мин. Определить частоту вызовов спутниковой линии и ее загрузку. В случае возможных отказов определить необходимый для безотказной работы системы объем буферных регистров.
mds86@bk.ru заранее благодарю!

Автор: andreynov 26.05.09, 13:06
Цитата
В системе передачи данных осуществляется обмен пакетами данных между пунктами A и B по дуплексному каналу связи. Пакеты поступают в пункты системы от абонентов с интервалами времени между ними 10 ± 3 мс. Передача пакета занимает 10 мс. В пунктах имеются буферные регистры, которые могут хранить два пакета (включая передаваемый). В случае прихода пакета в момент занятости регистров пунктам системы предоставляется выход на спутниковую полудуплексную линию связи, которая осуществляет передачу пакетов данных за 10 ± 5 мс. При занятости спутниковой линии пакет получает отказ.
Смоделировать обмен информацией в системе передачи данных в течение 1 мин. Определить частоту вызовов спутниковой линии и ее загрузку. В случае возможности отказов определить необходимый для безотказной работы системы объем буферных регистров.


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    10          INITIAL      X$LOST,0           ; Обнуление числа потерянных пакетов
    20 SAT_FREQ TABLE        C1,10000,10000,6   ; Таблица для частоты вызовов спутниковой линии
    30 BUF_A    STORAGE      2          ; Буфер для хранения пакетов в пункте A
    40 BUF_B    STORAGE      2          ; Буфер для хранения пакетов в пункте B
    50 * Передача пакетов из пункта A в пункт B
    60          GENERATE     10,3           ; Поступление пакетов от абонентов
    70          GATE SNF     BUF_A,SAT          ; Если буфер заполнен не полностью
    75 * (в противном случае переход на спутниковый канал)
    80          ENTER        BUF_A          ; Помещение пакета в буфер
    90          ADVANCE      10             ; Передача пакета по каналу связи
    100         LEAVE        BUF_A          ; Удаление пакета из буфера
    110         TRANSFER     ,KILL          ; Уничтожение пакета
    120 * Передача пакетов из пункта B в пункт A
    130         GENERATE     10,3           ; Поступление пакетов от абонентов
    140         GATE SNF     BUF_B,SAT          ; Если буфер заполнен не полностью
    145 * (в противном случае переход на спутниковый канал)
    150         ENTER        BUF_B          ; Помещение пакета в буфер
    160         ADVANCE      10             ; Передача пакета по каналу связи
    170         LEAVE        BUF_B          ; Удаление пакета из буфера
    180         TRANSFER     ,KILL          ; Уничтожение пакета
    190 * Передача пакетов по спутниковому каналу
    200 SAT     TABULATE     SAT_FREQ,1             ; Подсчет пакетов, переданных на спутниковый канал
    210         GATE NU      SAT_LINE,OUT           ; Если спутниковая линия не занята
    75 * (в противном случае переход к подсчету утерянных пакетов)
    220         SEIZE        SAT_LINE           ; Занятие спутниковой линии пакетом
    230         ADVANCE      10,5           ; Передача пакета
    240         RELEASE      SAT_LINE           ; Освобождение спутниковой линии
    250         TRANSFER     ,KILL          ; Уничтожение пакета
    260 * Подсчет количества утерянных пакетов
    270 OUT     SAVEVALUE    LOST+,1
    280 KILL    TERMINATE               ; Уничтожение пакета
    285 * Моделирование в течение одной минуты
    290         GENERATE     1,,60000
    300         TERMINATE    1


mds86. Могу скинуть с отчётом. Это была моя курсовая работа :)
В отчёте даже блок схема-модели имеется, сам всё делал 8-)

Автор: mds86 26.05.09, 13:41
andreynov,скин если не сложно! буду очень признателен!!!! БОЛЬШОЕ ТЕБЕ СПАСИБО!!!

Автор: andreynov 26.05.09, 13:45
mds86, большое тебе пожалуйста :) я не жадный...
куда скинуть то?

Автор: mds86 26.05.09, 13:52
скинь на mds86@bk.ru! еще раз спасибо!

Автор: Eugen 26.05.09, 14:33
Цитата tigreg @
В моей программе не работает параметр с именем ONE. В чем может быть причина?
Зачем использовать одинаковые имена для переменной пользоватея ONE EQU 1 и для параметров транзакта P$ONE?

ASSIGN 2,(MX$GTD(1,ONE)#P1) - здесь обращение к переменной
ASSIGN ONE+,1 - к параметру
TEST L ONE,10,SEG1 - к переменной
SEG1 ASSIGN ONE,1 - к пареметру

возможно подойдет TEST L P$ONE,10,SEG1

andreynov не вижу разницы между следующими фрагментами. Если какой то транзакт занят ОКУ(МКУ), то он и должен его освободить
Цитата
19 TRANSFER 1 0 0
Цитата TEMENb @
причина забитости очередей абсолютно всегда одна и та же - высокая интенсивность входящего потока и маленькая интенсивность пропускной способности канала.. что то вроде забитого унитаза
Цитата andreynov @
Вот например, после сборки 4% деталей отправляется на предварительную обработку, но они уже собраны, их опять надо разобрать на 2 части?
Цитата TEMENb @
причина плохого поведения модели в ваших апгрейдах.

Автор: TEMENb 26.05.09, 15:10
Цитата Eugen @
Зачем использовать одинаковые имена для переменной пользоватея ONE EQU 1 и для параметров транзакта P$ONE?

ASSIGN 2,(MX$GTD(1,ONE)#P1) - здесь обращение к переменной
ASSIGN ONE+,1 - к параметру
TEST L ONE,10,SEG1 - к переменной
SEG1 ASSIGN ONE,1 - к пареметру



Симпатично получается )

в асоциируем переменной значение 1
Цитата Eugen @
ONE EQU 1

переменная подставляет значение 1
Цитата Eugen @
SSIGN 2,(MX$GTD(1,ONE)#P1) - здесь обращение к переменной

обращаемся к параметру 1 (переменная подставляет свое значение)
Цитата Eugen @
ASSIGN ONE+,1 - к параметру

обращаемся к переменной. т.е. условие вроде как если один меньше десяти ))
Цитата Eugen @
TEST L ONE,10,SEG1 - к переменной

обращаемся к параметру номер 1
Цитата Eugen @
SEG1 ASSIGN ONE,1 - к пареметру



И вопреки моим сомнениям, в этой конструкции мы обращаемся к так же к параметру номер 1 =)
Цитата Eugen @
TEST L P$ONE,10,SEG1

Автор: tigreg 26.05.09, 15:24
Спасибо, господа программисты... но с русским у вас что-то не то ;)

Автор: TEMENb 26.05.09, 15:26
tigreg, це тому що деякi з нас не зовсiм росiяни, швидше жителi колишнього СРСР ;)

Автор: tigreg 26.05.09, 15:31
ну, ясно тогда :)

Автор: andreynov 26.05.09, 15:40
Eugen, ты скажи конкретно, что не так? до того, как отправить уже собранную деталь обратно на предварительную обработку (4%) нужно освободить память? я правильно понял?
если так, то так уже делал, очереди такие же большие. это верное замечание, но немного не в тему

Автор: Eugen 26.05.09, 15:51
SEG1 ASSIGN ONE,1 - к пареметру транзакта с именем ONE, или к параметру, чей номер указан в перемнной ONE???

TEST L P$ONE,10,SEG1 - здесь то явно указано P$ - параметр транзакта ONE
ИЛИ
TEST L P*ONE,10,SEG1 - здесь косвенная адресация. Обращаемся к параметру чей номер указан в переменной ONE(сработает/нет hz)
что не так?

Добавлено
не в тему, то что транзакт не освободив МКУ помещается в список пользователя, вот это не в тему

Автор: TEMENb 26.05.09, 16:00
Цитата Eugen @
SEG1 ASSIGN ONE,1 - к пареметру транзакта с именем ONE, или к параметру, чей номер указан в перемнной ONE???

TEST L P$ONE,10,SEG1 - здесь то явно указано P$ - параметр транзакта ONE
ИЛИ
TEST L P*ONE,10,SEG1 - здесь косвенная адресация. Обращаемся к параметру чей номер указан в переменной ONE(сработает/нет hz)
что не так?

Проверяй сам )

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ONE EQU 1
        GENERATE    1
        ASSIGN  ONE,10
        ASSIGN  1+,1
        SAVEVALUE   FIR,P1
        SAVEVALUE   SEC,P$ONE
        TERMINATE   1
     
        START   1


Добавлено
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ONE EQU 1
        GENERATE    1
        ASSIGN  ONE,10
        SAVEVALUE   FIR2,P1
        SAVEVALUE   SEC2,P$ONE
        ASSIGN  1+,1
        SAVEVALUE   FIR1,P1
        SAVEVALUE   SEC1,P$ONE
        TERMINATE   1
     
        START   1

Автор: gvard 26.05.09, 16:08
Добрый вечер! Прошу помочь мне.
Есть такое задание:

В студенческом машинном зале расположены две мини-ЭВМ и одно устройство подготовки данных (УПД). Студенты приходят с интервалом 8±3 мин. и треть из них хочет испытать УПД и ЭВМ, а остальные только ЭВМ. Допустимое количество студентов в машинном зале 4 чел., включая работающего на УПД.
Работа на УПД занимает 9±4 мин. Работа на ЭВМ - 15±10 мин.; 20% работавших на ЭВМ возвращаются для повторного использования УПД и ЭВМ и остаются при этом в машинном зале.
Если студент пришел в машинный зал, а там уже есть 4 чел., то он ждет не более 15±2 мин. в очереди в машинный зал и, если нет возможности в течение этого времени начать работать, то он уходит.
Смоделировать работу в машинном зале в течение 48 часов.
Определить:
- загрузку УПД и обеих ЭВМ,
- максимальную длину очереди в машинный зал,
- среднее время ожидания в очереди в машинный зал,
- распределение общего времени работы студента в машинном зале,
- количество студентов, которые не дождались возможности поработать и ушли.

И соответственно код этой программы:
SIMULATE
GENERATE 8,3 ;генерация транзактов, изображающих студентов
VB1 VARIABLE RN1/200+13 ;вычисление максимально возможного времени пребывания студента в очереди
ASSIGN 3,0 ;разница между временем встраивания студента в очередь и текущим моментом
ASSIGN 2,V$VB1 ;запись максимального времени
ASSIGN 1,X1 ;время вхождения студента в очередь
TEST NE X3,0,ENR ;если очередь пуста, перейти к проверке занятости машинного зала
ENO QUEUE OZD ;регистрация в очереди
SAVEVALUE 3+,1 ;увеличение размера очереди
ADC ADVANCE 1 ;задержка студента в ожидании свободного места в машинном зале
GATE SF CCL,DPT ;если в машинном зале есть место, покинуть очередь
SAVEVALUE 2,X1 ;запись текущего времени
SAVEVALUE 2-,P1 ;вычисление разницы между текущим временем и временем вхождения
ASSIGN 3,X2 ;и запись разницы
TEST LE P3,P2,DPT ;если разница превысила время ожидания, покинуть очередь,
TRANSFER ,ADC ;в противном случае, снова ждать одну минуту
DPT SAVEVALUE 3-,1 ;уменьшение числа студентов в очереди
DEPART OZD ;студент покидает очередь
TEST G P3,P2,EN1 ;если разница не превышает времени ожидания, занять место в зале,
TERMINATE ;в противном случае, покинуть машинный зал
ENR GATE SNF CCL,ENO ;если в машинном зале нет мест, встать в очередь,
EN1 ENTER CCL ;в противном случае, занять свободное место
MARK ;отметка начала работы студента в машинном зале
TRANSFER .333,CP1,UP1 ;треть студентов выполняет работу на УПД и ЭВМ, остальные только на ЭВМ
UP1 SEIZE UPD ;студент занимает место на УПД
ADVANCE 9,4 ;и работает некоторое время,
RELEASE UPD ;затем покидает УПД и
CP1 ENTER COM ;занимает место за одной из двух ЭВМ,
ADVANCE 15,10 ;работает в течении нескольких минут и
LEAVE COM ;покидает ЭВМ
TRANSFER .200,LVE,UP1 ;20%студентов возвращаются для повторного использования УПД и ЭВМ
LVE LEAVE CCL ;студент покидает машинный зал
TABULATE MWT ;фиксация времени пребывания студента в машинном зале
TERMINATE ;студент уходит
GENERATE 1 ;моделирование времени работы системы
SAVEVALUE 1+,1 ;счетчик времени (в минутах)
TRM TERMINATE 1 ;одна минута системного времени прошла
CCL STORAGE 4 ;вместительность машинного зала
COM STORAGE 2 ;количество ЭВМ
MWT TABLE M1,15,15,15 ;описание таблицы распределения общего времени работы студента в машинном зале
START 2880 ;работа системы в течении 48 часов (60*48=2880 часов)

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

В студенческом машинном зале расположены две ЭВМ и одно устройство подготовки данных (УПД). Студенты приходят с интервалом в 8±2 мин, и треть из них хочет использовать УПД и ЭВМ, а остальные только ЭВМ. Допустимая очередь в машинном зале составляет четыре человека, включая работающего на УПД. Работа на УПД занимает 8±1 мин, а на ЭВМ – 17 мин. Кроме того, 20 % работавших на ЭВМ возвращается для повторного использования УПД и ЭВМ.Смоделировать работу машинного зала в течение 60 ч. Определить загрузку УПД, ЭВМ и вероятности отказа в обслуживании вследствие переполнения очереди. Определить соотношение желающих работать на ЭВМ и на УПД в очереди.

Если у кого-то есть программа скиньте пожалуйста на мыло: oleg-ryabov@mail.ru
Заранее благодарен.

Автор: Eugen 26.05.09, 16:24
ONE EQU 1
GENERATE 1
ASSIGN ONE,10
ASSIGN 1+,1
SAVEVALUE FIR,P1
SAVEVALUE SEC,P$ONE

ASSIGN P$ONE,5 :blink:
SAVEVALUE THREE,p11
TERMINATE 1

START 1
Цитата tigreg @
можно ли задать значение параметра до блока GENERATE?
нет. Зачем?

Автор: tigreg 26.05.09, 16:51
Для того, чтобы параметр one принимал значения от 1 до 10. Сейчас у меня ни один транзакт не попадает в seg1, потому что каждый раз, пар-ру one присваивается значение 0. но вот если бы оно присваивалось выше generate...

ONE EQU 1

SEG2 GENERATE 10
ASSIGN ONE,0
ASSIGN 1+,1
ASSIGN 3,(COS(3.14#2#RN1/1000)+COS(3.14#2#RN2/1000))
ASSIGN 4,(MX$GTD(1,P1)#P3)

TABULATE INPUT
TABULATE OUTPUT

QUEUE QUE
TEST L P1,10,SEG1
DEPART QUE
TERMINATE 1

SEG1 ASSIGN 1,1
TRANSFER ,SEG2

Автор: TEMENb 26.05.09, 16:52
Цитата Eugen @
ASSIGN P$ONE,5
SAVEVALUE THREE,p11
:yes:

ASSIGN A,B

А и В - параметры. в качестве параметра в качестве параметров могут выступать имя, k, СЧАj, СЧА$имя или СЧА*j,
где
k Неотрицательная целая константа;
имя Символическое имя;
СЧАj Общее наименование стандартного числового атрибута, за которым следует числовое имя;
СЧА$имя Общее наименование стандартного числового атрибута, за которым следует знак доллара ($) и символическое имя элемента;
СЧА*j Общее наименование стандартного числового атрибута, за которым следует звездочка (*) и номер параметра, величина которого соответствует (числовому) имени элемента.

шрайбер. приложение 2. Список блоков gpss.

Автор: andreynov 26.05.09, 16:52
Eugen, изменил на:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MET4    ENTER   SBOR    ;занять устройство сборки
        DEPART  OCH2    ;покинуть очередь 2
        ASSEMBLE    2   ;собрать из двух деталей одну
        ADVANCE 6   ;Задержка на время обработки
        LEAVE   SBOR    ;покидаем сборку
        LEAVE   SBOR    ;пришло две детали, а входит одно. потому покидаем два раза.
        TRANSFER    .04,MET5    ;4 % деталей возвращаются на предв. обработку
        ADVANCE (Exponential(1,0,8));регулировка
        TERMINATE       ;транзакт покидает систему


Всё осталось так же. Вот отчет:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                  GPSS World Simulation Report - forum.10.1
     
     
                       Wednesday, May 27, 2009 01:50:10  
     
               START TIME           END TIME  BLOCKS  FACILITIES  STORAGES
                    0.000           1440.000    31        1          1
     
     
                  NAME                       VALUE  
              MET1                            2.000
              MET2                            5.000
              MET3                           13.000
              MET4                           15.000
              MET5                            6.000
              OCH1                        10001.000
              OCH2                        10003.000
              POVT                           25.000
              PREDV                       10002.000
              SBOR                        10000.000
     
     
     LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE             1             0       0
    MET1                2    ADVANCE            150             1       0
                        3    SPLIT              149             0       0
                        4    TRANSFER           149             0       0
    MET2                5    TRANSFER           447             0       0
    MET5                6    QUEUE              421           215       0
                        7    SEIZE              206             0       0
                        8    DEPART             206             0       0
                        9    ADVANCE            206             1       0
                       10    RELEASE            205             0       0
                       11    QUEUE              205             0       0
                       12    LINK               205             0       0
    MET3               13    QUEUE              218             0       0
                       14    LINK               218            13       0
    MET4               15    ENTER              410             0       0
                       16    DEPART             410             0       0
                       17    ASSEMBLE           410             0       0
                       18    ADVANCE            205             1       0
                       19    LEAVE              204             0       0
                       20    LEAVE              204             0       0
                       21    TRANSFER           204             0       0
                       22    ADVANCE             12             0       0
                       23    TERMINATE           12             0       0
                       24    GENERATE             1             0       0
    POVT               25    TEST               206             1       0
                       26    TEST               205             0       0
                       27    UNLINK             205             0       0
                       28    UNLINK             205             0       0
                       29    TRANSFER           205             0       0
                       30    GENERATE             1             0       0
                       31    TERMINATE            1             0       0
     
     
    FACILITY         ENTRIES  UTIL.   AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
     PREDV              206    0.999       6.982  1      192    0    0     0    215
     
     
    QUEUE              MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME   AVE.(-0) RETRY
     OCH1              216  215    421      1   107.430    367.455    368.330   0
     OCH2               21   13    423    205    12.592     42.868     83.179   0
     
     
    STORAGE            CAP. REM. MIN. MAX.  ENTRIES AVL.  AVE.C. UTIL. RETRY DELAY
     SBOR                2    0   0     2      410   1    1.705  0.852    0    0
     
     
    USER CHAIN         SIZE RETRY  AVE.CONT   ENTRIES  MAX     AVE.TIME
     1                   13    0     12.592      218    20       83.179
     2                    0    1      0.000      205     1        0.000
     
     
    FEC XN   PRI         BDT      ASSEM  CURRENT  NEXT  PARAMETER    VALUE
       418    0        1442.715      1     18     19
       192    0        1443.715      1      9     10
         1    0        1464.667      1      2      3
       451    0        2880.000    451      0     30

Автор: Angellina 26.05.09, 17:40
TEMENb
Спасибо за советы по первым вопросам, все получилось.
А по поводу последнего:
Цитата TEMENb @
Цитата Angellina @
4) И как сделать так, чтобы вероятность выдачи правильного ответа не могла превышать 1.

А как сделать так, что бы ВЕРОЯТНОСТЬ могла превысить 1?


К сожалению, в моей программе именно так и получается, а еще и отрицательная бывает :wacko:
Поэтому я и спрашиваю.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SAVEVALUE               RETRY       VALUE
     VER1                     0   -2.71921e+010                          
     VER2                     0   270912626.430                          
     VER3                     0   -5.6089e+006

Автор: real_live 27.05.09, 09:18
Всем привет и доброго времени суток. У меня следующая проблема, нужно решить задачу и смоделировать её в GPSS World (очень простая по структуре), ищу человека хорошего знающего GPSS, для её решения, за соответсвующие вознаграждение. Просто сам в запарке и не когда нормально сесть за прогу. Пишите мне на мыло filosof21veka@mail.ru или звоните на мобильный 89636488666.

Автор: Eugen 27.05.09, 12:15
пиши сам


Добавлено
andreynov, уже лучше все работает, длиная очередь из-за малой пропускной способности здесь
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MET5    QUEUE   OCH1    ;занять очередь 1
        SEIZE   PREDV   ;первичная обработка
        DEPART  OCH1    ;покинуть очередь
        ADVANCE 7   ;задержка на время обработки
или большого количества транзактов повторно возвращаемых к этому устройству

В отчете есть строки
Цитата
21 TRANSFER 204 0 0
22 ADVANCE 12 0 0
отсюда видно что 204 транзакта прошли блок TRANSFER. Из них 12 транзактов прошли вниз к ADVANCE и 192 в другой блок. Возможно это ошибка - не хватает "," в TRANSFER

TRANSFER A,metB,metC (TRANSFER A,,C)
A - вероятность с которой транзакты направляются к метке metC. К метке metB проходят все остальные, если она не указана то вниз


Добавлено
Цитата tigreg @
Сейчас у меня ни один транзакт не попадает в seg1, потому что каждый раз, пар-ру one присваивается значение 0. но вот если бы оно присваивалось выше generate...
Не понятно что Вы хотите сделать.

Здесь TEST L P1,10,SEG1 - параметр P1 всегда равен 1.
Если напишите TEST L P1,1,SEG1 - и тразакт все же перейдет к метке SEG1, то вывалится сообщение
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    05/27/09 19:47:53  SEG2 GENERATE 10
    05/27/09 19:47:53    Invalid attempt to enter a GENERATE Block.

Автор: RetiF 27.05.09, 15:49
Цитата
На вход одноканальной системы обслуживания поступает два потока требований. Первый из них - пуассоновский с интенсивностью 0.2/мин. Во втором потоке интервалы поступления распределены равномерно на отрезке 16-40 мин. Интенсивность обслуживания требования устройством зависит от длины очереди на обслуживание. Если длина очереди меньше или равняется 3 (больше, чем 3), то время обслуживания имеет экспоненциальное распределение со средним значением 2(4) минут. Промоделировать работу системы на протяжении 100 часов


Учебники читал, но разобрался плохо. Как это - "поступает два потока требований"?
Также очень плохо понял, как объявляются функции. Они стандартные? Отличается только их использование в GENERATE и ADVANCE?

Вот что получилось:

Цитата
XPDIS FUNCTION RN1,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/.9998,8

INN FUNCTION RN2,C2
0,16/1,41

GENERATE 5,FN$XPDIS
GENERATE FN$INN

QUEUE A

TEST GE A,3,smaller
TEST L A,3,bigger

smaller DEPART A
ADVANCE 2,FN$XPDIS
TERMINATE

bigger DEPART A
ADVANCE 4,FN$XPDIS
TERMINATE

GENERATE 60
TERMINATE
START 100


Не работает, как и ожидалось

Автор: Eugen 27.05.09, 17:16
Работает! :whistle:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE 5,FN$XPDIS
    TRANSFER ,met1
    GENERATE FN$INN
     
    met1 QUEUE A
     
    ;TEST GE Q$A,3,smaller
    TEST L Q$A,3,bigger
     
    smaller SEIZE xxx
    DEPART A
    ADVANCE 2,FN$XPDIS
    RELEASE xxx
    TERMINATE
     
    bigger SEIZE xxx
    DEPART A
    ADVANCE 4,FN$XPDIS
    RELEASE xxx
    TERMINATE
     
    GENERATE 60
    TERMINATE 1
    START 100

Автор: RetiF 27.05.09, 21:10
Благодарю, сам бы я ещё очень долго ковырялся

Автор: cheepus 28.05.09, 05:54
вот такая у меня проблема, имеется задачка:
Из литейного цеха на участок обработки и сборки поступают заготовки через 20+-5мин. Треть из них обрабатывается в течение 60мин и поступает на комплектацию. Две трети заготовок обрабатывается за 30 мин перед комплектацией, которая требует наличия одной детали первого типа и двух деталей второго. После этого все три детали подаются на сборку, которая занимает 60+-2 мин для первой детали и 60+-8 мин для двух других, причем они учавствуют в сборке одновременно. При наличии на выходе одновременно всех трех деталей изделие покидает участок. Смоделировать работу участка в течение 100 часов.

для решения написал вот такой код, по моему все в нем верно:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE 20,5
    LOGIC S KEY1
    SPLIT 2.3,CH2
    QUEUE 1
    SEIZE OB1
    ADVANCE 60
    RELEASE OB1
    DEPART 1
    LOGIC R KEY1
    SEIZE SB1
    ADVANCE 60,2
    RELEASE SB1
    TRANSFER ,CH4
    CH2 SEIZE OB2
    ADVANCE 15
    RELEASE OB2
    QUEUE 2
    GATE LR KEY1
    DEPART 2
    SPLIT 1,CH5
    SEIZE SB2
    ADVANCE 30,4
    RELEASE SB2
    TRANSFER ,CH4
    CH5 SEIZE SB3
    ADVANCE 30,4
    RELEASE SB3
    CH4 ASSEMBLE 3
    TERMINATE
    GENERATE 6000
    TERMINATE 1
    START 1


но при синтаксической проверке GPSS A95 упорно ругается на эту строчку:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    LOGIC S KEY1

заменил я ее на это:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    LOGIC R KEY1
    LOGIC I KEY1


теперь при синтаксическом анализе все норм. но при моделировании возникает ошибка: "Индекс блока не положительный 0"

Помогите понять в чем проблема, ничего путного в голову не приходит :wall:

Автор: andreynov 28.05.09, 06:10
Eugen, спасибо тебе! :)

Автор: Vovik_asp 28.05.09, 10:25
Здравствуйте! не могли бы вы мне помочь с решением задачи

На заправке есть три вида топлива для автомобилей: низкооктановый, высокооктановый бензины и дизельное топливо. Для каждого вида топлива есть свои колонки.Для низкооктанового топлива 1 колонка им заправляются 30% автомобилей скрость заправки 12л/мин кол-во топлива равномерно распределено от 5 до 60 (через 5 ) стоимость 17р за литр. Для высокооктановго топлива 2 колонки им заправляются 50% автомобилей скрость заправки 15л/мин кол-во топлива равномерно распределено от 5 до 40 (через 5 ) стоимость 21,5р за литр. Для дизельного топлива топлива 1 колонка им заправляются 20% автомобилей скрость заправки 18л/мин кол-во топлива равномерно распределено от 10 до 60 (через 5 ) стоимость 15р за литр. Прибытие автомобилей на заправку распределено согласно закону Эрланга второго порядка со средним значением 2,2 мин. В 10 % автомобилей после заправки доливают от 0,5 до 2 л масла. Доливание 0,5 л масла занимает 2 мин. Стоимость одного литра масла  40 руб.
Оценить среднее время обслуживания автомобилей на заправке и выручку за пять дней работы.

Автор: tigreg 28.05.09, 12:10
Скажите, можно ли из всего потока сгенерированных транзактов работать только с конкретно выбранными? например, сначала с 1-10, потом со 2-11??

Автор: TEMENb 28.05.09, 13:10
tigreg, а можно более конкретно условие задачи?

приведенную постановку я вижу следующим образом:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    met generate ,,,11
    assign num,n$met
    test l p$num,11,met1
    queue qqq1
    seize fff1
    depart qqq1
    advance 10
    release fff1
    met1 test g p$num,1,met2
    queue qqq2
    seize fff2
    depart qqq2
    advance 10
    release fff2
    met2 terminate


Добавлено
З.Ы.: писал на коленке

Добавлено
cheepus, почему бы вам не поупражняться с блоками SPLIT, ASSEMBLE и MATH?

Автор: tigreg 28.05.09, 13:41
TEMENb, работаю с 9 коэффициентами, которые перемножаются на отчеты. Сначала соответственно на 1-9, затем на 2-10.

Добавлено
и так далее.

Автор: TEMENb 28.05.09, 13:45
tigreg, ну вообщем вход по условию, а условие уже придумывай сам.

Автор: tigreg 28.05.09, 14:09
ага, понятно, спасибо

Автор: Eugen 28.05.09, 15:14
cheepus после запуска вашей модели
Цитата
05/28/09 22:13:48 Line 14, Col 1. Invalid SNA. Expecting a Label or GPSS Verb.
05/28/09 22:13:48 CH2 SEIZE OB2
05/28/09 22:13:48 Line 25, Col 1. Invalid SNA. Expecting a Label or GPSS Verb.
05/28/09 22:13:48 CH5 SEIZE SB3
05/28/09 22:13:48 Line 28, Col 1. Invalid SNA. Expecting a Label or GPSS Verb.
05/28/09 22:13:48 CH4 ASSEMBLE 3
CH - используется для обозначения списков пользователя

Автор: gvard 28.05.09, 15:30
Ребята, помогите пожалуйста!
Задание:
В студенческом машинном зале расположены две мини-ЭВМ и одно устройство подготовки данных (УПД). Студенты приходят с интервалом 8±2 мин. и треть из них хочет испытать УПД и ЭВМ, а остальные только ЭВМ. Допустимое количество студентов в машинном зале 4 чел., включая работающего на УПД.
Работа на УПД занимает 8±1 мин. Работа на ЭВМ - 17 мин.; 20% работавших на ЭВМ возвращаются для повторного использования УПД и ЭВМ. Смоделировать работу машинного зала в течение 60ч. Определить загрузку УПД, ЭВМ и вероятности отказа в обслуживании вследствие переполнения очереди. Определить соотношение желающих работать на ЭВМ и на УПД в очереди.

Вот я немного накидал:
SIMULATE
EVM1 EQU 1
EVM2 EQU 2
YPD EQU 3
OCH1 EQU 1

GENERATE 8,2
QUEUE OCH1

TRANSFER .67,MET1,MET2
MET1 SEIZE YPD
ADVANCE 8,1
RELEASE YPD
SEIZE EVM1
ADVANCE 17
RELEASE EVM1
DEPART OCH1
TERMINATE 0

MET2 SEIZE EVM2
ADVANCE 17
RELEASE EVM2
TRANSFER .2,,MET1
DEPART OCH1
TERMINATE 0

GENERATE 3600
TERMINATE 1
START 1

У меня такой вопрос как нужно организовать вот это условие: Допустимое количество студентов в машинном зале 4 чел., включая работающего на УПД.

Автор: Eugen 28.05.09, 15:44
Цитата gvard @
как нужно организовать вот это условие: Допустимое количество студентов в машинном зале 4 чел., включая работающего на УПД.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TEST L Q1,4,met1
    QUEUE 1
    машинный зал SEIZE, ADVANCE,RELEASE
    DEPART 1
    met1 TERMINATE

или
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    que STORAGE 4
    xxx
    TRANSFER BOTH,,met1
    ENTER que
    машинный зал SEIZE, ADVANCE,RELEASE
    LEAVE que
    met1 TERMINATE

Автор: TEMENb 28.05.09, 15:58
Цитата gvard @
У меня такой вопрос как нужно организовать вот это условие: Допустимое количество студентов в машинном зале 4 чел., включая работающего на УПД.

либо сделай очередь ввиде МКУ (что не совсем удобно, т.к. возвращающийся с эвм на упд в очередь может не попасть), либо поставить условие (блок TEST) на размер очереди.

Автор: cheepus 28.05.09, 16:02
Eugen
угу. сам уже до этого допер :D поменял CH на CHAN и все заработало.

Спасибо всем откликнувшимся :)

Автор: andreynov 28.05.09, 16:07
Lovely_TiGrRrA, ну ты для начала напиши код...

Автор: bodr_07 28.05.09, 16:14
слушай можешь пожалуйста написать полносью код проги работающей.....(студенты приходят с интервалом 8+-2 мин..... ).Буду признателен

Автор: bodr_07 28.05.09, 16:28
TEMENb можешь прислать код проги?

Автор: Eugen 28.05.09, 16:50
да у тебя есть код этой проги :whistle:

Автор: TEMENb 28.05.09, 16:55
вот толи недосып сказыается то ли я уже вижу код этой проги в этой ветке. немного недоделаный, но всетаки.
если есть желание, что бы кто то за вас наваял ваше задание да отправил - готовьте мани.

Автор: Eugen 28.05.09, 16:59
да что бы есть, нужны мани = решенные задачи - все просто

Автор: Vovik_asp 28.05.09, 19:06
я с кодом немного поразбирался, так то все просто только вопросс как правильно записать время которое уходит на заправку топливом?? и еще как записать процент машин идущих на разные колонки?
спасибо)

Автор: kasx 28.05.09, 19:11
Доброго всем времени суток!
Дамы и господа, подскажите, пожалуйста решение данной задачи:

"К ЭВМ подключено четыре терминала, с которых осуществляется решение задач. По команде с терминала выполняют операции редактирования, трансляции, планирования и решения. Причем, если хоть один терминал выполняет планирование, остальные вынуждены простаивать из-за нехватки оперативной памяти. Если два терминала выдают требование на решение, то оставшиеся два простаивают, и если работают три терминала, выдающих задания на трансляцию, то оставшийся терминал блокируется. Интенсивности поступления задач различных типов равны. Задачи одного типа от одного терминала поступают через экспоненциально распределенные интервалы времени со средним значением 160 с. Выполнение любой операции длится 10 с. Смоделировать работу ЭВМ в течение 4 ч. Определить загрузку процессора, вероятности простоя терминалов и частоту одновременного выполнения трансляции с трех терминалов."

Знаю нескольких языках, но этот, что-то не дается :/

Вот, что я смог навоять:
Simulate

XPDIS FUNCTION RN1,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

RAM Stprage 4

Generate 160,FN$XPDIS

Transfer (3/4), Red
Transfer (2/3), Transl
Transfer (1/2), Plan, Reshen


plan Enter RAM, 4
Advance 10
Leave RAM, 4
Transfer , all

Reshen Enter RAM, 2
Advance 10
Leave RAM, 2
Transfer , all

Transl Enter RAM, 1.3
Advance 10
Leave RAM, 1.3
Transfer , all

Red Enter RAM
Advance 10
Leave RAM
Transfer , all

all Terminate

Generate 160,FN$XPDIS

Transfer (3/4), Red
Transfer (2/3), Transl
Transfer (1/2), Plan, Reshen


plan Enter RAM, 4
Advance 10
Leave RAM, 4
Transfer , all

Reshen Enter RAM, 2
Advance 10
Leave RAM, 2
Transfer , all

Transl Enter RAM, 1.3
Advance 10
Leave RAM, 1.3
Transfer , all

Red Enter RAM
Advance 10
Leave RAM
Transfer , all

all Terminate


Generate 160,FN$XPDIS

Transfer (3/4), Red
Transfer (2/3), Transl
Transfer (1/2), Plan, Reshen


plan Enter RAM, 4
Advance 10
Leave RAM, 4
Transfer , all

Reshen Enter RAM, 2
Advance 10
Leave RAM, 2
Transfer , all

Transl Enter RAM, 1.3
Advance 10
Leave RAM, 1.3
Transfer , all

Red Enter RAM
Advance 10
Leave RAM
Transfer , all

all Terminate


Generate 160,FN$XPDIS

Transfer (3/4), Red
Transfer (2/3), Transl
Transfer (1/2), Plan, Reshen


plan Enter RAM, 4
Advance 10
Leave RAM, 4
Transfer , all

Reshen Enter RAM, 2
Advance 10
Leave RAM, 2
Transfer , all

Transl Enter RAM, 1.3
Advance 10
Leave RAM, 1.3
Transfer , all

Red Enter RAM
Advance 10
Leave RAM
Transfer , all

all Terminate


Generate 14400
Terminate 1
Start
End

Автор: Vovik_asp 28.05.09, 19:11
со временем разобрался, а вот с процентами пока никак)

Автор: Angellina 28.05.09, 19:12
Помогите, пожалуйста
Есть следующая задача:

Исходные данные к проектированию: средство реализации GPSS World.
Объект моделирования – экспертная система, пополняемая записями экспертов. В начальный момент времени вероятность выдачи правильного ответа по запросу каждого типа равна нулю. По проектным прогнозам, в связи с работой экспертов по пополнению системы, со временем эксплуатации системы вероятность выдачи правильного результата возрастает. Проектные прогнозы представлены в таблице.

дни 1 2 3 4 5 6 7 8
Вер.А 47,7 71,6 84,7 89,3 94,5 97,1 97,1 96,4
Вер.В 31,3 51,5 65,2 77,8 82,1 84,2 89,2 92,0
Вер.С 24,0 47,1 57,7 65,7 74,5 81,4 83,3 84,2

дни 9 10 11 12 13 14 15 16
Вер.А 97,8 96,4 97,9 99,5 98,0 97,1 98,0 98,8
Вер.В 92,4 92,2 95,6 94,2 93,1 94,6 95,4 96,4
Вер.С 87,9 90,9 90,3 89,2 91,6 92,0 90,6 92,5

дни 17 18 19 20
Вер.А 98,0 97,1 98,0 99,2
Вер.В 94,9 93,4 95,0 93,7
Вер.С 94,2 93,6 92,8 94,0

Система начинает принимать к обслуживанию запросы пользователей типа А, когда вероятность выдачи правильного ответа для этого типа достигнет 58%; запросы типа В – при 65%; типа С – при 80%. С остаточной вероятностью для каждого типа запроса выдается неверный результат. Запросы типа С обладают абсолютным приоритетом, прерванное обслуживание завершается после обслуживания приоритетного запроса. Если по какому-либо из типов запросов неверный результат выдается три раза подряд, то работы системы приостанавливается для корректировки. Запросы, поступающие во время корректировки, ожидают ее завершения во входной очереди. Время обработки запроса зависит от типа; начальные значения параметров распределения времен обработки представлены в таблице. С момента начала обслуживания запросов каждого типа математическое ожидание времени обработки уменьшается на 0,05% от начального значения после обслуживания очередного запроса до тех пор, пока не достигнет 0,35 от начального значения; далее эта величина не изменяется. Единица измерения времени в таблице исходных данных – минуты.

тип А тип В тип С обсл. А обсл. В обсл. С корректировка
эксп. эксп. эксп. эксп. эксп. эксп. эксп.
l=0,07 l=0,028 l=0,02 l=0,5 l=0,2 l=0,083 l=0,1

Вот что у меня получилось.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    PROV1   BVARIABLE X$VER1'L'0.58
    ;
    PROV2   BVARIABLE X$VER2'L'0.65
    ;
    PROV3   BVARIABLE X$VER3'L'0.80
    ;
    PROVA   BVARIABLE   (P10'E'11)'OR'(P10'E'12)
    ;булева переменная проверяющая, что заявка является заявкой типа A
     
    INITIAL X$VER1,0
    ;Переменная, которая хранит вероятность выдачи верного результата на запрос типа A
    INITIAL X$VER2,0
    ;Переменная, которая хранит вероятность выдачи верного результата на запрос типа B
    INITIAL X$VER3,0
    ;Переменная, которая хранит вероятность выдачи верного результата на запрос типа C
    INITIAL X$MO1,2
    ;Переменная, которая хранит математическое ожидание обслуживания запроса типа A
    INITIAL X$MO2,5
    ;Переменная, которая хранит математическое ожидание обслуживания запроса типа B
    INITIAL X$MO3,12.048
    ;Переменная, которая хранит математическое ожидание обслуживания запроса типа C
    INITIAL X$COUNT1,0
    ;Переменная, которая хранит значение счетчика неверных ответов на запрос типа A
    INITIAL X$COUNT2,0
    ;Переменная, которая хранит значение счетчика неверных ответов на запрос типа B
    INITIAL X$COUNT3,0
    ;Переменная, которая хранит значение счетчика неверных ответов на запрос типа C
     
     
    T_A GENERATE (Exponential(1,0,14.286))
    ;генерирование заявок типа A
        MARK    20
    ;в параметр 20 каждой заявки записывается значение времени прошедшего с начала моделирования
        SAVEVALUE   VER1,((-3#10^(-24)#P20^6+3#10^(-19)#P20^5-2#10^(-14)#P20^4+4#10^(-10)#P20^3-5#10^(-6)#P20^2+0.0317#P20+11.3)/100)
    ;вычисление значения вероятности выдачи правильного ответа по запросу типа A и сохранение значения в переменной VER1
        TEST NE BV$PROV1,1,OUT1
    ;проверка, определяющая может ли начинаться обработка запросов типа A,
    ;если вероятность выдачи правильного ответа >=58%, то далее
        TRANSFER    X$VER1,T_A1,T_A2
     
    T_B GENERATE (Exponential(1,0,35.714))
    ;генерирование заявок типа B
        MARK    20
    ;в параметр 20 каждой заявки записывается значение времени прошедшего с начала моделирования
        SAVEVALUE   VER2,((3#10^(-20)#P20^5-3#10^(-15)#P20^4+10^(-10)#P20^3-2#10^(-6)#P20^2+0.0225#P20+3.431)/100)
    ;вычисление значения вероятности выдачи правильного ответа по запросу типа B и сохранение значения в переменной VER2
        TEST NE BV$PROV2,1,OUT1
    ;проверка, определяющая может ли начинаться обработка запросов типа B,
    ;если вероятность выдачи правильного ответа >=65%, то далее
        TRANSFER    X$VER2,T_B1,T_B2
     
    T_C GENERATE    (Exponential(1,0,50))
    ;генерирование заявок типа C
        MARK    20
    ;в параметр 20 каждой заявки записывается значение времени прошедшего с начала моделирования
        SAVEVALUE   VER3,((-6#10^(-16)#P20^4+4#10^(-11)#P20^3-10^(-6)#P20^2+0.0171#P20+4.0942)/100)
    ;вычисление значения вероятности выдачи правильного ответа по запросу типа С и сохранение значения в переменной VER3
        TEST NE BV$PROV3,1,OUT1
    ;проверка, определяющая может ли начинаться обработка запросов типа С,
    ;если вероятность выдачи правильного ответа >=80%, то далее
        PRIORITY    2
    ;установка приоритета запросов типа С равным 2
        TRANSFER    X$VER3,T_C1,T_C2
     
    ;запись типов заявок в 10 параметр каждой заявки
    ;где 11,21,31 правильные ответы на запросы типа A, B, C соответственно и
    ;где 12,22,32 неверные ответы на запросы типа A, B, C соответственно
    T_A1    ASSIGN  10,11
        TRANSFER    ,TAB_SERV
     
    T_A2    ASSIGN  10,12
        TRANSFER    ,TAB_SERV
     
    T_B1    ASSIGN  10,21
        TRANSFER    ,TAB_SERV
     
    T_B2    ASSIGN  10,22
        TRANSFER    ,TAB_SERV
     
    T_C1    ASSIGN  10,31
        TRANSFER    ,TC_SERV
     
    T_C2    ASSIGN  10,32
        TRANSFER    ,TC_SERV
     
    ;Блок обслуживания заявок
     
    TAB_SERV    QUEUE   O1
    ;помещение заявок в очередь
        SEIZE   DEVICE_S1          
    ;Проверка занятости устройства DEVICE_S1
        DEPART  O1          
    ;Выход заявки из очереди О1
        TEST E  BV$PROVA,1,TB_SERV
    ;проверка, если запрос типа A, переход далее, иначе на обслуживание заявок типа B
     
    TA_SERV ADVANCE (Exponential(1,0,MO1))
    ;задержка заявки типа A на время, необходимое для обработки
        RELEASE DEVICE_S1          
    ;Освобождение устройства DEVICE_S1
        SAVEVALUE   MO1-,0.001
    ;уменьшение значения мат.ожидания на 0.05% oт начального значения после обслуживания очередного запроса
        TEST LE X$MO1,0.7,TA_ERR
        SAVEVALUE   MO1,0.7
    ;проверка, не достигло ли мат.ожидание 0,35 от начального значения
    ;если достигло, то мат.ожидание становится равным этому значению
     
    TA_ERR  TEST E  P10,12,OUT_OK
    ;проверка, если тип заявки 12 (неверный ответ на запрос типа A) переход далее к счетчику
        SAVEVALUE   COUNT1+,1
    ;увеличение значения счетчика на 1
        TEST E  X$COUNT1,3,OUT_OK
    ;проверка, если значение счетчика=3, то переход далее на корректировку системы и обнуление счетчика
        ADVANCE (Exponential(1,0,10))    
        SAVEVALUE   COUNT1,0
        TRANSFER    ,OUT_OK
     
    TB_SERV ADVANCE (Exponential(1,0,MO2))
    ;задержка заявки типа B на время, необходимое для обработки
        RELEASE DEVICE_S1          
    ;Освобождение устройства DEVICE_S1
        SAVEVALUE   MO2-,0.0025
    ;уменьшение значения мат.ожидания на 0.05% oт начального значения после обслуживания очередного запроса
        TEST LE X$MO2,1.75,TB_ERR
        SAVEVALUE   MO2,1.75
    ;проверка, не достигло ли мат.ожидание 0,35 от начального значения
    ;если достигло, то мат.ожидание становится равным этому значению
     
    TB_ERR  TEST E  P10,22,OUT_OK
    ;проверка, если тип заявки 22 (неверный ответ на запрос типа B) переход далее к счетчику
        SAVEVALUE   COUNT2+,1
    ;увеличение значения счетчика на 1
        TEST E  X$COUNT2,3,OUT_OK
    ;проверка, если значение счетчика=3, то переход далее на корректировку системы и обнуление счетчика
        ADVANCE (Exponential(1,0,10))    
        SAVEVALUE   COUNT2,0
        TRANSFER    ,OUT_OK
     
    TC_SERV QUEUE   O_PR            
    ;Вход заявки в очередь О_PR для запросов типа С обладающих абсолютным приоритетом
        PREEMPT DEVICE_S1,PR    
    ;Прерывание обслуживания заявки первого типа в устройстве DEVICE_S1
        DEPART  O_PR            
    ;Выход заявки из очереди О_PR
        ADVANCE (Exponential(1,0,MO3))
    ;задержка заявки типа C на время, необходимое для обработки
        RETURN  DEVICE_S1          
    ;Освобождение устройства DEVICE_S1
        SAVEVALUE   MO3-,0.006024
    ;уменьшение значения мат.ожидания на 0.05% oт начального значения после обслуживания очередного запроса
        TEST LE X$MO3,4.2168,TC_ERR
        SAVEVALUE   MO3,4.2168
    ;проверка, не достигло ли мат.ожидание 0,35 от начального значения
    ;если достигло, то мат.ожидание становится равным этому значению
     
    TC_ERR  TEST E  P10,32,OUT_OK
    ;проверка, если тип заявки 32 (неверный ответ на запрос типа С) переход далее к счетчику
        SAVEVALUE   COUNT3+,1
    ;увеличение значения счетчика на 1
        TEST E  X$COUNT3,3,OUT_OK
    ;проверка, если значение счетчика=3, то переход далее на корректировку системы и обнуление счетчика
        ADVANCE (Exponential(1,0,10))    
        SAVEVALUE   COUNT3,0
        TRANSFER    ,OUT_OK
     
    OUT1    TERMINATE
     
    OUT_OK  TERMINATE
        
        GENERATE    1000000
        TERMINATE 1
        START   1


Мне кажется что программа работает некорректно, например, при любом времени работы системы (или числе прогонов) на обслуживание идут всегда 554 запроса типа А.

Подскажите пожалуйста:
1)Как и где прописать то, что запросы, поступающие во время корректировки, ожидают ее завершения во входной очереди;
2)Как сделать так, чтобы вероятность выдачи правильного ответа не могла превышать 1.

И как высчитать следующие характеристики системы:
1.Среднее время пребывания запросов в системе;
2.Среднеквадратическое отклонение времени пребывания запросов в системе;
3.Коэффициент использования каждой очереди;
4.Среднеквадратическое отклонение времени пребывания заявок в очереди.


И, наконец, правильно ли работает программа?

Автор: TEMENb 28.05.09, 19:17
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    RAST    FUNCTION    P$NUM,D9            ;функция соответствия номера участка расстоянию до участка
        1,1/2,1/3,1/4,1/5,1/6,1/7,1/8,1/9,1
    RAST1   FUNCTION    P$NUM,D8            ;функция соответствия номера участка расстоянию до участка от участка номер 1
        2,1/3,1/4,1/5,1/6,1/7,1/8,1/9,1
    RAST2   FUNCTION    P$NUM,D8            ;функция соответствия номера участка расстоянию до участка от участка номер 2
        1,1/3,1/4,1/5,1/6,1/7,1/8,1/9,1
    RAST3   FUNCTION    P$NUM,D8            ;функция соответствия номера участка расстоянию до участка от участка номер 3
        1,1/2,1/4,1/5,1/6,1/7,1/8,1/9,1
    RAST4   FUNCTION    P$NUM,D8            ;функция соответствия номера участка расстоянию до участка от участка номер 4
        1,1/2,1/3,1/5,1/6,1/7,1/8,1/9,1
    RAST5   FUNCTION    P$NUM,D8            ;функция соответствия номера участка расстоянию до участка от участка номер 5
        1,1/2,1/3,1/4,1/6,1/7,1/8,1/9,1
    RAST6   FUNCTION    P$NUM,D8            ;функция соответствия номера участка расстоянию до участка от участка номер 6
        1,1/2,1/3,1/4,1/5,1/7,1/8,1/9,1
    RAST7   FUNCTION    P$NUM,D8            ;функция соответствия номера участка расстоянию до участка от участка номер 7
        1,1/2,1/3,1/4,1/5,1/6,1/8,1/9,1
    RAST8   FUNCTION    P$NUM,D8            ;функция соответствия номера участка расстоянию до участка от участка номер 8
        1,1/2,1/3,1/4,1/5,1/6,1/7,1/9,1
    RAST9   FUNCTION    P$QQQ,D8            ;функция соответствия номера участка расстоянию до участка от участка номер 9
        1,1/2,1/3,1/4,1/5,1/6,1/7,1/8,1
     
    ;Следующие 10 строк нужны для того, что бы обращаться к функциям по номеру
    ;RAST   EQU 10          ;задать в соответствие имени RAST значение 10
    RAST1   EQU 1           ;задать в соответствие имени RAST1 значение 1
    RAST3   EQU 2           ;задать в соответствие имени RAST2 значение 2
    RAST3   EQU 3           ;задать в соответствие имени RAST3 значение 3
    RAST4   EQU 4           ;задать в соответствие имени RAST4 значение 4
    RAST5   EQU 5           ;задать в соответствие имени RAST5 значение 5
    RAST6   EQU 6           ;задать в соответствие имени RAST6 значение 6
    RAST7   EQU 7           ;задать в соответствие имени RAST7 значение 7
    RAST8   EQU 8           ;задать в соответствие имени RAST8 значение 8
    RAST9   EQU 9           ;задать в соответствие имени RAST9 значение 9
     
        INITIAL X$MESTO,10
     
    MET GENERATE    ,,,9            ;генерируем 9 участков
        assign  QQQ,1
        ASSIGN  NUM,N$MET           ;в первый параметр полозить значение равное колличеству транзактов, прошадших сквозь метку МЕТ
    POVT    ADVANCE (POISSON(1,(24+(3#P$NUM)))) ;ожидаем время до возникновения аварии
        QUEUE   AVARIA          ;занять очередь на тушение пожара
        SEIZE   BRIGADA         ;бригада выехала
        ASSIGN  POS,10;X$MESTO          ;В параметр POS положить значение местонахождения бригады
        ADVANCE (FN$RAST/(40#1000/60))      ;время на поездку к месту пожана
        SAVEVALUE   MESTO,P$NUM         ;отметить что бригада находится в новом месте
        DEPART  AVARIA          ;покинуть очередь (неачали устранять аварию)
        ADVANCE (NORMAL(2,40,10))       ;задержка на время устранения аварии
        TEST NE Q$POJAR,0,MET2          ;если в очереди есть транзакты (колличество транзактов не равно нулю), то дальше, иначе на метку
        ADVANCE (FN$RAST/(40#1000/60))      ;задержка на поездку на базу
        SAVEVALUE   MESTO,10            ;отметить что бригада находится в на базе
    MET2    RELEASE BRIGADA         ;бригада освободилась
        TRANSFER    ,POVT           ;перейти на метку
     
        GENERATE    (30#24#60)          ;через месяц сгенерировать транакт
        TERMINATE   1           ;транзакт покидает систему
     
        START   1


Если вот это раскоментировать
;RAST EQU 10 ;задать в соответствие имени RAST значение 10

то вылетает ошибка.
ПОЧЕМУ???

Автор: Vovik_asp 28.05.09, 19:25
Angellina
вот кое чего могу сказать может поможет....

1)AVE.TIME (Среднее время) – среднее время пребывания одного транзакта в очереди с учетом всех входов в очередь.
2)
3)UTIL. (Коэффициент использования)
4)STD.DEV. (Среднеквадратическое отклонение) – оценка среднеквадратического отклонения

Автор: Angellina 28.05.09, 19:43
Цитата Vovik_asp @
1)AVE.TIME (Среднее время) – среднее время пребывания одного транзакта в очереди с учетом всех входов в очередь.

Мне надо среднее время пребывания запросов в системе, а не в очереди

Цитата Vovik_asp @
3)UTIL. (Коэффициент использования)

Мне надо коэффициент использования каждой очереди, а такого параметра в отчете нет

и наконец
Цитата Vovik_asp @
4)STD.DEV. (Среднеквадратическое отклонение) – оценка среднеквадратического отклонения


С этим я согласна, но для того, чтобы в отчете был этот параметр, изначально в программе надо что-то прописывать, что???

Автор: EndOFlifE 29.05.09, 05:23
люди, помогите плиз с задачей:
Станок обрабатывает поток деталей, время появления которых распределено по экспоненциальному закону со средним 2 минуты. Время обработки детали составляет 10+-5 минут с равномерным распределением. Далее детали с равной вероятностью попадают на одну из 5 линий, где происходит обработка их с затратой времени 30+-10, 30+-20, 10+-5, 40+-10, 25+-10 минут, соответственно (равномерное распределение). Проанализировать загрузку устройств в течении 8 часов работы. Определить процентное соотношение деталей на разных линиях обработки. Протабулировать время обработки детали.

Мое решение таково:
SELECT1 FUNCTION RN1,D5
0.2,1/0.4,2/0.6,3/0.8,4/1,5
SELECT2 FUNCTION P1,D5
1,30/2,30/3,10/4,40/5,25
SELECT3 FUNCTION P1,D5
1,10/2,20/3,5/4,10/5,10
VREMYA TABLE M1,0,60,1000
GENERATE (exponential (1,0,2))
ASSIGN 1,FN$SELECT1
SEIZE PK
ADVANCE (UNIFORM (1,5,15))
RELEASE PK
ASSIGN 2,FN$SELECT2
ASSIGN 3,FN$SELECT3
SEIZE P1
ADVANCE P2,P3
RELEASE P1
con VARIABLE PK
TABULATE VREMYA
TERMINATE
GENERATE 480
TERMINATE 1
START 1

Возникает вопрос как реализовать определение процентного соотношения деталей на разных линиях обработки?
Помогите плииз...

Автор: Vovik_asp 29.05.09, 08:08
Angellina
про коэф использования каждой очереди там есть на каждую очередь свой UTIl

Автор: TEMENb 29.05.09, 09:32
Цитата Angellina @
Мне надо среднее время пребывания запросов в системе, а не в очереди

либо используйте блок MARK+TABULATE+TABLE, либо сделайте еще одну очередь. вход сразу после дженерейта, выход перед терминейтом.

Цитата Angellina @
Мне надо коэффициент использования каждой очереди, а такого параметра в отчете нет

а как вы себе физичиски представляете такой параметр как коефициент использования очереди?
если у вас очередь ограничина, то выражайте ее через МКУ (STORAGE, ENTER, LEAVE) и получите коф использования, а если нет, то не морочьте людям голову.. очередь нечто безграничное. при любом раскладе "коф использования" будет стремиться к нулю.
Цитата Angellina @
С этим я согласна, но для того, чтобы в отчете был этот параметр, изначально в программе надо что-то прописывать, что???

это параметр свойтсвенный статистике по TABLE.

Автор: RetiF 30.05.09, 13:27
Один небольшой вопрос. Как реализовать следующее:
Цитата
Поступает поток деталей. С вероятностью 0,65 поступает деталь первого типа, с вероятностью 0,35 - второго типа

Будет два блока GENERATE, но как между ними разделить поток в этом соотношении?

Автор: TEMENb 30.05.09, 16:14
Цитата RetiF @
Поступает поток деталей. С вероятностью 0,65 поступает деталь первого типа, с вероятностью 0,35 - второго типа

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 1
    assign type,(1+(rn1>650))

или
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 1
    transfer .35,met1
    assign type,1
    transfer ,met2
    met1 assign type,2
    met2................

Автор: Antoshka 31.05.09, 15:39
Как сделать выбор наименьшей очереди?

Добавлено
очень нужно! Так как без этого не получается решить задание...

Автор: Eugen 31.05.09, 16:31
SELECТ - в этой теме и в других есть ответы, и на этот вопрос и не один раз. А этот, раз в неделю кто нибудь да обязательно напишет.. >:(
Цитата

Поступает поток деталей. С вероятностью 0,65 поступает деталь первого типа, с вероятностью 0,35 - второго типа


Добавлено
кто нить встречался с моделями интернет-магазина, срочно нужно, возьму за 30-40$ сописанием, чтоб с текстом курсача конечно..

Автор: katerinka 31.05.09, 19:36
Знающие люди, помогите проверить работу)

Задача: в 3-х этажном магазине один лифт, вмещающий не более 4 человек. на вход здания поступает поток посетителей с параметром L. они направляются на 2-й этаж с вероятностью Р1, на 3 - с Р2 (Р1+Р2 =1). попав на этаж, посетитель находится на нем в течение случайного времени Т. после этого он направляется в лифту и спускается на 1-й этаж. время перемещения лифта на один этаж равно А, посадки/высадки одного пассажира равно V. поток пассажиров распределен по нормальному закону, Т имеет экспоненциальное распределение, А - равномерное, V -нормальное

Программа:

*********************************************************************
*Определяем константы, запустив один транзакт
*********************************************************************

generate ,,,1,
savevalue Totkr,(normal(1,5,1))
savevalue Tdvig,(uniform(1,2,51))
savevalue NG,(normal(1,5,1))

terminate



*********************************************************************
* Магазин
*********************************************************************

generate (normal(1,5,1)) ;поток посетителей
Weight FUNCTION RN1,C3 ; в зависимости от вероятности определяем на какой этаж нужно человеку
;(я не знаю, как точно эту функцию писать) =(
0.0,0/.33,1/.6,2/.7,3

savevalue pokupatel,FN$Weight

queue people
;metka advance X$NG ;просто какое-то время для проверки условий
test E X$lift,1,;metka
test L X$Num,4,;metka
savevalue Num+,1
;wait advance X$NG
test E X$pokupatel,X$lift,;wait

savevalue Num-,1
depart people

savevalue Tpok,(exponential(1,5,1))
advance X$Tpok

queue people

;wait2 advance X$NG
test E X$lift,X$pokupatel,;wait2
test L X$Num,4,;wait2
test E X$napravlenie,0,;wait2
savevalue Num+,1

test E X$lift,1
savevalue Num-,1

depart people
terminate

*********************************************************************
* Лифт
*********************************************************************

generate (60#24) ; здесь я просто взяла сутки для работы модели
savevalue lift,1

advance X$Totkr
savevalue lift,0
savevalue napravlenie,1

advance X$Tdvig
savevalue lift,2
advance X$Totkr
savevalue lift,0
advance X$Tdvig
savevalue lift,3
savevalue napravlenie,0
advance X$Totkr
savevalue lift,0
advance X$Tdvig
savevalue lift,2
advance X$Totkr
savevalue lift,0
advance X$Tdvig


terminate 1



:rolleyes:

Добавлено
фу-фу совсем забылась... :wacko: ПоЖаЛуЙсТа!!! :wub:

заранее спасибо :rolleyes:

Автор: bocharik 03.06.09, 20:20
люди добрые... проверьте пожалуйста правильно ли решена задачка...

За ранее огромное спасибо.


Собранные телевизоры проходят серию испытаний на станции технического контроля. Если оказывается, что функционирование телевизора ненормально, то отбракованный телевизор передают в цех наладки, где заменяют неисправные блоки. После наладки телевизор возвращают на станцию контроля и снова проверяют. Со станции технического контроля телевизоры после одной или нескольких проверок поступают в цех упаковки.
Телевизоры попадают на станцию технического контроля каждые 7,0 ± 1,5 минут. На станции работают три контролера одинаковой квалификации. Операция контроля одного телевизора состоит из двух проверок:
1) для первой проверки каждому контролеру необходимо 6 ± 5 минут;
2) для второй проверки на всех контролеров имеется один тестовый прибор (продолжительность тестирования - 1,5 минут).
95% телевизоров успешно проходят проверку и попадают в цех упаковки, а другие 5 процентов - в цех наладки, в котором находится один рабочий - наладчик. Время наладки (замены) неисправных блоков распределено в соответствии с равномерным законом в интервале 35 ± 9 минут.
Написать на GPSS модель функционирования этого подраздела производственной линии. Время моделирования - 8 ч.
Определить сколько мест на стеллажах необходимо предусмотреть на входе станции контроля и в цехе наладки.


;задаем количество контролеров
TECH_CONTROL STORAGE 3

;поступление телевизоров
GENERATE 70,15

;станция технического контроля
QUEUE Q_TECH_CONTROL
ENTER TECH_CONTROL
DEPART Q_TECH_CONTROL
;1-ая проверка
ADVANCE 60,50
;2-ая проверка
QUEUE Q_PRIBOR
SEIZE PRIBOR
DEPART Q_PRIBOR
ADVANCE 15
RELEASE PRIBOR
LEAVE TECH_CONTROL
TRANSFER 0.95,L_UPAKOVKA,L_NALADKA

;цех наладки
L_NALADKA QUEUE Q_NALADKA
SEIZE NALADKA
DEPART Q_NALADKA
ADVANCE 350,90
RELEASE NALADKA

L_UPAKOVKA TERMINATE

;8-ми часовой рабочий день
GENERATE 28800
TERMINATE 1
START 1

Автор: СоучастнеГ 04.06.09, 18:21
Привет!
На обработку поступает поток заявок с интервалом 10±1 единица
времени. Нечетные заявки обрабатываются на первом приборе со временем
15±2 единицы, четные заявки - на втором приборе со временем 17±3 единицы.
Смоделировать работу системы при прохождении 100 заявок.

С помощью какого оператора можно определить нечетные заявки?

Автор: TEMENb 05.06.09, 19:39
СоучастнеГ, ну для этих вечей обычно делают гейт с ключем, который инвертируется сразу после прохождения гейта..
можно сделать тест, который будет отсеивать чет и нечет.. но это выглядит страшнее (не сложнее, а именно замудренней)

Автор: bocharik 07.06.09, 18:00
TEMENb посмотри пожалуйста мою задачку.... Мож че дельного подсказать можешь.

Автор: TEMENb 07.06.09, 18:08
bocharik, на рабзор чужого кода необходимо время. а его нет.
Если есть какие то конкретные вопросы - пожалуйста. а в код считываться - ты уж прости.

Автор: bocharik 07.06.09, 18:47
модель вроде работает нормально... замечаний нет вроде. просто хотел услышать твоё мнение по поводу кода.

Автор: eaglle 08.06.09, 17:10
Помогите люди! Мне нужна срочно модель СМО в GPSS World. Походу простенькая, но я них не шарю.

тип СМО: M/M/n, n=2;
входной поток: exp;
распределение времени обслуживания: normal;
дисциплина обслуживания: с ограниченным временем пребывания в очереди;
Исследовать: распределение времени пребывания в очереди;

Параметры распределений любые.


Можно расчитывать на помощь???

Автор: rob_tex 17.06.09, 16:05
Помогите пожайлуста!замученному студенту до смерти!:(

необходимо решить задачу по gpss ! а я вообще ни во что тут не врубаюсь а через пару дней сдавать

Условие:

На сборочный участок цеха предприятия из трёх независимых источников через интервалы времени, которые имеют экспоненциальное расположение со средним значением 10 мин., поступают детали. Каждая деталь с вероятностью 0,5 должна пройти обработку на протяжении 7 мин. На сборку подаются одна обработанная и одна не обработанная детали. В результате получают готовое изделие. Процесс сборки занимает 6 мин . В каждый момент времени может собираться только одно изделие. Потом изделие поступает на регулирование, которое продолжается в среднем 8 мин (экспоненциальное распределение).

Промоделировать работу цеха на протяжении 24ч.

Цели моделирования: Оценить загруженность операций и распределения времени пребывания в системе.

Заранее всех примного благодарю!

Автор: Eugen 21.06.09, 15:59
основа для последней задачи, подробные решения здесь Задачи по GPSS (сообщение #2292025)
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE (Exponential(1,0,10))
    TRANSFER 0.5,,met1
    SAVEVALUE count1+,1
    TERMINATE
    met1 SEIZE - обработка
    ADVANCE
    RELEASE
    TEST E ((U$обработка'E'0)&&(x$count1'G'0)),1
    SEIZE - сборка
    SAVEVALUE count1-,1
    ADVANCE
    RELEASE
    SEIZE -регулировка
    ADVANCE
    RELEASE
    TERMINATE


Добавлено
опечатка TEST E ((U$сборка'E'0)&&(x$count1'G'0)),1

Автор: Kaze 22.06.09, 15:00
Всем доброго времени суток! Обращаюсь за помощью в связи с необходимостью получения зачёта. Поставили следующую задачу: написать и исследовать модель автостоянки. Никаких дополнительных условий поставлено не было. Прошу помочь с программой.
P.S.: и, если можно, посоветуйте хорошую литературу по изучению статистики

Автор: Eugen 22.06.09, 17:46
Венцель Е.С. например

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

Автор: Kaze 28.06.09, 01:31
Вот здесь Не хватает Студенческой версии GPSS нашёл подобную задачу. Судя по комментариям автора это модель двухэтажной автостоянки. Мне нужна модель одноэтажной - что нужно удалить из этой модели?:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Etag    STORAGE 7 ;количество свободных мест
    GENERATE (Exponential(1,0,6.5)) ;поступление автомобилей на стоянку
    QUEUE Stoyanka ;посановка в очередь перед стоянкой
    GATE SNF Etag ;проверка доступности свободных мест
    ENTER Etag ;въезд на стоянку
     
    ;РАСПРЕДЕЛЕНИЕ ПО МЕСТАМ
    GATE NU Lt_Dal_1,RDal1
    TRANSFER ,RLFT1
    RDal1   GATE NU Rt_Dal_1,LDal2
    TRANSFER ,RRGHT1
    LDal2   GATE NU Lt_Dal_2,RDal2
    TRANSFER ,RLFT2
    RDal2   GATE NU Rt_Dal_2,LBlig1
    TRANSFER ,RRGHT2
    LBlig1  GATE NU Lt_Blig_1,RBlig1
    TRANSFER ,FLFT11
    RBlig1  GATE NU Rt_Blig_1,RBlig2
    TRANSFER ,FRGHT11
    RBlig2  GATE NU Rt_Blig_2,LBlig2
    TRANSFER ,FRGHT21
    LBlig2  GATE NU Lt_Dal_2
    TRANSFER ,FLFT21
     
    ;НА ЛЕВОЕ ДАЛЬМЕ МЕСТО 1
    RLFT1   SEIZE Lt_Dal_1
    DEPART Stoyanka
    ADVANCE 32,2
     
    GATE NU Rt_Blig_1,AFLFT2
     
    PREEMPT Lt_Blig_1,,FRGHT1,,re
    ADVANCE 1,1
    RETURN Lt_Blig_1
    RELEASE Lt_Dal_1
    TRANSFER ,NEX
     
    AFLFT2  GATE NU Lt_Blig_2,AFRGHT2
     
    PREEMPT Lt_Blig_1,,FLFT2,,re
    ADVANCE 1,1
    RETURN Lt_Blig_1
    RELEASE Lt_Dal_1
    TRANSFER ,NEX
     
    AFRGHT2 GATE NU Rt_Blig_2,ASVOB
     
    PREEMPT Lt_Blig_1,,FRGHT2,,re
    ADVANCE 1,1
    RETURN Lt_Blig_1
    RELEASE Lt_Dal_1
    TRANSFER ,NEX
     
    ASVOB   RELEASE Lt_Dal_1
    TRANSFER ,NEX
     
    ;НА ПРАВОЕ ДАЛЬНЕЕ МЕСТО 1
    RRGHT1  SEIZE Rt_Dal_1
    DEPART Stoyanka
    ADVANCE 43,2
     
    GATE NU Lt_Blig_1,BFRGHT2
     
    PREEMPT Rt_Blig_1,,FLFT1,,re
    ADVANCE 1,1
    RETURN Rt_Blig_1
    RELEASE Rt_Dal_1
    TRANSFER ,NEX
     
    BFRGHT2 GATE NU Rt_Blig_2,BFLFT2
     
    PREEMPT Rt_Blig_1,,FRGHT2,,re
    ADVANCE 1,1
    RETURN Rt_Blig_1
    RELEASE Rt_Dal_1
    TRANSFER ,NEX
     
    BFLFT2  GATE NU Lt_Blig_2,BSVOB
     
    PREEMPT Rt_Blig_1,,FLFT2,,re
    ADVANCE 1,1
    RETURN Rt_Blig_1
    RELEASE Rt_Dal_1
    TRANSFER ,NEX
     
    BSVOB   RELEASE Rt_Dal_1
    TRANSFER ,NEX
     
    ;НА ЛЕВОЕ ДАЛЬНЕЕ МЕСТО 2
    RLFT2   SEIZE Lt_Dal_2
    DEPART Stoyanka
    ADVANCE 32,2
     
    GATE NU Rt_Blig_2,CFLFT1
     
    PREEMPT Lt_Blig_2,,FRGHT2,,re
    ADVANCE 1,1
    RETURN Lt_Blig_2
    RELEASE Lt_Dal_2
    TRANSFER ,NEX
     
    CFLFT1  GATE NU Lt_Blig_1,CFRGHT1
     
    PREEMPT Lt_Blig_2,,FLFT1,,re
    ADVANCE 1,1
    RETURN Lt_Blig_2
    RELEASE Lt_Dal_2
    TRANSFER ,NEX
     
    CFRGHT1 GATE NU Rt_Blig_1,CSVOB
     
    PREEMPT Lt_Blig_2,,FRGHT1,,re
    ADVANCE 1,1
    RETURN Lt_Blig_2
    RELEASE Lt_Dal_2
    TRANSFER ,NEX
     
    CSVOB   RELEASE Lt_Dal_2
    TRANSFER ,NEX
     
    ;НА ПРАВОЕ ДАЛЬНЕЕ МЕСТО 2
    RRGHT2  SEIZE Rt_Dal_2
    DEPART Stoyanka
    ADVANCE 43,2
     
    GATE NU Lt_Blig_2,DFRGHT1
     
    PREEMPT Rt_Blig_2,,FLFT2,,re
    ADVANCE 1,1
    RETURN Rt_Blig_2
    RELEASE Rt_Dal_2
    TRANSFER ,NEX
     
    DFRGHT1 GATE NU Rt_Blig_1,DFLFT1
     
    PREEMPT Rt_Blig_2,,FRGHT1,,re
    ADVANCE 1,1
    RETURN Rt_Blig_2
    RELEASE Rt_Dal_2
    TRANSFER ,NEX
     
    DFLFT1  GATE NU Lt_Blig_1,DSVOB
     
    PREEMPT Rt_Blig_2,,FLFT1,,re
    ADVANCE 1,1
    RETURN Rt_Blig_2
    RELEASE Rt_Dal_2
    TRANSFER ,NEX
     
    DSVOB   RELEASE Rt_Dal_2
    TRANSFER ,NEX
     
    ;НА ЛЕВОЕ БЛИЖНЕЕ МЕСТО 1
    FLFT11  DEPART Stoyanka
    FLFT1   SEIZE Lt_Blig_1
    ADVANCE 32,2
    RELEASE Lt_Blig_1
    TRANSFER ,NEX
     
    ;НА ПРАВОЕ БЛИЖНЕЕ МЕСТО 1
    FRGHT11 DEPART Stoyanka
    FRGHT1  SEIZE Rt_Blig_1
    ADVANCE 34,2
    RELEASE Rt_Blig_1
    TRANSFER ,NEX
     
    ;НА ЛЕВОЕ БЛИЖНЕ МЕСТО 2
    FLFT21  DEPART Stoyanka
    FLFT2   SEIZE Lt_Blig_2
    ADVANCE 32,2
    RELEASE Lt_Blig_2
    TRANSFER ,NEX
     
    ;НА ПРАВОЕ БЛИЖНЕ МЕСТО 2
    FRGHT21 DEPART Stoyanka
    FRGHT2  SEIZE Rt_Blig_2
    ADVANCE 34,2
    RELEASE Rt_Blig_2
    TRANSFER ,NEX
     
    ;ВЫХОД СО СТОЯНКИ
    NEX SAVEVALUE Ave_Queue,QT$Stoyanka
    LEAVE Etag
    TERMINATE
     
    ;РЕЖИМ РАБОТЫ
    GENERATE 480
    TERMINATE 1
    START 1

P.S.:ещё хотелось бы чтобы были комментарии (что происходит в каждой строчке), блок-схема работы модели и схема самой СМО. Конечно же всё это не за простое Спасибо.
P.P.S.:завтра сдавать, помогите плиз.

Автор: TM_GreeN 08.11.09, 15:19
Всем вечер добрый!
ребята,помогите пожалуйста дописать прогу..пишу на GPSS первый раз в жизни,так что не критикуйте сильно.

условие задачи:

Система автоматизации проектирования (САПР) создана на базе ЭВМ, функционирующей
в режиме множественного доступа. Пять инженеров-проектировщиков с помощью своих дисплеев одновремен-
но и независимо проводят диалог с ЭВМ, определяя очередной вариант расчета. Каждый диалог состоит из 10
циклов ввода-вывода данных. Во время одного цикла происходит следующее: за 10 ± 5с инженер обдумывает и
вводит текст строки; в течение 2 с работает процессор ЭВМ, подготавливая текст ответа; в течение 5 с текст
ответа выводится на дисплей. После ввода 11-й строки начинается работа процессора по расчету конструкции и
продолжается 30± 10 с. За 5 с результат расчета выводится на экран, после чего инженер в течение 15 ± 5 с ана-
лизирует его и начинает новый диалог. Операции по подготовке текста ответа имеют абсолютный приоритет
над расчетными, т. е. прерывают выполнение последних.
Смоделировать процесс работы САПР при условии, что расчет вариантов конструкции повторяется 100
раз. Определить среднее время выполнения диалога и расчетных операций, а также коэффициент загрузки про-
цессора.

листинг того,что я сумел написать:

GENERATE 15,5,,5000,1; генерируются строки каждые 10(+-5)секунд.Имеют максимальный приоритет
QUEUE QSTRING; введенная встает в очередь на подготовку текста ответа
SEIZE PROC; строка занимает процессор ЭВМ
DEPART QSTRING; строка уходит из очереди на подготовку текста ответа по принципу FIFO
ADVANCE 2; подготавливается текст ответа в течение 2 секунд
RELEASE PROC; освобождается процессор ЭВМ
TERMINATE 0;

GENERATE 170,50,,500,2; генерируются варианты расчета.имеют приоритет ниже,чем подготовка текста ответа
QUEUE QBLOCK; варианты расчета встают в очередь на обработку процессором ЭВМ
SEIZE PROC; занимается процессор ЭВМ(в случае,если он не занят обработкой текста ответа)
DEPART QBLOCK; вариант расчета уходит из очереди по принципу FIFO
ADVANCE 50,15; процессор ЭВМ расчитывает конструкцию и выводит данные на проверку инженером
RELEASE PROC; освобождается процессор ЭВМ
TERMINATE 1; после каждой обработки варианта конструкции ,количество повторов уменьшается на 1

TERMINATE 1;
START 500 ; процесс моделируется для 500 расчетов конструкции(по 100 от каждого инженера)

Автор: Антонина 11.11.09, 16:48
Проверьте,пожалуйста правильность написания программного кода.
вот условия задачи:Распределенный банк данных организован на базе трех удаленных друг от друга вычислительных центров А, В и С. Все центры связаны между собой каналами передачи данных, рабо¬тающими в дуплексном режиме независимо друг от друга. В каж¬дый из центров с интервалом времени 50 ± 20 мин поступают заяв¬ки на проведение информационного поиска.
Если ЭВМ центра, получившего заявку от пользователя, сво¬бодна, в течение 2 ± 1 мин производится ее предварительная обра¬ботка, в результате которой формируются запросы для центров А, В и С. В центре, получившем заявку от пользователя, начинается поиск информации по запросу, а на другие центры по соответст¬вующим каналам передаются за 1 мин тексты запросов, после чего там также может начаться поиск информации, который продолжа¬ется: в центре А — 5 ±2 мин, в центре В — 10+ 2 мин, в центре С — 15 ± 2 мин. Тексты ответов передаются за 2 мин по соответст¬вующим каналам в центр, получивший заявку на поиск. Заявка считается выполненной, если получены ответы от всех трех цен¬тров. Каналы при своей работе не используют ресурсы ЭВМ цен¬тров.
Смоделировать процесс функционирования распределенного банка данных при условии, что всего обслуживается 100 заявок. Подсчитать число заявок, поступивших и обслуженных в каждом центре. Определить коэффициенты загрузки ЭВМ центров.
[COLOR=purple]Вот что у меня получилось:

2.2. Текст программы – модели.
Generate 50,20;Поступление заявок на проведение информационного поиска с интервалом 50±20 минуты
Transfer .100 Gte1 ;Безусловный переход к ЭВМ 1
Transfer .100 Gte2 ;Безусловный переход к ЭВМ 2
Transfer .100 Gte3 ;Безусловный переход к ЭВМ 3
Gte1 Gate NU Evm1,Gte2 ;Проверяется свободна ли ЭВМ1
QUEUE OCH1 ;Занять очередь в ЭВМ1
Seize Evm1 ;Занять ЭВМ1
Advance 7,3 ; Задержка на предварительную обработку запроса и поиск информации
Release Evm1 ;Освобождение устройства ЭВМ1
Advance 2 ;Задержка на передачу текстов ответов
DEPART OCH1 ;Покинуть очередь в ЭВМ1
Transfer ,Out ;Переход к метке ОUT (удаление транзакта)
Gte2 Gate NU Evm2,Gte3 ;Проверяется свободна ли ЭВМ2
QUEUE OCH2 ;Занять очередь в ЭВМ2
Seize Evm2 ;Занять ЭВМ2
Advance 13,3 ; Задержка на предварительную обработку запроса и поиск информации
Release Evm2 ; Задержка на предварительную обработку запроса и поиск информации
Advance 2 ;Задержка на передачу текстов ответов
DEPART OCH2 ;Покинуть очередь в ЭВМ1
Transfer ,Out ;Переход к метке ОUT (удаление транзакта)
Gte3 Gate NU Evm3,Gte1 ;Проверяется свободна ли ЭВМ3
QUEUE OCH3 ;Занять очередь в ЭВМ3
Seize Evm3 ;Занять ЭВМ3
Advance 18,3 ; Задержка на предварительную обработку запроса и поиск информации
Release Evm3 ; Задержка на предварительную обработку запроса и поиск информации
Advance 2 ;Задержка на передачу текстов ответов
DEPART OCH3 ;Покинуть очередь в ЭВМ1
Out Terminate 1 ;Конец симуляции

Автор: TEMENb 11.11.09, 16:59
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Generate 1
    Transfer .100 Gte1
    Transfer .100 Gte2
    Transfer .100 Gte3
    terminate
    Gte1 terminate
    Gte2 terminate
    Gte3 terminate
     
        generate    100000
        terminate   1
     
        start 1


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE         99999             0       0
                        2    TRANSFER         99999             0       0
                        3    TRANSFER         10094             0       0
                        4    TRANSFER           997             0       0
                        5    TERMINATE           98             0       0
    GTE1                6    TERMINATE        89905             0       0
    GTE2                7    TERMINATE         9097             0       0
    GTE3                8    TERMINATE          899             0       0
                        9    GENERATE             1             0       0
                       10    TERMINATE            1             0       0


дальше читать не стал

Автор: Антонина 12.11.09, 10:55
ну мне же надо сгенерировать 100 заявок.я что-то ничего не поняла.объясни,пожалуйста.

Автор: Eugen 13.11.09, 18:08
Цитата Антонина @
надо сгенерировать 100 заявок
за это отвечает четвертый параметр блока GENERATE

Автор: Антонина 14.11.09, 15:14
так правильно решено или нет?если нет,то в каком месте ошибка?

Автор: TEMENb 14.11.09, 15:17
да на самом старте ошибка.
должно быть
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Generate 50,20;Поступление заявок на проведение информационного поиска с интервалом 50±20 минуты
    Transfer ,Gte1 ;Безусловный переход к ЭВМ 1
    Generate 50,20;Поступление заявок на проведение информационного поиска с интервалом 50±20 минуты
    Transfer ,Gte2 ;Безусловный переход к ЭВМ 2
    Generate 50,20;Поступление заявок на проведение информационного поиска с интервалом 50±20 минуты
    Transfer ,Gte3 ;Безусловный переход к ЭВМ 3


Я смысла не вижу читать дальше, если, даже после явного указания, ошибка не была выявлена вами

Добавлено
и не сгенерировать 100 транзактов, а обслужить сто транзактов. Это совершенно разные вещи. Собственно условие завершения моделлирвоания.

Добавлено
для чего там нужны гейты - совесем вообще не понятно.
вы проследите как должен двигатся один транзакт
1. попадает в первую эвм
2. проходит предварительную обработку
3. делается две копии и отправляются во торую и третью (у вас начиная с этого места несоответствие)
4. поиск в первой, второй и третьей и передача на первую эвм
5. склейка трех транзактов в один - обычный асембл. три транзакта одного семейства
6. задание считается выполненым

аналогично для второй и третьей

Автор: Антонина 14.11.09, 19:23
Спасибо большое.значит я даже задание неправильно поняла.ну что поделаешь?первый раз с этим сталкиваюсь.

Добавлено
а гейты можно оставить или нужно убрать?

Автор: Антонина 14.11.09, 20:16
а каким образом сделать две копии и склеить три транзакта?можешь мне одну ЭВМ разобрать?

Автор: TEMENb 15.11.09, 00:31
копии делаются с помощью SPLIT
склейка с помощью ACCEMBLE

Автор: Антонина 15.11.09, 12:59
Я попыталась сделать для первой эвм.проверь,пожалуйста: Gte1 QUEUE OCH1 Seize Evm1 Advance 2,1 Split 2,Gte2,Gte3 Advance 5,2
Release Evm1
Seize Evm2 Advance 11,2
Release Evm2
Seize Evm3 Advance 16,2
Release Evm3
Advance 2
ASSEMBLE 3
DEPART OCH1
Transfer ,Out

Автор: TEMENb 15.11.09, 13:09
честно.. я смотрю на ЭТО и не понимаю как ЭТО должно работать.....
собственно даже генератора нету.

Автор: Антонина 17.11.09, 14:57
Здраствуйте,эта программа написана для GPSS PC.Ответьте,пожалуйста что в ней нужно изменить чтобы она работала в GPSS World?
Требуется промоделировать решение задач в двухпроцессорной ЭВМ с общей памятью, разделенной на восемь блоков. Каждой задаче отводится при ее решении один блок. Интервалы времени между поступлениями задач распределены равномерно в интервале [2,14] единиц времени, время обработки порции информации подчинено экспоненциальному закону с интенсивностью v1=5 в процессоре CPU1 и с v2=2 в процессоре CPU2.
Между обработкой порций с вероятностью 0.6 возможно обращение к внешней памяти, в которой время обслуживания распределено равномерно в диапазоне [2,8]. С вероятностью 0.4 задачи оказываются решенными и покидают систему. Моделирование выполнить на отрезке времени, соответствующем решению не менее 100 задач. Ниже текст программы на языке GPSS.
MEM STORAGE 8
EXP FUNCTION RN1,C12
0,0/.2,.22/.4,.51/.5,.69/.6,.92/.7,1.2/.8,1.61/
.9,2.3/.95,3/.99,4.6/.999,6.9/1,100
GENERATE 8,6,,100
QUEUE A1
ENTER MEM,1
DEPART A1
M6 QUEUE A2
TRANSFER BOTH,M1,M2
M1 SEIZE CPU1
DEPART A2
ADVANCE 5,FN*EXP
RELEASE CPU1
TRANSFER ,M3
M2 SEIZE CPU2
DEPART A2
ADVANCE 2,FN*EXP
RELEASE CPU2
M3 TRANSFER .6,M5,M4
M4 QUEUE A3
SEIZE DISK
DEPART A3
ADVANCE 5,3
RELEASE DISK
TRANSFER ,M6
M5 LEAVE MEM,1
TERMINATE 1

Автор: TEMENb 17.11.09, 14:59
абсолютно все 100% задач, работающих на пс работают и на верде. обратного сказать не могу )

Автор: Антонина 17.11.09, 15:04
может быть,но он мне кучу ошибок выдал,такого плана:
11/17/09 18:05:45 Model Translation Begun.
11/17/09 18:05:45 Line 2, Col 4. Invalid keyword. Expecting a Label or GPSS Verb.
11/17/09 18:05:45 EXP FUNCTION RN1,C12
11/17/09 18:05:45 Line 3, Col 2. Line numbers must begin in the first column.
11/17/09 18:05:45 0,0/.2,.22/.4,.51/.5,.69/.6,.92/.7,1.2/.8,1.61/
11/17/09 18:05:45 Line 4, Col 2. Line numbers must begin in the first column.
11/17/09 18:05:45 .9,2.3/.95,3/.99,4.6/.999,6.9/1,100
11/17/09 18:05:45 Line 11, Col 4. Invalid SNA. Expecting a Label or GPSS Verb.
11/17/09 18:05:45 M1 SEIZE CPU1
11/17/09 18:05:45 Line 13, Col 25. Invalid SNA Entity Specifier.
11/17/09 18:05:45 ADVANCE 5,FN*EXP
11/17/09 18:05:45 Line 18, Col 25. Invalid SNA Entity Specifier.
11/17/09 18:05:45 ADVANCE 2,FN*EXP
11/17/09 18:05:45 **** Model Translation Aborted ****

Автор: TEMENb 17.11.09, 15:08
EXP замените на expon по всему тексту программы
M1 замените на met1 по всему тексту программы
FN*EXP на FN$EXPon

вообще на писЯх она тоже работать не должна

Автор: unaware 18.11.09, 08:51
Здравствуйте. Подскажите как сделать пункт b? Задача такая: оценить надежность изделия (в соответствии с вариантом), состоящего из трех узлов и устройств A, B, C, D, E, F. Узел выходит из строя, когда выходят из строя все устройства, входящие в узел. Изделие выходит из строя, когда отказывает хотя бы один из его узлов. Вероятности безотказной работы всех устройств равны соответственно: P(A) = 0,8; P(B) = 0,7; P(C) = 0,95; P(D) = 0,85; P(E) = 0,9; P(F) = 0,7. 1 узел состоит из А,В,С; 2 узел - из D; 3 узел - из E,F.
a. Рассчитать аналитически вероятность безотказной работы всей системы.
b. Оценить вероятность безотказной работы системы с помощью имитационных методов. Количество имитационных экспериментов N = 100.

Аналитически вероятность расчитал быстро. Что предпринять для решения b?

Автор: TEMENb 18.11.09, 08:54
программу надо писать. большую и сложную ))

Добавлено
Ничего подобного не писал ранее.
ну решение мне видится как то так
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    PA  EQU 800
    PB  EQU 700
    PC  EQU 950
    PD  EQU 850
    PE  EQU 900
    PF  EQU 700
     
    VPA VARIABLE    RN1>PA
    VPB VARIABLE    RN2>PB
    VPC VARIABLE    RN3>PC
    VPD VARIABLE    RN4>PD
    VPE VARIABLE    RN5>PE
    VPF VARIABLE    RN6>PF
     
        generate    ,,,100
        ASSIGN  Y1,((V$VPA+V$VPA+V$VPA)=3)
        ASSIGN  Y2,V$VPD
        ASSIGN  Y3,((V$VPE+V$VPF)=2)
        SAVEVALUE   VER+,((P$Y1+P$Y2+P$Y3)>0)  
        terminate   1
        start   100


вероятность безотказной работы получилась 0,83

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

abc=(1-pa)(1-pb)(1-pc)
d=1-pd
ef=(1-pe)(1-pf)
P=(1-abc)(1-d)(1-ef)=0.822

Автор: unaware 18.11.09, 11:03
Уважаемый TEMENb, спасибо за такой быстрый ответ. Скажу честно: не ожидал такой оперативности!

Автор: Mur-Mur 29.11.09, 16:35
Здравствуйте! Очень нужна Ваша помощь! Проверьте, пожалуйста, то что мне удалось сотворить ( в этом деле знания и умения мои довольно скудны):
Система автоматизации проектирования (САПР) создана на базе ЭВМ, функционирующей в режиме множествен¬ного доступа. Пять инженеров проектировщиков с помощью своих дисплеев одновременно и независимо проводят диалог с ЭВМ, определяя очередной вариант расчета. Каждый диалог со¬стоит из 10 циклов ввода-вывода данных. Во время одного цикла происходит следующее: за 10 ± 5 с.Инженер обдумывает и вводит текст строки; в течение 2 с работает процессор ЭВМ, подготавли¬вая текст ответа; в течение 5 с текст ответа выводится на дисплей. После ввода 11 -й строки начинается работа процессора по расчету конструкции и продолжается 30 ± 10 с. За 5 с результат расчета вы¬водится на экран, после чего инженер в течение 15 ± 5 с анализи¬рует его и начинает новый диалог. Операции по подготовке текста ответа имеют абсолютный приоритет над расчётными, т. е. преры¬вают выполнение последних.
Смоделировать процесс работы САПР при условии, что расчет вариантов конструкции повторяется 100 раз. Определить среднее время выполнения диалога и расчетных операций, а также коэф¬фициент загрузки процессора.

Текст программы:

Generate 10,5; генерируются транзакты
Queue PROС; занятие очереди
Depart PROС; обеспечивает освобождение в очереди
Seize PROС; занятие устройства
DIS STORAGE 5;
ENTER DIS; вхождение транзакта в накопитель
Advance 2,0; задерживает транзакт на время 2,0
Advance 5,0; задерживает транзакт на время 5,0
Priority 1; присваивает входящему транзакту приоритет
Test E DIS,11,C; проверяет соотношение
C Advance 30,10; задерживает транзакт на время 30,10
Advance 5,0; задерживает транзакт на время 5,0
Advance 15,5; задерживает транзакт на время 15,5;
LEAVE DIS; освобождение памяти
Release PROС; освобождает усройство с 10 циклами
Transfer 10,T; изменяет направление движения транзактов согласно режиму САПР
T Terminate 1; уничтожение транзактов

Автор: AngelOFFgrief 30.11.09, 23:04
Здравствуйте. Подскажите пожалуйста как сделать, чтобы прерывание выполнялось через определенное время?

Автор: TEMENb 30.11.09, 23:07
смотря что вы подразумеваете под прерыванием.
окончание модаллирования?
сбор статистики через определенные периоды времени?
вообщем уточните вопрос.

Автор: AngelOFFgrief 30.11.09, 23:48
Идет моделирование обработки задачи на ЦПУ, затем через определенное время она должна прерываться и ставится в конец очереди,а на ее место приходит другая и т.д.И вот я никак не пойму как сделать так чтоб блок прерывания срабатывал через определенные промежуток времени.

Автор: TEMENb 01.12.09, 00:03
ну вот пример на скорую руку

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        generate    50
        assign  tim,(40+20#rn1/1000)    ;время обработки 40+-20
    met1    queue   och
        seize   zp
        depart  och
        mark
    povt    advance 1
        assign  tim-,1
        test e  ((p$tim<=0)|(m1>=10)),1,povt    ;квант работы процессора - 10. Если время вышло или время обработки превысило 10 - то дальше, иначе на метку
        release zp
        test le p$tim,0,met1
        terminate   1
     
        start   100


или так

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        generate    50
        assign  tim,(40+20#rn1/1000)    ;время обработки 40+-20
    met1    assign  ttt,10  ;квант работы процессора - 10
        queue   och
        seize   zp
        depart  och
    povt    advance 1
        assign  tim-,1
        test g  p$tim,0,met3    ;время вышло - на метку
        loop    ttt,povt    ;делаем цикл
    met3    release zp
        test le p$tim,0,met1
        terminate   1
     
        start   100


Добавлено
возможно вам надо не квантовать время процессора, а выход по какому то событию.. тогда просто меняете условие (m1>=10) на нужное вам и вуаля.

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

Автор: WoodenArow 02.12.09, 05:07
Всем здрасти!
Народ выручайте!нужна помощь в решении задачи


Поток самолетов, требующих посадки в аэропорту, - пуасоновский с интенсивностью 15 самолетов в час. В аэропорту есть 4 посадочных полос. самолет, совершивший посадкку на полосу, освобождает ее через 70 минут. Если самолет требующий посадки, застает все полосы занятыми, то он становится в "очередь" самолетов, ожидающих посадки. Через 80+-10 минут после затребования посадки самолет нуждается в дозаправке. что обходится аэропорту в 1200+-250 ед. стоимости. После 120 минут безуспешного ожидания самолет отправляется на посадку в другой аэропорт. За каждый самолет, совершивший посадку без жидания, аэропорт получает прибыль 2500 ед.стоимости. За каждый самолет, севший после ожидания, - 1200+-200 ед. стоимости. эксплуатация одной посадочной полосы обходится в 5000000 ед.стоимости в месяц.
Определить количество посадочных полос, при котором достигается максимальная экономическая эффективность.


Я хз чо с ней делать, а сдавать надо :wall: :wall: :wall:

Хелп ми!!!!

Автор: AngelOFFgrief 02.12.09, 11:55
Спасибо большое,теперь все получилось :thanks:

Автор: Nort0n 02.12.09, 13:31
Добрый день, господа.
Сел я тут за GPSS и немножко офигел, т.к. ранее, никогда не писал на языке, на котором можно сделать только структуру :)
В свете этого, выкладываю Вам на рассмотрение "свой" опус, который был мною скопипащен, отредактирован и адаптирован. Посомтрите, плз, если не сложно, соответствует ли код исходному заданию.

Задание.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Распределенный банк данных системы сбора информации организован на базе ЭВМ,
    соединенных дуплексным каналом связи. Поступающий запрос обрабатывается на первой ЭВМ
    [B]и с вероятностью 50% необходимая информация обнаруживается на месте[/B]. В противном случае
    необходима посылка на вторую ЭВМ. Запросы поступают через 3 сек, первичная обработка
     запроса занимает 2 сек., выдача ответа требует 2 сек., передача по каналу связи занимает 3 сек.
    Временные характеристики первой ЭВМ аналогичны второй.
    Смоделировать прохождение 400 запросов. Определить необходимую ёмкость накопителей перед ЭВМ,
    обеспечивающую безотказную работу системы, и функцию распределения времени обслуживания заявки.


ЗЫ я до сих пор не осознал реализации условия, выделенного жирным шрифтом. Понятно, что надо запихать его в проверку занятости/свободности приборов, но как это сделать - ума не приложу.

ЗЫЫ И ещё вопрос, если у меня время "постоянное", т.е. не плавает от .. и до .., то обязательно ли писАть в ADVANCE 0 после запятой?


Код.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    evm1 Storage 1
    evm2 Storage 2
     
    Generate 3, 0                           ;3  сек
    QUEUE OCH                           ;очередь на обслуживание
    TEST G (R$evm1 + R$evm2),0  ;число свободных приборов> 0
    TRANSFER BOTH, ,label2      ; если может занять место на первом приборе - занимает,
                                                ; Иначе на метку label2 и занимает там место
    ENTER evm1
    DEPART OCH
    ADVANCE 2,0                                 ;время обработки заявки
    LEAVE evm1
    ADVANCE 2                           ;ответ по перовму прибору
    LEAVE evm1
    TERMINATE
                                                ; Работа второго прибора
    ADVANCE 3,0                         ; Время на передачу заявки от 1-го прибора до 2-го
    label2 ENTER evm2
    DEPART OCH
    ADVANCE 2,0                                  ;время обработки заявки
    LEAVE evm2
    ADVANCE 2                            ;время ответа по второму прибору
    LEAVE evm2
    TERMINATE
     
    GENERATE 400                        ; для 400 заявок
    TERMINATE 1
    START 1

Автор: TEMENb 02.12.09, 13:59
Цитата Nort0n @
ЗЫ я до сих пор не осознал реализации условия, выделенного жирным шрифтом. Понятно, что надо запихать его в проверку занятости/свободности приборов, но как это сделать - ума не приложу.

не знаю для чего.. но если очень нужно -
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    test e f$ystr,0,met ;если устройство свободно - то дальше, иначе на метку


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    test e r$ystr,0,met ;если все каналы устройства заняты- то дальше, иначе на метку


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    test e s$ystr,0,met ;если все каналы устройства свободны - то дальше, иначе на метку



Цитата Nort0n @
ЗЫЫ И ещё вопрос, если у меня время "постоянное", т.е. не плавает от .. и до .., то обязательно ли писАть в ADVANCE 0 после запятой?

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

Проверять правильность реализации не буду ибо время.

Автор: museik 02.12.09, 14:03
Всем привет. Помогите пожалуйста разобраться с моделированием в среде GPSS.

Есть задача:
Моделирование работы операционной системы пакетного режима коллективного пользования с чередованием фаз. Все сводится к проектированию выполнения N числа задач в мультипрограммной системе

Суть проблемы: в GPSS необходимо написать программу, выводящую динамическую временную диаграмму выполнения задач. Есть блок-схема выполнения задач и рисунок как это должно выглядеть.
Вообщем-то сложность вся в построении этой диаграммы. Если кто-нибудь может помочь, пожалуйста свяжитесь со мной. Аська: 391037687 Мыло: extremez4z@yandex.ru или же на сайте в ЛС

Заранее спасибо!

Автор: Ogram 06.12.09, 12:34
Всем привет! Дали задание на GPSS/PС.
Магистраль передачи данных состоит из двух каналов (основного и резервного) и общего накопителя. При нормальной работе сообщения передаются по основному каналу за 7±3 с. В основном канале происходят сбои через интервалы времени 200±35 с. Если сбой происходит во время передачи, то за 2 с запускается запасной канал, который передает прерванное сообщение с самого начала. Восстановление основного канала занимает 23±7 с. После восстановления резервный канал выключается и основной канал продолжает работу с очередного сообщения. Сообщения поступают через 9±4 с и остаются в накопителе до окончания передачи. В случае сбоя передаваемое сообщение передается повторно по запасному каналу.
Смоделировать работу магистрали передачи данных в течение 1 ч. Определить загрузку запасного канала, частоту отказов канала и число прерванных сообщений. Определить функцию распределения времени передачи сообщений по магистрали.
Ногами не бейте плиз, на заочке ниче не объясняют :(

Вот что у меня получается:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SIMULATE
    10  GENERATE 3600; Передача сообщений в течение часа
    20  TERMINATE 1
    30  GENERATE 9,4; Поступление сообщений через 9±4 с
    40  GATE FNV 1,FACIL2; Проверка первого (основного) канала на недоступность
    50 FACIL1 SEIZE 1; Занимаем первый канал
    60  ADVANCE 7,3; Передача сообщения за 7±3 с
    70  RELEASE 1; Освобождение первого канала
    80  TERMINATE
    90  GENERATE 9,4,2; Сообщения идущие на второй (резервный) канал с задержкой в 2 с. ?????????
    100 FACIL2 SEIZE 2; Занимаем второй канал
    110  ADVANCE 7,3; Передача сообщения за 7±3 с
    120  RELEASE 2; Освобождение второго канала
    130  TERMINATE
    140  GENERATE 200,35; Генерация команд недоступности через интервалы времени 200±35 с
    150  FUNAVAIL 1,RE,FACIL2; Удаление транзакта с первого канала и перенаправление его на второй канал
    160  ADVANCE 23,7; Задержка в 23±7 (восстановление первого канала)
    170  FAVAIL 1; Снятие недоступности с первого канала
    180  TERMINATE
    START 1
    END


В отчете данные очень странные, такое чувство, что каналы местами перепутаны. Или просто у меня не отключается второй канал после восстановления первого? Еще гложат сомнения на счет строки 90, правильно ли я задаю генерацию сообщений на второй канал?
В общем, укажите плиз на ошибки, если можно. :blush:

Автор: TEMENb 06.12.09, 12:51
90 - совсем неправильно. нарушается логика модели. требуется ведьотправлять на второй те, которые должны были ити на первый. А вы выставили еще один поток.
а первый... ну транзакты постоят потупят перед гейтом... канал освободится и они пойдут дальше. иными словами никакого перенаправления нету. банальная задержка в обслуживании.

З.Ы.: РС - зло. Требуйте у препода werld. в разы меньше заморочек.

Автор: Ogram 06.12.09, 12:57
TEMENb, спасибо! Требовать у нашего препода что-то бесполезно, с нами заочниками вообще разговор короткий. Я тогда еще подумаю.

Автор: TEMENb 06.12.09, 12:57
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    140  GENERATE 200,35; Генерация команд недоступности через интервалы времени 200±35 с
    150  FUNAVAIL 1,RE,FACIL2; Удаление транзакта с первого канала и перенаправление его на второй канал
    160  ADVANCE 23,7; Задержка в 23±7 (восстановление первого канала)
    170  FAVAIL 1; Снятие недоступности с первого канала
    180  TERMINATE
тут мыслишь в правильном направлении.

А вообще... задача сложная.

Автор: Ogram 06.12.09, 13:12
Зато если не справлюсь, знаю к кому обратиться ;)

Автор: user85vv 10.12.09, 15:20
Люди, подскажите пожалуйста как символизируется оператор многоканального устройства?

Автор: TEMENb 10.12.09, 15:22
смотря что ты имеешь ввиду
A storage B - емкость
enter A,B - вхождение
leave A,B - покидание

Автор: user85vv 10.12.09, 15:27
На ВЦ в обработку принимаются три класса задач: А, B, C. Исходя из наличия оперативной памяти ЭВМ, задачи A и B могут решаться одновременно, а задача С монополизирует ЭВМ. Задания поступают на решение: задание типа А через 30+-15 минут, типа В - 20+-10 мин., типа С - 25+-10 мин.. Для выполнения задач требуется: тип А - 15+-5 мин., тип В -15+-10 мин., тип С - 20+-15 мин. Помогите решить, горим сейчас.

Автор: TEMENb 10.12.09, 16:42
десять баксов )

Автор: Tesag 12.12.09, 19:04
Добрый вечер.
Пробежалась я ctrl+F по страничке (предварительно нажав "все"), но задачи своей не нашла (тоже и с поиском в разделе ПОМОЩЬ СТУДЕНТАМ).

Задача следующая:
Смоделировать систему Mk|Em|9|Rk.
Рассматривать при моделировании следующий смлучай: на систему поступает k>=6 пуассоновских потоков заявок. Для каждого потока имеется отдельный накопитель, причем ограничение идет только на суммарное количество заявок во всех очередях. Число фаз обслуживания m>=18. После окончания обслуживания, заявка с вероятностью, зависящей от состояния k-очередей, поступает в одну из очередей, а с доп. вероятностью уходит из системы. Все параметры - в виде сохраняемых величин.

Саму задачу решать не надо, но пожалуйста, помогите с одним вопросом: как организовать очереди? Ну, т.е. писать QUEUE que1, QUEUE que2, QUEUE que3 и т.д. не прикольно, ведь k у меня может равняться и 50 и 100500.

Я записала следующее:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    draw    FUNCTION    RN1 D6
    .1,1/.2,2/.35,3/.5,4/.7,5/1,6
     
            GENERATE(exponential(1,0,21))   ; one stream    
        TEST L  Q$fall,5,out    ; testing the fortune of queue
        QUEUE   fall    ;
        QUEUE   FN$draw ; ceating of queues
        ENTER   aod,1   ; take a devise
        DEPART          ;
        DEPART  fall    ;


Что мне надо написать в первом DEPART? Или же что еще можно добавить?
Заранее спасибо.

Автор: dmnyakov 14.12.09, 23:18
здраствуйте темень, просмотрев весь форум понял что обращаться с проблемкой нужно к вам. Дело вот в чем у меня в курсовом есть такое правило: если ЭВМ не справляется с потоком данных 10+-2, то интенсивность потока уменьшается на 20+-4. т.е. если эвм занята то должен идти не поток 10+-2, а поток 20+-4. все остальные правила реализовал, осталось только это, преподователь помогать откащывается)))))) говорит используй блоки link unlink, начал использовать вот что получилось:
generate 10,2
link 1,fifo
generate 20,4,
link 2,fifo
generate 10,2,,1
transfer ,i1
i1 seize 1
advance(exponential(1,0,3)) (это время обработки данных в ЭВМ)
release 1
unlink 1,i1,1,F1
unlink 2,i1,1
generate 3600
terminate 1
start 1
но выдает ошибку,
Error Stop.
12/15/09 02:14:08 Halt. XN: 3. Block 10 Next.
12/15/09 02:14:08 Clock:13.830468. Next: UNLINK. Line 10.
12/15/09 02:14:08 unlink 1,i1,1,F1
12/15/09 02:14:08 Parameter number must be a positive integer.

говорит что F1 должен быть положительным целым, а это ведь булева функция, нов лекциях написанно что ставить ее unlink можно главное поле Е тогда не заролнять. Помогите плиз.

Автор: TEMENb 15.12.09, 05:20
я так понял, это задача про горячий резерв?

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


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GEN VARIABLE    (10-2+(2#2#RN1/1000))#X$TEMP    ;вычисляем интервал генерации транзактов (8..12 при X$TEMP=1 или 16..24 при X$TEMP=2)
        GENERATE    V$GEN   ;генерирование сигнала через интервалы времени, определенные вычисляемой величиной GEN
        TEST E  X$YPSIG,1,MET1  ;Если YPSIG равен 1 (управляющий сигнал получен), то дальше, иначе на метку
        SAVEVALUE   TEMP,1  ;в переменную TEMP положить единиццу (нормальный режим)
        TRANSFER    ,MET2   ;отправить на метку
    MET1    SAVEVALUE   TEMP,2  ;в переменную TEMP положить двойку (заторможеный режим)
    met2 ...


ну это моя реализация. ты можешь в сейвалуе просто сохранять значеня времени и подставлять их в адванс.

Автор: dj_kovrik 15.12.09, 17:34
Здравствуйте! Подскажите, пожалуйста, правильность решения (и, если оно неправильное - чего добавить/убавить).

Задача
Цитата
Одноканальная СМО с отказами представляет собой одну телефонную линию. Заявка (вызов), пришедшая в момент, когда линия занята, получает отказ. Все потоки событий простейшие.
Интенсивность потока λ= 0,95 вызова в минуту. Средняя продолжительность разговора t = 1 мин. Определите вероятностные ха¬рактеристики СМО в установившемся режиме работы.


Код:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ; Единица измерения времени - минута
    Line STORAGE 1
    GENERATE 0.95
    ENTER Line
    ADVANCE 1,0.2
    LEAVE Line
    TERMINATE Line
    START 600


Либо задание простое, либо не все так просто как я понял :)

Автор: TEMENb 15.12.09, 17:38
ну вопервых надо использовать не ентер/лив, а сейз/релайз
хотя это и не ошибка
а вовторых отсутствует блок отказов
после дженерейта надо вставить test e f$Line,0,otkaz

Добавлено
да и тут ошибочка

GENERATE 0.95

надо

GENERATE (1/0.95)

Автор: dj_kovrik 15.12.09, 18:15
Спасибо за замечания! А по отказу что делать? Просто test e f$Line,0 как я понял нельзя :)
p.s. ок )

Автор: TEMENb 15.12.09, 18:41
учи мат часть )

Автор: Volk101188 16.12.09, 16:11
люди, помогите написать программу на GPSS! Пожалуйста!
Автоматизированная система управления АСУ продажей железнодорожных билетов состоит из двух параллельно работающих ЭВМ. При выходе из строя одной ЭВМ АСУ продолжает нормально функционировать за счет работы другой ЭВМ. Поток отказов каждой ЭВМ простейший. Среднее время безотказной работы одной ЭВМ равно 10 суткам. При выходе из строя отказавшую ЭВМ начинают ремонтировать. Время ремонта ЭВМ распределено по показательному закону и в среднем составляет двое суток. В начальный момент обе ЭВМ исправны. Найти среднюю производительность АСУ, если при исправности хотя бы ЭВМ ее производительность равна 100%, а при отказе обеих ЭВМ продажа билетов производится вручную, обеспечивая 30% общей производительности АСУ.

Автор: marsovi4 17.12.09, 21:24
РЕБЯТ ПОДСКАЖИТЕ , КАК СДЕЛАТЬ ТАК ЧТОБ ТРАНЗАКТ ПОСТУПАЛ НА ОБРАБОТКУ ЧЕРЕЗ ИНТЕРВАЛ ВРЕМЕНИ, РАСПРЕДЕЛЕННЫЙ ПО ЭКСПОНЕНЦИАЛЬНОМУ ЗАКОНУ СО СРЕДНИМ 2

Добавлено
ДУМАЛ ЗАДАЕТСЯ КАК
GENERATE (EXPONENTIAL(0,1,2)), АН НЕТ... РУГАЕТСЯ.

НАШЕЛ В ИНЕТЕ ВОТ ТАКОЕ

EXP FUNCTION RN$1,C14
0.,0./.1,.104/.3,.555/.5,.69/.6,.915
.7,1.2/.8,1.6/.85,1.95/.9,2.3/.95,3
.98,3.9/.99,4.6/.995,5.3/.999,7.

ЭТО ПРАВИЛЬНО?

Автор: TEMENb 17.12.09, 21:32
marsovi4
Цитата marsovi4 @
GENERATE (EXPONENTIAL(0,1,2))

ENERATE (EXPONENTIAL(1,0,2))
генератор, сдвиг, среднее
учи мат часть )

EXP FUNCTION RN$1,C14
0.,0./.1,.104/.3,.555/.5,.69/.6,.915
.7,1.2/.8,1.6/.85,1.95/.9,2.3/.95,3
.98,3.9/.99,4.6/.995,5.3/.999,7.

ENERATE 2,fn$EXP

Автор: marsovi4 17.12.09, 22:45
как сделать так чтобы ПРИОРИТЕТ задачи был определен функцией распределения PRI(0.4,0.5,0.1)

Автор: marsovi4 18.12.09, 00:25
Ребят помогите,никак домозговать не могу...
вот задание МОДЕЛЬ СПЕЦИАЛИЗИРОВАННОЙ ЭВМ

Построить модель системы, состоящей из источника задач и специализированной ЭВМ (СЭВМ). В конфигурацию ЭВМ входят процессор и оперативная память. Из источника задачи поступают на обработку в СЭВМ через интервалы времени, распределенные по экспоненциальному закону со средним 2. Каждая задача занимает раздел оперативной памяти и становится в очередь к процессору. Количество разделов равно 64. Процессор обслуживает задачи по относительному приоритету.Приоритеты имеют 3 уровня. Приоритет задачи определен функцией распределения PRI(0.4,0.5,0.1).
Отсутствие свободного раздела опеpативной памяти (ОП) влечет за собой отказ на обслуживание. В этом случае вновь поступившая задача покидает СЭВМ, т.е. уничтожается. Аналогично происходит с задачей, обслуженной процессором.
Время обработки задачи 0,4 мс. процессором распределенно экспоненциально дообслуживанием по приоритету.
Определить:
- коэффициент загрузки процессора;
- среднее время обслуживания задачи в СЭВМ;
- вероятность отказа и гистограмму времени нахождения задачи в СЭВМ.
Исходный текст модели и результаты моделирования приведены ниже.

вот что я уже сделал

op storage 64
proz storage 1
transit table M1,10,10,20
generate (EXPONENTIAL(1,0,2))
savevalue kolsgen+,1
gate snf op,otkazy
enter op
queue och
seize proz
depart och
leave op
advance
release proz
tabulate transit
terminate 1
otkazy savevalue otkaz+,1
savevalue verOTKAZA,(X$otkaz/X$kolsgen)
terminate
start 500

что надо приписать к задержке чтоб выполнялось условие из задания: Время обработки задачи 0,4 мс. процессором распределенно экспоненциально дообслуживанием по приоритету.

Автор: TEMENb 18.12.09, 06:51
marsovi4
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    pri function rn1,d3
    .4,1/.9,2/1,3
     
     
    ..............
    priority fn$pri

Автор: marsovi4 18.12.09, 18:15
т.е. вот так будет выглядить готовый вариант? или есть ошибки?

op storage 64
proz storage 1
transit table M1,10,50,10
generate (EXPONENTIAL(1,0,2))
pri function rn1,d3
.4,1/.9,2/1,3
savevalue kolsgen+,1
gate snf op,otkazy
enter op
queue och
seize proz
depart och
leave op
advance 4,fn$pri
release proz
tabulate transit
terminate 1
otkazy savevalue otkaz+,1
savevalue verOTKAZA,(X$otkaz/X$kolsgen)
terminate
start 100

Автор: Skam 20.12.09, 12:00
Подскажите пожайлуста с чего начать решение этой задачи :

В карьере грузовики доставляют руду от трех экскаваторов к другу дробилки. Грузовики приписаны к определенным экскаваторов, так что каждый грузовик всегда возвращается к своему экскаватора после того, как выгрузили руду у дробилки Используются грузовики двух видов; грузоподъемностью 20 и 50 тонн. Грузоподъемность влияет на время погрузки машин экскаватором, время переезда в дробилки, время разгрузки и время возвращения к экскаваторам Числовые характеристики этих величин приведены в таблице.

Процесс Время для

20-тонного грузовика Время для

50-тонного грузовика
Погрузка Случайная величина с экспоненциальным распределением со средним значением 5 минут Случайная величина с экспоненциальным распределением со средним значением

10 минут
Переезда в дробилки Постоянная величина 2,5 минуты Постоянная величина

3 минуты
Разгрузка Случайная величина с экспоненциальным распределением со средним значением 5 минут Случайная величина с экспоненциальным распределением со средним значением

4 минуты
Возврат к экскаваторам Постоянная величина 1,5 минуты Постоянная величина

2 минуты


К каждому экскаваторы закреплены два грузовика 20-тонный и 50-тонна Все очереди к экскаваторам имеют дисциплину обслуживания FIFO. В очереди к дробивкы машины стоят в порядке уменьшения их грузоподъемности, а при одинаковой грузоподъемности - по правилу FIFO.

Целью моделирования является определение:
среднего количества грузовиков у каждого экскаватора и в дробилки;
коэффициенты загрузки каждого экскаватора и дробилки.

Автор: DIANKA2010 21.12.09, 15:27
ЗДРАВСТУЙТЕ, ПОМОГИТЕ ПОЖАЛУЙСТО. СДЕЛАТЬ ЭТУ ЗАДАЧУ В GPSS!!! ОЧЕНЬ-ОЧЕНЬ НАДО :( :( :( ...

На обрабатывающий участок цеха поступают детали в среднем через 50 мин. Первичная обработка деталей производится на одном из двух станков. Первый станок обрабатывает деталь в среднем 40 мин и имеет до 4% брака, второй соответственно 60 мин и 8% брака. Вс бракованные детали возвращаются на повторную обработкуна второй станок. Детали, попавшие в разряд бракованных дважды, считаются отходами. Вторичную обработку проводят так же 2 станка в среднем 100 мин каждый. Причём первый станок обрабатывает имеющиеся в накопителе после первичной обработки детали, а второй станок подключается при образовании в накопителе задела больше трёх деталей. Все интервалы времени распределены по экспоненциальному закону.
Смоделировать обработку на участке 500 деталей. Определить загрузку вторго станка на вторичной обработке и вероятность появления отходов. Определить возможность снижения задела в накопителе и повышения загрузки второго станка на вторичной обратотке.


ЗАРАНЕЕ ВСЕМ БОЛЬШОЕ СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Добавлено
ЗДРАВСТВУЙТЕ ПОМОГИТЕ НАПИСАТЬ ПРОГРАММУ В GPSS!!! ОЧЕНЬ ОЧЕНЬ НАДО :( :( :( !!!
На обрабатывающий участок цеха поступают детали в среднем через 50 мин. Первичная обработка деталей производится на одном из двух станков. Первый станок обрабатывает деталь в среднем 40 мин и имеет до 4% брака, второй соответственно 60 мин и 8% брака. Вс бракованные детали возвращаются на повторную обработкуна второй станок. Детали, попавшие в разряд бракованных дважды, считаются отходами. Вторичную обработку проводят так же 2 станка в среднем 100 мин каждый. Причём первый станок обрабатывает имеющиеся в накопителе после первичной обработки детали, а второй станок подключается при образовании в накопителе задела больше трёх деталей. Все интервалы времени распределены по экспоненциальному закону.
Смоделировать обработку на участке 500 деталей. Определить загрузку вторго станка на вторичной обработке и вероятность появления отходов. Определить возможность снижения задела в накопителе и повышения загрузки второго станка на вторичной обратотке.

ЗАРАНЕЕ ВСЕМ ОГРОМНОЕ СПАСИБО!!!!

Автор: WoodenArow 23.12.09, 17:05
Всем здрасти вот несколько задач и их решений... это задачи с курсовой по имитационнму моделированию... решал сам ну в общем как смог.

Поток самолетов, требующих посадки в аэропорту, - пуассоновский с интенсивностью λ, самолетов в час. В аэропорту есть n посадочных полос. Самолет, совершив посадку на полосу, освобождает ее через t1 минут. Если самолет, требующий посадки, застает все полосы занятыми, то он становится в «очередь» самолетов, ожидающих посадки. Через t2 ± t3 минут после затребования посадки самолет нуждается в дозаправке, что обходится аэропорту в S1 ± S2 ед. стоимости. После t4 минут безуспешного ожидания самолет отправляется на посадку в другой аэропорт. За каждый самолет, совершивший посадку без ожидания, аэропорт получает прибыль S3 ед. стоимости. За каждый самолет, севший после ожидания, - S4 ± S5 ед. стоимости. Эксплуатация одной посадочной полосы обходится в S6 ед. стоимости в месяц.
Определить количество n посадочных полос, при котором достигается максимальная экономическая эффективность.

Параметры

λ 10
n 2
t1 35
t2±t3 70±10
S1±S2 1000±200
t4 140
S3 2000
S4±S5 1500±100
S6 1000000

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    T4 variable 140
    T2T3 variable 35
    S1S2 variable 1100
    S4S5 variable 1550
    Sob variable 0
    aero storage 2
    initial X$Zap,0
    initial X$Sev,0
    initial X$STn,0
     
    generate (poisson(1,4))
    queue och
    test g qt$och,V$T2T3,aaa
    savevalue Zap+,V$S1S2
    aaa test l qt$och,V$T4,ddd
    enter aero
    depart och
    advance 70
    leave aero
    savevalue Sev+,V$S4S5
    transfer ,ccc
    ddd depart och
    ccc terminate
     
    generate 43200
    savevalue STn+,2000000
    savevalue Sob+,X$Sev
    Savevalue Sob-,X$Zap
    Savevalue Sob-,X$STn
    terminate 1
    start 1


единственно не смог решить пробелму с переменными t2±t3,S1±S2,S4±S5, по этому пришлось усреднять значения(( решение не супер но как вариант, если предложите что нить другое тоже с удовольствием посмотрел бы))

Частный магазин покупает партию из N единиц товара по оптовой цене S единиц стоимости. Деньги на приобретение товара владелец магазина берет в кредит. Процентная ставка за кредит составляет k процентов от суммы непогашенного кредита в день (табл. 13).
Поток покупателей, приходящих в магазин, - пуассоновский с параметром λ мин-1.
Вероятность того, что покупатель не будет покупать товар и сразу уйдет из магазина, зависит от длины очереди и розничной цены товара:
Руход=1 - р1*р2, (1)
где
р1 - вероятность того, что длина очереди «устраивает» покупателя,
р2 - вероятность того, что он купит товар по установленной розничной цене.
Время обслуживания покупателя в магазине - равномерно распределенная случайная величина в интервале А ± В мин.
Определить наиболее выгодную розничную цену продажи товара в магазине с учетом платы за кредит.
Примечание. Считать, что после продажи единицы товара величина кредита уменьшается на отпускную цену проданного товара (если долг еще существует). Это приводит к тому, что величина кредита и выплата процентов по нему уменьшаются.

Параметры
N 600
S 1000
k, % 1
λ 0,05
p1 - очередь до 3 человек 0,55
4 - 6 человек 0,2
7 - 10 человек 0,15
Свыше 11 человек 0,1
p2 - цена до 1,5 S 0,67
1,5S - 2S 0,14
2S - 3S 0,11
3S - 4S 0,08
A 20
B 4

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    RST variable 0.67
    Pst variable 1500
    Initial X$STob,0
    initial X$Kred,600000
    initial X$tov 600
    initial X$Vremk 0
    initial X$Vremt 0
    initial X$Vrem 0
    initial X$SumS 0
    initial X$Den 1440
    Den1 variable 1440
     
    Generate (poisson(1,20))
    test G X$Kred,0,yyy
    savevalue Vremk,C1
    yyy test G X$tov,0,ttt
    savevalue Vremt,C1
    test LE Q$och,3,aaa
    transfer 0.55,aaa,bbb
    aaa test LE Q$och,6,ccc
    transfer 0.2,ccc,bbb
    ccc test LE Q$och,10,ddd
    transfer 0.15,ddd,bbb
    ddd test GE Q$och,11,ttt
    transfer 0.1,ttt,bbb
    bbb transfer V$RST,ttt,eee
    eee queue och
    seize mag
    depart och
    advance 20,4
    release mag
    savevalue Vrem,C1
    test G X$Kred,0,iii
    test GE X$Vrem,X$Den,iii
    Stav FVariable X$Kred/100
    savevalue SumS,V$Stav
    Savevalue Kred+,X$SumS
    Savevalue Den+,V$Den1
    iii Savevalue tov-,1
    savevalue STob+,V$Pst
    savevalue Kred-,V$Pst
     
    ttt terminate
     
    generate 43200
    terminate 1
    start 1


Задание 4.
В цех на участок обработки поступают партии деталей по три в каждой. Интервалы между приходом партий - случайные величины, равномерно распределенные в интервале A ±B минут. Первичная обработка деталей происходит на одном из двух типов станков. Деталь поступает на обработку на станок с меньшей очередью. Станок первого типа обрабатывает деталь за Т1 минут и допускает k1 процентов брака, второго типа - соответственно, Т2 минут и k2 процентов брака. Все бракованные детали возвращаются на повторную обработку на свой станок. Детали, которые были забракованы дважды, считаются отходами и отправляются на утилизацию.
После первичной обработки детали поступают в накопитель, а из него - на вторичную обработку, которую проводят два параллельно работающих станка за время, распределенное по экспоненциальному закону со средним Т3 минут на одну деталь каждый. Причем второй станок подключается к работе, только если в накопителе находится более трех деталей. Затраты на содержание станков первого и второго типов составляют, соответственно, S1 и S2 единиц стоимости в час, независимо от того, используется станок или нет. Цена реализации готовой детали составляет S3 единиц стоимости, а стоимость покупки необработанной детали - S4 единиц стоимости.
Есть возможность повысить качество первичной обработки деталей. Уменьшение уровня брака в работе станков на r процентов требует дополнительных затрат r*S5 единиц стоимости на каждую деталь. Действия по повышению эффективности качества первичной обработки могут проводиться для обоих типов станков независимо друг от друга.
Определить, сколько станков первого и второго типов необходимо иметь и в каком объеме проводить мероприятия по повышению качества первичной обработки, чтобы достичь максимума прибыли за единицу времени.

Параметры
A±B k1 k2 T1 T2 T3 S1 S2 S3 S4 S5
60±10 4 11 45±12 80±20 30 6 2 300 50 5

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    initial x$prib,0
    stan1 storage 1
    stan2 storage 1
    stan3 storage 1
    stan4 storage 1
     
     
    Generate 60,10
    Split 2,aaa
    aaa test LE Q$och1,Q$och2,zzz
    bbb queue och1
    enter stan1
    depart och1
    advance 45,12
    leave stan1
    transfer .04,xxx,yyy
    yyy assign 1+,1
    test L P1,2,ttt
    transfer ,bbb
    zzz queue och2
    enter stan2
    depart och2
    advance 80,20
    leave stan2
    transfer .11,xxx,www
    www assign 1+,1
    test L P1,2,ttt
    transfer ,zzz
    xxx savevalue prib-,50
    test LE Q$och,3,rrr
    queue och
    enter stan3
    depart och
    advance (exponential(1,0,30))
    leave stan3
    transfer ,uuu
    rrr enter stan4
    advance (exponential(1,0,30))
    leave stan4
    uuu savevalue prib+,350
    ttt terminate
     
    generate 2400
    savevalue prib-,640 //единственно не понял почему здесь отнимаем 640 сказали вставить)))
    terminate 1
    start 1

Автор: Hawk 24.12.09, 21:47
Здравствуйте. У меня возникла проблема в создании многоканальной модели в среде GPSS.
Необходимо создать модель мастерской по ремонту бытовой техники. Количество каналов обслуживания равно 5 (мастера). Интервал времени между поступлениями заказов является случайной величиной, равномерно распределенной в пределах от 48 до 120 минут. Продолжительность обслуживания одного заказчика также является случайной величиной, равномерно распределенной в пределах от 420 до 480 минут.
Модель я создал, но по результатам её работы выяснилось, что эти каналы работают не совместно, а отдельно. Собственно, по данным, которые я внёс в GPSS, это и видно. Вопрос в следующем: как мне сделать так, чтобы каналы обслуживания работали совместно? Т.е. если заявка поступает к мастеру, который уже занят, то первая уже переходит к следующему мастеру. Заранее благодарен.

Вот моя модель в GPSS
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE    84,36   ;ЗАКАЗ ПОСТУПАЕТ К МАСТЕРУ
    QUEUE   QZAKAZ  ;ЗАКАЗ ОЖИДАЕТ СВОЕЙ ОЧЕРЕДИ
    SEIZE   ZAKAZ   ;ЗАКАЗ ВЗЯТ МАСТЕРОМ
    DEPART  QZAKAZ  ;ЗАКАЗ ПОКИДАЕТ ОЧЕРЕДЬ
    ADVANCE 300,30  ;МАСТЕР ОСУЩЕСТВЛЯЕТ РЕМОНТ
    RELEASE ZAKAZ   ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
    TERMINATE   ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
     
    GENERATE    84,36   ;ЗАКАЗ ПОСТУПАЕТ К МАСТЕРУ
    QUEUE   QZAKAZ  ;ЗАКАЗ ОЖИДАЕТ СВОЕЙ ОЧЕРЕДИ
    SEIZE   ZAKAZ_2 ;ЗАКАЗ ВЗЯТ МАСТЕРОМ
    DEPART  QZAKAZ  ;ЗАКАЗ ПОКИДАЕТ ОЧЕРЕДЬ
    ADVANCE 300,30  ;МАСТЕР ОСУЩЕСТВЛЯЕТ РЕМОНТ
    RELEASE ZAKAZ_2 ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
    TERMINATE   ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
     
    GENERATE    84,36   ;ЗАКАЗ ПОСТУПАЕТ К МАСТЕРУ
    QUEUE   QZAKAZ  ;ЗАКАЗ ОЖИДАЕТ СВОЕЙ ОЧЕРЕДИ
    SEIZE   ZAKAZ_3 ;ЗАКАЗ ВЗЯТ МАСТЕРОМ
    DEPART  QZAKAZ  ;ЗАКАЗ ПОКИДАЕТ ОЧЕРЕДЬ
    ADVANCE 300,30  ;МАСТЕР ОСУЩЕСТВЛЯЕТ РЕМОНТ
    RELEASE ZAKAZ_3 ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
    TERMINATE   ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
     
    GENERATE    84,36   ;ЗАКАЗ ПОСТУПАЕТ К МАСТЕРУ
    QUEUE   QZAKAZ  ;ЗАКАЗ ОЖИДАЕТ СВОЕЙ ОЧЕРЕДИ
    SEIZE   ZAKAZ_4 ;ЗАКАЗ ВЗЯТ МАСТЕРОМ
    DEPART  QZAKAZ  ;ЗАКАЗ ПОКИДАЕТ ОЧЕРЕДЬ
    ADVANCE 300,30  ;МАСТЕР ОСУЩЕСТВЛЯЕТ РЕМОНТ
    RELEASE ZAKAZ_4 ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
    TERMINATE   ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
     
    GENERATE    84,36   ;ЗАКАЗ ПОСТУПАЕТ К МАСТЕРУ
    QUEUE   QZAKAZ  ;ЗАКАЗ ОЖИДАЕТ СВОЕЙ ОЧЕРЕДИ
    SEIZE   ZAKAZ_5 ;ЗАКАЗ ВЗЯТ МАСТЕРОМ
    DEPART  QZAKAZ  ;ЗАКАЗ ПОКИДАЕТ ОЧЕРЕДЬ
    ADVANCE 300,30  ;МАСТЕР ОСУЩЕСТВЛЯЕТ РЕМОНТ
    RELEASE ZAKAZ_5 ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
    TERMINATE   ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
     
    *таймер-сегмент
    GENERATE    480 ;ВРЕМЯ МОДЕЛИРОВАНИЯ 8 ЧАС=480МИН
    TERMINATE   1   ;ЗАВЕРШЕНИЕ МОДЕЛИРОВАНИЯ
    START 1

Автор: TEMENb 24.12.09, 22:14
ужас! )
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ZAKAZ stprage 5
    GENERATE    84,36   ;ЗАКАЗ ПОСТУПАЕТ К МАСТЕРУ  
    QUEUE   QZAKAZ  ;ЗАКАЗ ОЖИДАЕТ СВОЕЙ ОЧЕРЕДИ
    enter ZAKAZ ;ЗАКАЗ ВЗЯТ МАСТЕРОМ
    DEPART  QZAKAZ  ;ЗАКАЗ ПОКИДАЕТ ОЧЕРЕДЬ
    ADVANCE 300,30  ;МАСТЕР ОСУЩЕСТВЛЯЕТ РЕМОНТ
    leave ZAKAZ ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
    TERMINATE   ;БЫТОВАЯ ТЕХНИКА ОТРЕМОНТИРОВАНА
     
    *таймер-сегмент
    GENERATE    480 ;ВРЕМЯ МОДЕЛИРОВАНИЯ 8 ЧАС=480МИН
    TERMINATE   1   ;ЗАВЕРШЕНИЕ МОДЕЛИРОВАНИЯ
    START 1

Автор: Hawk 25.12.09, 05:20
Я делал ранее разными способами. Через STORAGE тоже делал, но забыл указать строку "leave ZAKAZ", поэтому и не сработало. Спасибо, что исправил ошибку.

Автор: perluhina 26.12.09, 12:53
можно ли в GPSS в место TRANSFER .333, ProstSS,SL записать TRANSFER (1/3), ProstSS,SL,
работает это одинаково, а вот с точки зрения синтаксиса??? :huh:

Автор: TEMENb 26.12.09, 12:58
perluhina, можно.
Собственно в качестве любого параметра можно записать любое выражение. единственное условие - обязательно нужно заключить его в скобки.

Добавлено
особенно это правило помогает при составлении всякого рода условий.
например
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    test e (f1|f2|(f3=0)),1
что означает - если устройство 1 занято или устройство 2 занято или устройство 3 свободно - то перейти к следующему блоку ))

Автор: perluhina 26.12.09, 18:48
TEMENbСпасибо, а как доказать это преподу???
есть ли какая книженция, где это написано??? или другой Официальный источник???

Автор: TEMENb 26.12.09, 19:02
можно доказать эксперементальным путем.

Автор: perluhina 26.12.09, 19:07
эксперемиентально я доказала, получила за курсач 5, а к экзаману говорит, вы мне принесите источник где написано, что с точки зрения синтаксиса эт не ошибка!!!!

Автор: TEMENb 26.12.09, 19:10
ыч.. я думаю только в английской оффиыиальной документации.
А с точки зрения синтаксиса уже даже дробное время не ошибка.. и отритцательный приоритет - не ошибка... вообщем много ньюансов за последние лет 10 появилось ))))

Автор: bra1nout 27.12.09, 11:59
Программа для 4 источников, буфера и 1 приёмника

SIMULATE

GENERATE 4, 1.5
mark 1
queue 1
seize 1
depart 1
advance (Normal(1,5,1))
release 1
mark 2
savevalue i1+,1
savevalue m0,*2
savevalue m0-,*1
test g m0,m1,met1
savevalue m1,*1
met1 terminate


GENERATE 4, 1.5
mark 1
queue 1
seize 1
depart 1
advance (Normal(1,5,1))
release 1
mark 2
savevalue i2+,1
savevalue m0,*2
savevalue m0-,*1
test g m0,m2,met2
savevalue m2,*1
met2 terminate


GENERATE 4, 1.5
mark 1
queue 1
seize 1
depart 1
advance (EXPONENTIAL(1,5,1))
release 1
mark 2
savevalue i3+,1
savevalue m0,*2
savevalue m0-,*1
test g m0,m3,met3
savevalue m3,*1
met3 terminate

GENERATE 4, 1.5
mark 1
queue 1
seize 1
depart 1
advance (EXPONENTIAL(1,5,1))
release 1
mark 2
savevalue i4+,1
savevalue m0,*2
savevalue m0-,*1
test g m0,m4,met4
savevalue m4,*1
met4 terminate

GENERATE 600
START 1
TERMINATE 1

Выводит ошибку
12/27/09 14:58:51 test g m0,m3,met3
12/27/09 14:58:51 Operand B. Invalid expression.
12/27/09 14:58:51 Datum has not been initialized.
Как можно это исправить? Помогите, пожалуйста. Мозг уже набекрень :)
m1, m2, m3, m4 - максимальные отклики системы для источника. С m1, m2 - проходит, а дальше - нет.

Автор: TEMENb 27.12.09, 16:49
Цитата bra1nout @
test g m0,m3,met3

test g x$m0,x$m3,met3

Учи мат. часть

Автор: irdis_13 11.01.10, 01:42
вот мучусь-мучусь - никак не получается протабулировать сколько создавался времени мой транзакт если можете - помогите!!!плиз!!! очень нужно!!!

Автор: TEMENb 11.01.10, 13:47
irdis_13, не понял вопрос.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    tab table m1,0,1,100
     
    generate ,,,1000
    mark
    advance 40,30
    tabulate tab
    terminate 1
    start 1000

Автор: irdis_13 11.01.10, 15:34
вопрос в общем в том, какое количество времени потратилось на генерацию транзакта, а ты мне написал сколько времени потратилось на его обработку! проблему решил следующим образом

Цитата

EXPON FUNCTION RN1,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.85
.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/.9998,8
Time VARIABLE AC1-X1 ;занёс в таблицу значение разницы абсолютного текущего времени и времени появления последнего транзакта
TAB table v$Time,0,500,13
SIMULATE
GENERATE 900,FN$EXPON,,1000
TABULATE TAB
savevalue 1,AC1 ;запомнил время появления последнего транзакта

GATE NU VERST1,JUMP2
SEIZE VERST1
ADVANCE 2880,FN$EXPON
RELEASE VERST1
TERMINATE 1

JUMP2 GATE NU VERST2,JUMP3
SEIZE VERST2
ADVANCE 2880,FN$EXPON
RELEASE VERST2
TERMINATE 1

JUMP3 GATE NU VERST3,JUMP4
SEIZE VERST3
ADVANCE 2880,FN$EXPON
RELEASE VERST3
TERMINATE 1

JUMP4 GATE NU VERST4,KILL
SEIZE VERST4
ADVANCE 2880,FN$EXPON
RELEASE VERST4
TERMINATE 1

KILL TERMINATE 1
START 1000




мне просто нужно было проверить в курсовой закон распределения создания транзактов (а не их обработки) для проверки адекватности!! вопрос понят?

а еще вопрос: как мне создать такую систему, в которой обслуживающих станков, которые обрабатывают заготовки, было бы не 1, а несколько, 4 к примеру. Я реализовал это в коде, который находится выше, а нельзя ли это реализовать как-то покороче? НАКОПИТЕЛЕЙ НЕТ. ЕСЛИ УСТРОЙСТВО ЗАНЯТО, ТО ЗАЯВКА ОТБРАСЫВАЕТСЯ!!!! :thanks: :wall:

Автор: Atnos 20.01.10, 10:03
здраствуите, помогите пожалуста
надо смоделировать систему в среде GPSS World студенческая версия
задания:
ЭВМ обслуживает три терминала по круговому циклическому алгоритму, предоставляя каждому терминалу 30 с. Если в течение этого времени задание обработалось, то обслуживание завершаетсяЖ если нет, то остаток задачи становится в спецальную очередь, которая использует свободные циклы терминалов, т.е. задача обслуживается, если на каком либо терминале нет заявок. Заявки на терминал поступают через 30+-5 секунд и имеют длину 300+-50 символов. Скорость обработки задании ЭВМ 10символов / секунда.
Смоделировать 5 часов работы ЭВМ. Определить загрузку ЭВМ, параметры очереди неоконченных заданий. Определить велечину цикла терминалов, при котори все заявки обработаются без специальной очереди.

текст программы котори я пытался написать, прадо у меня не че не получается( хотя ребятам из группы написат курсовые на вскидку, а со своеи такои запар вышел
INITIAL X1,3 {инициализация ячеек}
INITIAL X2,1
INITIAL X3,1
INITIAL X4,30
INITIAL X5,30
INITIAL X6,30
INITIAL X7,1


GENERATE 30,5 {генераия транзакта}
TRANSFER ALL,MET1,MET4 {если занято устроиство по метке 1 то на метку 4}
MET4 TRANSFER ALL,MET2,MET3 {если занято устроиство по метке 2 то на метку 3}

MET1 PRIORITY X1 {первый терминал}
TRANSFER ALL,MET5

MET2 PRIORITY X2 {второи терминал}
TRANSFER ALL,MET5

MET3 PRIORITY X3 {третии терминал}
TRANSFER ALL,MET5

MET5 PREEMPT EBM,PR
SEIZE EBM
ADVANCE X5
TEST E P1,X4,MET6 {проверка равно ли 1 значение транзакта Р1 30}
RELEASE EBM
TERMINATE 1
SAVEVALUE X6-,X5
TEST L X6,1,MET9 {проверка если значение ячеики Х6 меньше 1го то
востановить значения ячек}

SAVEVALUE X4,30
SAVEVALUE X4-,P1
TRANSFER ALL,MET12

MET6 TEST G P1,X4,MET8 {прроверка если Р1 больше 30}
SAVEVALUE P1-,XL4
QUEUE q1
SAVEVALUE X7+,1
TRANSFER all,MET33

MET8 SAVEVALUE X4-,P1 {изменение ячек если значение Р1 меньше 30 и переход на метку 5}
SAVEVALUE X5-,4
SAVEVALUE X4,P1
TRANSFER all,MET5

MET9 SAVEVALUE X4,30
SAVEVALUE X5,30
SAVEVALUE X7+,1
TEST E X7,4,MET10
TRANSFER all,MET12

MET10 SAVEVALUE X7,1
TRANSFER all,MET12

MET12 SEIZE OCH
dEPART q1
ADVANCE 0
RELEASE OCH
TRANSFER all,MET33

MET33 TEST E X7,1,MET21
TEST E X7,2,MET22
TEST E X7,3,MET23

MET21 SAVEVALUE X1,1
SAVEVALUE X2,0
SAVEVALUE X3,0
TRANSFER all,MET1

MET22 SAVEVALUE X1,0
SAVEVALUE X2,1
SAVEVALUE X3,0
TRANSFER all,MET2

MET23 SAVEVALUE X1,0
SAVEVALUE X2,0
SAVEVALUE X3,1
TRANSFER all,MET3

GENERATE 18000
TERMINATE 1
START 1

Автор: TEMENb 20.01.10, 10:26
Atnos, воспользуйтесь пользовательскими списками. вы удивитесь насколько простая это задача.

Автор: Alex_bu 20.01.10, 11:50
Привет всем. Нужна помощь. Если кому не сложно. Помогите доделать модель Супермаркета.

Необходимо промоделировать работу супермаркета, например, «Лента» (кстати, ничего там хорошего нет). Супермаркет имеет парковку на 130 автомобилей. В том случае, если все места заняты, автомобиль покидает территорию магазина. Припарковав автомобиль, покупатели входят в помещение магазина. При входе в зал, покупатель может взять тележку (130 штук) или корзинку (60 штук), для перевозки (переноски) купленных товаров. Магазин имеет 15 кассовых терминалов. В обычном режиме работает 8 терминалов. Из них один – для быстрого обслуживания покупателей с небольшим количеством покупок (до 12). На выходе из магазина находится контролер-интервьюер, спрашивающий качество обслуживания и выборочно проверяющий соответствие чеков и покупок. В обычном режиме опрашиваются все покупатели.
Параметры функционирования торгового комплекса следующие.
• Поток машин, прибывающий на стоянку, и покупателей, входящих в магазин нормальный.
• Время прихода покупателей в магазин, колеблется в пределах, от 45 до 70 сек включительно.
• Если производится покупка более 12 видов товара, покупатель берет тележку.
Время обслуживания кассиром покупателя с тележкой составляет от 6.5 до 10.0 мин включительно.
• Время обслуживания покупателя с корзинкой занимает от 5.5 до 7.8 мин включительно
• На интервью тратится от 1.0 до 1.6 мин включительно.

Необходимо промоделировать работу торгового комплекса в течение 10.0 часов

Выделил то что мне не понятно..
Про интервьюера вроде сделал , но возможно не правильно.


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        RMULT   1187    
    Kassa_2 EQU 2                  
    Kassa_N EQU 8
    Time_work   VARIABLE    10#60#60        
    N_Pokupok   VARIABLE    (RN1@96+5)
    Finance VARIABLE    (RN1@3+1)#40+150
    Time_system TABLE   M1,1000,1000,7
    Pokupki TABLE   P$Kol_pokupok,10,10,10
    N_Pokupatel TABLE   X$Pokupatel,100,50,12
    Park    STORAGE 130
    Telejka STORAGE 130
    Korzina STORAGE 60
    Kassir  VARIABLE    (P$Kol_pokupok)#2+P$Oplata
    Time_mag    VARIABLE    P$Kol_pokupok#100
        INITIAL X$Pokupatel,0
        
     
    ****************************************************************
     
     
    Parking TRANSFER    Both,,Lost
        ENTER   Park
        ADVANCE 57.5,12.5
        SAVEVALUE Pokupatel+,1
        ASSIGN  Kol_pokupok,V$N_Pokupok
        ASSIGN  Oplata,V$Finance
        TEST L  P$Kol_pokupok,12,QTelejka
        GATE SNF    Korzina,QTelejka
     
    ****************************************************************
     
        QUEUE   Korzina_Q
        ENTER   Korzina
        DEPART  Korzina_Q
        ASSIGN  Tara,Korzina
        TRANSFER    ,Magazin_Lenta
     
    ****************************************************************
     
    QTelejka    QUEUE   Telejka_Q
        ENTER   Telejka
        DEPART  Telejka_Q
        ASSIGN  Tara,Telejka
     
    ****************************************************************
     
    Magazin_Lenta   ADVANCE V$Time_mag
            TEST LE P$Kol_pokupok,12,Min_och
            COUNT L     Kassir_0,Kassa_2,Kassa_N,1,Q
            TEST E  P$Kassir_0,0,Min_och
     
    ****************************************************************
     
        QUEUE   Express_Q
        SEIZE   Express
        DEPART  Express_Q
        ADVANCE V$Kassir
        RELEASE Express
        LEAVE   P$Tara
        TRANSFER    ,Fin
     
    ******************************************  
     
    Min_och SELECT MIN  Min_ochered,Kassa_2,Kassa_N,,Q
        QUEUE   P$Min_ochered  
        SEIZE   P$Min_ochered
        DEPART  P$Min_ochered
        ADVANCE V$Kassir
        RELEASE P$Min_ochered
        LEAVE   P$Tara
     
    ********************************************
     
    Fin ADVANCE 78,18
        TABULATE    Time_system
        TABULATE    Pokupki
        SAVEVALUE   Pokupatel-,1
        ADVANCE 57.5,12.5
        LEAVE   Park
        TERMINATE
    Lost    TERMINATE
     
    ****************************************
    [B] GENERATE (Exponential(1,0,60)),,,200
        TRANSFER    ,Parking
        GENERATE (Exponential(1,0,40)),,1800,400
        TRANSFER    ,Parking
        GENERATE (Exponential(1,0,80)),,5400,300
        TRANSFER    ,Parking
        GENERATE (Exponential(1,0,120)),,9000
        TRANSFER    ,Parking[/B]
    *****************************************
        GENERATE    V$Time_work
        TABULATE    N_pokupatel
        TERMINATE   1
            START   1

Автор: Atnos 20.01.10, 15:53
Цитата TEMENb @
Atnos, воспользуйтесь пользовательскими списками. вы удивитесь насколько простая это задача.

спасибо за совет, ток я не фига не могу понять эти списки( :(
полазил по инету, книгу почитал, весь день седни убил чтоб понять как они работают, не фига не могу понять( наверно я туп.
если можно, не могли бы вы простинькую программу с их работаи дать? для того чтобы разобратся можно было.

Автор: TEMENb 20.01.10, 16:51
циклический алгоритм, три терминала. время цикла - 1 емд.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 3
    link 1,fifo
    generate 3
    link 2,fifo
    generate 3
    link 3,fifo
     
    met1 queue 1
    seize 1
    depart 1
    advance 1
    release 1
    terminate 1
     
    generate ,,,1
    assign 1,0
    met assign 1,((p1@3)+1)
    test g ch*1,0
    unlink p1,met1,1
    advance 1
    transfer ,met
     
    start 1000

Автор: hotar 14.02.10, 18:45
Всем привет, если не сложно помогите.
Есть вот такая задачка, возможно она уже встречалась, никак не могу ее найти нигде.
Текст зачади: На ВЦ принято планово-профилактическое обслуживание. ВЦ с небольшим парком ЭВМ, поэтому ремонтом ЭВМ занимается всего один радиомеханик (в терминах СМО - ремонтник). Это означает: что одновременно можно выполнять обслуживание только одной ЭВМ. Все ЭВМ должны регулярно проходить профилактический осмотр. Определенное число ЭВМ подвергающееся ежедневному осмотру согласно графику технического обслуживания, распределено равномерно и составляет от 1 до 3. Время, необходимое для осмотра и обслуживания каждой ЭВМ примерно распределено в интервале от 45 мин. до 1 ч. 15 мин. За это время необходимо проверить саму ЗВМ, а также такие внешние устройства как цветные струйные принтеры, нуждающиеся в смене или заправке картриджей красителем или лазерные принтеры, нуждающиеся в заправке тонером. Несколько ЭВМ имеют в качестве внешних устройств цветные плоттеры, у которых достаточно сложный профилактический осмотр.
Рабочий день ремонтника длится 8 ч, но возможна и многосменная работа.
В некоторых случаях профилактический осмотр прерывается для устранения внезапных отказов сетевых серверов, работающих в три смены, т.е 24 ч в сутки. В этом случае текущая профилактическая работа прекращается, и ремонтник начинает без задержки ремонта сервера. Тем не менее, машина-сервер, нуждающаяся в ремонте, не может вытеснить другую машину-сервер, уже стоящую на внеплановом ремонте.
Распределение времени между поступлениями машин-серверов является пуассоновским со средним интервалом равным 42 ч. Если ремонтник отсутствует в момент поступления ЭВМ эти ЭВМ должны ожидать до 8ч утра. Время их обслуживания распределено по экспоненте со средним значение в 17 ч. Необходимо построить GPSS-модель для имитации производственной деятельности ВЦ. По полученной модели необходимо оценить распределение случайной переменной "число машин-серверов, находящихся на внеплановом ремонте". Выполнить прогон модели, имитирующей работу ВЦ в течении 25 дней, введя промежуточную информацию по окончании каждых пяти дней. Для упрощения можно считать, что ремонтник работает 8 ч в день без перерыва, и не учитывать выходные. Это аналогично тому, что ВЦ работает 7 дней в неделю.

Для решения было принято 5 сегментов. В общем и в целом все понятно, не могу разобраться как работает 4 сегмент (и вообще правильно ли он написан).
Описание сегмента: Сегмент "сбор данных для неработающих ЭВМ-серверов" используется для сбора данных, позволяющих оценить распределение числа неработающих ЭВМ-приборов. Для этих целей используется взвешенные таблицы, которые позволяют вводить в них в один и тот же момент времени наблюдаемые случайные величины. Для этих целей включаются два блока - TABULATE, но если ввод в таблицу случаен (значение величин >= 2), то этот подход не годен. В этом случае используется необязательный элемент олеранд, называемый весовым фактором, обозначающий число раз, которое величина, подлежащая табулированию, должна вводится в таблицу. Это позволяет назначать разные веса различным наблюдаемым величинам.
Собственно сам код:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    XPDIS FUNCTION RN1,C24
    0,0/.1,.104/.2,.222/.3,.355/.4,.509/.5,.69/.6,.915
    .7,1.2/.75,138/.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.0/.9997,8.0
     
    JOBS FUNCTION RN1,C2
    0,1/1,4
    TAB1 TABLE P2,0,1,6
    *
    *Model segment 1
    *
    GENERATE    1440,,1,,2
    SPLIT FN$JOBS,NEXT1
    NEXT1 queue TO
    SEIZE REM
    ADVANCE 60,15
    RELEASE REM
    depart TO
    TERMINATE
    *
    *Model segment 2
    *
    GENERATE 2520,FN$XPDIS,,,2
    QUEUE TRUBL
    PREEMPT REM
    ADVANCE 1020,FN$XPDIS
    RETURN REM
    DEPART TRUBL
    TERMINATE
    *
    *Model segment 3
    *
    GENERATE 1440,,481,,3
    PREEMPT REM,PR
    ADVANCE 960
    RETURN REM
    TERMINATE
    *
    *Model segment 4
    *
    GENERATE 35041,,1,,1
    WATCH MARK 1
    ASSIGN 2,FR$TRUBL
    TEST NE 1,0
    TABULATE TAB1,1
    TRANSFER ,WATCH
    TERMINATE
    *
    *Model segment 5
    *
    GENERATE 7200,,6241
    TERMINATE 1
    START 5,,1,1

Автор: vista1243 16.03.10, 15:26
Здравствуйте!
Помогите пожалуйста!
Каким образом можно не используя М1 и оператор MARK сохранить работоспособность оператора TABULATE в моем коде?
[ code ]
FUNC1 FUNCTION RN1,C2
0,13/1,32.
FUNC2 FUNCTION RN2,C11
0,0/.125,2/.25,7/.375,12/.45,20/.5,25/.625,40/.75,55/.875,80/.9,90/1,100.
FUNC3 FUNCTION RN3,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
NORM VARIABLE FN$FUNC3 # 3 + 20
FUNC4 FUNCTION RN7,D4
.25,20/.5,60/.75,80/1,100.
TAB1 TABLE M1,50,10,12
******************************************************************
GENERATE FN$FUNC4 ; Генерация транзактов
ADVANCE V$NORM ; Задержка 1
ADVANCE FN$FUNC1 ; Задержка 2
ADVANCE 23,9 ; Задержка 3
ADVANCE FN$FUNC2 ; Задержка 4
TABULATE TAB1 ; Табулирование
TRANSFER .587,LBL1,LBL2 ; Случайный переход
LBL1 TERMINATE 1 ; Удаление транзактов 1
LBL2 TERMINATE 1 ; Удаление транзактов 2
******************************************************************
START 500 ; Повторить 500 раз
[ /code ]

Автор: TEMENb 16.03.10, 15:36
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    FUNC1 FUNCTION RN1,C2
    0,13/1,32.
    FUNC2 FUNCTION RN2,C11
    0,0/.125,2/.25,7/.375,12/.45,20/.5,25/.625,40/.75,55/.875,80/.9,90/1,100.
    FUNC3 FUNCTION RN3,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
    NORM VARIABLE FN$FUNC3 # 3 + 20
    FUNC4 FUNCTION RN7,D4
    .25,20/.5,60/.75,80/1,100.
    TAB1 TABLE (AC1-p1),50,10,12
    ******************************************************************
    GENERATE FN$FUNC4 ; Генерация транзактов
    assign  1,ac1
    ADVANCE V$NORM ; Задержка 1
    ADVANCE FN$FUNC1 ; Задержка 2
    ADVANCE 23,9 ; Задержка 3
    ADVANCE FN$FUNC2 ; Задержка 4
    TABULATE TAB1 ; Табулирование
    TRANSFER .587,LBL1,LBL2 ; Случайный переход
    LBL1 TERMINATE 1 ; Удаление транзактов 1
    LBL2 TERMINATE 1 ; Удаление транзактов 2
    ******************************************************************
    START 500 ; Повторить 500 раз


Добавлено
mark сохраняет в параметр транзакта (или в отметку времени транзакта, если прописан без параметров), значение сча AC1. Так же значение сча АС1 прописывается в отметку времени транзакта при создании транзакта. Если явно использовать марк нельзя, то тогда сделаем вручную его работу. попросту сохраняем значение времени в параметр транзакта.

М1 (МРj, MP$j) - соответствует разнице СЧА АС1 и времени, сохраненной в отметке времени транзакта (сохраненному в параметре транзакта с числовым/символьным именем j)
соответственно, вместо M1 вручную пропишем (AC1-параметр)

Вот и вся магия )

Автор: vista1243 16.03.10, 22:23
Огромнейшее спасибо! :)

Автор: Yurkam 20.03.10, 20:09
Помогите смоделировать, пожалуйста. Как правильно задать количесвто посетителей, по какому закону?
Задание:
В студенческой столовой «Колобок» есть N столов, 4*N стульев и M официантов. Посетители приходят в столовую и занимают места за столами. Официанты обслуживают столы в порядке очереди с дисциплиной FIFO с приоритетами (сначала столы, за которыми большее количество человек). Если свободных столов нет, посетитель покидает столовую. Посетитель может пересаживаться с одного стола за другой, допускаем, что переход занимает 3 минуты.
Создать имитационную модель работы столовой. Предусмотреть расчет оптимального количества официантов.
Допускаем, что завершение моделирования не нуждается ни в каких событиях.

Автор: masher 30.03.10, 18:04
Есть N устройств. Как равновероятностно перейти на одно из них?

Автор: TEMENb 30.03.10, 18:16
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    transfer all,met1,met2
    met1 transfer ,ystr1
    transfer ,ystr2
    transfer ,ystr3
    transfer ,ystr4
    transfer ,ystr5
    met2 transfer ,ystr6

Автор: masher 30.03.10, 18:38
Цитата TEMENb @
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    transfer all,met1,met2
    met1 transfer ,ystr1
    transfer ,ystr2
    transfer ,ystr3
    transfer ,ystr4
    transfer ,ystr5
    met2 transfer ,ystr6

Это хорошо с небольшим количеством устройств. А если их 100 штук, например.

Автор: TEMENb 30.03.10, 18:43
Говорите сразу чего хотите. вариантов далеко не два.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 1
    assign 1,(duniform(1,1,100))
    seize p1
    release p1
    terminate 1
     
    start 100

Автор: masher 30.03.10, 18:55
Цитата TEMENb @
(duniform(1,1,100))


Это, я так понимаю, дискретное равномерное распределение? Что ж, спасибо огромное. Моя жажда познаний удовлетворена :D

Автор: TEMENb 30.03.10, 18:56
Цитата masher @
дискретное равномерное распределение

именно так. равномерное расределение, возвращающее целые значения.

Автор: olia-la-26 31.03.10, 20:29
Есть задача и есть текст программы!Помогите описать программу!!!
САПР состоит из ЭВМ и трех терминалов. Каждый из проектировщиков формирует задания на расчет в интерактивном режиме. Набор строки задания занимает 105с. После набора 10 строк задание считается сформированным и поступает на решение, при этом в течение 103с ЭВМ прекращает принимать другие задания. Анализ результата занимает у проектировщиков 30 с, после чего цикл повторяется. Данные по всем проектировщикам одинаковы.
Смоделировать работу системы в течение 6 часов. Определить вероятность простоя проектировщика из-за занятости ЭВМ и коэффициент загрузки ЭВМ.

GENERATE 10,5
ONE STORAGE 10
GATE FV PRO,UNI
SEIZE PRO
ENTER ONE
RELEASE PRO
GATE SNF ONE,OTP
TERMINATE
OTP LEAVE ONE,10
FUNAVAIL PRO
ADVANCE 30
FAVAIL PRO
TRANSFER,QEV
UNI TERMINATE
GENERATE 10,5
ONE STORAGE 10
GATE FV PROT,UNI
SEIZE PROT
ENTER ONE
RELEASE PROT
GATE SNF ONE,OTPR
TERMINATE
OTPR LEAVE ONE,10
FUNAVAIL PROT
ADVANCE 30
FAVAIL PROT
TRANSFER,QEV
GENERATE 10,5
ONE STORAGE 10
GATE FV PROTO,UNI
SEIZE PROTO
ENTER ONE
RELEASE PROTO
GATE SNF ONE,OTPRA
TERMINATE
OTPRA LEAVE ONE,10
FUNAVAIL PROTO
ADVANCE 30
FAVAIL PROTO
TRANSFER,QEV
QEV QUEUE RED
SEIZE EVM
DEPART RED
ADVANCE 10,3
RELEASE EVM
TERMINATE
GENERATE 500
TERMINATE 1
START 1

Автор: Frein 07.04.10, 20:09
Привет!
Хотелось бы спросить, допустима ли такая запись? Среда не пускает. Может кто знает почему и как исправить?

cre VARIABLE UNIFORM(1,10,50)
.....
simulate
....
ASSIGN 2,v$cre
....


Спасибо за ответы)

Автор: TEMENb 07.04.10, 20:14
simulate - вообщем то лишний оператор (просто бесполезный. не ошибка.), а в остальном все верно. ищите ошибку в другом месте.
впрочем сам текст ошибки был бы совсем не лишним

Автор: Frein 07.04.10, 20:42
Ошибка вот такая:
Line 11, Col 1. Expecting right parenthesis.
04/08/10 00:41:11 ASSIGN 2,v$cre


кстати на всякий случай приведу весь код модели:
cpu EQU 1
b1 EQU 1

pri VARIABLE P4
tim VARIABLE P2
cre VARIABLE UNIFORM(1,10,50)

simulate

Generate (Poisson(1,35)
ASSIGN 2,v$cre
ASSIGN 4,4
MET1 ASSIGN 2-20
ASSIGN 4-1
PRIORITY v$pri
Queue b1;
Seize cpu;
Depart b1;
Advance 20
Release cpu;
TEST GE v$tim,0,MET1
Terminate;

Generate 5000;
Terminate 1;
Start 1;

а делает эта модель по моему замыслу должна:
Первоначальная заявка обслуживается в системе не более 20 с (квант времени) и если время обслуживания данной заявки (задаваемое как некоторая случайная величина, равновероятно распределенная на интервале 10 –50 с) не больше кванта, то заявка удаляется из системы, иначе поступает в очередь на дообслуживание. Приоритет заявок из второй очереди меньше приоритета первоначальных заявок, а повторное прерывание заявки уменьшает ее приоритет и по отношению к заявкам, имеющим одно прерывание.

Автор: TEMENb 07.04.10, 20:58
Цитата Frein @
Generate (Poisson(1,35)

скобку закрой

Автор: Frein 07.04.10, 21:13
спасибо

Автор: veamin 08.04.10, 04:07
Ребята помогите, Пожалуйста, мне помогли с задачей, решили, а я дальше не могу ни чего понять, мне просто нужен отчет по работе, я сама много чего не понимаю, преподаватель сказал что нужна оформленная работа и все, получу долгожданный зачет))) БУДУ ВАМ ОЧЕНЬ БЛАГОДАРНА!!!)))
хоть что нибудь))) блок схему нарисовать или таблицы)))

1. В машинный зал с интервалом времени 5-15 мин заходят пользователи, желающие произвести расчеты на ЭВМ. В зале имеется одна ЭВМ, работающая в однопрограммном режиме. Время6 необходимое для решения задач, включая вывод результатов на печать, характеризуется интервалом 10-20 мин. Третья часть пользователей после окончания решения своей задачи производит вывод текста программы на перфоленту (продолжительность перфорации - 1-5 мин). В машинном зале не допускается, чтобы более семи пользователей ожидали своей очереди на доступ к ЭВМ. Вывод программы на перфоленту не мешает проведению расчетов на ЭВМ.

Смоделировать процесс обслуживания 100 пользователей. Подсчитать число пользователей, не нашедших свободного места в очереди. Определить среднее число пользователей в очереди, а также коэффициенты загрузки ЭВМ и ленточного перфоратора.

FUNC FUNCTION RN1,D2
.667,0/1,1
GENERATE 10,5,,100
ASSIGN 1,FN$FUNC
TEST L Q1,7,OUT
QUEUE QPC
SEIZE BYF
DEPART QPC
ADVANCE 15,5
TEST E P1,0,MET1
RELEASE BYF
TERMINATE 1
MET1 QUEUE QPRINT
RELEASE BYF
SEIZE PRINT
DEPART QPRINT
ADVANCE 3,2
RELEASE PRINT
TERMINATE 1
OUT TERMINATE 1
START 100


2. Метод построения модели (структура модели, количество необходимых сегментов, возможные варианты решения задачи и т.д.).
3. Таблица определений.
4. Блок-схема (блок-схема структуры модели с использованием условных обозначений блоков и пояснениями).
5. Листинг модели (с комментариями, если в задании требуется построить различные варианты модели, привести листинги для всех вариантов).
6. Выходные данные (полученные результаты, графики, таблицы).
7. Выводы (анализ выходных данных и рекомендации по улучшению модели (если необходимо)).

Автор: Liza_Liza 10.04.10, 14:56
На маршруте работают два микроавтобуса (А и Б), каждый из которых имеет 10 мест. Микроавтобус А пользуется большей популярностью, нежели микроавтобус Б, поскольку водитель микроавтобуса А ездит аккуратнее и быстрее. Поэтому пассажир, подойдя к остановке, са¬дится в микроавтобус Б только в том случае, если микроавтобуса А нет. Микроавтобус отправляется на маршрут только в том случае, если все места в нем заняты. Пассажиры приходят к остановке через 0,5 ± 0,2 минут и, если нет микроавтобусов, становятся в очередь. Если очередь больше 30 человек, потенциальный пассажир уходит из очереди. Предполагает¬ся, что все пассажиры едут до конца маршрута. На прохождение мар¬шрута микроавтобус А тратит 20 ± 5 минут, микроавтобус Б - 30 ± 5 ми¬нут. После того, как пассажиры освободят микроавтобус (время осво¬бождения – 2 ± 1 минут), он едет в обратном направлении. Плата за проезд составляет 2 единицы стоимости. Автопредприятие столько же теряет (недополучает), если пассажир, придя на остановку, не ждет, а уходит (учесть это при определении затрат).
Найти оценку времени ожидания в очереди и времени, которое тратит пассажир на поездку.
Определить, при каком числе мест в микроавтобусах (не более 25) время ожидания в оче¬реди будет минимальным. Для этого значения числа мест определить выручку автопредприятия за день, если микроавтобусы работают 10 часов в сутки.
Помогите!!!!!!!!!!!!!!!!!!!!!!!!!!Очень очень надо!!!!!!!!!!!!!!!!!!!!!

Автор: TEMENb 10.04.10, 17:29
Liza_Liza, такая помощь не бесплатна.

Автор: TEMENb 11.04.10, 14:03
Цитата irinak @
Такой вопрос по GPSS:
Допустим есть два входных потока заявок с разными интенсивностями, заявки должны обслуживаться в устройстве с определенной интенсивностью. Имеется накопитель на две заявки. Причем, условие такое, что нужно чтобы в накопителе было равное представительство заявко каждого входного потока, т е одна заявка первого входного потока, вторая - со второго.
Честно, немного задумалась, может подскажите, как реализовать такое условие?
Спасибо)
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        generate    ,,,1
        split   1,met2
     
    met1    advance (poisson(1,2))
        split   1,met1
    met3    match   met4
        queue   qqq
        seize   1
        depart  qqq
        advance 1
        release 1
        transfer    ,term
     
    met2    advance (poisson(2,2))
        split   1,met2
    met4    match   met3
        queue   qqq
        seize   1
        depart  qqq
        advance 1
        release 1
    term    terminate   1
     
        start   1000


очередь ограничивается либо тестом, либо вместо очереди ставим МКУ.
По правде не очень ясен смысл. если разные интенсивтости, то тогда на одной из точек синхронизации возникнет накопление транзактов. А если мы будем уничтожать лишние, то где гарантии, что не уничтожим нужные..

Автор: TEMENb 11.04.10, 14:26
Цитата irinak @
Нужно чтобы в накопителе (к примеру, TURN3 STORAGE 2), заявки чередовались: т е заявка 1(с превого входного потока), заявка 2(со второго вх потока), заявка 1, заявка 2.
Логично, что потери будут, если приходит заявка1 , затем опять заявка 1, то последняя заявка 1 должна уйти на потери или другую метку.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        generate    (poisson(1,2))
        test e  ((x1=0)&(q$qqq<2)),1,nafig
        savevalue   1,1
        queue   qqq
        seize   1
        depart  qqq
        advance 1
        release 1
        transfer    ,term
     
        generate    (poisson(2,3))
        test e  ((x1=1)&(q$qqq<2)),1,nafig
        savevalue   1,0
        queue   qqq
        seize   1
        depart  qqq
        advance 1
        release 1
     
    term    terminate   1
     
    nafig   terminate
     
        start   1000


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

Автор: irinak 11.04.10, 14:34
Спасибо, TEMENb !
А только вопрос:как я учту ограничение на 2 заявки? - очередь перед устройством ограничена 2-умя заявками, поэтому я и использую STORAGE.

Автор: TEMENb 11.04.10, 14:34
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        initial x1,1
     
    gentim  function    p1,d2
        1,2/2,3
     
    obrtim  function    p1,d2
        1,2/2,3
     
     
        generate    ,,,1
        split   1,,1
    povt    advance (poisson(1,(fn$gentim)))
        split   1,povt
     
        test e  ((x1=p1)&(q$qqq<2)),1,nafig
        savevalue   1,((p1=1)+1)
        queue   qqq
        seize   1
        depart  qqq
        advance fn$obrtim
        release 1
        terminate   1
     
    nafig   terminate
     
        start   1000

:blush: :crazy:

Добавлено
это уже сделано. проверьте максимальную длинну очереди

Автор: TEMENb 11.04.10, 14:41
irinak, разрешаю поставить мне плюсик :P

Автор: TEMENb 12.04.10, 10:21
сохраните номер потока в параметре транзакта, а в нужный момент разделите обычным тестом.

Автор: TEMENb 13.04.10, 21:55
ответ очень прост и лаконичен.
ХЗ
ищите ошибку в другой части кода.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        initial x1,1
        generate    40
        assign  15,1
        transfer    ,T3_1
        generate    40
        assign  15,2
    T3_1    TEST E ((x1=P15)&(q$O3<2)),1,T77
        SAVEVALUE   1,((P15=1)+1)
        TEST E P15,1,PROTR
        SAVEVALUE   COUNTTIP1+,1
    PROTR   QUEUE   O3
        SEIZE   DEVICE_S3
        DEPART  O3
        ADVANCE (Exponential(1,0,20))
        RELEASE DEVICE_S3
        terminate   1
    t77 terminate  
     
    start   10000
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                  GPSS World Simulation Report - Untitled Model 1.10.1
     
     
                       Wednesday, April 14, 2010 00:54:43  
     
               START TIME           END TIME  BLOCKS  FACILITIES  STORAGES
                    0.000         292176.719    16        1          0
     
     
                  NAME                       VALUE  
              COUNTTIP1                   10001.000
              DEVICE_S3                   10002.000
              O3                          10000.000
              PROTR                          10.000
              T3_1                            6.000
              T77                            16.000
     
     
     LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE          7304             0       0
                        2    ASSIGN            7304             0       0
                        3    TRANSFER          7304             0       0
                        4    GENERATE          7304             0       0
                        5    ASSIGN            7304             0       0
    T3_1                6    TEST             14608             0       0
                        7    SAVEVALUE        10001             0       0
                        8    TEST             10001             0       0
                        9    SAVEVALUE         5001             0       0
    PROTR              10    QUEUE            10001             0       0
                       11    SEIZE            10001             1       0
                       12    DEPART           10000             0       0
                       13    ADVANCE          10000             0       0
                       14    RELEASE          10000             0       0
                       15    TERMINATE        10000             0       0
    T77                16    TERMINATE         4607             0       0
     
     
    FACILITY         ENTRIES  UTIL.   AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
     DEVICE_S3        10001    0.699      20.410  1    14607    0    0     0      0
     
     
    QUEUE              MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME   AVE.(-0) RETRY
     O3                  2    1  10001   4243     0.535     15.632     27.151   0
     
     
    SAVEVALUE               RETRY       VALUE
     1                        0          2.000                            
     COUNTTIP1                0       5001.000                            
     
     
    CEC XN   PRI          M1      ASSEM  CURRENT  NEXT  PARAMETER    VALUE
     14607    0      292160.000   14607     11     12      15          1.000
     
     
    FEC XN   PRI         BDT      ASSEM  CURRENT  NEXT  PARAMETER    VALUE
     14609    0      292200.000   14609      0      4
     14610    0      292200.000   14610      0      1

Автор: shurik671 14.04.10, 16:01
Здравствуйте!!!мучает меня GPSS World не по-детски.... помогите, пожалуйста, знаю, что подобную задачу решали... но у меня есть пару отличительных черт... в которых я не могу разобраться (а точнее категорически нет времени)
Вот сама задача:
На участке термической обработки выполняются цементация и закаливание шестерен, поступающих партиями по 10 шт. через 15±3 мин. Для цементации шестерни загружают в контейнеры по 6 шт. Цементация занимает 6±2 мин, а закаливание — 7±3 мин.
Качество определяется суммарным временем обработки. Шестерни с временем обработки больше 15 мин покидают участок, с временем обработки от 11 до 15 мин передаются на повторную закалку и при времени обработки меньше 11 мин должны пройти повторную полную обработку. Детали с суммарным временем обработки меньше 12 мин считаются вторым сортом.
Смоделировать процесс обработки на участке 10000 шестерен. Определить функцию распределения времени обработки и вероятности повторения полной и частичной обработки. При выходе продукции без повторной обработки менее 90% обеспечить на участке мероприятия, дающие гарантированный выход продукции первого сорта 90%.
Помогите, кто чем может, заранее глагодарю :)

Автор: TEMENb 14.04.10, 16:19
могу сделать все задание. за дЭньги

Автор: ksukp2 15.04.10, 12:24
Здравствуйте! Помогите пожалуйста! Написала курсовую по GPSS, но не уверена, что правильно( как-то странно работает)...
Задание:
Система автоматизации проектирования (САПР) создана на базе ЭВМ, функционирующей в режиме множественного доступа. Пятеро инженеров-проектировщиков с помощью своих дисплеев одновременно и независимо проводят диалог с ЭВМ, определяя очередной вариант расчета. Каждый диа-лог состоит из десяти циклов ввода вывода данных. Во время одного цикла происходит следующее: за 10+5 с инженер обдумывает и вводит текст стро-ки; в течение 2 с работает процессор ЭВМ, подготавливая текст ответа; в те-чение 5 с текст ответа выводится на дисплей. После ввода 11й строки начи-нается работа процессора по расчету конструкции и продолжается 30+10 с. За 5 с результат расчета выводится на экран, после чего инженер в течение 15+5 с анализирует его и начинает новый диалог. Операции по подготовке текста ответа имеют абсолютный приоритет над расчетными, т.е. прерывают выполнение последних.
Смоделировать процесс работы САПР при условии, что расчет вариан-тов конструкции выполняется 100 раз
Текст программы:
KOL EQU 5
NCIC EQU 11

KOLPR VARIABLE KOL-1

GENERATE ,,,1
SPLIT V$KOLPR,COM1,1
COM1 SEIZE P1
ASSIGN 2,NCIC
ABC ADVANCE 10,5
PREEMPT CPU
ADVANCE 2
RETURN CPU
ADVANCE 5
LOOP 2,ABC
SEIZE CPU
ADVANCE 30,10
RELEASE CPU
ADVANCE 5
ADVANCE 15,5
RELEASE P1
TRANSFER ,COM1

GENERATE 100000
TERMINATE 1

Автор: TEMENb 15.04.10, 12:31
не запускал не тестировал, но выглядит правильно и код очень даже симпатичный.
Единственное замечание - не реализовано условие завершения моделирования. сделать это можно при помощи оператора split, отправляя одну копию в новый цикл, а вторую в терминейт

Автор: ksukp2 15.04.10, 13:08
Спасибо) А после чего его нужно вставить?

Автор: NATAFFFka 17.04.10, 12:54
помогите пожалуйста с задачей
Вот условие:На вычислительный центр через 300100 секунд поступают задания длинной 500200 байт. Скорость ввода, вывода и обработки заданий 100 б\мин. Задания проходят последовательно ввод, обработку и вывод буферизуясь перед каждой операцией. После вывода 5% заданий оказываются выполненными неправильно вследствие сбоев и возвращаются на ввод. Для ускорения обработки задания в очередях располагаются по возрастанию их длинны, то есть короткие сообщения обслуживаются в первую очередь. Задания выполненные неверно возвращаются на ввод и во всех очередях обслуживаются первыми Задание смоделировать работу вычислительного центра в течении 30 часов. Определить необходимую емкость буферов и функцию распределения времени обслуживания заданий.
Вот текс программы:input equ 1
obr equ 2
output equ 3
tdl equ 4
tpr equ 5
tvr equ 9
och1 equ 6
och2 equ 7
och3 equ 8
tdl fvariable (RN$1/999)*400+300
tvr fvariable P$1*60/100
tpr fvariable (700-P$1)/400*127
simulate
generate 300,100
assign 1,v$tdl
assign 2,v$tvr
priority v$tpr
M1 queue och1
seize input
advance P$2
release input
depart och1
M2 queue och2
seize obr
advance P$2
release obr
depart och2
M3 queue och3
seize output
advance P$2
release output
depart och3
priority 127
transfer .95,M1,OUT
OUT terminate
generate 108000
terminate 1
start 1
выдает следующие ошибки:04/17/10 16:53:28 Model Translation Begun.
04/17/10 16:53:28 Line 10, Col 17. Invalid character.
04/17/10 16:53:28 tdl fvariable (RN$1/999)*400+300
04/17/10 16:53:28 Line 11, Col 15. Invalid character.
04/17/10 16:53:28 tvr fvariable P$1*60/100
04/17/10 16:53:28 Line 12, Col 20. Invalid character.
04/17/10 16:53:28 tpr fvariable (700-P$1)/400*127
04/17/10 16:53:28 Line 18, Col 1. Invalid SNA. Expecting a Label or GPSS Verb.
04/17/10 16:53:28 M1 queue och1
04/17/10 16:53:28 **** Model Translation Aborted ****
что не правильно не могу понять.заранее спасибо!

Автор: TEMENb 17.04.10, 13:21
звездочка(*) - это знак косвенной адресации
умножение - это диез (#)

Добавлено
ksukp2, не думал, что для человека, написавшего такой код, станет эта проблема.

Автор: NATAFFFka 18.04.10, 17:25
большое спасибо!!!

Добавлено
что то все равно не работает и ошибку указывает на знак $, помогите пожалуйста не знаю что уже сделать просто голову сломала

Автор: TEMENb 18.04.10, 17:56
Цитата NATAFFFka @
P$1
$ ставится только перед символными именами. перед числовыми не ставится.
должно быть просто P1

Автор: vista1243 20.04.10, 09:50
Здравствуйте!
Помогите пожалуйста еще раз. Код правильный, но на всякий случай опишу само задание, чтобы понятнее было о чем речь.

Имеется вычислительная система с конвейерной структурой, состоящей из трех процессоров П1, П2, П3. На вход системы поступает поток сообщений, которые последовательно обрабатываются в каждом из процессоров. На входе каждого процессора имеется буфер (Б1, Б2, Б3), необходимый для приема сообщений и предотвращения их потери при пиковых нагрузках. Сообщения в буфере образуют очередь и обрабатываются соответствующим процессором в порядке их поступления. Обработанные сообщения образуют выходной поток сообщений.
Требуется собрать информацию об интервалах между прибытиями транзактов в заданных точках. Нужно использовать МКУ.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        FUNC1   FUNCTION    RN1,C2
            0,13/1,32.
        FUNC2   FUNCTION    RN2,C11
            0,0/.125,2/.25,7/.375,12/.45,20/.5,25/.625,40/.75,55/.875,80/.9,90/1,100.
        FUNC3   FUNCTION    RN3,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    
        NORM    VARIABLE    FN$FUNC3 # 3 + 20
        FUNC4   FUNCTION    RN7,D4
            .25,20/.5,60/.75,80/1,100.  
        INITIAL X$TIM,0
        TABL TABLE (AC1-X$TIM),0,10,10; IA - режим использования таблицы, начало - 0, длина интервала - 10, количество интервалов 20
        ******************************************************************
            GENERATE    FN$FUNC4;
            BUF STORAGE 1000;
     
            ENTER BUF;      
            SEIZE PROC1;    занять прибор
            LEAVE BUF;  покинуть очередь
            ADVANCE V$NORM; задержать транзакт
            RELEASE PROC1;  освободить прибор
        
            ENTER BUF;
            SEIZE PROC2;
            LEAVE BUF;
            ADVANCE FN$FUNC1;
            RELEASE PROC2;
     
                TEST G    N$MET1,0,MET1;
                TABULATE  TABL; точка Д
        met1    SAVEVALUE TIM,AC1;
     
            ENTER BUF;
            SEIZE PROC3;
            LEAVE BUF;
            ADVANCE 23,9;
            RELEASE PROC3;
            TERMINATE 1 ;   удаление транзакта
        ******************************************************************
            START 100;

Отчет имеет вид:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                  GPSS World Simulation Report - Lab2.1.2
     
     
                       Sunday, April 11, 2010 21:43:30  
     
               START TIME           END TIME  BLOCKS  FACILITIES  STORAGES
                    0.000           6564.060    20        3          1
     
     
                  NAME                       VALUE  
              BUF                         10007.000
              FUNC1                       10000.000
              FUNC2                       10001.000
              FUNC3                       10002.000
              FUNC4                       10004.000
              MET1                           14.000
              NORM                        10003.000
              PROC1                       10008.000
              PROC2                       10009.000
              PROC3                       10010.000
              TABL                        10006.000
              TIM                         10005.000
     
     
     LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE           100             0       0
                        2    ENTER              100             0       0
                        3    SEIZE              100             0       0
                        4    LEAVE              100             0       0
                        5    ADVANCE            100             0       0
                        6    RELEASE            100             0       0
                        7    ENTER              100             0       0
                        8    SEIZE              100             0       0
                        9    LEAVE              100             0       0
                       10    ADVANCE            100             0       0
                       11    RELEASE            100             0       0
                       12    TEST               100             0       0
                       13    TABULATE            99             0       0
    MET1               14    SAVEVALUE          100             0       0
                       15    ENTER              100             0       0
                       16    SEIZE              100             0       0
                       17    LEAVE              100             0       0
                       18    ADVANCE            100             0       0
                       19    RELEASE            100             0       0
                       20    TERMINATE          100             0       0
     
     
    FACILITY         ENTRIES  UTIL.   AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
     PROC1              100    0.303      19.902  1        0    0    0     0      0
     PROC2              100    0.337      22.136  1        0    0    0     0      0
     PROC3              100    0.356      23.344  1        0    0    0     0      0
     
     
    STORAGE            CAP. REM. MIN. MAX.  ENTRIES AVL.  AVE.C. UTIL. RETRY DELAY
     BUF              1000 1000   0     3      300   1    0.035  0.000    0    0
     
     
    TABLE              MEAN    STD.DEV.       RANGE           RETRY FREQUENCY CUM.%
     TABL             64.940   29.570                           0
                                      10.000  -       20.000            12    12.12
                                      20.000  -       30.000             7    19.19
                                      30.000  -       40.000             5    24.24
                                      40.000  -       50.000             4    28.28
                                      50.000  -       60.000            10    38.38
                                      60.000  -       70.000            14    52.53
                                      70.000  -       80.000            11    63.64
                                      80.000  -  _                      36   100.00
     
     
    SAVEVALUE               RETRY       VALUE
     TIM                      0       6539.150                            
     
     
    FEC XN   PRI         BDT      ASSEM  CURRENT  NEXT  PARAMETER    VALUE
       101    0        6580.000    101      0      1

Из него видно, что максимальная загруженность МКУ = 3.
Не могли бы вы помочь ответить мне на вопрос: почему 100 транзактов достаточно для создания адекватной модели? При этом это как-то связано с объемом МКУ :(

Автор: zhenya_jek 23.04.10, 15:06
Доброго времени суток, уважаемые. Сори за небольшой оффтоп - тем не менее более подходящей ветки в форуме не нашел. Подскажите, плиз - имеется ли возможность запустить в GPSS world (либо в GPSS PC) написанную модель из командной строки и получить стандартный отчет? (Задача возникла в связи с необходимостью использования результатов моделирования в программе на C++ Builder. Соответственно, по входящим параметрам формируется файл *.gps, который необходимо запустить на моделирование, а из отчета "выковырять" значения.) Как вы считаете, каким образом это возможно реализовать???

Автор: TEMENb 23.04.10, 15:11
невпервой задачка поставлена
но пока никто еще не реализовал

Автор: irinak 25.04.10, 05:14
Такая мини-задачка:
есть два потока, после генерации заявки поступают в очередь на устройство, к примеру Device_S1, очередь ограничена 4 заявками, причем должно выполняться равное представительство заявко каждого типа.
Проблема в том, как учесть возможный вариант 1-1-2-2, или 2-2-1-1, или 2-1-1-2, а не только 1-2-1-2.
Спасибо!

Автор: TEMENb 25.04.10, 16:11
irinak, чет не понял задачу

Автор: Megera 28.04.10, 08:37
Помогите пожалуйста! написала вроде програмку, а окно report не вылетает. в чем дело? не могли бы подсказать.
задача такая: рассмотреть работу телефонной сети, имеющей 50 абонентских линий связи, причем одновременно может работать быть задействовано не более 10 связей между абонентами. каждый абонент может соединиться с остальными, если свободны его входная линия связи и входная линия вызываемого абонента. из 50 линий для организации связи могут использоваться любые две свободные линии. необходимо промоделировать работу телефонной сети для 1000 вызовов. интервалы между вызовами и длительность разговора распределены по экспотенциальному закону. предусматривается, что первые 15 вызовов образуют переходный процесс в сети и эти данные не нужно учитывать при моделировании.
вот что у меня получилось:
POISS FUNCTION RN1,C24 ;функция интервалов между вызовами
0.0,0.0/0.1,0.104/0.2,0.222/0.3,0.355/0.4,0.509/0.5,0.69
0.6,0.915/0.7,1.2/0.75,1.38/0.8,1.6/0.84,1.83/0.88,7.12
0.9,2.3/0.92,2.52/0.94,2.81/0.95,2.99/0.96,3.2/0.97,3.5
0.98,3.9/0.99,4.6/0.995,5.3/0.998,6.2/0.999,7/0.9997,8
GENERATE 12,FN$POISS ;генерация вызова
TEST G V$FREELN,2,ABND ;система заполнена
ASN1 ASSIGN 1,V$LINE ;если нет, указывается номер входной линии абонента вызывающего другого для разговора
GATE LR *1,ASN1 ;проверка занятости линии
ASN2 ASSIGN 2,V$LINE ;выбор адресата связи
TEST NE P1,P2,ASN2 ;повторить если адресат совпадает со входной линией абонента
LOGIC S *1 ;установить выходную линию абонента занятой
TRANSFER BOTH,BLKD ;дождаться связи
GETL ENTER LNKS ;установить связь
GATE LR *2,BUSY ;проверка занятости
LOGIC S *2 ;установить адресата занятым
ADVANCE 120,FN$POISS ;разговор
LOGIC R *1 установить входную линию абонента свободной
LOGIC R *2 ;установить адресата свободным
LEAVE LNKS ;освободить связь
CKCH TEST G CH$WAIT,O,MTRM ;проверить есть ли ожидание вызовов
GATE LR 1,GETF ;проверить свободна ли выходная линия
UNLINK WAIT,GETL,1,2,GETF
MTRM TERMINATE 1
GETF UNLINK WAIT,GETL,1 подключить первый ожидающий вызов
TRANSFER ,MTRM
ABND TERMINATE отказаться от ожидания
BLKD LINK WAIT,P1 ожидать в порядке поступления вызовов
BUSY LOGIC R *1 освободить линю
LEAVE LNKS освободить связь
TRANSFER ,CKCH
LNKS STORAGE 10 колличество одновременных связей между абонентами
LINE VARIABLE X$NRLINES#RN1/1000+1
FREELN VARIABLE X$NRLINES-2#S$LNKS-CH$WAIT
INITIAL X$NRLINES,50 колличество линий для связи
START 15,NP проходы
RESET сброс статистики
START 1000 моделирование 1000 вызовов

Автор: TEMENb 28.04.10, 09:25
Megera, мам с пап не говорили, что обманывать не хорошо?
Если же всетаки вы сами писали, то откуда же вы взяли параметры некоторых операторов, о которых обычно не упоминают в учебниках и из за которых отчет и не появляется?
Цитата Megera @
START 15,NP проходы

Автор: Megera 28.04.10, 15:11
просто было дано задание в ней разобраться. преподователь хочет что бы изучила че кого и объяснила ему. . .вот и сижу пыхчу. . .пытаюсь на примерах понять

Автор: TEMENb 28.04.10, 15:16
а препод у вас суров, раз дает такие тексты с нуля для разбора.
на всяк случай..
# - умножение
* - косвенная адресация
Напримет
F*1 - индикатор занятости устройства, номер которого сохранен в первом параметре транзакта
R *2 - колличество свободных каналов многоканального устройства, имя которого лежит во втором параметре транзакта.
S *1 - текущее содержимое многоканального устройства, номер которого лежит в первом параметре транзакта
^
лишние пробелы советую удалить

Автор: Megera 28.04.10, 15:22
аааааа!спасибо вам. . .хоть маленько помогли. . .а можно еще вопрос! вы не подскажете, тут в учебнике написано, что команда report выводит стандартный статистический отчет о работе модели. ее получается нужно в программе указать, что бы появилось? или нет? я пару коротких заданий делала, так там они сами появлялись)

Автор: TEMENb 28.04.10, 15:28
Цитата TEMENb @
Megera, мам с пап не говорили, что обманывать не хорошо?
Если же всетаки вы сами писали, то откуда же вы взяли параметры некоторых операторов, о которых обычно не упоминают в учебниках и из за которых отчет и не появляется?
Цитата Megera @
START 15,NP проходы

NP удали. это означает not print т.е. не выводить отчет.

Автор: Megera 28.04.10, 15:34
ага! да вам цены нет!!!!!

Автор: Megera 29.04.10, 05:13
у меня тут такой вопрос объявился, точнее ситуация. . .вот задача:В узел коммутации сообщений, состоящий из входного буфера, процессора, двух исходящих буферов и двух выходных линий, поступают сообщения с двух направлений. Сообщения с одного направления поступают во входной буфер, обрабатываются в процессоре, буферируются в выходном буфере первой линии и передаются по выходной линии. Сообщения со второго направления обрабатываются аналогично, но передаются по второй выходной линию применяемый метод контроля потоков требует одновременного присутствия в системе не более трех сообщений на каждом направлении. Сообщения поступают через интервалы 15±7 мс. Время обработки в процессоре равно 7 мс на сообщение, время передачи по выходной линии равно 15±5 мс. если сообщение поступает при наличии трех сообщений в направлении, то оно получает отказ.
Смоделировать работу узла коммутации в течении 10 с. определить загрузки устройств и вероятность отказа в обслуживании из-за переполнения буфера направления. Определить изменения в функции распределения времени передачи при снятии ограничений, вносимых методом контроля потоков.
time1 table m1,15,1,50
time2 table m1,15,1,50
generate 15,7,,,1 создание сообщений напрвления 1
TEST L X$napr1,3,out
b1 savevalue napr1+,1
transfer ,buf
TRANSFER ,buf
generate 15,7,,,2 создание сообщений направления 2

generate 15,7,,,2
TEST L X$NAPR2,3,OUT
savevalue napr2+,1
buf queue 1
seize 1
depart 1
advance 7
release 1
test e pr,1,buvx2
buvx1 queue 2
seize 2
depart 2
advance 15,5
release 2
savevalue napr1-,1
tabulate time1
terminate
buvx2 queue 3
seize 3
depart 3
advance 15,5
release 3
savevalue napr2-,1
tabulate time2
terminate
out savevalue otkaz+,1
terminate
generate 10000
terminate 1
start 1

в начале не было ошибок и выдавал результат, но! вот он:
GPSS World Simulation Report - Untitled Model 1.16.1


Thursday, April 29, 2010 11:09:49

START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 10000.000 33 2 0


NAME VALUE
B1 3.000
BUF 8.000
BUVX1 14.000
BUVX2 22.000
NAPR1 10002.000
NAPR2 10003.000
OTKAZ 10004.000
OUT 30.000
TIME1 10000.000
TIME2 10001.000


LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 676 0 0
2 TEST 676 0 0
B1 3 SAVEVALUE 3 0 0
4 TRANSFER 3 0 0
5 GENERATE 661 0 0
6 TEST 661 0 0
7 SAVEVALUE 656 0 0
BUF 8 QUEUE 659 0 0
9 SEIZE 659 0 0
10 DEPART 659 0 0
11 ADVANCE 659 1 0
12 RELEASE 658 0 0
13 TEST 658 0 0
BUVX1 14 QUEUE 0 0 0
15 SEIZE 0 0 0
16 DEPART 0 0 0
17 ADVANCE 0 0 0
18 RELEASE 0 0 0
19 SAVEVALUE 0 0 0
20 TABULATE 0 0 0
21 TERMINATE 0 0 0
BUVX2 22 QUEUE 658 2 0
23 SEIZE 656 0 0
24 DEPART 656 0 0
25 ADVANCE 656 1 0
26 RELEASE 655 0 0
27 SAVEVALUE 655 0 0
28 TABULATE 655 0 0
29 TERMINATE 655 0 0
OUT 30 SAVEVALUE 678 0 0
31 TERMINATE 678 0 0
32 GENERATE 1 0 0
33 TERMINATE 1 0 0


FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
1 659 0.461 6.998 1 1338 0 0 0 0
3 656 0.984 14.999 1 1332 0 0 0 2


QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
1 2 0 659 655 0.002 0.036 5.928 0
3 5 2 658 44 1.628 24.741 26.514 0


TABLE MEAN STD.DEV. RANGE RETRY FREQUENCY CUM.%
TIME1 0.000 0.000 0
TIME2 46.814 19.191 0
17.000 - 18.000 4 0.61
18.000 - 19.000 5 1.37
19.000 - 20.000 7 2.44
20.000 - 21.000 5 3.21
21.000 - 22.000 11 4.89
22.000 - 23.000 13 6.87
23.000 - 24.000 11 8.55
24.000 - 25.000 11 10.23
25.000 - 26.000 19 13.13
26.000 - 27.000 20 16.18
27.000 - 28.000 16 18.63
28.000 - 29.000 9 20.00
29.000 - 30.000 14 22.14
30.000 - 31.000 17 24.73
31.000 - 32.000 16 27.18
32.000 - 33.000 20 30.23
33.000 - 34.000 13 32.21
34.000 - 35.000 10 33.74
35.000 - 36.000 16 36.18
36.000 - 37.000 11 37.86
37.000 - 38.000 11 39.54
38.000 - 39.000 4 40.15
39.000 - 40.000 12 41.98
40.000 - 41.000 12 43.82
41.000 - 42.000 13 45.80
42.000 - 43.000 9 47.18
43.000 - 44.000 10 48.70
44.000 - 45.000 7 49.77
45.000 - 46.000 11 51.45
46.000 - 47.000 7 52.52
47.000 - 48.000 11 54.20
48.000 - 49.000 10 55.73
49.000 - 50.000 16 58.17
50.000 - 51.000 10 59.69
51.000 - 52.000 16 62.14
52.000 - 53.000 12 63.97
53.000 - 54.000 12 65.80
54.000 - 55.000 8 67.02
55.000 - 56.000 14 69.16
56.000 - 57.000 13 71.15
57.000 - 58.000 12 72.98
58.000 - 59.000 7 74.05
59.000 - 60.000 11 75.73
60.000 - 61.000 16 78.17
61.000 - 62.000 12 80.00
62.000 - 63.000 8 81.22
63.000 - _ 123 100.00


SAVEVALUE RETRY VALUE
NAPR1 0 3.000
NAPR2 0 1.000
OTKAZ 0 678.000


FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE
1338 2 10001.066 1338 11 12
1332 2 10003.635 1332 25 26
1339 2 10006.114 1339 0 5
1340 0 10014.229 1340 0 1
1341 0 20000.000 1341 0 32
отказов у меня 678!!!!!!!!!!!!! я начала искать ошибку и в результате теперь он мне выдает что неправильно generate 15,7,,,2
может вы чем нибудь сможете помочь?

Автор: Василий_Н 03.05.10, 17:00
Приветствую!

Начал осваивать GPSS. Вот задачка, которую пытаюсь реализовать:

В африканском порту танкеры загружаются сырой нефтью, которую затем морским путём доставляют по назначению. Мощности порта позволяют загружать не более трёх танкеров одновременно. Танкеры, прибывающие в порт через каждые 11+-7ч, относятся к 3-м различным типам. Относительная частота появления танкеров данного типа и время требуемое на их погрузку:
тип - 1, относительная частота - 0.25, время погрузки - 18+-2ч;
тип - 2, относительная частота - 0.55, время погрузки - 24+-3ч;
тип - 3, относительная частота - 0.20, время погрузки - 36+-4ч;
(Относительную частоту следует понимать, как вероятность того, что прибывший танкер относится к данному типу)

В порту имеется один буксир, услугами которого пользуются все танкеры при причаливании и отчаливании. Причаливание и отчаливание занимает занимает по одному часу, причём, если в услугах буксира нуждаются сразу несколько танкеров, приоритет отдаётся операции причаливания.
Судовладелец предлагает дирекции порта заключить контракт на перевозку нефти в Великобританию и обеспечить выполнение условий контракта с помощью 5 танкеров особого, четвёртого типа, для погрузки которых требуется 12+-3ч. После погрузки танкер отчаливает и следует в Великобританию, там разгружается и затем снова возвращается в африканский порт для погрузки. Время обращения танкера, включая время разгрузки, составляет 240+-24ч.
Фактором осложняющим перевозку нефти, являются штормы, которым подвергается порт. Интервал времени между штормами распределён экспоненциально с математическим ожиданием 48ч, причём шторм продолжается 4+-2ч. Во время шторма буксир не работает.
Перед заключением контракта руководство порта решило определить влияние, которое окажут пять дополнительных танкеров на функционирование порта. Выводы предлагается сделать по результатам имитации работы порта в течение одного года(8760ч) при условии заключения предлагаемого контракта. Оцениваемые величины - время пребывания в дополнительных танкеров и уже работающих танкеров трёх типов.

Вот как я это переложил на GPSS:
SIMULATE
A3 STORAGE 3 ; Одновременно не более 3-х загружаемых танкеров
A5 STORAGE 5 ; 5 дополнительных танкеров
GENERATE 11,7
QUEUE AA3 ; Занимаем очередь для погрузки
ENTER A3 ; Занимаем место для погрузки
DEPART AA3 ; Освобождаем очередь
PRIORITY 2 ; Причаливание начало/
SEIZE BUKSIR
ADVANCE 1
RELEASE BUKSIR
PRIORITY 1 ; Причаливание конец\
TRANSFER .550,,type_2 ; Погрузка начало/
TRANSFER .200,,type_3
ADVANCE 18,2
TRANSFER ,metka1
type_2 ADVANCE 24,3
TRANSFER ,metka1
type_3 ADVANCE 36,4
TRANSFER ,metka1 ; Погрузка конец\
metka1 SEIZE BUKSIR ; Отчаливание начало/
ADVANCE 1
RELEASE BUKSIR ; Отчаливание конец\
LEAVE A3 ; Освобождаем место для погрузки
TERMINATE

GENERATE (EXPONENTIAL(1,0,48)) ; Шторм
SEIZE BUKSIR
ADVANCE 4,2
RELEASE BUKSIR
TERMINATE

GENERATE 1
ENTER A5 ; -1 свободный дополнительный танкер
QUEUE AA3 ; Занимаем очередь для погрузки
ENTER A3 ; Занимаем место для погрузки
DEPART AA3 ; Освобождаем очередь
PRIORITY 2 ; Причаливание начало/
SEIZE BUKSIR
ADVANCE 1
RELEASE BUKSIR
PRIORITY 1 ; Причаливание конец\
ADVANCE 31,3 ; Погрузка /\
SEIZE BUKSIR ; Отчаливание начало/
ADVANCE 1
RELEASE BUKSIR ; Отчаливание конец\
LEAVE A3 ; Освобождаем место для погрузки
ADVANCE 240,24 ; Плывём в Великобританию
LEAVE A5 ; Танкер вернулся и свободен
TERMINATE

GENERATE 8760
TERMINATE 1

Правильно ли я решил поставленную задачу? Т.к. это моя первая задача, боюсь, что мог накосячить. Особенно сомневаюсь в следующих местах:
1)PRIORUTY. Правильно ли я применил этот оператор? Увы, о мне удалось найти очень уж скудное и не совсем понятное описание этого оператора, возможно я его не правильно применил.
2)GENERATE (EXPONENTIAL(1,0,48)) - По условию мне нужно экспоненциальное распределение с мат. ожиданием 48. Увы нагуглить адекватное решение сей проблемы не удалось, мне показалось, что выглядеть это должно так, но я не уверен.
3)С дополнительными танкерами у меня ещё большие сомнения, мне кажется что генерировать через 1 ед. и там проверять на наличие свободного доп. танкера не очень красивое решение, но увы по другому я придумать не смог :(
4)И собственно говоря не понятно как правильно сделать окончательные выводы. Из отчёта получается, что танкер загружен на 31%, погрузчики на 97%. А вот как определить Сколько времени какие танкеры там стоят и как провести анализ влияния дополнительных танкеров?

Заранее огромное спасибо за помощь!

Автор: TEMENb 03.05.10, 21:17
сижу с телефона, текст программы не вижу. могу ответить только на второй (все верно) и третий (неверно, нужно строить отдельный сегмент)вопросы

Автор: Василий_Н 04.05.10, 09:28
Цитата TEMENb @
сижу с телефона, текст программы не вижу. могу ответить только на второй (все верно) и третий (неверно, нужно строить отдельный сегмент)вопросы

Так вроде у меня и есть отдельный сегмент? Блок между GENERATE и TERMINATE это же и есть сегмент или я не правильно понял специальную терминологию GPSS? И если я не правильно реализовал сей момент, подскажите, пожалуйста, в каком направлении мне нужно двигаться, чтобы сделать правильно?

Автор: TEMENb 04.05.10, 16:29
еще раз повторюсь, что я в "круизе" и ява на телефоне не очень, а текст программы в спойлере.
да, действительно сегмент.
но в жпсс-в время не дискретно. если ну очень хочется именно иаким методот - генегигуйте транзакт каждую тысячную евм.
но я лично сгенерировал бы один единственный транзакт и зациклил бы его.
мет марк
тест е ...
сейввалуе
тест не ...
трансфер ,мет

Автор: Василий_Н 05.05.10, 04:54
Ок, понял, убрал спойлер. Посмотрите, пожалуйста, сам код. Буду очень благодарен!

Автор: Василий_Н 06.05.10, 07:27
Цитата TEMENb @
но я лично сгенерировал бы один единственный транзакт и зациклил бы его.
мет марк
тест е ...
сейввалуе
тест не ...
трансфер ,мет

Т.е. правильно ли я понял, что нужно вместо 3-х моих сегментов делать один общий? А как внутри их разделять? Скажем как я смогу проверить что подошёл нужный момент для шторма?

Цитата TEMENb @
если ну очень хочется именно иаким методот - генегигуйте транзакт каждую тысячную евм.

А это будет допустимым решением или всё-таки это ошибка?



И всё-таки уже который день пытаюсь разобраться с анализом отчёта GPSS, но пока не всё понятно, вы не могли подтолкнуть в нужном направлении?

Заранее огромное спасибо!

Автор: Василий_Н 06.05.10, 09:15
Вот отчёт без сегмента с дополнительными 5-ю танкерами:
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
BUKSIR 1798 0.269 1.311 1 0 0 0 0 0


QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
AA3 3 0 805 594 0.142 1.543 5.888 0


STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY
A3 3 0 0 3 805 1 2.309 0.770 0 0
A5 5 5 0 0 0 1 0.000 0.000 0 0


А вот с дополнительными 5-ю(GENERATE 0.01):
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
BUKSIR 2093 0.305 1.277 1 875276 0 0 0 0


QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
AA3 8 0 953 127 1.756 16.137 18.618 0


STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY
A3 3 0 0 3 953 1 2.910 0.970 0 0
A5 5 0 0 5 154 1 5.000 1.000 0 875846





Теперь мой анализ:
1)Из второго отчёта мы видим, что UTIL. STORAGE A5 = 1.000, следовательно дополнительные 5 танкеров работают на полную мощь, а значит погрешность моей реализации(GENERATE 0.01) пренебрежимо мала и на модели не видна.

2)Загруженность буксира ранее мы имели 26.9%, при дополнительных 5-и танкерах она поднимается до 30.5%
3)Без доп танкеров максимальная очередь была 3, а среднее время ожидания в очереди 1.543часа, после введения дополнительных 5-и танкеров, длина очереди возросла до 8-и, а среднее время ожидание в очереди до 16.137часа
4)В первом отчёте мы получаем загруженность погрузочных мес равную 77%, а во втором отчёте 97%(т.е. после введения доп. танкеров занятость погрузчиков выросла на 20%).

Правильны ли мои выводы?

И всё таки до сих пор не могу разобраться, что означают: AVE.CONT., AVE.C., ENTRY(0), AVE.(-0), DELAY, RETRY

Автор: TEMENb 06.05.10, 10:33
Цитата Василий_Н @
А это будет допустимым решением или всё-таки это ошибка?

скажем так, на мой взгяд это будет кривое решение. но тем не менее оно даст результат похожий на адекватный.
Цитата Василий_Н @
Т.е. правильно ли я понял, что нужно вместо 3-х моих сегментов делать один общий? А как внутри их разделять? Скажем как я смогу проверить что подошёл нужный момент для шторма?

неправильно. генерация шторма и прочие действия пусть остаются как есть. просто в модель добавляем еще один сегмент. вот вам задачка для примера. будем в отдельном сегменте считать время одновременной работы двух устройств
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        initial x$sum,0
        generate    (exponential(1,0,2))
        seize   1
        advance 1
        release 1
        terminate   1
        generate    (exponential(1,0,2))
        seize   2
        advance 1
        release 2
        terminate   1
     
        generate    ,,,1
    met mark
        test ne (f1+f2),2
        savevalue   sum+,m1
        test e  (f1+f2),2
        transfer    ,met
     
        start   1000
в итоге получим, что время одновременной работы составило около 256 емв, при времени моделлирования в 1027 емв, что очень несложно проверить аналитически.

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

Добавлено
и что б совсем уж для сравнения
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        initial x$sum1,0
        initial x$sum2,0
        generate    (exponential(1,0,2))
        seize   1
        advance 1
        release 1
        terminate   1
        generate    (exponential(1,0,2))
        seize   2
        advance 1
        release 2
        terminate   1
     
        generate    ,,,1
    met mark
        test ne (f1+f2),2
        savevalue   sum1+,m1
        test e  (f1+f2),2
        transfer    ,met
     
        generate    .001
        savevalue   sum2+,(((f1+f2)=2)/1000)
        terminate  
     
        start   1000

обратите внимание на время, которое проходит от момента запуска на выполнение до момента получения отчета ;)

Добавлено
Megera
Цитата Megera @
generate 15,7,,,2 создание сообщений направления 2

generate 15,7,,,2

тут вхождение в блок дженерейт.
один из них надо бы удалить и все заработает ;)

Автор: ivx2 06.05.10, 12:06
Помогите, дан код, реализующий работу робата манипулятора:
mode FUNCTION RN1,D2
0.5, mode1/1, mode2
INITIAL X1,0 ;прием запросов разрешен
INITIAL X2,0 ;флаг функционнирования СМО в первом режиме ;флаг функционнирования СМО во втором режиме
;-- запуск СМО --
GENERATE (Gamma(1,0,10,3)) ;генерация запроса
TEST NE X1,1,ERROR_OUT ;если устройство занято, поступивший запрос теряется
SAVEVALUE 1,1 ;установить флаг занятости устройства в единицу
TERMINATE 1 ;вывести запрос из системы
TRANSFER ,FN$mode ;использование функции распределения запросов
;-- режим 1 --
mode1 SAVEVALUE 2,1
GENERATE (Exponential(1,0,0.35)) ;контроль устройством S1
TRANSFER ALL,con111,con1l2 ;распределение сиг. контроля для первого режима
con111 QUEUE OCH2 ;контроль устройства S2
SEIZE S2 ;поместить сигнал контроля в устройство
DEPART OCH2 ;изъять сигнал из очереди
ADVANCE (Exponential(1,0,0.62)) ;обслуживание устройства
RELEASE S2 ;высвобождение устройства
TERMINATE 1 ;вывести сигнал контроля из устройства
TRANSFER ,move ;перейти на генерацию команд
conl12 QUEUE OCH7 ;контроль устройства
SEIZE S7 ;поместить сигнал контроля в устройство
DEPART OCH7 ;изъять сигнал из очереди
ADVANCE (Exponential(1,0,0.74)) ;обслуживание устройства
RELEASE S7 ;высвобождение устройства
TERMINATE 1 ;вывести команду из системы
TRANSFER ,move
move GENERATE (Exponential(1,0,0.2)) ;генерация команды
TRANSFER ALL,com11,com12 ;генерация команды
com11 QUEUE OCH8 ;поместить команду в очередь
SEIZE S8 ;поместить команду в устройство
DEPART OCH8 ;изъять команду из очереди
ADVANCE (Exponential(1,0,2.86)) ;начать процесс обслуживания устройства
RELEASE S8 ;высвобождение устройства
TERMINATE 1 ;вывести команду из системы
TRANSFER ,conend ;переход на контроль
com12 QUEUE OCH13 ;поместить команду в очередь
SEIZE S13 ;поместить команду в устройство
DEPART OCH13 ;изъять команду из очереди
ADVANCE (Exponential(1,0,3.03)) ;начать процесс обслуживания устройства
RELEASE S13 ;высвобождение устройства
TERMINATE 1 ;вывести команду из системы
TRANSFER ,conend
conend GENERATE (Exponential(1,0,0.35)) ;генерация контрольного сигнала
TRANSFER ALL,con121,con122 ;распред. сиг. кон. контроля для 1-го режима
con121 QUEUE OCH2 ;контроль устройства
SEIZE S2 ;поместить сигнал контроля в устройство
DEPART OCH2 ;изъять сигнал из очереди
ADVANCE (Exponential(1,0,0.62)) ;обслуживание устройства
RELEASE S2 ;высвобождение устройства
TERMINATE 1 ;вывести сиг. контроля из системы
SAVEVALUE 1,0
TRANSFER ,OUT ;переход на метку NEXT_MODE
con122 QUEUE OCH7 ;контроль устройства
SEIZE S7 ;поместить сигнал контроля в устройство
DEPART OCH7 ;изъять сигнал из очереди
ADVANCE (Exponential(1,0,0.74)) ;обслуживание устройства
RELEASE S7 ;высвобождение устройства
TERMINATE 1 ;вывести сиг. контроля из системы
SAVEVALUE 1,0
TRANSFER ,OUT
mode2 TEST NE X2,0,genmod2
;-- ожидание --
GENERATE (Exponential(1,0,0.2)) ;ожидание (переход из первого режима во второй)
QUEUE OCH1 ;поместить сигнал ожидания в очередь
SEIZE S1 ;поместить сигнал ожидания в S1
DEPART OCH1 ;изъять сигнал ожидания из очереди
ADVANCE (Exponential(1,0,0.1)) ;обслуживания с МО=0.1
RELEASE S1 ;изъять сигнал ожидания из устройства
SAVEVALUE 2,0
TERMINATE 1
;-- режим 2 --
genmod2 GENERATE (Exponential(1,0,0.35))
TRANSFER ALL,con211,con212 ;запуск функции контроля для первого режима
con211 QUEUE OCH4 ;контроль устройства
SEIZE S4 ;поместить сигнал контроля в устройство
DEPART OCH4 ;изъять сигнал из очереди
ADVANCE (Exponential(1,0,0.62)) ;обслуживание устройства
RELEASE S4 ;высвобождение устройства
TERMINATE 1 ;вывести сиг. контроля из системы
TRANSFER ,shwopen ;переход на открытие схвата
con212 QUEUE OCH5 ;контроль устройства
SEIZE S5 ;поместить сигнал контроля в устройство
DEPART OCH5 ;изъять сигнал из очереди
ADVANCE (Exponential(1,0,0.74)) ;обслуживание устройства
RELEASE S5 ;высвобождение устройства
TERMINATE 1 ;вывести сиг. кон. из системы
TRANSFER ,shwopen
shwopen GENERATE (Exponential(1,0,0.2)) ;сигнал: закрыть схват
QUEUE OCH1 ;поместить сиг откр. схвата в OCH1
SEIZE S1 ;занять S1 сиг. откр. схвата
DEPART OCH1 ;изъять сиг. откр. схвата
ADVANCE (Exponential(1,0,4)) ;обслуживание с МО=4
RELEASE S1 ;изъять сиг. откр. схвата
TERMINATE 1 ;вывести сиг. откр. схвата из системы
GENERATE (Exponential(1,0,0.2)) ;генерация команды
TRANSFER ALL,com21,com22 ;распределение команд по устр.
com21 QUEUE OCH8 ;поместить команду в очередь
SEIZE S8 ;поместить команду в устройство
DEPART OCH8 ;изъять команду из очереди
ADVANCE (Exponential(1,0,2.86)) ;начать процесс обслуживания устройства
RELEASE S8 ;высвобождение устройства
TERMINATE 1 ;вывести ком. из системы
TRANSFER ,shwclose ;переход на закрытие схвата
com22 QUEUE OCH11 ;поместить команду в очередь
SEIZE S11 ;поместить команду в устройство
DEPART OCH11 ;изъять команду из очереди
ADVANCE (Exponential(1,0,3.03)) ;начать процесс обслуживания устройства
RELEASE S11 ;высвобождение устройства
TERMINATE 1 ;вывод СМО из СМО
TRANSFER ,shwclose
shwclose GENERATE (Exponential(1,0,0.2)) ;сигнал: открыть схват
QUEUE OCH1 ;поместить в OCH1 сиг. закр. схвата
SEIZE S1 ;занять устройство S1 сиг. закр. схвата
DEPART OCH1 ;изъять сиг. закр.схвата
ADVANCE (Exponential(1,0,4)) ;обслуживание МО=4
RELEASE S1 ;изъять сиг. закр. схвата
TERMINATE 1 ;вывод сиг. закр. схвата из СМО
GENERATE (Exponential(1,0,0.35)) ;Генерация сигналов контроля
TRANSFER ALL,con221,con222 ;запуск функции контроля для первого режима
con221 QUEUE OCH4 ;контроль устройства
SEIZE S4 ;поместить сигнал контроля в устройство
DEPART OCH4 ;изъять сигнал из очереди
ADVANCE (Exponential(1,0,0.62)) ;обслуживание устройства
RELEASE S4 ;высвобождение устройства
TERMINATE 1 ;вывести сиг. контроля из СМО
TRANSFER ,OUT ;переход на завершение
con222 QUEUE OCH5 ;контроль устройства
SEIZE S5 ;поместить сигнал контроля в устройство
DEPART OCH5 ;изъять сигнал из очереди
ADVANCE (Exponential(1,0,0.74)) ;обслуживание устройства
RELEASE S5 ;высвобождение устройства
TERMINATE 1 ;вывод сигнала контроля из системы
TRANSFER ,OUT ;переход на метку OUT
;-- вывод заявок --
OUT TERMINATE 1 ;вывод сиг. контроля из системы
SAVEVALUE 1,0 ;установить флаг занятости устройства в единицу
ERROR_OUT GENERATE 60000
TERMINATE 1 ;вывод запроса из системы
START 1 ;установить число прогонов
Почему выводится следующая ошибка:
05/06/10 15:04:48 Model Translation Begun.
05/06/10 15:04:48 Ready.
05/06/10 15:04:48 Simulation in Progress.
05/06/10 15:04:48 Error Stop.
05/06/10 15:04:48 Halt. XN: 5. Block 60 Next.
05/06/10 15:04:48 Clock:0.010555. Next: SEIZE. Line 67.
05/06/10 15:04:48 SEIZE S1 ;поместить сигнал ожидания в S1
05/06/10 15:04:48 Reference to a non-existent Storage entity.

Автор: TEMENb 06.05.10, 12:20
Цитата ivx2 @
S1

колличество занятых каналов многоканального устройства номер 1
иными словами - поменяйте название устнойства на любое другое и старайтесь избегать названий состоящих из одной буквы

Автор: TEMENb 06.05.10, 13:55
Василий_Н, ищи ответы тут.

Автор: Lilly 06.05.10, 21:01
To TEMENЬ:
здравствуйте! срочно требуется ваша помощь. но у меня, к сожалению, нет аськи. пожалуйста, если это возможно, дайте свой e-mail или номер телефона, либо другой какой-то способ, как к вам можно обратиться

Автор: Lexa88 07.05.10, 08:52
Помогите, пожалуйста с такой задачей:
Производственная линия состоит из двух станков ЧПУ, на каждом из которых работает отдельный оператор. Изделие обязательно проходит обработку на обеих станках последовательно. Перед первым станком может храниться неограниченное число изделий, однако, между первым и вторым станками может поместиться только одно изделие, ожидающее обработку. Оператор первого станка вынужден ждать освобождения места хранения между станками, даже если он закончил свою работу над следующим изделием. Изделия поступают на первый станок каждые 30±20 минут, время обработки на первом станке 25±10 минут, а на втором станке 30±10 минут. Время установки изделия на первый станок, со станка на ожидание, а затем установка и снятие со второго станка не учитывается.

Условия варианта:
• Определить эффективность работы линии при проведении обработки 100 изделий
• Определить время простоя первого станка
• Определить результаты моделирования за пять дней работы, используя операторы DO- ENDDD
• Временная дискрета – 1 минута

- Станки – устройства,
- изделия - транзакты

Набросок текста программы у меня получился такой:

SIMULATE
GENERATE 30,20
QUEUE STONEQ
SEIZE STONE
DEPART STONEQ
ADVANCE 25,10
TEST LE STTWOQ,1
RELEASE STONE
QUEUE STTWOQ
SEIZE STTWO
DEPART STTWOQ
ADVANCE 30,10
RELEASE STTWO
TERMINATE 1
START 100
END

Как правильно реализовать условие "между первым и вторым станками может поместиться только одно изделие, ожидающее обработку", и "определить результаты моделирования за пять дней работы, используя операторы DO- ENDDD"?

Автор: TEMENb 07.05.10, 10:23
Цитата Lexa88 @
"между первым и вторым станками может поместиться только одно изделие, ожидающее обработку"

как то так
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    queue stan1
    seize ograni4enie
    seize stan1
    depart stan1
    advance
    release stan1
    queue stan2
    seize stan2
    release ograni4enie
    depart stan2
    advance
    release stan2


Добавлено
а вообще вариантов великое множество. это первый пришедший на ум

Автор: Lexa88 07.05.10, 11:03
Вроде все правильно, спасибо за ответ.

Автор: Lilly 07.05.10, 12:43
TEMENb
здравствуйте! срочно требуется ваша помощь. но у меня, к сожалению, нет аськи. пожалуйста, если это возможно, дайте свой e-mail или номер телефона, либо другой какой-то способ, как к вам можно обратиться

Автор: TEMENb 07.05.10, 12:46
Lilly, я уже писал. смотрите в теме "" задачи по жпсс. кроме того можно посмотреть в профиле или написать в приват на форуме. вообщем вариантов, как обычно, море.

Автор: Ura2007 09.05.10, 20:31
Всем привет!!!
Нужна помощь нужно разобраться что делает программа не очень понятно.Листинг в файле с названием 1,отчет в вордовском документе.
Есть ли редакторы где можно строить стуктуру программы (рисовать точнее)
Заранее спасибо!

Автор: TEMENb 10.05.10, 15:32
в визио можно строить

Автор: irinak 14.05.10, 18:52
Подскажите, пожалуйста, как сделать такое:
есть 4 абонента, которые соединяются между собой для пересылки сообщений. Соединяются хаотичным образом. Периодичность соединения, к примеру, распределяется по экспоненц закону с лямбда = 1.
Кроме каркаса по этому есть ещё вопрос: заявки будут уходить из системы, когда их получит назначенный абонент?
Спасибо большое заранее)

Автор: TEMENb 14.05.10, 19:05
irinak, вопрос слишком уж абстрактный. имеет множество реализаций. у каждой свои плюсы и минусы. к тому же условие можно понять неравнозначно. периодичность соединения для каждого абонента или для всех вместе.
для примера могу предложить вам такую реализацию.

4 абонента звонят друг-другу. звонки в системе осуществляются с периодом 4 единицы времени и имеют продолжительность 1 единицу. Если вызываемый абонент занят, то вызывающий продолжает ему звонить, пока не дозвонится. вызывающий абонент является занятым.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        generate    4
        test l  (f1+f2+f3+f4),4,otk ;что бы избежать зацикливаний в след двух строчках
    povt    assign  1,(duniform(1,1,4))
        test ne f*1,1,povt      ;если абонент занят, то ищем другого вызывающего абонента. (при различных значениях времени, тут возможны зацикливания, если убрать вторую строку программы)
    povt2   assign  2,(duniform(1,1,4))
        test ne p1,p2,povt2
        queue   p1
        seize   p1
        depart  p1
        queue   p2
        seize   p2
        depart  p2
        advance 1
        release p1
        release p2
        terminate   1
     
    otk terminate
     
        start   1000

Автор: irinak 14.05.10, 19:51
Уточняю)))
Есть 4 абонента, с заданной периодичностью происходит соединение между парой несоединенных абонентов. Время соединения 3 секунды. Передаются сообщения. оно состоит из 20 +- 2 заявки. Передача сообщения составляет 0.15+-0.02секунд. В режиме А заявки передаются поочередно, а в режиме В заявки передаются одновременно.
Вот)
Спасибо)

Автор: Imortal 16.05.10, 08:43
У меня в задании "все величины заданы экспоненциально. Там приход блоков, и соотвественно их задержка на устройствах. Блоки приходят по 2. Здесь уже было по поводу
Цитата
GENERATE (EXPONENTIAL (5,0,30))

А первый параметр (5) на что влияет? Это "номер генератора", но при изменение его, изменяется и среднее время задержки(ну и прихода).
И в задержке писать
Цитата
advance (EXPONENTIAL (5,0,30))
?

Автор: irinaD 16.05.10, 10:31
Люди, помогите, пожалуйста. Лабораторная: На обрабатывающий участок цеха поступают детали в среднем через 50 мин.
Первичная обработка деталей производится на одном из двух станков. Первый станок обрабатывает деталь в среднем 40 мин и имеет до 4 % брака, второй соответственно 60 мин и 8 % брака. Все бракованные детали возвращаются на повторную обработку на второй станок. Детали, попавшие в разряд бракованных дважды, считаются отходами. Вторичную обработку проводят также два станка в среднем 100 мин каждый. Причём первый станок обрабатывает имеющиеся в накопителе после первичной обработки детали, а второй станок подключается при образовании в накопителе задела больше трёх деталей. Все интервалы времени распределены по экспоненциальному закону.
Смоделировать обработку на участке 500 деталей. Определить загрузку второго станка на вторичной обработке и вероятность появления отходов. Определить возможность снижения задела в накопителе и повышения загрузки второго станка на вторичной обработке.
Я написала код:


GENERATE 50; каждые 50 мин по 1 детали
ASSIGN WasError,0

TRANSFER 0.5,SSS
SEIZE STANOK1; занимаем 1 станок.
ADVANCE 40,0; обработка детали 40 мин
RELEASE STANOK1

TRANSFER 0.96,ERR ; 4% возможность брака

TRANSFER 0,SECOND

SSS TEST L WasError,2,EXT
SEIZE STAN;
ADVANCE 60,0; обработка детали 60 мин
RELEASE STAN; Освобождение устройства.

TRANSFER 0.92,ERR ; 8% возможность брака
TRANSFER ,SECOND

ERR ASSIGN WasError+,1
TRANSFER ,SSS

SECOND QUEUE NAC1
TEST L Q$NAC1,3,Place_2
SEIZE STANOK1
ADVANCE 100,0
RELEASE STANOK1
; DEPART NAC1
TRANSFER ,BEFEXT

Place_2 SEIZE STAN
ADVANCE 100,0
RELEASE STAN
; DEPART NAC1
BEFEXT DEPART NAC1
EXT TERMINATE 1

Start 500
Но в отчете 3 детали зависают. Можете объяснить, в чем ошибка?
GPSS World Simulation Report - right.54.1


Sunday, May 16, 2010 14:29:44

START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 25150.000 27 2 0


NAME VALUE
BEFEXT 26.000
ERR 15.000
EXT 27.000
NAC1 10002.000
PLACE_2 23.000
SECOND 17.000
SSS 9.000
STAN 10003.000
STANOK1 10001.000
WASERROR 10000.000


LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 503 0 0
2 ASSIGN 503 0 0
3 TRANSFER 503 1 0
4 SEIZE 240 0 0
5 ADVANCE 240 1 0
6 RELEASE 239 0 0
7 TRANSFER 239 0 0
8 TRANSFER 232 0 0
SSS 9 TEST 269 0 0
10 SEIZE 0 0 0
11 ADVANCE 0 0 0
12 RELEASE 0 0 0
13 TRANSFER 0 0 0
14 TRANSFER 0 0 0
ERR 15 ASSIGN 7 0 0
16 TRANSFER 7 0 0
SECOND 17 QUEUE 232 0 0
18 TEST 232 1 0
19 SEIZE 116 0 0
20 ADVANCE 116 0 0
21 RELEASE 116 0 0
22 TRANSFER 116 0 0
PLACE_2 23 SEIZE 115 0 0
24 ADVANCE 115 0 0
25 RELEASE 115 0 0
BEFEXT 26 DEPART 231 0 0
EXT 27 TERMINATE 500 0 0


FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
STANOK1 356 0.843 59.522 1 500 0 0 0 2
STAN 115 0.457 100.000 1 0 0 0 0 0


QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
NAC1 9 1 232 0 2.573 278.922 278.922 0

Автор: TEMENb 16.05.10, 10:38
а разве это ошибка?
просто не успели выйти. на момент окончания моделирования.

Автор: irinaD 16.05.10, 10:51
И судя по отчету 1 TEST непроходит ни одна деталь. Почему?

Добавлено
Просто получается что, на второй станок не попадает ни одна деталь. Я неправильно с параметрами работаю?

Автор: TEMENb 16.05.10, 11:00
Цитата irinaD @
SSS TEST L WasError,2,EXT

прибор чтения мыслей на расстоянии подсказывает мне, что должно быть
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    SSS TEST L p$WasError,2,EXT
;)

Автор: irinaD 16.05.10, 11:15
Спасибо, так действительно заработало. Зато теперь в отчесте на NEST зависает кучу деталей
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 1436 0 0
2 ASSIGN 1436 0 0
3 TRANSFER 1436 0 0
4 SEIZE 700 0 0
5 ADVANCE 700 1 0
6 RELEASE 699 0 0
7 TRANSFER 699 0 0
8 TRANSFER 672 0 0
SSS 9 TEST 789 416 0
10 SEIZE 372 1 0
11 ADVANCE 371 0 0
12 RELEASE 371 0 0
13 TRANSFER 371 0 0
14 TRANSFER 345 0 0
ERR 15 ASSIGN 53 0 0
16 TRANSFER 53 0 0
SECOND 17 QUEUE 1017 0 0
18 TEST 1017 518 0
19 SEIZE 4 0 0
20 ADVANCE 4 0 0
21 RELEASE 4 0 0
22 TRANSFER 4 0 0
PLACE_2 23 SEIZE 495 0 0
24 ADVANCE 495 0 0
25 RELEASE 495 0 0
BEFEXT 26 DEPART 499 0 0
EXT 27 TERMINATE 500 0 0

Автор: TEMENb 16.05.10, 11:22
пожалуйста, оформляйте текст и отчет как код. глаза сломать можно.

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

Автор: irinaD 16.05.10, 11:28
В том-то и дело, что я сначала освобождала устройство RELEAS, а потом переходила TRANSFER Сейчас попробую очереди поставить

Автор: irinaD 16.05.10, 11:55
Измененный код
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    STAN STORAGE 1
    STANOK1 STORAGE 1  
    GENERATE    50; каждые 50 мин по 1 детали
        ASSIGN  WasError,0
     
        TRANSFER 0.5,SSS
        QUEUE och1
        ENTER STANOK1  
        DEPART och1
        ADVANCE 40,0; обработка детали 40 мин
        LEAVE STANOK1
        TRANSFER 0.96,ERR ; 4% возможность брака
        TRANSFER 0,SECOND
     
        SSS TEST L p$WasError,2,EXT
        QUEUE och2;
        ENTER STAN
        DEPART och2
        ADVANCE 60,0; обработка детали 60 мин
        LEAVE STAN  
        TRANSFER 0.92,ERR ; 8% возможность брака
        TRANSFER ,SECOND
     
        ERR ASSIGN WasError+,1
        TRANSFER ,SSS
     
        SECOND QUEUE NAC1
        TEST L Q$NAC1,3,Place_2
        QUEUE OCH1
        ENTER STANOK1
        DEPART OCH1
        
        ADVANCE 100,0
        LEAVE STANOK1
        TRANSFER ,BEFEXT
     
    PLACE_2 QUEUE OCH2
        ENTER STAN
        DEPART OCH2
        ADVANCE 100,0
        LEAVE STAN
        BEFEXT DEPART NAC1
        EXT TERMINATE 1
     
    Start 500

Но отчет приблизительно такой же

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE          1436             0       0
                        2    ASSIGN            1436             0       0
                        3    TRANSFER          1436             0       0
                        4    QUEUE              700             0       0
                        5    ENTER              700             0       0
                        6    DEPART             700             0       0
                        7    ADVANCE            700             1       0
                        8    LEAVE              699             0       0
                        9    TRANSFER           699             0       0
                       10    TRANSFER           672             0       0
    SSS                11    TEST               789             0       0
                       12    QUEUE              788           416       0
                       13    ENTER              372             1       0
                       14    DEPART             371             0       0
                       15    ADVANCE            371             0       0
                       16    LEAVE              371             0       0
                       17    TRANSFER           371             0       0
                       18    TRANSFER           345             0       0
    ERR                19    ASSIGN              53             0       0
                       20    TRANSFER            53             0       0
    SECOND             21    QUEUE             1017             0       0
                       22    TEST              1017             0       0
                       23    QUEUE                4             0       0
                       24    ENTER                4             0       0
                       25    DEPART               4             0       0
                       26    ADVANCE              4             0       0
                       27    LEAVE                4             0       0
                       28    TRANSFER             4             0       0
    PLACE_2            29    QUEUE             1013           518       0
                       30    ENTER              495             0       0
                       31    DEPART             495             0       0
                       32    ADVANCE            495             0       0
                       33    LEAVE              495             0       0
    BEFEXT             34    DEPART             499             0       0
    EXT                35    TERMINATE          500             0       0

Автор: TEMENb 16.05.10, 12:00
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    STORAGE            CAP. REM. MIN. MAX.  ENTRIES AVL.  AVE.C. UTIL. RETRY DELAY
     STAN                1    0   0     1      867   1    0.999  0.999    0  934
     STANOK1             1    0   0     1      704   1    0.395  0.395    0    0

загрузка станка 99.9%
он просто не успевает обработать все поступающие транзакты.
сделайте
stan storage 3
и все получится

Автор: irinaD 16.05.10, 12:09
т.Е ДОБАВИТЬ 3-Й СТАНОК? и ЕСЛИ 2-ОЙ ЗАНЯТ ОТПРАВЛЯТЬ НА НЕГО?

Автор: TEMENb 16.05.10, 12:12
ну сами посмотрите
за время моделирования через станок прошло
Цитата
STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY
STAN 1 0 0 1 867 1 0.999 0.999 0 934
867 деталей. а в очереди перед станком осталось
Цитата
QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
OCH2 935 935 1801 1 466.401 18596.480 18606.811 0
935 деталей. т.е. в более чем два раза больше, чем обслужено. => надо повышать производительность в более чем два раза.

Автор: irinaD 16.05.10, 12:16
Да я понимаю. Просто в условии говорится только двух станках.

Добавлено
в принципе я сделала проверку, если 2-ой занят отправлять на первый. Но Все равно часть деталей зависает на
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        TEST L Q$NAC1,3,Place_2


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
         LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE           996             0       0
                        2    ASSIGN             996             0       0
                        3    TRANSFER           996             0       0
    SSS1                4    QUEUE             1028             0       0
                        5    SEIZE             1028             0       0
                        6    ADVANCE           1028             1       0
                        7    RELEASE           1027             0       0
                        8    DEPART            1027             0       0
                        9    TRANSFER          1027             0       0
                       10    TRANSFER           992             0       0
    SSS                11    TEST               524             0       0
                       12    GATE               523             0       0
                       13    QUEUE                2             0       0
                       14    SEIZE                2             0       0
                       15    ADVANCE              2             0       0
                       16    RELEASE              2             0       0
                       17    DEPART               2             0       0
                       18    TRANSFER             2             0       0
                       19    TRANSFER             2             0       0
    ERR                20    ASSIGN              35             0       0
                       21    TRANSFER            35             0       0
    SECOND             22    QUEUE              994             0       0
                       23    TEST               994           494       0
                       24    QUEUE                5             0       0
                       25    SEIZE                5             0       0
                       26    ADVANCE              5             0       0
                       27    RELEASE              5             0       0
                       28    DEPART               5             0       0
                       29    TRANSFER             5             0       0
    PLACE_2            30    SEIZE              495             1       0
                       31    ADVANCE            494             0       0
                       32    RELEASE            494             0       0
    BEFEXT             33    DEPART             499             0       0
    EXT                34    TERMINATE          500             0       0

Автор: Imortal 16.05.10, 13:11
Цитата Imortal @
У меня в задании "все величины заданы экспоненциально. Там приход блоков, и соотвественно их задержка на устройствах. Блоки приходят по 2. Здесь уже было по поводу
Цитата
GENERATE (EXPONENTIAL (5,0,30))

А первый параметр (5) на что влияет? Это "номер генератора", но при изменение его, изменяется и среднее время задержки(ну и прихода).
И в задержке писать
Цитата
advance (EXPONENTIAL (5,0,30))
?

Все ещё в силе

Автор: TEMENb 16.05.10, 13:14
Imortal, абсолютно ничего не изменится.

Автор: iriska_187 17.05.10, 20:04
на входе есть равномерное распределение, и 2 обслуживающих канала,1 задан по экспоненциальному закону,а второй по пуассону. загрузка системы = о,6
SIMULATE
..//тут надо задавать точки,но жпсс вроде как равномерное понимает,но как это записать? и надо ли задавать законы обслуживающих приборов?
GENERATE FIV $Ravn
QUEUE qu
MKS STORAGE 2
ENTER MKS
LEAVE MKS
TERMINATE
TERMINATE 1
DEPART Pribor1
RELEASE Pribor1
DEPART Pribor12
RELEASE Pribor2
DEPART System
GENERATE 100000
TERMINATE 1

я впервые пишу на жпсс,и наверное много где накосячила((((

Автор: Wrenka 17.05.10, 20:25
Здравствуйте!

Обращаюсь к вам за помощью. Нам в магистратуре внезапно дали задания по GPSS World, хотя читали только MatLab LabVieW, и то как физикам)(это я к тому, что в программировании, а особенно в очередях очень плохо разбираюсь)

Знаю, что есть подобные задачи, но не могу понять как сделать так, чтобы сообщение ждало не больше N секунд, а потом удалялось.
то есть для этого нужно использовать "TEST", но непонятно как считать время.
Сама задача сформулирована так:
Каждые 3+-1 сек генерируется сообщение, они идут в буфер, где обрабатываются по очереди, время обработки 5+-2 сек, если сообщение ждет обработки больше 12 сек, то оно удаляется

вот то, что я смогла написать.
[ code ]
GENERATE 3,1,0,200 ; генерирует 200 сообщений, через каждые 3+-1 сек,
mr EQU 12 ; константа, может пригодится

SAVEVALUE OBRABOTAN,0 ; число обработанных (почем-то при работе они не обнуляются...
SAVEVALUE UDALEN,0 ; число удаленных

QUEUE OZD ;заняло место в очереди на обработку в буфере

Где-то здесь, как я понимаю, должно быть условие с TEST

SEIZE BUF ;ожидание на обработку
DEPART OZD ;выход из очереди на обработку
ADVANCE 5,2 ;обрабатывается в буфере 5+-2 сек
RELEASE BUF ;освобождение буфера
Proshlo TERMINATE 1 ;
SAVEVALUE OBRABOTAN+,1 ; изменить число обработанных

Dele TERMINATE 1 ;удалить сообщение по условию
SAVEVALUE UDALEN+,1 ;изменить число удаленных

;Время всего процесса
GENERATE 1 ;моделирование времени работы системы
SAVEVALUE 1+,1 ;счетчик времени (в сек)
TRM TERMINATE 1 ;одна сек системного времени прошла
CCL STORAGE 1 ;вместительность обработчика
START 3000 ;общее время, чтоб с запасом хватило

MWT TABLE M1,15,15,15
[ /code ]

Буду рада любым подсказкам, или хотя бы ссылкам на книги, где можно найти подобные примеры. Заранее большое спасибо!

Автор: iriska_187 18.05.10, 19:15
переделала и привела в божеский вид,но всё равно выдаёт ошибку
PUAS FUNCTION RN2, C25
0,1/0.04,0.96/0.08,0.92/0.12,0.88/0.16,0.85/0.2,0.8187
0.24,0.786/0.28,0.755/0.32,0.726/0.36,0.698/0.4,0.67/0.44,0.64/0.48,0.619
0.52,0.59/0.56,0.57/0.6,0.549/0.64,0.527/0.68,0.507/0.72,0.487/0.76,0.468/0.8,0.449
0.84,0.342/0.88,0.414/0.92,0.398/0.96,0.383
EXPO FUNCTION RN2,C25
0,0/0.04,0.0082/0.08,0.0167/0.12,0.0255/0.16,0.0349/0.2,0.0446/0.24,0.0549/0.28,0.0657
0.32,0.0771/0.36,0.0892/0.4,0.1022/0.44,0.1160/0.48,0.1308/0.52,0.1468/0.56,0.1642
0.6,0.1833/0.64,0.2043/0.68,0.2279/0.72,0.2546/0.76,0.2854/0.8,0.3219/0.84,0.3666
0.88,0.4241/0.92,0.5051/0.96,0.6438
Simulate
MKS STORAGE 2
Generate 5,0.33
QUEUE System
QUEUE ochered
Enter MKS
Depart ochered
Advance FN$PUAS
Leave MKS
Depart System
Generate 5,0.33
QUEUE System
QUEUE ochered
Advance FN$EXPO
Leave MKS
Depart System
Terminate
Generate 10000
Terminate 1
Start 1

Автор: TEMENb 18.05.10, 19:28
iriska_187, в описании функции удалите пробел после запятой
и вообще никогда не ставьте пробелы после запятых. жпсс их трактует как разделитель между параметрами транзакта

З.Ы.: впрочем на этом ваши проблемы не оканчиваются
З.з.Ы.: откуда вы взяли такие цифры экспоненциального распределения???

Автор: great_dndz 19.05.10, 12:27
Подскажите как сделать проверку многоканального устройства на занятость

GATE NU имя_устройства,метка - работает,но все транзакты поступают в последующий блок, а между меткой не распределяются

Автор: TEMENb 19.05.10, 12:31
great_dndz, пользуйтесь тестом и СЧА МКУ

СЧА МКУ
Sj Текущее содержимое многоканального устройства j. Содержимое многоканального устройства может изменяться блоками ENTER и LEAVE.
Rj Число свободных единиц многоканального устройства j. Эта величина может изменяться блоками ENTER и LEAVE.
SRj Коэффициент использования многоканального устройства j в тысячных долях, т.е., если коэффициент равен 0.65, то SRj равно 650.
SAj Среднее содержимое многоканального устройства j (целая часть).
SMj Максимальное содержимое многоканального устройства j.
SCj Общее число входов в многоканальное устройство j.
STj Среднее время пребывания транзактов в многоканальном устройстве j.
SEj Флаг незанятости многоканального устройства j: 1 - свободно, 0 - занято.
SFj Флаг заполненности многоканального устройства j: 1 - заполнено, 0 - не заполнено.
SVj Флаг готовности многоканального устройства j: 1 - готово, 0 - не готово.
SNVj Флаг неиспользуемости многоканального устройства j: 1 - неиспользуется, 0 - используется.

Автор: great_dndz 19.05.10, 12:37
Пользуюсь

TEST E SE$Имя_устройства,1,BACK1

пишет ошивку в параметре B теста, независимо от 0 или 1 ((((((((((((((

Автор: TEMENb 19.05.10, 12:39
текст шедевра в студию.

З.Ы.: я лично предпочел бы написать

TEST E S$Имя_устройства,0,BACK1 ;полностью свободное устройство
TEST G R$Имя_устройства,0,BACK1 ;Устройство имеет свободные каналы

Автор: great_dndz 19.05.10, 12:44
В такой записи работает, но аналогично Gate. Транзакты идут либо ниже, либо в бэк1. Подскажите кто знает, наверно в логике ошибка

KD1 EQU 2 ;количество деталей на первичню регулир.
PERV_REG STORAGE 2 ;выделяем для устр. первичн регул. 2 канала
VTOR_REG STORAGE 2 ;выделяем для устр. вторичн. регул. 2 канала
NAKOPITEL STORAGE 2
INITIAL X$KOLAGR1SORT,0 ;начальное колич. деталей первого сорта
INITIAL X$KOLAGR2SORT,0 ;начальное колич. деталей второго сорта
INITIAL X$PRIBDET1,500 ;прибыль от реализации деталей первого сорта
INITIAL X$PRIBDET2,220 ;прибыль от реализации деталей второго сорта
;PERVERV_REG STORAGE 2 ; выделяем емкость уст-ва перв.регул.
GENERATE 40,8,,2 ;генерация входа агрегатов по времени
; SPLIT 2,AGR ;создаём 2 копии агрегатов
; GATE NU PERV_REG,BACK1 ;проверка устройства на занятость, если занято то переход в бэк1
KOL1 SAVEVALUE KOLAGR1SORT+,1
TEST G S$PERV_REG,0,BACK1
QUEUE PERV_DET ;встать в очередь для сбора статистики на первичн. регул.
ENTER PERV_REG,2 ;посылка агрегатов,занять уст-во перв. регул.
DEPART PERV_DET ;освободить очередь
ADVANCE 40 ;,FN$EXPDIS ;задержка на первичной регулировке
LEAVE PERV_REG,2 ;покидаем уст-во
TRANSFER ,BACK2 ;переход на втор. регулир.
;ВТОРИЧНАЯ РЕГУЛИРОВКА

BACK2 QUEUE VTOR_DET ;встать в очередь для сбора статистики на ВТОР. регул.
ENTER VTOR_REG ;занимаем уст-во втор. регул-ки
DEPART VTOR_DET ;освободить очередь
ADVANCE 80 ;,EXPDIS ;задержка на втор. регулир.
LEAVE VTOR_REG ;покидаем уст-во
TRANSFER ,KOL1 ;перенаправление на подсчет количества
;НАКОПИТЕЛЬ

BACK1 ENTER NAKOPITEL ;занять уст-во накопитель
LEAVE NAKOPITEL ;покинуть накопитель
TRANSFER ,BACK3 ;переход агрегатов из накоп. на частичн регул.
;ЧАСТИЧНАЯ РЕГУЛИРОВКА
BACK3 QUEUE CHASTICH_DET
SEIZE CHAST_REG ;занять однокан. уст-во - частичн.регул.
DEPART CHASTICH_DET
ADVANCE 60 ;,EXPDIS ;задержка на частичн.регул.
RELEASE CHAST_REG ;покидаем уст-во
SAVEVALUE KOLAGR2SORT+,1
TRANSFER ,back1 ;перенаправление на подсчет количества


terminate 0 ;
GENERATE 10080 ;таймер 24 часа
terminate 1 ;
start 1 ;

Автор: iriska_187 19.05.10, 15:08
Цитата TEMENb @
iriska_187, в описании функции удалите пробел после запятой
и вообще никогда не ставьте пробелы после запятых. жпсс их трактует как разделитель между параметрами транзакта

З.Ы.: впрочем на этом ваши проблемы не оканчиваются
З.з.Ы.: откуда вы взяли такие цифры экспоненциального распределения???

по обратной формуле -1/lambda*Ln(1-x)
Кстати программа теперь работает,но не выдаёт нужных цифр

Автор: dima3x 26.05.10, 15:59
Помогите надо решить задачу на gpss

В телефонный коммутатор включены 4 внутреннии и 3 внешнии линии .Звонки распределяются с отношением 60% и 40% .Определить показатели эффективности системы есть интенсивность звонков y=0.02 c(показательное распределение) а среднее время обработки вызова линией 60 сек.

Автор: ninja7 12.06.10, 10:49
В обробатывающий цех через 5±1 мин поступают детали двух типів с вероятностью 0.4 первого типа, с веростяностью 0.6 второго типа.
Детали первого типа обрабатываются верстатом А, время обработки 15±5 мин и в каждый момент времни может обрабатываться 1 деталь. Детали второго типа обрабатываются верстатом В (время роботы 8±4). Смоделируйте работу цеха в течении двух суток.

Пожалуйста помогите с задачей а то в GPSS я вообще не в теме... Надеюсь для тех кто шарит такие задачи 5 мин дела...
Заранее спасибо
С уважением.

Автор: ninja7 13.06.10, 12:36
Ладно я уже понял что решение задачи никто не скинет... Тогда возьму попроще вот эту...

На станцію технічного обслуговування, що складається з боксу для ремонту і боксу для технічного огляду, кожні 25±10 хв. Надходять автомобілі. З них 73% потребують ремонту, який триває 45±15 хв, а 27% проходять технічний огляд, який триває 17±8 хв. Змоделюйте 40 год. роботи станції технічного обслуговування.

Автор: TEMENb 13.06.10, 12:42
Хоть бы на русский перевел ;)

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    GENERATE 25,10
    TRANSFER .73,MET1
    QUEUE REM
    SEIZE REM
    DEPART REM
    ADVANCE 45,15
    RELEASE REM
    TERMINATE
    MET1 QUEUE TEH
    SEIZE TEH
    DEPART TEH
    ADVANCE 17,8
    RELEASE TEH
    TERMINATE
     
    GENERATE 2400
    TERMINATE 1
     
    STATR 1

Автор: ninja7 13.06.10, 13:01
GENERATE 25,10
TRANSFER .73,MET1
QUEUE REM
SEIZE REM
DEPART REM
ADVANCE 45,15
RELEASE REM
TERMINATE
MET1 QUEUE TEH
SEIZE TEH
DEPART TEH
ADVANCE 17,8
RELEASE TEH
TERMINATE

GENERATE 2400
TERMINATE 1

START 1

Добавлено
TEMENb спасибо большое) а я уже и не ждал помощи по своему делать начал)

Автор: TEMENb 13.06.10, 13:04
исправить можно так

ставим курсор в тексте модели, нажимаем ctrl+a, del
выделяем мое сообщение, нажимаем ctrl+c
возвращаемся в текст модели и нажимаем ctrl+v, ctrl+s

Автор: ninja7 13.06.10, 13:11
Может там вместо 2400 нужно ставить 144000?

Автор: TEMENb 13.06.10, 13:18
40 часов по 60 минут = 2400 минут.
но если очень нужно - можно и 144000 поставить

Автор: ninja7 13.06.10, 15:07
Да мне лучше в секундах, и последний вопрос как оформить отчёт к проге типа количество транзактов, среднее время пребывания транзакта в очереди, кол-во ремонтов и осмотров, процент задействования а то чё то я не совсем разобрался в отчёте...

Автор: TEMENb 13.06.10, 15:10
http://www.simulation.kiev.ua/index.php?menu=help_report

Автор: Katsee 26.06.10, 14:50
Помогите имне пожалуйста!!!

Добавлено
Надо в GPSS смоделировать канал связи с многолучевостью .
Если в виде задачи, то это примерно так получается:
есть несколько каналов, для каждого надо задать задержку(все задержки разные), и умножить на коэффициент свой в каждом канале. Вконце все три канала суммируются. Значения я так понимаю можно брать любые.

У меня получилось вот что:

GENERATE 6
SPLIT 1,CHAN2
SPLIT1,CHAN3
CHAN1 SEIZE1
ADVANCE T1
RELEASE1
TRANSFER OUT
CHAN2 SEIZE 2
ADVANCET2
RELEASE2
TRANSFEROUT
CHAN3SEIZE3
ADVANCET3
RELEASE3
OUTASSEMBLE4
TERMINATE1
START100
END

Здесь я смогла только задержку задать. Не знаю что делать с коэффициентом.
Ивообще, программа мне в каждой строке почти ошибку выдает: Line 3, Col 5. Invalid Delimiter. Expecting a GPSS Verb.


Помогите пожалууууйста!!! Вроде не очень сложная задачка для профессионалов)))

Добавлено
ВСЁ, Я ПОНЯЛА - ОШИБКИ ИЗ-ЗА ПРОБЕЛОВ)))
НО ПРОГРАММА ВСЕ-РАВНО МНЕ КАЖЕТСЯ НЕПРАВИЛЬНАЯ У МЕНЯ))
ТАК ЧТО ВОПРОС АКТУАЛЕН

Добавлено
И ЛИСТИНГ НИКАКОЙ НЕ ВЫВОДИТСЯ((

Автор: jekahm 27.06.10, 17:51
Уважаемые специалисты в области GPSS, необходима ваша помощь в решении вот такой задачи:
Построить иммитационную модель процесса обслуживания заказов, которые поступают в вычислительную систему, состоящей из n ЭВМ. Время поступления заказов распределенный по нормальному закону з мат ожиданием "альфа" и стандартным отклонением "сигма". Задания становятся в очередь, если очередь составляет менее, чем 3 заказа. В ином случае задания оставляют систему. Время выполнения заданий равномерно распределенный в интервале от 16 до 20 сек на всех ЭВМ.
Провести моделирование при таких значениях: "альфа"=10 и "сигма"=2, начальное значение n=2, конечное значение n=10 с шагом 2. Работа модели происходит напротяжении 6 часов модельного времени.
Заранее благодарен! :)

Автор: jekahm 30.06.10, 20:30
Как я понял, здесь помощи не дождёшься!

Автор: TEMENb 27.09.10, 11:37
дык ты вопрос неправильно поставил. тебе не помощь в решении, а решение нужно.
а это в "разовые заказы и подработка"

Автор: 2323 06.10.10, 05:02
ПОМОГИТЕ, ПОЖАЛУЙСТА!!!! сегодня сдавать, а ниче еще не сделали(((

всего несколько простеньких задач...

4. Увеличить на три единицы длину очереди с номером 5.
5. Увеличить длину очереди QP в 2 раза.
6. Приведите программу, которая иллюстрирует обработку детали на станке. Устройство MACHINE, время обработки – 15±4 ед. модельного времени. Как определить среднее время пребывания деталей в очереди на обслуживание станком?
7. Уменьшить длину очереди с номером 7 на две единицы.
8. Обнулить длину очереди QPP.
9. На некотором станке четыре работника по очереди обрабатывают детали. Время обработки детали – 10±2 минуты. Промоделируйте работу станка на протяжении 8 часов (транзакты – работники).
10. На станцию технического обслуживания, которая состоит из бокса для ремонта и бокса для техосмотра, каждые 20±10 минут поступают автомобили. Из них 73% требуют ремонта, который продолжается 45±15 минут, а 27% проходят техосмотр (18±8 минут). Промоделируйте 50 часов работы станции технического обслуживания.
11. В магазине работают 2 кассира, один из которых более проворный, поэтому покупатели и отдают ему предпочтение. Покупатели заходят в магазин каждые 7±2 минут. Первый кассир обслуживает покупателя за 2±1 мин, а второй за 3±2 мин. Промоделируйте работу магазина на протяжении 40 часов.

Автор: itz 20.10.10, 09:04
Здравствуйте!
В задаче моделируется цех, куда через 9±2 минуты прибывают детали двух типов(с вероятностью 0,75 1ого типа, и 0,25 - 2ого). Причем приоритет у деталей 2ого типа выше. Далее они обрабатываются на станках A и B соответственно. После обработки детали с вероятностью 0,05 не проходят контроль качества и отправляются на повторную обработку. Если контроль качества пройден, они переходят на обработку на станок С. Моделируется 32 часа работы цеха.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        PRIOR FUNCTION RN1,D2
        .25,1/1,2
     
        GENERATE 9,2,,,FN$PRIOR
    QQ  QUEUE Q1
        TEST E PR,2,B
     
    A   SEIZE ST_A
        DEPART Q1
        ADVANCE 26,8
        RELEASE ST_A
        TRANSFER .05,C,QQ
     
    B   SEIZE ST_B
        DEPART Q1
        ADVANCE 18,6
        RELEASE ST_B
        TRANSFER .05,C,QQ
     
    C   QUEUE Q2
        SEIZE ST_C
        DEPART Q2
        ADVANCE 11,5
        RELEASE ST_C
     
        TERMINATE
     
        GENERATE 1920
        TERMINATE 1
        START 1


Выдает следующую ошибку:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    10/20/10 13:00:41  Model Translation Begun.
    10/20/10 13:00:41  Ready.
    10/20/10 13:00:41  Simulation in Progress.
    10/20/10 13:00:41  Error Stop.
    10/20/10 13:00:41  Halt. XN: 1. Block 2 Next.
    10/20/10 13:00:41    Clock:10.369464. Next: QUEUE. Line 7.
    10/20/10 13:00:41  QQ   QUEUE Q1
    10/20/10 13:00:41    Use of a nonpositive entity number.

Подскажите, в чем проблема?

UPD: Решение обнаружено:) Оказалось, Q1 - недопустимое имя для очереди

Автор: Korzhik_89 20.10.10, 13:04
Здравствуйте!!!!
Помогите пожалуйста с программой!!!
Завтра сдавать!!!
Задание:
Система автоматизации проектирования (САПР) создана на базе ЭВМ, функционирующей в режиме множественного доступа. Четверо инженеров-проектировщиков с помощью своих дисплеев одновременно и независимо проводят диалог с ЭВМ, определяя очередной вариант расчета. Каждый диалог состоит из 11 циклов ввода–вывода данных. Во время одного цикла происходит следующее: за 11 ± 6 с инженер обдумывает и вводит текст строки, в течение 3 с работает процессор ЭВМ, подготавливая текст ответа, в течение 6 с текст ответа выводится на дисплей. После ввода 12-й строки начинается работа процессора по расчету конструкции и продолжается
35 ± 12 с. За 6 с результат расчета выводится на экран, после чего инженер в течение 14 ± 4 с анализирует его и начинает новый диалог. Операции по подготовке текста ответа имеют абсолютный приоритет над расчетными, т. е. прерывают выполнение последних. Смоделировать процесс работы САПР при условии, что расчет вариантов конструкции повторяется 120 раз. Определить среднее время выполнения диалога и расчетных операций, а также коэффициент загрузки процессора.
Очень очень нужна помощь!
Заранее спасибо.

Автор: vovik13 26.10.10, 18:04
Доброе время суток!!!! Не могли бы вы мне помочь с решением задачи, а то я вообще не вдупляю в gpss

Магистраль передачи данных состоит из двух каналов (основного и резервного) и общего накопителя. При нормальной работе сообщения передаются по основному каналу за 7 ± 3 с. В основном канале происходят сбои через интервалы времени 200 ± 35 с. Если сбой происходит во время передачи, то за 2 с запускается запасной канал, который передает прерванное сообщение с самого начала. Восстановление основного канала занимает 23 ± 7 с. После восстановления резервный канал выключается и основной канал продолжает работу с очередного сообщения. Сообщения поступают через 9 ± 4 с и остаются в накопителе до окончания передачи. В случае сбоя передаваемое сообщение передается повторно по запасному каналу.
Смоделировать работу магистрали передачи данных в течение 1 ч. Определить загрузку запасного канала, частоту отказов канала и число прерванных сообщений. Определить функцию распределения времени передачи сообщений по магистрали.

Автор: CB9TOIIIA 30.10.10, 18:48
Просьба помочь в решение задачи ссылка :-?

Автор: vert 02.11.10, 17:36
Помогите пожалуйста составить маленькую программку. Есть генератор, бесконечный накопитель и какое-то обрабатывающее устройство. Входной закон и закон обслуживания - экспоненциальный. Какой з-н выходного потока? Создать частотную таблицу времени нахождения в системе, времени ожидания, обслуживания и генерации(описать с function и без). :wall:

Автор: ALEX123123 05.11.10, 19:12
Помогите решить курсовик Плиз!!!!!!!!!

Смоделировать обслуживание 5000 заявок к операторам информационной системы. Подсчитать количество включений резрвного аппарата, среднее время выполнение задачи и коэффициенты загрузки операторов.
Пять операторов работают в информационной системе, обрабатывая запросы аюонентов. Автоматический коммутатор переключает абонента на того оператора, в очереди которого ожидает наименьшее количество абонентов, причем наибольшая допустимая длина очереди перед оператором 3 абонента. Если все очереди имеют максимальную длину, вновь поступивший вызов поступает на резервный аппарат, очереди к которому нет, а при его занятости получает отказ. Обслуживание абонентов операторами длится 15 +/- 5 с. вызовы поступают в справочную в среднем через каждые 10 с.

Автор: Myreg 03.12.10, 12:13
Добрый день!)

Подскажите, возможно ли обращение к конкретному каналу(устройству) внутри МКУ? Т.е. как то узнать индекс, чтобы, например, использовать для выборки первого свободного. Пытался так получить:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ...
    stor1   EQU 1
    stor1   STORAGE 20
    ...
     
    SELECT SE   icount,1,1
     
    ...

Но так получается, что селектом тут ищется не внутри МКУ, а среди всех МКУ, если я правильно понимаю.

Автор: rock squirrel 05.12.10, 12:30
Помогите пожалуйста с кодом GPSS (синтаксис), логика вроде соблюдена, а вот работать прога не хочет...

[ code ]*********** Приема в больнице на медкомиссии имеется 4 врача которых должен пройти транзакт-посетитель
D1 storage 1 ; не более 1 посетителя в кабинете
D2 storage 1 ; не более 1 посетителя в кабинете
D3 storage 1 ; не более 1 посетителя в кабинете
D4 storage 1 ; не более 1 посетителя в кабинете


var1 VARIABLE P1+QD1; посетитель за счет использования блока select заходит в первый кабинет с меньшей очередью
var2 VARIABLE P2+QD2; а т.к. кабинетов=докторов всего 4, и дважды заходить в кабинет не надо то select выбирает
var3 VARIABLE P3+QD3; не меньшую очередь, а меньшее значение функции, где P2 - параметр, который до прохода, в данном случае 2 кабинета,
var4 VARIABLE P4+QD4; (P2 - второй параметр транзакта)=0, а после P2=1000, чтоб значение функции оказалось заведомо большим


time2 table MP3,0,3,5; таблица, куда должны заноситься данные о времени прохождения медкомиссии

;Специально взял конструкцию Enter-Leave, а не SEIZE-RELEASE т.к. по модели может быть будет увеличить число докторов того или иного профиля


PH1 Matrix ,4,2; матрица с данными о времени прохождения того или иного врача
initial MX$PH1(1,1),5; заполнение матрицы данными
initial MX$PH1(1,2),2
initial MX$PH1(2,1),8
initial MX$PH1(2,2),5
initial MX$PH1(3,1),10
initial MX$PH1(3,2),3
initial MX$PH1(4,1),4
initial MX$PH1(4,2),2

Generate 7,5; генерация транзактов
mark M11; отметка времени входа


select MIN P5,V$var1,V$var4; выбор кабинета
QUEUE DP5; Вход в очередь к кабинету
enter DP5; вход на прием
DEPART DP5; выход из очереди
advance MX$PH1(P5,1),MX$PH1(P5,2); длительность приема
leave DP5 ; прием окончен
ASSIGN PP5,1000;
TEST NE V10,4,vyhod
advance 1 ; задержка по времени
transfer , STK1; переход к следующему врачу
tabulate time2
vyhod TERMINATE


*********** сегмент таймера
Generate 480 ; 8 часов (1 день) работы
terminate 1
start 1
[ /code ]

и при запуске ошибка

12/05/10 06:32:24 Model Translation Begun.
12/05/10 06:32:24 Ready.
12/05/10 06:32:24 Simulation in Progress.
12/05/10 06:32:24 Error Stop.
12/05/10 06:32:24 Halt. XN: 1. Block 3 Next.
12/05/10 06:32:24 Clock:10.423660. Next: SELECT. Line 34.
12/05/10 06:32:24 select MIN P5,V$var1,V$var4; выбор кабинета
12/05/10 06:32:24 Reference to a non-existent Parameter.

Подскажите пожалуйста где ошибка?

Автор: Marya4ka 05.12.10, 16:29
Привет,помогите ,пожалуста.Не могу понять как сделать вторую половину задачи:...(1часть)....После обработки на первом станке деталь поступает на второй конвейер и в течение 5 минут движется ко второму станку. На втором станке выполняется сборка изделий из двух деталей, занимающая от 5 до 9 минут (сборка начинается после того, как на станке окажется две детали). Если на станке уже имеются две детали (т.е. произво¬дится сборка изделия), то деталь продолжает двигаться по конвейеру и возвращается к станку ровно через 12 минут.
Проблема с Assemble и split!
GENERATE ,,,1
PPE5 ADVANCE 10
SPLIT 1,PPE5
QUEUE OCH
ADVANCE 3
TEST E F$STANOK,1,PPE
PPE1 ADVANCE 9
TEST E F$STANOK,0,PPE1

PPE SEIZE STANOK
DEPART OCH
ADVANCE (EXPONENTIAL(1,0,2.5))
RELEASE STANOK



QUEUE OCH1
ADVANCE 5
TEST G Q$OCH1,1,PPE2
PPE3 ADVANCE 12
TEST E Q$OCH1,1,PPE3

PPE2 SEIZE STANOK1
DEPART OCH1
ASSEMBLE 2
ADVANCE 7,2
RELEASE STANOK1

TERMINATE
GENERATE 2880
TERMINATE 1

Автор: Lady_Lol 05.12.10, 17:10
Помогите пожалуйста, колдую на курсовым, голову уже сломала.
На вычислительный центр через 300100 секунд поступают задания длинной 500200 байт. Скорость ввода, вывода и обработки заданий 100 б\мин. Задания проходят последовательно ввод, обработку и вывод буферизуясь перед каждой операцией. После вывода 5% заданий оказываются выполненными неправильно вследствие сбоев и возвращаются на ввод. Для ускорения обработки задания в очередях располагаются по возрастанию их длинны, то есть короткие сообщения обслуживаются в первую очередь. Задания выполненные неверно возвращаются на ввод и во всех очередях обслуживаются первыми Задание смоделировать работу вычислительного центра в течении 30 часов. Определить необходимую емкость буферов и функцию распределения времени обслуживания заданий.
3 VIVOD EQU 3
4 RAZ EQU 4
5 TRI EQU 5
6 DVA EQU 9
7 OCH1 EQU 6
8 OCH2 EQU 7
9 OCH3 EQU 8
10 RAZ FVARIABLE (RN1/999)#400+300
11 DVA FVARIABLE P1#30/100
12 TRI FVARIABLE (700-P1)/400#127
13 SIMULATE
14 GENERATE 300,100
15 ASSIGN 1,V$RAZ
16 ASSIGN 2,V$DVA
17 PRIORITY V$TRI
18 M1 QUEUE OCH1
19 SEIZE VVOD
20 ADVANCE P2
21 RELEASE VVOD
22 DEPART OCH1
23 M2 QUEUE OCH2
24 SEIZE OBR
25 ADVANCE P2
26 RELEASE OBR
27 DEPART OCH2
28 M3 QUEUE OCH3
29 SEIZE VIVOD
30 ADVANCE P2
31 RELEASE VIVOD
32 DEPART OCH3
33 PRIORITY 127
34 TRANSFER .95,M1,OUT
35 OUT TERMINATE
36 GENERATE 108000
37 TERMINATE 1
38 START 1
Выдает следующую ошибку:

12/05/10 19:10:15 Model Translation Begun.
12/05/10 19:10:15 Ready.
12/05/10 19:10:15 Simulation in Progress.
12/05/10 19:10:15 Error Stop.
12/05/10 19:10:15 Halt.
12/05/10 19:10:15 Clock:0.000000.
12/05/10 19:10:15 There are no Transactions. Check Transaction limits and blocking.

Автор: enotik303 05.12.10, 17:15
Доброе время суток.
помогите пожалуста выйти из ступора студентке-неудачнице.

В специализированной вычислительной системе периодически выполняется три вида заданий, которые характеризуются уровнями приоритета: нулевым, первым и вторым. Каждый новый запуск задания оператор производит при помощи дисплея, работая на нем 50 30 с. После запуска задания оно требует для своего выполнения 100 50 с времени работы процессора, причем задания более высокого приоритета прерывают выполнение задач более низкого приоритета. Результаты обработки задания выводятся на печать без прерываний в течение 30 10 секунд, после чего производится их анализ в течение 60 20 секунд, и задание запускается снова. Можно считать, что при работе дисплея и при выводе результатов на печать процессор не используется.
Смоделировать процесс работы системы при условии, что задание второго уровня приоритета выполняется 100 раз. Подсчитать число циклов выполнения остальных заданий и определить коэффициенты загрузки технических средств системы.

GENERATE 30,20
SEIZE DISPLAY
ADVANCE 50,30
RELEASE DISPLAY
QUEUE OCH1,1
SEIZE PROC
DEPART OCH1,1
ADVANCE 100,50
RELEASE PROC
SAVEVALUE L1+,1
TRANSFER, MET1

GENERATE 30,10,,,1
SEIZE DISPLAY
ADVANCE 50,30
RELEASE DISPLAY
QUEUE OCH1,1
PREEMPT PROC,PR
DEPART OCH1,1
ADVANCE 100,50
RETURN PROC
SAVEVALUE L2+,1
TRANSFER, MET1

GENERATE 30,5,,100,2
SEIZE DISPLAY
ADVANCE 50,30
RELEASE DISPLAY
QUEUE OCH1,1
PREEMPT PROC,PR
DEPART OCH1,1
ADVANCE 100,50
RETURN PROC
SAVEVALUE L3+,1
TEST L L3,100,MET1
TRANSFER, MET2

MET1 QUEUE OCH2,1
SEIZE PRINT
DEPART OCH2,1
ADVANCE 30,10
RELEASE PRINT
PRIORITY 3
QUEUE OCH1,1
SEIZE PROC
DEPART OCH1,1
ADVANCE 60,20
RELEASE PROC

MET2 TERMINATE 1
START 100

Короче 100 заявок высшего приоритета проходят до конца. а остальные генерируются и только одна из каждого потока доходит до обработки в процесоре но обработаной не выходит. Думаю проблема в генерэйтах.
Раздуплите пожаааалуста!

Автор: lgk 06.12.10, 20:56
Помогите пожайлуста с задачей, может кто исходник видел, хотябы примерно как делать. Пожалуйста!

Из системы сканирования графической информации на узел обработки и визуализации поступают задачи через 15-25 с. Треть из них обрабатывается в течение 60 с и поступает на финишную обработку. Две трети обрабатывается за 30 с перед финишной обработкой, которая требует наличия одной задачи первого типа и двух задач второго. После этого все 3 задачи подаются на визуализацию, которая занимает 58-62 с для первой задачи и 52-68 с для двух других, причем они участвуют в визуализации одновременно. При наличии на выходе одновременно всех трех за-
дач они покидают участок.
Смоделировать работу узла в течение 100 мин. Определить места образования и характеристики возможных очередей.

Автор: TEMENb 08.12.10, 12:20
Myreg, совершенно верно. селект ищет среди всех ПРОНУМЕРОВАННЫХ мку. т.е. мку, которые имеют числовое имя.
могу предположить с высокой степерью вероятности, что в вашей модели таких нет..... т.е. теоритически они есть, но находятся в состоянии покоя ;)
если хотите определить ТТХ каждого канала - используйте одноканальные устройств внутри многоканального
например

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    yst storage 3
        generate    1
        queue   och
        enter   yst
        depart  och
        select min 1,1,3,,f
        seize   p1
        advance 3
        release p1
        leave   yst
        terminate
     
        generate    1000
        terminate   1
     
        start   1


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

Добавлено
rock squirrel, вы обращаетес к несуществующему параметру. Кроме того, в select не указана сча, по которой вы хотите осуществить выбор
select MIN P5,V$var1,V$var4 - попытка записать результат в параметр, номер которого записан в пятом параметре

и тогда, возможно, весь этот кусок предпологает не DP5, а просто P5.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    select MIN P5,V$var1,V$var4; выбор кабинета
    QUEUE DP5; Вход в очередь к кабинету
    enter DP5; вход на прием
    DEPART DP5; выход из очереди
    advance MX$PH1(P5,1),MX$PH1(P5,2); длительность приема
    leave DP5 ; прием окончен
    ASSIGN PP5,1000;

Единтвенное что, необходимо будет определить числовые имена многоканальным устройствам

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MKY EQU 1
    MKY STORAGE 5
    ...


Добавлено
Marya4ka, лучше было бы если бы вы дали полный текст задания. читал-читал, соответствия между задачей и кодом не уловил.
А какая именно проблема с асемблом? может не с асемблом а с одноканальным устройством? ;)
в устройство сборки должно поступить две детали. а значит необходимо использовать МКУ.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    queue www
    match 2
    enter sborka
    depart www
    assemble 2 ; обязательно перед адвансом, иначе результаты могут вас удивить
    advanke 1234
    leave sborka,2 ; пришло две детали и уйти тоже должно две


Добавлено
Lady_Lol,
1. нельзя делать метку M1. это системная сча. зарезервированное слово.
2. тоже касается слова out

в остальном - что то моделирует )

Добавлено
приложу на всяк случай
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    3 VIVOD EQU 3
    4 RAZ EQU 4
    5 TRI EQU 5
    6 DVA EQU 9
    7 OCH1 EQU 6
    8 OCH2 EQU 7
    9 OCH3 EQU 8
    10 RAZ FVARIABLE (RN1/999)#400+300
    11 DVA FVARIABLE P1#30/100
    12 TRI FVARIABLE (700-P1)/400#127
    13 SIMULATE
    14 GENERATE 300,100
    15 ASSIGN 1,V$RAZ
    16 ASSIGN 2,V$DVA
    17 PRIORITY V$TRI
    18 Met1 QUEUE OCH1
    19 SEIZE VVOD
    20 ADVANCE P2
    21 RELEASE VVOD
    22 DEPART OCH1
    23 M2 QUEUE OCH2
    24 SEIZE OBR
    25 ADVANCE P2
    26 RELEASE OBR
    27 DEPART OCH2
    28 M3 QUEUE OCH3
    29 SEIZE VIVOD
    30 ADVANCE P2
    31 RELEASE VIVOD
    32 DEPART OCH3
    33 PRIORITY 127
    34 TRANSFER .95,Met1,OUT1
    35 OUT1 TERMINATE
    36 GENERATE 108000
    37 TERMINATE 1
    38 START 1


Добавлено
enotik303, на том этапе, транзакты не проходят потому, что они очень быстро негерируются. у вас несколько генераторов, которые генерируют транзакты каждые 20 ЕМВ, и отправляют в устройсво, обработка в котором длится в среднем 50 ЕМВ. естественно обрабатываться успевает только малая толика транзактов.. и естественно с высшим приоритетом.
но это не все ваши проблемы не заканчиваются.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TRANSFER ,met
должны выглядеть так и именно так
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TRANSFER, met
такой вид вызовет ошибку.

Добавлено
lgk, могу написать программу и коменты к каждой строке за 10$

Автор: aidarkin 11.12.10, 13:38
Помоги решить пожалуйста!
Система управления качеством производственного процесса включает две операции обработки изделия с соответствующим контролем. Параметры производственного процесса таковы:
– поток изделий, поступающих на обработку, подчиняется экспоненциальному распределению с параметрами λ=0 мин. и β=24 мин.
– время выполнения первой операции подчиняется равномерному закону и равно 23±5 мин.; время на контроль этой операции составляет 3 мин.;
– время выполнения второй операции подчиняется нормальному закону с математическим ожиданием 21 мин. и среднеквадратическим отклонением 3 мин.; время на контроль этой операции составляет 1 мин.
Требуется определить следующие параметры производственного процесса (время работы 8 час.):
– коэффициент загрузки каждого контролера (на каждой операции свой контролер);
– среднее время обслуживание каждым контролером;
– максимальное и среднее число изделий у каждого контролера.

поток изделий подчиняется экспоненциальному распределению с параметрами λ=0 мин. и β=24 мин- GENERATE (Exponential(1,12,12)) так?
ремя выполнения первой операции подчиняется равномерному закону и равно 23±5 мин- GENERATE 23,5

Автор: Arni 12.12.10, 18:59
Есть загвоздка в решении задачи. Если кто-нибудь поможет разобраться, будет замечательно.
Задача:

В аэропорт доставляются грузы для их отправки транспортными самолетами. Самолеты совершают рейсы по мере загрузки. С 8.00 до 20.00 автомобили с грузами прибывают в аэропорт через каждый час ± 10 минут; в остальное время автомобили прибывают через каждые 2 часа ± 30 минут. Каждый автомобиль доставляет в аэропорт 60 контейнеров груза.
В аэропорту имеется 4 самолета: по два самолета грузоподъем¬ностью 80 и 120 контейнеров. В первую очередь используются самоле¬ты меньшей грузоподъемности. Затраты времени при погрузке состав¬ляют 1 минуту на каждый загружаемый контейнер (эту величину можно считать постоянной). Затраты на один рейс самолета грузоподъем¬ностью 80 и 120 контейнеров составляют соответственно 4000 и 9000 долларов. За каждый перевезенный контейнер заказчик платит предп¬риятию – владельцу самолетов 100 долларов.
По окончании каждого рейса самолет проходит проверку, занима¬ющую 1 час. После пяти рейсов самолет проходит полную проверку, занимающую 6 часов. Во время проверок загрузка самолета не произ¬водится.
Время полета каждого самолета (от вылета с грузом до возвра¬щения в аэропорт) распределено по гауссовскому закону. В среднем полет занимает 3 часа, среднеквадра¬тическое отклонение – 20 минут.
Разработать имитационную программу для анализа процесса рабо¬ты аэропорта в течение 30 дней
Вопрос : транзакты стопоряться на Assemble 80 (дальше вообще ни одна не проходит), но для Assemble 60 все работает нормально.
В чем беда?

Мое еще неполное решение:

S80_1 STORAGE 2
S120_1 STORAGE 2
DEN BVARIABLE (C1>=480)'AND'(C1<=1200)
TEST E BV$DEN,0,NET
GENERATE 60,10
TRANSFER ,ZAGRUZ
NET GENERATE 120,30
ZAGRUZ SPLIT 59
ASSEMBLE 80
GATE SNF S80_1,V_S120
QUEUE OCH_S80
ENTER S80_1
DEPART OCH_S80
ADVANCE 80
ADVANCE (NORMAL(1,180,20))
ADVANCE 60
LEAVE S80_1
SAVEVALUE S80_reis+,1
SAVEVALUE S80_pribil+,4000
TRANSFER ,KON
V_S120 ASSEMBLE 2
QUEUE OCH_S120
ENTER S120_1
DEPART OCH_S120
ADVANCE 80
ADVANCE (NORMAL(1,180,20))
ADVANCE 60
LEAVE S120_1
SAVEVALUE S120_reis+,1
SAVEVALUE S120_pribil+,4000
KON TERMINATE
GENERATE 1440
TERMINATE 1

Автор: AnriDuBushazh 13.12.10, 11:29
Здравствуйте

Не поможете ли с курсовой задачей ? ( Кроме неё еще 3 курсовые. одну написал, вторую пишу, а с этой по GPSS что-то плохо, и сдавать надо через неделю макс 2)

На ремонтный участок МТС, который состоит из 2ух боксов(для ремонта и техосмотра) через каждые 20+-3 мин поступают тракторы. Из них 60% требуют ремонта, который продолжается 40+-15 мин, 40% тракторов проходят технический осмотр продолжительностью 20+-5.
Смоделировать наботу участка в течении 100 ч. Определить вероятность системы отказа в обслуживании. Рассмотреть основные характеристики работы системы. Предложить меры по оптимизации обслуживания техники, используя инструмент АNOVA.
Какова общая стоимость выполненной работы, если стоимость ремонта состовляет 200р., а техосмотра 50 р.


Если можно, хотя бы образец подобной задачи.
или методички .

Заранее спасибо.

Автор: quared 16.12.10, 14:31
Доброго времени суток.
Помогите решить задачу, пожалуйста:

Поток желающих оформить вызов врача на дом – простейший. В среднем абоненты в период эпидемии гриппа звонят через каждые 10 с. Время приёма вызова распределено по показательному закону со средним значением 12 с. Считается, что в случае неудачи дозвониться, абонент не предпринимает больше попыток дозвониться.

2)Определить наименьшее число телефонов в регистратуре, при котором вызов принимается не менее чем от 90 % абонентов.
3)Определить вероятность отказа в обслуживании.
4)Определить вероятность того, что абонент не получит отказа в заявке.

Сдача послезавтра... Изначально смоделировал работу на Java, а оказалось, что принимают только на GPSS %) Этой среды до сегодняшнего дня в глаза не видел, к сожалению.

Автор: tarot3107 17.12.10, 18:22
Товарищи помогите написать программку:

"В телевизионное ателье поступают заявки на ремонт телевизоров двух типов: на мелкий ремонт, производимый на дому, и на крупный ремонт, производимый в ателье. Время поступления заявок составляет, соответственно, (2+0.5) часа и (5+1.5) часа. Мастер затрачивает на ремонт телевизора в среднем, соответственно, (1+0.5) часа и (5+3) часа. Кроме того, для ремонта на дому мастер затрачивает время на дорогу в среднем (1+0.4) часа. Определить оптимальное количество мастеров, если заявка ставится в очередь, только, если очередь составляет не более десяти заказов, остальные заявки теряются; убытки при потери заявок составляют в среднем 100 рублей; потери от простоя мастера составляют 10 рублей в час. Рассмотреть возможность приоритетного обслуживания в мастерской и на дому."

Задачка то вроде простая. Я почти написал, вот только не знаю как описать вот это
Цитата
потери от простоя мастера составляют 10 рублей в час.


Очень буду признателен за помощь!

Автор: kuzzzko 20.12.10, 08:27
Доброго времени суток! помогите смоделировать задачу:
Буду признателен за помощь

На обработку ЭВМ принимают три класса заданий: А, В и С. Исходя из наличия оперативной памяти ЭВМ, задания классов А и В могут выполняться одновременно. То есть задание класса А (В) может выполняться параллельно с заданием своего класса или с заданием класса В (А).
Задания класса С монополизируют ЭВМ. Задания класса А поступают в среднем через Т1 минут, класса В - через Т2 минут, класса С - через Т2, минут и требуют для выполнения: класс А – Т4 минут, класс В - Т5 минут и класс С - Т6 минут.
Все величины Ti (i = 1,..,6) - экспоненциально распределенные случайные величины, параметры λi (i = 1,..,6) входящих потоков заданий и времен обслуживания приведены в табл. 14.1.
Дисциплина обслуживания определяется комбинацией приоритетов заданий.
Возможны следующие комбинации:
А (В) - высший, В (А) - средний, С - низкий;
А и В - высокий, С - низкий;
С - высший, В (А) - средний, А (В) - низкий;
С - высокий, А и В - низкий.
Оценить влияние разных дисциплин обслуживания при разных значениях интенсивностей поступления (в таблице 14.1 дополнительная интенсивность приведена в скобках) на такие параметры вычислительной системы:
• средняя длительность прохождения заданий через систему;
• средняя длина очереди;
• среднее время ожидания в очереди;
• средневзвешенное время ожидания в очереди (весовые коэффициенты заданий класса А, В, С - 1, 2, 3, соответственно);
Анализ системы необходимо проводить для переходного режима работы.
Выполнить оценку основных показателей эффективности – затраты, доход и прибыль в заданных режимах.

Таблица 14.1
Параметры
λ1 λ2 λ3 λ4 λ5 λ6
0,200 0,125 0,066 0,25 0,16 0,08


Буду признателен за помощь. Мое мыло: kuzzzko@gmail.com

Автор: Nikola 24.12.10, 20:38
помогите доработать
На комплектовочный конвейер сборочного цеха каждые Т1 минут поступают N1 деталей первого типа и каждые Т2 минут – N2 деталей второго типа. Изделие комплектуется из N3 деталей каждого типа. Комплектация начинается только при наличии деталей обоих типов в необходимом количестве

Конвейер движется ритмично с шагом Т3 минут. При отсутствии необходимого количества деталей секция конвейера перемещается пустой («холостой ход»).
Определить целесообразность перехода на другие режимы работы конвейера, оперируя такими параметрами:
1)размерами секции – количеством деталей каждого типа, из которых комплектуется изделие (возможны дополнительные варианты – по N4 и N5 изделий);
2) шагом конвейера (возможны дополнительные варианты – Т4 и Т5 минут).
Оценить вероятность «холостого хода», средних и максимальных длин очередей каждого типа изделий.

Варианты заданий

Вариант Параметры
Т1 N1 Т2 N2 N3 Т3 N4 N5 Т4 Т5
1 5±1 5 20±5 20 10 10 20 5 20 5

zd1 storage 10; объявление накопителя для изделий 1
izd2 storage 10; объявление накопителя для изделий 2
pust variable 0;
poln variable 0;
generate 480; задание общего времени моделирования
terminate 1;
generate 5,1; генерация деталей 1 первого типа
queue o1;
enter izd1; вход деталей в накопитель 1
terminate;
generate 20,5; генерация деталей 1 первого типа
queue o2;
split 1; создание 1 копии выходящего в блок транзакта
enter izd2,2; вход деталей 2 в накопитель
terminate;
generate 10; задание числа секций
test GE s$izd2,1,pst; проверка наличия деталей в накопителе 1
test GE s$izd1,2,pst; проверка наличия деталей в накопителе 2
leave izd1,2; освобождение накопителя 1
leave izd2,1; освобождение накопителя 2
advance 10; обработка
savevalue poln+,1; подсечет кол-ва полных секций
terminate;
pst savevalue pust+,1; кол-во пустых секций
terminate;
start 1;

Автор: xorg 24.12.10, 22:31
Приветствую. Есть задание на курсовой, которое здесь уже упоминалось:
ЭВМ обслуживает три терминала по круговому циклическому алгоритму, предоставляя каждому терминалу 30 с. Если в течение этого времени задание обработалось, то обслуживание завершается, если нет, то остаток задачи становится в специальную очередь, которая использует свободные циклы терминалов, т.е. задача обслуживается, если на каком либо терминале нет заявок. Заявки на терминал поступают через 30+-5 секунд и имеют длину 300+-50 символов. Скорость обработки задании ЭВМ 10символов / секунда.
Смоделировать 5 часов работы ЭВМ. Определить загрузку ЭВМ, параметры очереди неоконченных заданий. Определить величину цикла терминалов, при которой все заявки обработаются без специальной очереди.

Вот что удалось написать:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 30,5 ;terminal 1
    link 1,fifo
    generate 30,5 ;terminal 2
    link 2,fifo
    generate 30,5 ;terminal 3
    link 3,fifo
          
    met1 queue och1 ;ставим заявку в очередь
    seize EOM ;занимаем устройство ЕОМ
    depart och1 ;выводи заявку из очереди
    assign 1,(25+10#rn1/1000) ;задаем время обработки как первый параметр
    test le p1,30,met2 ;проверяем время обработки, если >30 идем в met2, если <=30 входим в блок test
    advance p1 ;задержка транзакта на время р1
    release EOM ;освобождение устройства ЕОМ
    terminate 1 ;удаление транзакта
    met2 advance 30 ;задержка транзакта на 30с
    assign 1-,30 ;вычитание из р1 30с
    release EOM ;освобождение устройства ЕОМ
    link och,fifo ;помещаем транзакт в список пользователя och
      
    generate ,,,1
    assign 1,0
    met assign 1,((p1@3)+1)
    test g ch*1,0,met4 ;проверка длины списка пользователя, если >0 входим в блок test, если <=0 переходим на met4
    unlink p1,met1,1 ;вывод транзакта из списка пользователя
    transfer ,met5
    met4 test g CH$och,0,met5 ;проверка длины списка och, если >0 входим в блок test, если <=0 переходим на met5
    unlink och,met1,1
    met5 advance 1
    transfer ,met
     
    GENERATE 18000 ;время моделирования 5 часов
    TERMINATE 1
    START 1


В данном варианте не задается время моделирования, приходится указывать START больше 1, куда-то пропадают транзакты при обработке.
Помогите пожалуйста исправить ошибки.

Автор: Роман Стадник 87 28.12.10, 23:10
Помогите
У меня задача
На комплектовочный конвейер сборочного цеха каждые 4-6 мин поступают 5 изделий первого типа и каждые 13-27 мин поступают 20 изделий второго типа. Конвейер состоит из секций, имеющих по 10 изделий каждого типа. Комплектация начинается только при наличии деталей обоих типов в требуемом количестве и длится 10 мин. При нехватке деталей секция конвейера остается пустой.

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

Я сделал вот так

NN1 STORAGE 10
NN2 STORAGE 10
MET1 GENERATE 5,1
SPLIT 4
QUEUE QUE1
ENTER NN1
DEPART QUE1
TRANSFER ,MET3
LEAVE NN1,10
TERMINATE 9
MET2 GENERATE 20.7
SPLIT 19
QUEUE QUE2
ENTER NN2
DEPART QUE2
TRANSFER ,MET3
LEAVE NN2,10
TERMINATE 9
MET3 SEIZE KAN
ADVANCE 10
RELEASE KAN
TERMINATE
GENERATE 480
TERMINATE 1
START 1

правильный ли текст.
У меня в результате выдает LEAVE 0 0 0 0

Автор: LilyM 10.01.11, 12:57
Привет всем! При написании курсовой по GPSS столкнулась с проблемой, не могу написать корректно работающую программу.
Задача:
На обрабатывающий участок цеха поступают детали в среднем через 50 мин. Первичная обработка деталей производится на одном из двух станков. Первый станок обрабатывает деталь в среднем 40 мин. и имеет до 4% брака, второй соответственно 60 мин. и 8% брака. Все бракованные детали возвращаются на повторную обработку на второй станок. Детали, попавшие в разряд бракованных дважды, считаются отходами.
Вторичную обработку проводят также два станка в среднем 100 мин. каждый. Причем первый станок обрабатывает имеющиеся в накопителе после первичной обработки детали, а второй станок подключается при образовании в накопителе задела больше трех деталей. Все интервалы времени распределены по экспоненциальному закону.
Смоделировать обработку на участке 500 деталей. Определить загрузку второго станка на вторичной обработке и вероятность появления отходов. Определить возможность снижения задела в накопителе и повышения загрузки второго станка на вторичной обработке.

Вот что у меня получилось написать:
EXP FUNCTION RN1,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.85/.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/.9998,8
NAK3 STORAGE 1000
GENERATE 50,FN$EXP
ASSIGN 1,0
TRANSFER .5,MET11,MET12
MET11 QUEUE NAK1
SEIZE KAN1
DEPART NAK1
ADVANCE 40,FN$EXP
RELEASE KAN1
TRANSFER .04,MET2,MET3
MET12 QUEUE NAK2
SEIZE KAN2
DEPART NAK2
ADVANCE 60,FN$EXP
RELEASE KAN2
TRANSFER .08,MET2,MET3
MET2 ASSIGN 1,0
PRIORITY 0
ENTER NAK3
TEST LE Q$NAK3,3,MET5
TRANSFER ,MET4
MET5 TRANSFER BOTH MET4,MET6
MET3 TEST NE P$1,2,OTXOD
ASSIGN 1+,1
PRIORITY 2
TRANSFER ,MET12
OTXOD TERMINATE
MET4 SEIZE KAN3
LEAVE NAK3
ADVANCE 100,FN$EXP
RELEASE KAN3
TRANSFER ,OUT
MET6 SEIZE KAN4
LEAVE NAK3
ADVANCE 100,FN$EXP
RELEASE KAN4
TRANSFER ,OUT
OUT TERMINATE 1
START 500

Пожалуйста помогите доработать программу.

Автор: kandrey58reg 12.01.11, 18:38
Здравствуйте..
Задали курсовой проект по GPSS..
"В системе передачи данных осуществляется обмен пакетами данных между пунктами A и B по дуплексному каналу связи. Пакеты поступают в пункты системы от абонентов с интервалами времени между ними 10 ± 3 мс. Передача пакета занимает 10 мс. В пунктах имеются буферные регистры, которые могут хранить два пакета (включая передаваемый). В случае прихода пакета в момент занятости регистров пунктами системы предоставляется выход на спутниковую полудуплексную линию связи, которая осуществляет передачу пакетов данных за 10 ± 5 мс. При занятости спутниковой линии пакет получает отказ.
Смоделировать обмен информацией в системе передачи данных в течение 1 минуты. Определить частоту вызовов спутниковой линии и ее загрузку. В случае возможности отказов определить необходимый для безотказной работы системы объем буферных регистров."

Полазив по интернету, нашел два варианта исполнения:
1)
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    INITIAL X$LOST,0
    SAT_FREQ    TABLE   C1,10000,10000,6
    BUF_A   STORAGE 2
    BUF_B   STORAGE 2
        GENERATE    10,3
        GATE    SNF BUF_A,SAT
        ENTER   BUF_A
        ADVANCE 10
        LEAVE   BUF_A
        TRANSFER    ,KILL
     
        GENERATE    10,3
        GATE    SNF BUF_B,SAT
        ENTER   BUF_B
        ADVANCE 10
        LEAVE   BUF_B
        TRANSFER    ,KILL
     
    SAT TABULATE    SAT_FREQ,1
        GATE    NU SAT_LINE,OUT
        SEIZE   SAT_LINE
        ADVANCE 10,5
        RELEASE SAT_LINE
        TRANSFER    ,KILL
    OUT SAVEVALUE   LOST+,1
    KILL    TERMINATE
     
        GENERATE    1,,60000
        TERMINATE   1


2)
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    BUFA    STORAGE      2
    BUFB    STORAGE      2
        SAVEVALUE    PAKAB,0
        SAVEVALUE    PAKBA,0
        SAVEVALUE    CALLSAT,0
        SAVEVALUE    PAKSAT,0
        SAVEVALUE    OTAKZSAT,0
     
        GENERATE     10,3
        GATE SNF     BUFA,SAT    
        ENTER        BUFA
        SEIZE        AB
        LEAVE        BUFA
        ADVANCE      10
        SAVEVALUE    PAKAB+,1
        RELEASE      AB
    OUT TERMINATE    
    OTKAZ   SAVEVALUE    OTKAZSAT+,1
        TRANSFER     ,OUT
     
        GENERATE     10,3
        GATE SNF     BUFB,SAT
        ENTER        BUFB
        SEIZE        BA
        LEAVE        BUFB
        ADVANCE      10
        SAVEVALUE    PAKBA+,1
        RELEASE      BA
        TRANSFER     ,OUT
     
     
    SAT SAVEVALUE    CALLSAT+,1
        GATE NU      LINES,OTKAZ
        SEIZE        LINES
        ADVANCE      10,5
        SAVEVALUE    PAKSAT+,1
        RELEASE      LINES
        TRANSFER     ,OUT
     
        GENERATE     60000
        TERMINATE    1
        START 1


Первый как я считаю, какойто странный и работает некорректно..
Второй уже получше.. и вроде корректен..

Может быть кому-нибудь попадался такой вариант задания..??
Если у кого есть какие наброски поделитель пожалуйста..
или может у кого-нибудь имеется q-схема с более корректным вариантом, чем эти..??

Автор: Andriy99 24.02.11, 20:38
Здравствуйте!! Очень нужно мнение специалиста. Я смоделировал задачу но не совсем уверен что правильно. Помогите пожалуйста!!!!
Вот постановка задачи:
На маршруте работают два микроавтобуса (А и Б), каждый из которых имеет 12 мест. Микроавтобус А пользуется большей популярностью, нежели микроавтобус Б, поскольку водитель микроавтобуса А ездит аккуратнее и быстрее. Потому пассажир, подойдя к остановке, садится в микроавтобус Б только в том случае, если микроавтобуса А нет. Микроавтобус отправляется на маршрут только в том случае, если все места в нём заняты. Пассажиры приходят к остановке через 1 ± 0,2 минут и, если нет микроавтобусов, становятся в очередь. Если очередь больше 35 человек, потенциальный пассажир уходит из очереди. Предполагается, что все пассажиры едут до конца маршрута. На прохождение маршрута микроавтобус А тратит 25 ± 6 минут, микроавтобус Б – 30 ± 10 минут. После того, как пассажиры освободят микроавтобус (время освобождения – 4 ± 1 минут), он едет в обратном направлении. Плата за проезд составляет 1 единиц стоимости. Автопредприятие столько же теряет (недополучает), если пассажир, придя на остановку, не ждёт, а уходит (учесть это при определении затрат). Определить выручку автопредприятия за день, если микроавтобусы работают 10 часов в сутки.
А от и модель:
Please EQU 12

initial X$Pass,0
initial X$Cherga,0
initial X$Vtratu,0
initial X$CASH,0
initial X$Kilk_A,0
initial X$Kilk_B,0

Bus_A STORAGE 25
Bus_B STORAGE 25

;VAR FVARIABLE (X$Pass#2)-(X$Vtratu#2)
VAR FVARIABLE ((N$mit_10 + N$mit_11)) - (N$mit_12)
GENERATE 1,0.2
GATE SF Bus_A,mit_1
GATE SF Bus_B,mit_2
savevalue Cherga+,1
TEST G X$Cherga,30,mit_9
savevalue Cherga-,1
transfer ,mit_12
mit_12 advance 0
savevalue Vtratu+,1
TERMINATE

mit_9 assign s4et4ik,2000
mit_3 GATE SF Bus_A,mit_1
GATE SF Bus_B,mit_2
ADVANCE 0.1
LOOP s4et4ik,mit_3


mit_1 TEST G X$Cherga,0,mit_4
savevalue Cherga-,1

mit_4 ENTER Bus_A
savevalue Kilk_A,0
GATE SF Bus_A
ADVANCE 25,6
ADVANCE 4,1
transfer ,mit_10
mit_10 advance 0
savevalue Pass+,1
ADVANCE 25,6
LEAVE Bus_A
TERMINATE


mit_2 TEST G X$Cherga,0,mit_5
savevalue Cherga-,1

mit_5 ENTER Bus_B
savevalue Kilk_B,0
GATE SF Bus_B
ADVANCE 30,10
ADVANCE 4,1
transfer ,mit_11
mit_11 advance 0
savevalue Pass+,1
ADVANCE 30,10
LEAVE Bus_B
TERMINATE

GENERATE 600
;SAVEVALUE CASH,(X$Pass#2-X$Vtratu#2)
savevalue CASH,V$VAR
TERMINATE 1
;start 1

Автор: zhenya 20.03.11, 15:14
Здравствуйте!!!помогите пожалуйста не могу понять где ошибка.Сама задача:Вычислительная система содержит три ЭВМ, работа которых организована по следующему алгоритму: с интервалом 30±2 с задания поступают в очередь на обработку первой ЭВМ, время обработки составляет 30 с. После задание поступает одновременно во вторую и третью ЭВМ, время обработки которых соответственно 14±5 с. и 16±1с. Окончание обработки задания на любой ЭВМ означает снятие ее с решения с той и другой машины. Смоделировать 7 ч. работы системы. Определить необходимую емкость накопителей перед всеми ЭВМ, коэффициенты загрузки ЭВМ и функцию распределения времени обслуживания заданий.
Текст программы:savevalue KOL,0 инициализация переменной KOL
savevalue K1,0 инициализация переменной K1
savevalue K2,0 инициализация переменной K2
savevalue K3,0 инициализация переменной K3
savevalue ENTER_NAK1,0 инициализация переменной ENTER_NAK1
savevalue ENTER_NAK2,0 инициализация переменной ENTER_NAK2
savevalue ENTER_NAK3,0 инициализация переменной ENTER_NAK3
nac1 storage 1 объявление емкости накопителя 1
nac2 storage 1 объявление емкости накопителя 2
nac3 storage 1 объявление емкости накопителя 3
time1 table ft$1,25,1,6 инициализация таблицы time1
time2 table ft$2 ,10,1,6 инициализация таблицы time2
time3 table ft$3 ,13,1,5 инициализация таблицы time3
generate 30 генерирование заявок
savevalue KOL+,1 сохранение количества сгенерированных заявок
enter nac1,1 занятие накопителя 1
savevalue ENTER_NAK1+,1 сохранение количества заявок вошедших в
накопитель 1
seize 1 занятие устройства 1(ЭВМ1)
leave nac1,1 освобождение накопителя 1
advance 30 задержка заявки в устройстве на обработку
savevalue K1+,1 сохранение количества заявок обработанных в ЭВМ1
tabulate time1 вывод функции распределения времени обработки
заявок в ЭВМ1
release 1 освобождение ЭВМ1
split 1,pcc3 переход от ЭВМ1 к ЭВМ2 и ЭВМ3
pcc2 enter nac2,1 занятие накопителя у ЭВМ2
savevalue ENTER_NAK2+,1 сохранение количества заявок вошедших в
накопитель 2
seize 2 занятие ЭВМ2
leave nac2,1 освобождение накопителя 2
advance 14,5 обработка заявки в ЭВМ2
tabulate time2 вывод функции распределения времени обработки
заявок в ЭВМ2
out1 release 2 освобождение ЭВМ2
gate U nac3,ONac3 проверка занятости накопителя 3
leave nac3 освобождение накопителя 3
ONac3 gate SF 3,O3 проверка занятости устройства 3, если оно еще
занято, то
release 3 освободить
O3 savevalue K2+,1 сохранение количества заявок вышедших с устройства 3
transfer ,out удаление транзакта, т.е. снятие задания
pcc3 enter nac3,1 занятие накопителя у ЭВМ3
savevalue ENTER_NAK3+,1 сохранение количества заявок вошедших в
накопитель 3
seize 3 занятие ЭВМ3
leave nac3,1 освобождение накопителя 3
advance 16,1 задержка заявки на обработку
tabulate time3 вывод функции распределения времени обработки
заявок в ЭВМ3
out2 release 3 освобождение ЭВМ3
gate U nac2,ONac2 проверка занятости накопителя 2
leave nac2 освобождение накопителя 2
ONac2 gate SF 2,O2 проверка занятости устройства 2, если оно еще
занято, то
release 2 освободить
O2 savevalue K3+,1 сохранение количества заявок вышедших с
устройства 3
out terminate 2 удаление транзактов, т.е. снятие задания с ЭВМ2 и
ЭВМ3
generate 1
terminate 1
start 25200 начальное значение счетчика завершений

Автор: Nastyaorkina 23.03.11, 04:03
Здравствуйте!!Помогите ,пожалуйста)есть прога в GPSS ,но она не запускается ,выдает ошибку,не могу понять в чем проблема.Если можете ПОДСКАЖИТЕ плиз!!!
Вот задание

Самолёты прибывают для посадки в район крупного аэропорта каждые 105 мин. Если взлётно-посадочная полоса свободна, прибывший самолет получает разрешение на посадку. Если полоса занята, самолет выполняет полет по кругу и возвращается к аэропорту через каждые 4 минуты. Если после пятого круга самолет не получает разрешения на посадку, он отправляется на запасной аэродром. В аэропорту через каждые 102 мин. К взлетно-посадочной полосе выруливают готовые к взлету машины и получают разрешение на взлет, если полоса свободна. Для взлета и посадки самолеты занимают полосу равно на 2 мин. Если при свободной полосе одновременно один самолет прибывает для посадки, а другой для взлета, полоса предоставляется взлетающей машине.
Смоделировать работу аэропорта в течение суток. Подсчитать количество самолетов, которые взлетели, сели и были направлены на запасной аэродром. Определить коэффициент загрузки взлетно-посадочной полосы.
А вот код проги

line equ 1; основной аэродром
line2 equ 2; запасной аэродром
ready equ 3; очередь готовых на взлёт самолётов
;-------< самолёты, идущие на посадку >-----------
generate 10,5 ; <- с приоритетом 0
assign 2,0 ; инициализация второго параметра
;----------< попытка занять полосу >--------------
LAND gate nu line,WAIT_LAND
seize line
advance 2
release line
transfer ,OUT
;--------< кольцо, где ждут 4 минуты >------------
WAIT_LAND test L PS2,5,LAND2
mark 1 ; транзакт запоминает время начала ожидания
assign 2+,1 ; количество кругов ожидания
test GE MPS1,4 ; время прошло - следующая попытка
transfer ,LAND
;--------------< запасной аэродром >--------------
LAND2 seize line2 ; для статистики
release line2
transfer ,OUT
;--------------< взлетающий самолёт >-------------
generate 10,2,,,1 ; <- с приоритетом 1
queue ready
seize line
depart ready
advance 2
release line
;--------------------< конец >--------------------
OUT terminate
;--------< время моделирования = 1 сутки >--------
generate 0,,1440
terminate 1
start 1

Автор: ВЕТА 06.04.11, 08:29
Здравствуйте! Помогите пожалуйста разобраться в тексте программы. Задание: ИМИТАЦИЯ РАБОТЫ БАНКА
Текст программы:

*Имитация работы банка*
GENERATE 300,100; Создание потока клиентов
QUEUE ZAPR; Вход в очередь
SEISE KASSA; Ожидание свободной кассы/окна
DEPART ZAPR; Выход из очереди
ADVANSE 400, 200; Обслуживание клиента
RELEASE KASSA; Освобождение кассы/окна
TERMINATE 1; Уход клиента
START 100; Имитация 100 клиентов

Вот что выдаёт:

04/06/11 12:19:35 Model Translation Begun.
04/06/11 12:19:35 Line 4, Col 6. Invalid identifier. Expecting a GPSS Verb.
04/06/11 12:19:35 SEISE KASSA; Ожидание свободной кассы/окна
04/06/11 12:19:35 Line 6, Col 8. Invalid number. Expecting a GPSS Verb.
04/06/11 12:19:35 ADVANSE 400, 200; Обслуживание клиента
04/06/11 12:19:35 **** Model Translation Aborted ****

Делала по примеру... Что здесь не правильно? :(

Автор: aeronx 17.04.11, 11:30
Добрый день! Помогите пожалуйста решить задачу по GPSS. В Принципе она легкая, но вот с количеством мест выходит загвоздка =(

Моделирование процесса функционирования автомойки
Исходные данные.
1. Автомойка имеет N мест на стоянке для автомоби¬лей. Если клиенты подъезжают и не застают свободного места для ожидания, они уезжают.
2. Поток автомобилей является пуассоновским с интенсив¬ностью λ. Время мойки автомобиля распределено экспоненциаль¬но с интенсивностью μ.
Цель. Разработать GPSS-модель и использовать ее для выбо¬ра оптимального числа мест N на стоянке так, чтобы число уе¬хавших машин было минимальным.
Перечень данных: λ = 5 авт/мин, μ = 4 авт/мин, 3 < N < 7.


В долгу не останусь =)

Автор: unlike777 29.04.11, 13:03
Помогите разобраться, даже препод не может понять в чем фигня, писал прогу сам препод =)

Условие задачи

Условие задачи
Рассмотрим пример работы компьютера, задействованного в управлении технологическим оборудованием. Для контроля состояния оборудования каждые 20 мин запускается одна из трех типов задач. Через каждые 5 мин работы процессора каждая задача выводит результаты работы в базу данных. При обращении двух и более задач к базе данных (БД) образуется очередь, которая обслуживается по правилу FIFO.
Общий объем памяти компьютера 1024Кбайт. В первоначальный момент запуска компьютера загружается ОС, ядро которой постоянно находится в памяти и занимает 200 Кбайт. Компьютер работает в мультипрограммном режиме и во время выполнения операций вывода в БД процессор может выполнять другую задачу, если она загружена в память. После последнего вывода в БД задача выгружается из памяти и завершает свою работу.
Периодически c интенсивностью λ=0,005 мин-1 и экспоненциальным распределением возникает аварийный режим оборудования, при котором немедленно запускается на выполнение задача четвертого типа, выводящая оборудование из аварийного режима. Она прерывает работу задачи, занимающей процессор, и позволяет закончить вывод в БД, если такой имеется, когда запущена задача 4-го типа. Прерванная задача выгружается из памяти. По окончании выполнения задачи четвертого типа, она выводит в БД результаты своей работы. Вытесненная задача c магнитного диска загружается в память и продолжает работу: загружает процессор, осуществляет вывод в базу данных. Необходимые данные для моделирования приведены в табл. 4.38.
Таблица 4.38
Тип задачи 1 2 3 4
Вероятность возникновения 0,5 0,35 0,15 –
Объем памяти, Кбайт 200 300 400 200
Время обработки ЦП, мин 15 20 25 5
Время вывода в БД, мин 3 5 7 2
Необходимо промоделировать работу компьютера в течение пяти суток и оценить размер очереди к памяти, ее загрузку и загрузку процессора.
Учитывая, что программа полностью прокомментирована, дадим только некоторые пояснения к ней. Задачи 1-го, 2-гo, 3-го типов имеют приоритет равный 0. Задача четвертого типа, обрабатывающая аварийную ситуацию, имеет приоритет 3. При ее появлении немедленно занимается процессор и, если в это время выполняется задача другого типа, то она прерывается и выгружается из памяти (операнд C блока PREEMPT направляет прерванный транзакт в блок c меткой SWAP).
Для запуска работы компьютера используется один транзакт c приоритетом 5, который занимает 2 единицы памяти (200 Кбайт) и имитирует загрузку ядра ОС в память.



Программа полностью работает, вот текст
Текст проги

TYPE FUNCTION RN1,D3 ; Тип задачи
.5,1/.85,2/1,3

VRAM FUNCTION P1,D3 ; Объем ОЗУ для задач 1, 2, 3 типов. Кратен ;100Кбайт
1,2/2,3/3,4

TIME_CP FUNCTION P1,D3 ; Время работы процессора для задач 1, 2, 3 типов
1,15/2,20/3,25

TIME_BD FUNCTION P1,D3 ; Время вывода в БД для задач 1, 2, 3 типов
1,3/2,5/3,7

RAM STORAGE 9 ; Объем ОЗУ 100*10 Кбайт

TOB FVARIABLE EXPONENTIAL(5,0,100) ; Показательное ;распределение со средним 200 минут
************************************************************************
;Появление задач
T_OST1 TABLE P3,0,1,30
T_OST TABLE P5,0,1,10
T_PRER TABLE M1,0,50,10
T_TYPE TABLE P1,1,1,3
TQ_RAM QTABLE Q_RAM,0,20,10
TQ_RAM1 QTABLE Q_RAM1,0,20,10
TQ_RAM3 QTABLE Q_RAM3,0,20,10
GENERATE 20 ;Время появления задач 1, 2, 3 типов
;
;Создание параметров транзактов и назначение параметрам значений
ASSIGN 1,FN$TYPE ;Определение типа задачи
TABULATE T_TYPE
ASSIGN 2,FN$VRAM ;Определение нужного объема ОЗУ для задачи данного ;типа
ASSIGN 3,FN$TIME_CP ; Определение требуемого времени процессора для ;задачи ;данного типа
ASSIGN 4,FN$TIME_BD ; Определение требуемого времени вывода в БД для ;задачи ;данного типа
ASSIGN 5,0 ; В этом параметре(№ 5) будет записан остаток времени работы с ;процессором прерванной задачи
****************************************************************************
QUEUE Q_RAM ;Ждать освобождения памяти
ENTER RAM,P2 ; Занять память для задачи данного типа
DEPART Q_RAM ; Освободить очередь к памяти
CALC SEIZE CP ; Занять процессор
ADVANCE 5 ; Работать 5 минут
RELEASE CP ; Освободить процессор
SEIZE BD ; Начать вывод в БД
ADVANCE P4 ; Время вывода в БД
RELEASE BD ; Закончить вывод в БД
ASSIGN 3-,5 ; Сколько времени процессора еще требуется задаче ;данного типа?
TEST LE P3,0,CALC ; Задача закончилась?
LEAVE RAM,P2 ; Да, освободить ОЗУ
TERMINATE ; Завершить задачу (по умолчанию параметр А ;равен 0)
***************************************************************************
; Аварийная ситуация, появление задачи 4
;T4 QTABLE Q_RAM3,0,5,25
;INITIAL X$TIM,0
T4 TABLE V$TOB,0,100,10
;ASSIGN 6,0
;Perem VARIABLE 0
;T4 TABLE (AC1-M1-X$Perem),0,100,20
GENERATE V$TOB,,,,3

TABULATE T4
;SAVEVALUE 6,AC1

QUEUE Q_RAM3
ENTER RAM,2 ; Задача 4 занимает память
DEPART Q_RAM3
PREEMPT CP,PR,SWAP,5,RE ;Занять немедленно процессор, выгрузить ;прерванную задачу из памяти
;PREEMPT CP,PR ;в параметр 5 заносится остаток времени занятия ;процессора прерванной задачей

ADVANCE 5 ; Работать 5 минут
;RELEASE CP
RETURN CP ; Освободить процессор
SEIZE BD ;Занять БД
ADVANCE 2 ; Время вывода в БД - 2 мин
RELEASE BD ; Закончить вывод в БД
LEAVE RAM,2 ; Освободить память
;TABULATE T4
;SAVEVALUE Perem,AC1PREEMPT

TERMINATE ; Завершить задачу 4
***************************************************************************
; Удаленная из процессора задача завершает работу
SWAP TABULATE T_OST
TABULATE T_PRER
LEAVE RAM,P2 ; «Запись» на жесткий диск
PRIORITY 2 ; Более высокий приоритет дает прерванной задаче ;преимущество в занятии ресурсов


QUEUE Q_RAM1 ;Ждать освобождения памяти
ENTER RAM,P2 ; Занять память для задачи данного типа
DEPART Q_RAM1 ; Освободить очередь к памяти

CALC1 SEIZE CP ; Занять процессор

ADVANCE P5 ; Работать оставшееся время
RELEASE CP ; Освободить процессор
SEIZE BD ; Начать вывод в БД
ADVANCE P4 ; Время вывода в БД
RELEASE BD ; Закончить вывод в БД
TABULATE T_OST1
ASSIGN 3-,5 ; Сколько времени процессора еще требуется задаче ;данного типа?
ASSIGN 5,P3 ;Теперь время работы на процессоре считывается из ;параметра 5
TEST LE P3,0,CALC1 ; Задача закончилась?
LEAVE RAM,P2 ; Да, освободить ОЗУ


TERMINATE ; Завершить задачу
****************************************************************************
*************************************************************************
; Запуск компьютера в момент времени 0
GENERATE ,,,1,5
ENTER RAM,2 ; Загрузить в ОЗУ ядро ОС
ADVANCE 7200 ; Работать 5 суток (5*24*60 мин)
LEAVE RAM,2 ; Выгрузить ядро ОС из ОЗУ
TERMINATE 1 ; Завершить работу компьютера
***************************************************************************
START 1


Суть в чем...
Работает компьютер, поступают некоторые задачи 3х типов, они занимают процессор и некоторое количество оперативной памяти
Но иногда возникает аварийная ситуация, в это время запускается программа 4ого типа, он прерывает текущую программу
и перенаправляет его к метке SWAP, где он выгружается из памяти, а из процессора она прерывается предыдущим PREEMPT'ом
и снова становиться в очередь за памятью чтобы доработать оставшееся время
PREEMPT CP,PR,SWAP,5,RE
Но когда мы ставим обычный PREEMPT без перехода на метку SWAP, т.е. весь блок от SWAP и до конца пропадает и программа как бы продолжает занимать память и ждет пока пока освободиться процессор после прерывания чтобы доработать оставшееся время
PREEMPT CP,PR
В первом случае все очереди возрастают в 2 раза, то есть система в целом работать начинает в 2 раза хуже, хотя по логике должно быть все наоборот, ну или на крайняк также
Все перепроверили, логика программы правильная, но этот факт объяснить никто не может

Профи и гуру помогите плиз, надеюсь достаточно понятно все обьяснил!

Автор: olsheu 30.04.11, 11:47
Уважаемый aeronx. Я написал Вашу модель. Все получилось. Пишите на oes2@mail.ru

Автор: avchent 01.05.11, 12:51
Привет всем!

Вопрос такой:
в GPSS есть блоки SPLIT и ASSEMBLE которые позволяют соответственно разбивать транзакт на несколько и собирать из нескольких транзактов одного семейства один. Есть ли здесь кто-нибудь кто-знает аналогичные системы моделирования, в частности SimEvents из пакета MathLab. Каким образом там можно организовать то же самое (SPLIT - ASSEMBLE) ?

PS. Вообще, я удивлен тем, что в GPSS можно порождать сколько угодно транзактов из одного, причем указывать это можно в параметре транзакта. В SimEvents нужно целую подсистему нагородить, чтобы достичь того же, что в GPSS делается одной строкой.

Автор: mininaalena 02.05.11, 14:11
Привет. Ребята, помогите пожалуйста с задачей по gpss world, завтра уже сдавать надо, пожалуйста.
На станцию технического обслуживания (СТО) согласно закону Эрланга второго порядка со средним временем прибытия 14 мин прибывают автомобили для технического обслуживания (36% автомобилей) и ремонта (64% автомобилей). На СТО есть два бокса для технического обслуживания и три бокса для ремонта. Выполнение простого, средней сложности и сложного ремонтов – равновероятно.
Время и стоимость выполнения работ по техническому обслуживанию и ремонту зависит от категории выполняемых работ (табл. 7.17).
После технического обслуживания 12% автомобилей поступают для выполнения ремонта средней сложности.
Построить гистограмму времени обслуживания автомобилей.
Оценить выручку СТО за пять дней работы.

Таблица 7.17
Категория работВремя ремонта, минСтоимость ремонта, руб.
Техническое обслуживаниеРавномерно распределено в интервале 10-55Равномерно распреде¬лено в интервале 100-400
Простой ремонтРавномерно распределено в интервале 12-45Равномерно распределено в интервале 50-450
Ремонт средней сложностиНормально распределено со средним 45 и средне¬квадратичным отклонением 5Равномерно распреде¬лено в интервале 100-1400
Сложный ремонтРавномерно распределено в интервале 80-150Равномерно распреде¬лено в интервале 350-2550

Автор: Vlastilena 04.05.11, 12:52
Привет! Умные, хорошо знающие gpss люди не оставьте в беде! Помогите решить задачу, курсовой сдавать надо, а я gpss совсем не понимаю((

Фирма «Happy New Year», работающая по системе «сегодня на сегодня», имеет в своем штате N актеров, играющих роль Деда Мороза, и M актрис, играющих роль Снегурочки. Время прихода заказов распределено по закону Эрланга третьего порядка со средним временем Т1 минут. Характеристики заказов приведены в табл. 17.

Таблица 17 - Варианты к заданию 17

Вид поздравления Вероятность прихода заказа на поздравление Время выполнения заказа (поздравления),минут Стоимость поздравления

С Дедом Морозом p1 t1±t4 s1
Со Снегурочкой p2 t2±t5 s2
С Дедом Морозом и Снегурочкой p3 t3±t6 s3

При заказе поздравления клиент указывает желаемый срок выполнения T2 (минут). Если поздравление выполняется позже заявленного срока, то клиенту предоставляется 20% скидка от начальной стоимости поздравления.
Заработная плата актера составляет z рублей в месяц. В начале своей работы фирма делает одноразовые затраты (костюмы, реквизит, лицензия, литературные тексты и прочее) на сумму S единиц стоимости. Фирма работает только один месяц в году (считать, что в другое время она не несет никаких затрат).
Найти оценку периода окупаемости T (в годах) фирмы по формуле
T=S/P, где
Р - прибыль, полученная за один год работы.

Определить величины N и M, при которых время окупаемости фирмы и соответствующее среднее время ожидания клиентом выполнения заказа будет минимальным. Если возможно снижение цен на услуги, то до какого уровня?
Варианты заданий приведены в табл. 17.1.
Таблица 17.1 - Варианты к заданию 17
Параметры Варианты
4
N 5
M 4
p1 0,25
p2 0,25
p3 0,5
T1 35
T2 175±15
t1±t4 70±20
t2±t5 55±15
t3±t6 80±10
s1 50
s2 60
s3 100
S 13000
z 400


Заранее благодарю не оставшихся равнодушными!)))

Автор: sado 05.05.11, 13:56
Здравствует.

Помогите пожалуйста разобраться. Я смоделировала СМО. Он выдает результаты, но я не понимаю что к чему. Мне нужны результаты нагрузки СМО.
Подскажите что к чему относиться (где нагрузка и вообще где что).

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                  GPSS World Simulation Report - 2.8.1
     
     
                       Thursday, May 05, 2011 17:25:13  
     
               START TIME           END TIME  BLOCKS  FACILITIES  STORAGES
                    0.000            500.000    30        0          1
     
     
                  NAME                       VALUE  
              COUNT1                      10000.000
              NAK                         10001.000
              OUT                            27.000
              OUT1                           28.000
              QUE                         10002.000
              T1                             18.000
              T2                             22.000
              T3                             21.000
     
     
     LABEL              LOC  BLOCK TYPE     ENTRY COUNT CURRENT COUNT RETRY
                        1    GENERATE            40             0       0
                        2    TEST                40             0       0
                        3    ENTER               40             0       0
                        4    ADVANCE             40             0       0
                        5    LEAVE               40             0       0
                        6    TRANSFER            40             0       0
                        7    GENERATE            20             0       0
                        8    TEST                20             0       0
                        9    ENTER               20             0       0
                       10    ADVANCE             20             0       0
                       11    LEAVE               20             0       0
                       12    TRANSFER            20             0       0
                       13    GENERATE            10             0       0
                       14    TEST                10             0       0
                       15    ENTER               10             0       0
                       16    ADVANCE             10             0       0
                       17    LEAVE               10             0       0
    T1                 18    TEST                10             0       0
                       19    QUEUE               10             0       0
                       20    TRANSFER            10             0       0
    T3                 21    TRANSFER             2             0       0
    T2                 22    SEIZE                0             0       0
                       23    DEPART               0             0       0
                       24    ADVANCE              0             0       0
                       25    RELEASE              0             0       0
                       26    TERMINATE            0             0       0
    OUT                27    TERMINATE           60             0       0
    OUT1               28    TERMINATE           10             0       0
                       29    GENERATE             1             0       0
                       30    TERMINATE            1             0       0
     
     
    QUEUE              MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME   AVE.(-0) RETRY
     QUE                10   10     10      0     9.480    473.999    473.999   0
     
     
    STORAGE            CAP. REM. MIN. MAX.  ENTRIES AVL.  AVE.C. UTIL. RETRY DELAY
     COUNT1             50   50   0     5       70   1    0.252  0.005    0    0
     
     
    SAVEVALUE               RETRY       VALUE
     NAK                      0         10.000                            
     
     
    FEC XN   PRI         BDT      ASSEM  CURRENT  NEXT  PARAMETER    VALUE
        72    0        1000.000     72      0     29

Автор: Vlastilena 05.05.11, 15:59
Возвращаясь к задаче про фирму с дедами морозами и снегурочкой. Прога с горем пополам и с божьей помощью но написана.

ded STORAGE 5; Количество актеров, играющих роль Деда Мороза
sneg STORAGE 3; Количество актрис, играющих роль Снегурочки
INITIAL X$SUM,0;
INITIAL X$SUM1,0;
INITIAL X$SUM2,0;
INITIAL X$SUM3,0;
zp VARIABLE 8#300; Заработная плата
GF FUNCTION RN1,D3
.5,u_ded/.7,u_sneg/1,u_des; Функция задания распределения числа

GENERATE (Exponential(1,0,8.33) + Exponential(2,0,8.33) + Exponential(3,0,8.33)); генерация транзактов по закону эрланга 3го порядка

TRANSFER ,FN$GF Переход транзактов в блок функции

u_ded TEST GE ded,1,u_ded; Проверяем устройство, если свободно, то можно занять
QUEUE Qded; Занимаем очередь
MARK 1; Ставим метку 1
ENTER ded; Занимаем дедушку
DEPART Qded; Покидаем очередь
ADVANCE 60,15; Обслуживаем 45-75 минут
LEAVE ded; Освобождаем дедушку
TEST L MP1,160,minus1; Сравниваем время в метке 1 с желаемым сроком выполнения, если больше то переходим к minus1 чтобы посчитать скидку
savevalue sum1+,1; Увеличиваем сумму на единицу

TERMINATE 0


u_sneg TEST GE sneg,1,u_sneg; Проверяем устройство, если свободно, то можно занять
QUEUE Qsneg; Занимаем очередь
MARK 2; Ставим метку 2
ENTER sneg; Занимаем снегурочку
DEPART Qsneg; Покидаем очередь
ADVANCE 50,11; Обслуживание 39-61 минут
LEAVE sneg; Освобождение снегурочки
TEST L MP2,160,minus2; Сравниваем время в метке 2 с желаемым сроком выполнения, если больше то переходим к minus2 чтобы посчитать скидку
savevalue sum2+,1; Увеличиваем сумму на единицу

TERMINATE 0

u_des TEST GE ded,1,u_des; Проверяем устройство, если свободно, то можно занять
TEST GE sneg,1,u_des; Проверяем устройство, если свободно, то можно занять
QUEUE Qds; Постановка в очередь
MARK 3; Ставим метку 2
ENTER ded
ENTER sneg; Занимаем дедушку и снегурочку
DEPART Qds; Покидаем очередь
ADVANCE 90,12; Обслуживание 78-102 минуты
LEAVE ded; Освобождение актеров
LEAVE sneg;
TEST L MP3,160,minus3; Сравниваем время в метке 3 с желаемым сроком выполнения, если больше то переходим к minus3 чтобы посчитать скидку
savevalue sum3+,1; Увеличиваем сумму на единицу

TERMINATE 0

minus1 savevalue sum1+,0.8; учитываем скидку 20%
TERMINATE 0
minus2 savevalue sum2+,0.8
TERMINATE 0
minus3 savevalue sum3+,0.8
TERMINATE 0

GENERATE 18000; Модельное время 1 минута. 30 рабочих дней по 10 часов.

nss VARIABLE (X$sum1#50) + (X$sum2#33) + (X$sum3#90)

SAVEVALUE SUM,V$nss; Вычет зарплаты из общей суммы
SAVEVALUE SUM-,V$zp; Вычет зарплаты из общей суммы
TERMINATE 1
START 1


Понятно практически все, за исключением пары моментов. Если кто может помочь, объясните пожалуйста как работают эти моменты. По какому принципу работает распределение чисел в функции и как работает последний кусок проги со слова "nss".

Автор: gpss 10.05.11, 23:41
программа
generate 21000,5

transfer 2,,Kassao
Kassa queue kas
seize kass
depart kas
advance 50
release kass

terminate

generate 35,5


queue kass
seize kas
depart kass
advance 5
release kas

queue ocher
seize prod
depart ocher
advance 40
release prod

terminate

generate 480
terminate 1
start 365


помогите пожалуйста!
Есть программа, но она работает неправильно, помогите доработать.
Идея такая: Касса за год ломается 8 раз, из-за этого необслужено н-покупателей. Потом по просьбе преподавателя нужно сделать так, чтобы касса ломалась допустим 4 раза и необслуженных клиентов было в 2 раза меньше. как это реализовать?

Автор: yuriy67 17.05.11, 18:24
kant1288
Привет. ТЫ как-то писал на этом форуме по поводу задачи по gpss.
Цитата
Здравствуйте! Моё задание:В специализированной вычислительной системе периодически выполняется три вида заданий, которые характеризуются уровнями приоритета: нулевым, первым и вторым. Каждый новый запуск задания оператор производит при помощи дисплея, работая на нем 20-80 секунд. После запуска задания оно требует для своего выполнения 50-150 секунд времени работы процессора, причем задания более высокого приоритета прерывают выполнение задач более низкого приоритета. Результаты обработки задания выводятся на печать без прерываний в течение 20-40 секунд, после чего производится их анализ в течение 40-80 секунд, и задание запускается снова. Можно считать, что при работе дисплея и при выводе результатов на печать процессор не используется.
Смоделировать процесс работы системы при условии, что задание второго уровня приоритета выполняется 100 раз. Подсчитать число циклов выполнения остальных заданий и определить коэффициенты загрузки технических средств системы.


У тебя не осталось чего-нибудь по ней? у меня курсач по этой задаче.

Автор: benderchatko 30.05.11, 20:26
Здравствуйте, помогите пожалуйста с программой. не знаю как сделать следующий кусочек:
в систему на обработку поступает заявка, которая разбивается на случайное количество заявок, из которых 10% обрабатываются первым устройством, 40% - вторым и 50% - третьим. после обслуживания тремя устройствами, все части этой заявки собираются воедино.
как это реализовать? посоветуйте пожалуйста, если кто-то знает

Автор: Аэлита 12.06.11, 10:12
Помогите пожалуйста!!!Как задать модель регулируемого перекрестка? Их надо по отодельности задавать или компоновать? У меня не хочет работать одновременно 2 дороги одного направления.

Автор: no_nick891 12.06.11, 11:29
Доброго времени суток, ув. форумчане. Если написал не в ту тему, просьба тапками не швырять. Появилась небольшая загвоздка со сбором статистики. Необходимо в ниже приведённой программе собрать статистику входа транзактов, времени пребывания, и т.п. Проблема состоит в том, что блок, с которого необходимо собрать статистику - Transfer. Как понимаете, простым объектом QUEUE не обойтись, ибо будет регистрироваться вход, а выход транзакты "пролетают". Пробовал сразу же перенаправлять на DEPART, но статистика в итоге какая-то непонятная получается. Блок TABULATE по моему, мне необходимой информации не соберёт, или я ошибаюсь? В общем, буду рад даже если меня просто пнут в нужном направлении.
Цитата

1 SIMULATE
10 OLD STORAGE 2
15 NEW STORAGE 5
20 GENERATE 5,3
30 TRANSFER BOTH,OLDPR,NEWPR
40 OLDPR ENTER OLD
50 ADVANCE 40,10
60 LEAVE OLD
70 TRANSFER ,BYE
80 NEWPR ENTER NEW
90 ADVANCE 20,5
100 LEAVE NEW
110 TRANSFER ,BYE
120 BYE TERMINATE 1
130 START 300

Автор: Apocalyptica 19.06.11, 11:45
Здравствуйте, нужна Ваша помощь и опыт в решении задачи.
К миниЭВМ подключено четыре терминала, с ко¬торых осуществляется решение задач. По команде с терминала выполняют операции редактирования, трансляции, планирова¬ния и решения. Причем, если хоть один терминал выполняет планирование, остальные вынуждены простаивать из-за нехват¬ки оперативной памяти. Если два терминала выдают требование на решение, то оставшиеся два простаивают, и если работают три терминала, выдающих задания на трансляцию, то оставший¬ся терминал блокируется. Интенсивности поступления задач раз¬личных типов равны. Задачи одного типа от одного терминала поступают через экспоненциально распределенные интервалы времени со средним значением 160 с. Выполнение любой опера¬ции длится 10 с.
Смоделировать работу миниЭВМ в течение 4 ч. Определить загрузку процессора, вероятности простоя терминалов и частоту одновременного выполнения трансляции с трех терминалов.

GENERATE ,,,4
REDAKT ADVANCE 160
QUEUE OBRABOTKA
SEIZE TERMINAL
DEPART OBRABOTKA
ADVANCE 10
RELEASE TERMINAL
TERMINATE
********************************************
GENERATE ,,,1
PLAN FUNAVAIL TERMINAL,RE,TRANS,,RE,REDAKT,RE,RESHENIE
ADVANCE 160
FAVAIL TERMINAL
TERMINATE
********************************************
GENERATE ,,,3
TRANS FUNAVAIL TERMINAL,RE,PLAN,,RE,REDAKT,RE,RESHENIE
ADVANCE 160
FAVAIL TERMINAL
TERMINATE
********************************************
GENERATE ,,,2
RESHENIE FUNAVAIL TERMINAL,RE,PLAN,,RE,TRANS,RE,REDAKT
ADVANCE 160
FAVAIL TERMINAL
TERMINATE

GENERATE 14400
TERMINATE 1
START 1



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

Автор: Dukalys 06.09.11, 09:25
День добрый знатоки!

Вот кто мне поможет с таким вопросиком. Есть параллельно работающие ПРИБОРЫ, у каждого СВОЯ СОБСТВЕННАЯ очередь. в модели выглядит так -
    QUEUE P5
    SEIZE P5
    DEPART P5
    ADVANCE XXXXXXXX
    RELEASE P5
Дак в этом ХХХХХХ, мне нужна знать размер текущей очереди т.е. поидее это Q$P5 - но так записать нельзя, т.к. требуется жёсткое определение типа Q$10.
С EQU тут тоже непрокатит, я же незнаю название того прибора в котором крутится заяка, темболее приборов может быть много.

Подскажите как выкрутиться из этой ситуации.

Автор: olsheu 06.09.11, 09:37
Вообще-то в ADVANCE задается время работы прибора. Зачем задавать размер текущей очереди в этом операторе?
Т.е, Вы хотите сказать что время работы прибора = длине очереди? Мне кажется это не корректно.

Автор: Dukalys 06.09.11, 09:48
Время обслуживания зависит от длины очереди ( классика) . Чем длиннее очередь, тем прибор работает быстрее. Мне нужна длина очереди для формирования сложной зависимости. - Как вариант ставить ещё одну БОЛЬШУЮ ОБЩУЮ очередь для всех этих приборов, а потом её значение /(делить) на кол-во приборов - получим среднее значение на прибор - но это не красиво в моей модели, и может нарушить логику функционирования.

Автор: olsheu 06.09.11, 10:20
Если задать перед advance оператор savevalue 1,q$P5 а потом advance x1
Попробуйте.

Автор: Dukalys 06.09.11, 10:28
Говорю же, не хочет он структуру Q$P5 кушать (P5 он вычислять не хотит!!!), ему подавай прямое только - например Q$1, Q$WAIT i t.d.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    09/06/11 16:26:13  Line 29, Col 14. Invalid SNA Entity Specifier.
    09/06/11 16:26:13   SAVEVALUE 1,Q$P1
    09/06/11 16:26:13  **** Model Translation Aborted ****


GPSS 5.1.1

Автор: olsheu 06.09.11, 12:11
Тогда задайте savevalue 1,q$5 потом advance x1
Я так понимаю, что в параметре P5 хранится номер прибора.

Автор: Dukalys 06.09.11, 12:17
Да в параметре ТРАНЗАКТА (P5) хранится номер прибора, очереди который он займёт. Если указать Q$5 - это будет 5ый прибор, мне он не нужен. У меня есть 10 обслуживающих приборов(с очередями) - P5, мне чётко нужно знать транзакт такойто - длинна очереди онлайн такаято. ещё раз повторяю как перезаписать структуру Q$P5!!!

Автор: olsheu 06.09.11, 13:49
А Вы можете дать полное условие Вашей задачи?

Автор: Dukalys 06.09.11, 14:12
Полное условие вам ни к чему, моделируется работа локальной подсистемы хранения информации, элемент который я очень кратко вынес - элемент работы определённой "ветки(куска)" технологии.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    СЕЛЕКТ 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 идея конечно превращается в муд))

Автор: olsheu 06.09.11, 15:05
Попробуйте так
generate 1
assign 5,10
QUEUE P5
SEIZE P5
DEPART P5
savevalue 1,q*5
ADVANCE x1 ;Для простоты допустим так
RELEASE P5
terminate
generate 10
terminate 1

Автор: Dukalys 06.09.11, 15:20
:scratch: , Интересная интерпритация, главное компилятор не ругацца и значение через SHOW правду показывает. Одно осталось понять, извините за мою компетентность 8-) , Могли бы вы объяснить запись Q*5? Вот чес слово в GPSS недавно, когда используется знак *, и что он вообще символизирует? Спс.

Автор: olsheu 06.09.11, 15:30
Теперь у Вас все должно работать как надо!
q*5 означает текущее значение длины очереди, номер которой является значением параметра 5 активного транзакта. * означает косвенную адресацию. Извините, что сразу не понял, что Вам надо.

Автор: Dukalys 06.09.11, 15:34
Большое вам спасибо за своевременную и квалифицированную помощь!

P.S. Да прибудет с нами Шрайбер))

Автор: olsheu 06.09.11, 15:36
Рад был помочь.

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

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


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

Автор: Vlad_Sh 06.09.11, 16:00
Привет всем!
Прошу посоветовать по следующему вопросу:

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

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;

Вопрос: не могу никак понять как их соединить в одном окне модели и вызвать процедуру после истечения периода моделирования. Подскажите пожайлуста. :)

Автор: Snezok 18.10.11, 06:31
Уважаемые форумчане!Подскажите начинающему ответ на вот такой вопрос(изучаю GPSS World самостоятельно, литература есть,но терзают смутные сомнения):что задается в START?Количество проходов программы?Или время работы программы?Поясню свой вопрос на примере:допустим нужно смоделировать работу какой либо системы за полный рабочий день-8часов,т.е.при старте я задам 8 часов(в минутах допустим)?Так?
А если нужно по заданию узнать время обработки 300 заявок например,то в старте 300 будем писать?Так?
Или я не так все понимаю :blush:
Сразу извиняюсь за такой школьный вопрос :blush: :blush: :blush:

Автор: olsheu 18.10.11, 09:20
Чтобы обработать 300 заявок необходимо указывать start 300, но в тексте модели надо при удалении заявки из системы указывать terminate 1

Автор: Snezok 18.10.11, 22:39
Цитата olsheu @
Чтобы обработать 300 заявок необходимо указывать start 300, но в тексте модели надо при удалении заявки из системы указывать terminate 1

Спасибо за ответ :D
А тогда чем будет отличаться код,программа для 8часового рабочего дня например?

Автор: olsheu 19.10.11, 07:15
Надо сделать дополнительный сегмент модели и если единица модельного времени = 1 мин, то надо написать
generate 480
terminate 1
start 1

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

Автор: Snezok 20.10.11, 00:52
Цитата olsheu @
Надо сделать дополнительный сегмент модели и если единица модельного времени = 1 мин, то надо написать
generate 480
terminate 1
start 1

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

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

Добавлено
У меня еще один вопрос:если start прописать в тексте программы-обязательно\не обязательно выполнять команду start, после симуляции?

Автор: olsheu 20.10.11, 05:41
Если start в тексте программы, то после команды create simulation, модель будет выполнена автоматически и появится отчет.

Автор: Snezok 21.10.11, 00:45
Цитата olsheu @
Если start в тексте программы, то после команды create simulation, модель будет выполнена автоматически и появится отчет.

Т.е. ничего "страшного" не будет если я не в тексте,а командой задам Start?
Спасибо за ответ Вам :blush:

Автор: olsheu 21.10.11, 12:49
Да. Можно или так, или так.

Автор: Snezok 23.10.11, 01:37
Цитата olsheu @
Да. Можно или так, или так.

:D спасибки!

Автор: olsheu 23.10.11, 07:00
Пожалуйста

Автор: Юляшечка24 21.11.11, 08:30
Здравствуйте ребят, нужна ваша помощь очень, очень сильно помогите с задачкой.
К миниЭВМ подключено четыре терминала, с ко¬торых осуществляется решение задач. По команде с терминала выполняют операции редактирования, трансляции, планирова¬ния и решения. Причем, если хоть один терминал выполняет планирование, остальные вынуждены простаивать из-за нехват¬ки оперативной памяти. Если два терминала выдают требование на решение, то оставшиеся два простаивают, и если работают три терминала, выдающих задания на трансляцию, то оставший¬ся терминал блокируется. Интенсивности поступления задач раз¬личных типов равны. Задачи одного типа от одного терминала поступают через экспоненциально распределенные интервалы времени со средним значением 160 с. Выполнение любой опера¬ции длится 10 с.
Смоделировать работу миниЭВМ в течение 4 ч. Определить загрузку процессора, вероятности простоя терминалов и частоту одновременного выполнения трансляции с трех терминалов.

GENERATE ,,,4
REDAKT ADVANCE 160
QUEUE OBRABOTKA
SEIZE TERMINAL
DEPART OBRABOTKA
ADVANCE 10
RELEASE TERMINAL
TERMINATE
********************************************
GENERATE ,,,1
PLAN FUNAVAIL TERMINAL,RE,TRANS,,RE,REDAKT,RE,RESHENIE
ADVANCE 160
FAVAIL TERMINAL
TERMINATE
********************************************
GENERATE ,,,3
TRANS FUNAVAIL TERMINAL,RE,PLAN,,RE,REDAKT,RE,RESHENIE
ADVANCE 160
FAVAIL TERMINAL
TERMINATE
********************************************
GENERATE ,,,2
RESHENIE FUNAVAIL TERMINAL,RE,PLAN,,RE,TRANS,RE,REDAKT
ADVANCE 160
FAVAIL TERMINAL
TERMINATE

GENERATE 14400
TERMINATE 1
START 1



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

Автор: Blingq 25.11.11, 13:51
ОЧЕНЬ ОЧЕНЬ ПРОШУ ПОМОЧЬ задачку решить!
ПОЖААААААЛУСТА!

На склад готовой продукции предприятия каждые 5±2 минут поступают изделия типа А партиями по 500 штук, а каждые 20±5 минут – изделия типа В партиями по 2000 штук. С интервалом времени 10±5 минут к складу подъезжают автомобили, в каждый из которых надо погрузить по 1000 штук изделий типа А и В. Погрузка начинается, если изделия обоих типов имеются на складе в нужном количестве, и продолжается 10±2 минуты. У склада одновременно могут находиться не более трех автомобилей, включая автомобиль, стоящий под погрузкой. Автомобили, не нашедшие места у склада, уезжают с его территории без груза.
Смоделировать работу склада при условии, что загрузиться должны 50 автомобилей. Подсчитать число автомобилей, уехавших без груза. Определить среднее и максимально число изделий каждого типа, хранящихся на складе.

Автор: dimoon67 26.11.11, 12:01
Здравствуйте. Помогите пожалуйста разобраться с отчетом. Есть задиние, есть готовая программа, но не могу понять какие данные из отчета мне необходимы чтобы проанализировать. Привожу текст самого задания и решенной задачки:


Отдел обслуживания ЭВМ готовит носители с программами для металлорежущих станков с числовым программным управлением. Чертежи деталей поступают из конструкторско-технологического отдела. Программист изучает чертеж и пишет программу управления станком, обрабатывающим заготовки. Программирование занимает интервал времени, распределенный по экспоненциальному закону со средним временем Т1 минут. Затем текст программы вводится в ЭВМ, обрабатывается и записывается на носитель (длительность операции - экспоненциально распределенная случайная величина со средним временем Т2 минут). Потом носитель с программой устанавливается на соответствующий станок для испытания. Этот процесс занимает промежуток времени, распределенный экспоненциально со средним временем T3 минут.
Заказы на подготовку носителей с программами поступают че¬рез промежутки времени, распределенные равномерно в интервале А ± В минут. В момент прихода заказа для него определяют директивное время - время, до которого заказ должен быть выполнен. Директивное время определяется как сумма времени поступления заказа и технологического времени выполнения работы. Технологическое время выполнения работы - это общее время обработки (Ti+T2+T3) плюс дополнительное время, равномерно распределенное в интервале С ± D минут.
Руководство отдела желает проанализировать несколько спосо¬бов очередности обработки заказов с целью определения наилучшего из них. Предложено четыре возможных порядка выполнения ожидающих в каждой из очередей работ:
1. сначала выполняются те заказы, которые имеют самое маленькое технологическое время выполнения;
2. сначала выполняются те заказы, которые имеют самое большое технологическое время выполнения;
3. сначала выполняются те заказы, которые имеют наименьшее оставшееся время обработки;
4. сначала выполняются те заказы, которые имеют ближайший директивный срок.
Самостоятельно выбрать критерий оценки эффективности системы и оценить предложенные дисциплины выбора из очереди.
Время моделирования необходимо выбирать так, чтобы модель работала в переходном режиме.
Параметры модели приведены в таблице.
Параметры
T1 T2 T3 А В С D
90 70 60 100 20 40 10


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    matrixvar EQU 1
    matrixvar matrix ,1,7
    initial mx1(1,1),90 ;T1
     
    initial mx1(1,2),70 ;T2
     
    initial mx1(1,3),60 ;T3
     
    initial mx1(1,4),100 ;A
     
    initial mx1(1,5),20 ;B
     
    initial mx1(1,6),40 ;C
     
    initial mx1(1,7),10 ;D
     
     
    prov matrix ,1,4
     
     
    GENERATE ,,,1
    met1 ADVANCE mx1(1,4),mx1(1,5) ;заказы поступают через промежутки времени A+-B
    SPLIT 1,met1
     
    ;чтобы сравнить "четыре варианта порядка выполнения ожидающих в каждой из очередей работ", время обработки в каждой стадии "разыгрываем" заранее, потом создаем 3 копии этого транзакта и распределяем их по спискам пользователя(1 - 1й порядок и 1я стадия; 2 - 1й порядок и 2я стадия; 3 - 1й порядок и 3я стадия; 4 - 2й порядок и 1я стадия;...; 12 - 4й порядок и 3я стадия) номера списка совпадают с номерами устройств.
     
    ASSIGN 1,(Exponential(1,mx1(1,1),1)) ;
    ASSIGN 2,(Exponential(1,mx1(1,2),1))
    ASSIGN 3,(Exponential(1,mx1(1,3),1))
    ASSIGN 4,(AC1 + mx1(1,1)+mx1(1,2)+mx1(1,3)+Uniform(1,(mx1(1,6)-mx1(1,7)),(mx1(1,6)+mx1(1,7)))) ;Директивное время, определяется как сумма времени поступления заказа и технологического времени выполнения работы - это общее время обработки (Т1 + Т2 + Т3) плюс дополнительное время, равномерно распределенное в интервале С±D минут.
     
    ASSIGN 5,1 ;стадия подготовки программ
    SPLIT 3,,6
    ASSIGN Ttexn,1
    ASSIGN TminObr,(mx1(1,1)+mx1(1,2)+mx1(1,3)) ;минимальное время обработки, т.е. предполагаемое оставшееся время обработки
     
    met4 GATE U ((P6-1)#3+P5),met2 ;занято, присоединить транзакт к списку пользователя
    TRANSFER ,(met4+1+P6)
     
    LINK ((P6-1)#3+P5),P$Ttexn ;помещает транзакт в список пользователя с номером 1 или 2 или 3, упорядочивая их по возрастанию значения параметра с именем P$Ttexn
    LINK ((P6-1)#3+P5),P$Ttexn ;с номером 4 или 5 или 6
    LINK ((P6-1)#3+P5),P$TminObr ;с номером 7 или 8 или 9
    LINK ((P6-1)#3+P5),P4 ;с номером 10 или 11 или 12
     
    met2 SEIZE ((P6-1)#3+P5)
    ADVANCE P*5 ;задержать на время указанное в параметре, номер которого определяет параметр №5
    ASSIGN Ttexn+,P*5 ;для 1,2 "варианта очередей"
    ASSIGN TminObr-,mx1(1,1) ;для 3-го
    RELEASE ((P6-1)#3+P5)
     
    ASSIGN 5+,1 ;переход к следующей стадии
    TEST L P5,4,met3 ;2,3 стадии - создать копию (вниз) и направить на доработку(к метке met4)
    SPLIT 1,met4 ;оригинал выведет из списка пользователя транзакт и уничтожится
    met3 ASSIGN 7,((P6-1)#3+P5-1)
    TRANSFER ,(met3+P6#2)
     
    UNLINK P7,met2,1 ;вывести один транзакт с начала списка (которые имеют самое маленькое технологическое время выполнения
    TERMINATE
    UNLINK P7,met2,1,BACK ;вывести один транзакт с конца (которые имеют самое большое технологическое время выполнения
    TERMINATE
    UNLINK P7,met2,1 ;вывести один транзакт с начала списка (которые имеют наименьшее оставшееся время обработки
    TERMINATE
    UNLINK P7,met2,1 ;вывести один транзакт с начала списка(которые имеют ближайший директивный срок)
    TERMINATE
     
    GENERATE ,,12000,1 ;1месяц(25дн.) по 8часов
    TERMINATE 1
     
    start 1

Заранее благодарю за помощь

Автор: SteAlzzer 27.11.11, 16:13
Народ, кто шарит, помогите понять (именно понять!), почему не работает данный исходник.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    trolleybus STORAGE 5
    taxi STORAGE 5
     
    GENERATE 4,2
    TRANSFER 0.4,ToTaxi,ToTrolley
     
    ToTaxi GATE SNF taxi,ToTaxiQueue
    ENTER taxi
    ADVANCE 15,5
    LEAVE taxi
    TERMINATE
     
    ToTaxiQueue QUEUE TaxiQueue
    GATE SF taxi,ToTaxiQueue
    DEPART TaxiQueue
    TRANSFER , ToTaxi
     
    ToTrolley GATE SNF trolleybus,ToTrolleyQueue
    ENTER trolleybus
    ADVANCE 25,5
    LEAVE trolleybus
    TERMINATE
     
    ToTrolleyQueue QUEUE TrolleyQueue
    GATE SF trolleybus,ToTrolleyQueue
    DEPART TrolleyQueue
    TRANSFER , ToTrolley
     
    GENERATE 480
    TERMINATE 1
    START 1


Он не компилируется, выдает следующую ошибку:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    11/27/11 19:09:46  Model Translation Begun.
    11/27/11 19:09:46  Ready.
    11/27/11 19:09:46  Simulation in Progress.
    11/27/11 19:09:46  Error Stop.
    11/27/11 19:09:46  Halt. XN: 17. Block 21 Next.
    11/27/11 19:09:46    Clock:59.880888. Next: GENERATE. Line 29.
    11/27/11 19:09:46  GENERATE 480
    11/27/11 19:09:46    Invalid attempt to enter a GENERATE Block.


А если увеличу память для троллейбусов, то все равботает, но в отчете нет данных об очередях.
Почему возникает эта ошибка?

Автор: dimoon67 30.11.11, 17:17
SteAlzzer что ты указываешь в этом блоке: GENERATE 480? 480 - это что у тебя?

Автор: Bestslip 05.12.11, 10:42
Здравствуйте, Уважаемые форумчане! Помогите, пожалуйста решить в среде GPSS World следующую задачу:

Задание:
- написать программу моделирования изучаемой системы в среде GPSS;
- отладить программу.
Изучить оценку влияния независимых переменных (факторов) на реакцию системы.
Для проведения эксперимента по исследованию характеристик изучаемой системы массового обслуживания требуется:
- для выделенных факторов выбрать основной (нулевой) уровень и интервалы варьирования для каждого фактора, заполнить таблицу 1 (приложена в файле);

- составить матрицу планирования, соответствующую полному факторному эксперименту (учитывающую взаимодействия только между двумя факторами);
- провести имитационный эксперимент с моделью системы в каждой точке факторного пространства при числе заявок N=100, определить реакцию системы при выбранных уровнях факторов и занести данные в матрицу планирования;
- построить модель зависимости реакции системы от выделенных факторов в виде полинома первой степени, учитывающего все эффекты взаимодействия между двумя факторами.

Задача 1. В цех на участок обработки поступают детали в соответствии с равномерным законом распределения 5000-7000 мили секунд. Первичная обработка деталей происходит на станке 1, который обрабатывает деталь в соответствии с экспоненциальным законом распределения со средним значением 5500 мили секунд. Далее деталь передается для вторичной обработки одному из трех станков 2, 3, 4 соответственно с вероятностью 0,5; 0,2; 0,3. Время обработки деталей на станках подчиняется равномерному закону распределения и составляет 400-800, 700-900, 600-800 мили секунд. Затем детали передаются на заключительный этап обработки. Время обработки детали станком 5 на заключительном этапе подчинено нормальному закону распределения со средним значением 2000 мили секунд и имеет стандартное отклонение 300 мили секунд.
Реализовать моделирование работы участка обработки в течение 2 часов.

Независимые переменные (факторы):
- интенсивность входного потока деталей; время обработки детали станком 1, время обработки детали станком 2.
Отклик модели:
- вероятность простоя станка 4.

Пожалуйста, помогите! ОЧЕНЬ ОЧЕНЬ БУДУ БЛАГОДАРЕН!!!
Tabl_1.doc (, : 337)

Автор: SteAlzzer 08.12.11, 04:19
dimoon67, на сколько я понимаю, этот блок отвечает за общее время моделирования. Т.е. в моем листинге моделирование происходит в течении 480 единиц времени.
Я думаю, что тут возможна ошибка из-за того, что я неправильно организовал обработку очереди, т.к. как-то уж не очень выглядит логика этого куска кода.

Автор: SteAlzzer 08.12.11, 09:21
и вот допустим есть код обработки очереди:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ...
    SetQueue QUEUE TrainQueue
    GATE SNF Train,SetQueue
    DEPART TrainQueue
    TRANSFER ,EnterTheTrain
    ...


Он же по идее зациклиться и все. Как это сделать по человечестки?
Мне просто ничего в голову не приходит, кроме как сделать задержку какую-нибудь после проверки. Что-то типа:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ...
    SetQueue QUEUE TrainQueue
    Check GATE SNF Train,GetQueueAwaiting
    DEPART TrainQueue
    TRANSFER ,EnterTheTrain
     
    GetQueueAwaiting ADVANCE 1
    TRANSFER ,Check
    ...

Но мне кажется это весьма некрасиво

Автор: Candyman 11.12.11, 14:46
Помогите пожалуйста с GPSS моделью

Задание.
Распределенный банк данных системы сбора информации организован на базе ЭВМ, соединенных дуплексным каналом связи. Поступающий запрос обрабатывается на первой ЭВМ
и с вероятностью 50% необходимая информация обнаруживается на месте. В противном случае необходима посылка на вторую ЭВМ. Запросы поступают через каждые 10 ± 3 с. , первичная обработка запроса занимает 2 сек., выдача ответа требует 18 ± 2 с, передача по каналу связи занимает 3 сек. Временные характеристики первой ЭВМ аналогичны первой. Смоделировать прохождение 400 запросов. Определить необходимую ёмкость накопителей перед ЭВМ, обеспечивающую безотказную работу системы, и функцию распределения времени обслуживания заявки.

Вот что есть, но не работает:
Цитата
evm1 Storage 1
evm2 Storage 2

Generate 10, 3 ;3 сек
QUEUE OCH ;очередь на обслуживание
TEST G (R$evm1 + R$evm2),0 ;число свободных приборов> 0
TRANSFER BOTH, ,label2 ; если может занять место на первом приборе - занимает,
; Иначе на метку label2 и занимает там место
ENTER evm1
DEPART OCH
ADVANCE 2,0 ;время обработки заявки
LEAVE evm1
ADVANCE 2 ;ответ по перовму прибору
LEAVE evm1
TERMINATE
; Работа второго прибора
ADVANCE 3,0 ; Время на передачу заявки от 1-го прибора до 2-го
label2 ENTER evm2
DEPART OCH
ADVANCE 18,2 ;время обработки заявки
LEAVE evm2
ADVANCE 2 ;время ответа по второму прибору
LEAVE evm2
TERMINATE

GENERATE 400 ; для 400 заявок
TERMINATE 1
START 1

Автор: Xapek88s 15.12.11, 11:18
РЕБЯЯЯЯЯЯТ можете пожалуйста проверить, и подправить? Завтра здавать курсач =(
Или вдруг у кого есть правильное решение - поделитесь, умоляю..

Система автоматизации проектирования (САПР) создана на базе ЭВМ, функционирующей в режиме множествен¬ного доступа. Пятеро инженеров-проектировщиков с помощью своих дисплеев одновременно и независимо проводят диалог с ЭВМ, определяя очередной вариант расчета. Каждый диалог состоит из 10 циклов ввода-вывода данных. Во время одного цикла происходит следующее: за 10 ± 5с инженер обдумывает и вводит текст строки; в течение 2 с работает процессор ЭВМ, подготавливая текст ответа; в течение 5 с текст ответа выводится на дисплей. После ввода 11-й строки начинается работа процессора по расчету конструкции и продолжается 30± 10 с. За 5 с результат расчета выводится на экран, после чего инженер в течение 15 ± 5 с анализирует его и начинает новый диалог. Операции по подготовке текста ответа имеют абсолютный приоритет над расчетными, т. е. прерывают выполнение последних.
Смоделировать процесс работы САПР при условии, что расчет вариантов конструкции повторяется 100 раз. Определить среднее время выполнения диалога и расчетных операций, а также коэффициент загрузки процессора.

Текст программы:
Generate 10,5; генерируются транзакты

Queue EVM; занятие очереди
Depart EVM; обеспечивает освобождение в очереди
Seize EVM; занятие устройства
DIS STORAGE 5;
ENTER DIS; вхождение транзакта в накопитель
Advance 2,0; задерживает транзакт на время 2,0
Advance 5,0; задерживает транзакт на время 5,0
Priority 1; присваивает входящему транзакту приоритет
Test E DIS,11,C; проверяет соотношение

C Advance 30,10; задерживает транзакт на время 30,10
Advance 5,0; задерживает транзакт на время 5,0
Advance 15,5; задерживает транзакт на время 15,5;
LEAVE DIS; освобождение памяти
Release EVM; освобождает усройство с 10 циклами
Transfer 10,T; изменяет направление движения транзактов согласно режиму САПР

T Terminate 1; уничтожение транзактов

start 100

Добавлено
В тырнете вот такой вариант нашёл, он правильный вроде?..

010 SIMULATE
020 TAB1 TABLE M1,0,250,14
030 Q_TAB2 QTABLE Q_TAB2,10,10,20
040 TAB2 TABLE QX$Q_TAB2,25,5,19
050 MTRX MATRIX ,1,5
060 INITIAL MX$MTRX(1,1),0
070 INITIAL MX$MTRX(1,2),0
080 INITIAL MX$MTRX(1,3),0
090 INITIAL MX$MTRX(1,4),0
100 INITIAL MX$MTRX(1,5),0
110 INITIAL LS1,1
120 INITIAL LS2,1
130 INITIAL LS3,1
140 INITIAL LS4,1
150 INITIAL LS5,1
160 GENERATE 150,,,,1
170 ASSIGN 1,0
180 SPLIT 4,MET,1
190 MET GATE LS P1
200 LOGIC R P1
210 VVOD SEIZE P1
220 ADVANCE 10,5
230 RELEASE P1
240 MSAVEVALUE MTRX+,1,P1,1
250 TEST NE MX$MTRX(1,P1),11,RASCH
260 PREEMPT PROC
270 ADVANCE 2
280 RELEASE PROC
290 SEIZE P1
300 ADVANCE 5
310 RELEASE P1
320 TRANSFER ,VVOD
330 RASCH MSAVEVALUE MTRX,1,P1,0
340 TABULATE TAB1
350 PRIORITY 0
360 QUEUE Q_TAB2
370 SEIZE PROC
380 ADVANCE 30,10
390 TABULATE TAB2
400 RELEASE PROC
410 DEPART Q_TAB2
420 SEIZE P1
430 ADVANCE 5
440 RELEASE P1
450 ADVANCE 15,5
460 LOGIC S P1
470 SAVEVALUE PRC,FR$PROC
480 TERMINATE 1
490 START 100
500 WINDOW TABLES

Автор: strk 15.12.11, 21:56
подскажите плз, как можно определить вероятность переполнения входных накопителей??

Автор: Erravielle 17.12.11, 05:33
Здравствуйте форумчане,
очень нужна помощь в моделировании ремонтных работ. GPSS недавно начал осваивать.

Задачка:

Два специалиста по ремонту обслуживают пять агрегатов, расположенных в механическом цехе завода. Неисправности возникают у каждого из агрегатов в соответствии с пуассоновским законом распределения вероятностей со средней частотой 3 неисправности в час. Продолжительности ремонтных работ в расчете на один агрегат распределены экспоненциально со средним временем, равным 15 мин.
Задание по моделированию:
1 Смоделировать работу по ремонту агрегатов в течение 8 часов.
2 Определить вероятность того, что оба механика окажутся незагруженными ремонтными работами.
3 Определить коэффициент загрузки каждого механика в течение 8 ч.

Я не прошу решить ее за меня, а прошу помочь разобраться. Мне хотя бы структурную схему процесса правильно составить или обобщенную схему моделирующего алгоритма.
Если здесь есть понимающие люди, прошу откликнуться )

P.S. а если примеры подобных программ подкинете, то вообще замечательно )))

Автор: Erravielle 17.12.11, 07:28
Или может быть кто-нибудь подскажет как реализовать несколько источников транзактов???

Автор: DimanEWM 26.12.11, 10:20
Народ кто нито сможет откоментить прогу? блин очень надо завтра сдавать надо(
Вот прога :
Generate 30,25
queue CPU
seize display
advance 50,30
release display
seize CP
advance 100,50
release CP
depart CPU
advance 30,10
advance 60,20
savevalue 1+,1
terminate

Generate 70,5,,,1
queue CPU
seize display
advance 50,30
release display
preempt CP,PR
advance 100,50
return CP
depart CPU
advance 30,10
advance 60,20
savevalue 2+,1
terminate

Generate 60,2,,100,2
queue CPU
seize display
advance 50,30
release display
preempt CP,PR
advance 100,50
return CP
depart CPU
advance 30,10
advance 60,20
savevalue 3+,1
terminate

generate 12000
TERMINATE 1
start 1


Задание :
В специализированной вычислительной системе периодически выполняется три вида заданий, которые характеризуются уровнями приоритета: нулевым, первым и вторым. Каждый новый запуск задания оператор производит при помощи дисплея, работая на нем 50+-30 секунд. После запуска задания оно требует для своего выполнения 100+-50 секунд времени работы процессора, причем задания более высокого приоритета прерывают выполнение задач более низкого приоритета. Результаты обработки задания выводятся на печать без прерываний в течение 30+-10 секунд, после чего производится их анализ в течение 60+-20 секунд, и задание запускается снова. Можно считать, что при работе дисплея и при выводе результатов на печать процессор не используется.
Смоделировать процесс работы системы при условии, что задание второго уровня приоритета выполняется 100 раз. Подсчитать число циклов выполнения остальных заданий и определить коэффициенты загрузки технических средств системы.

Автор: olsheu 26.12.11, 11:54
Откуда Вы взяли цифры в блоках generate
Generate 30,25 - откуда взяли 30 и 25
Generate 70,5,,,1 - откуда 70 и 5
Generate 60,2,,100,2 - откуда 60 и 2

Автор: DimanEWM 26.12.11, 11:57
Допускаю что ошибки есть... код взят с GPSS .. ребя очень надо откоментить, послде завтра уже экзамен, завтра надо сдать курсач

Автор: olsheu 26.12.11, 12:11
отписался на почту

Автор: RE_RoRsChaCh 21.01.12, 19:42
Здавствуйте есть задача, нужна помощь.
ЭВМ обслуживает три терминала по круговому циклическому алгоритму, предоставляя каждому терминалу 30 с. Если в течение этого времени задание обрабатывается, то обслуживание завершается; если нет, то остаток задачи становится в специальную очередь, которая использует свободные циклы терминалов, т. е. задача обслуживается, если на каком-либо тер-минале нет заявок. Заявки на терминалы поступают через 30±5 с и имеют длину 300±50 знаков. Скорость обработки заданий ЭВМ равна 10 знаков/с.
Смоделировать 5 ч работы ЭВМ. Определить загрузку ЭВМ, параметры очереди неоконченных заданий. Определить величину цикла терминала, при которой все заявки будут обслужены без специальной очереди.

Вот код но я не понимаю где тут длин знаков и скорость обработки ЭВМ указаны подскажи пожалуйста.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    generate 30,5 ;terminal 1
    link 1,fifo
    generate 30,5 ;terminal 2
    link 2,fifo
    generate 30,5 ;terminal 3
    link 3,fifo
          
    met1 queue och1                                    ;ставим заявку в очередь
         seize EOM                                     ;занимаем устройство ЕОМ
         depart och1                                   ;выводи заявку из очереди
         assign 1,(25+10#rn1/1000)                     ;задаем время обработки как первый параметр
         test le p1,30,met2                            ;проверяем время обработки, если >30 идем в met2, если <=30 входим в блок test
         advance p1                                    ;задержка транзакта на время р1
         release EOM                                   ;освобождение устройства ЕОМ
         terminate 1                                   ;удаление транзакта
    met2 advance 30                                    ;задержка транзакта на 30с
         assign 1-,30                                  ;вычитание из р1 30с
         release EOM                                   ;освобождение устройства ЕОМ
         link och,fifo                                 ;помещаем транзакт в список пользователя och
      
         generate ,,,1
         assign 1,0
    met  assign 1,((p1@3)+1)
         test g ch*1,0,met4                            ;проверка длины списка пользователя, если >0 входим в блок test, если <=0 переходим на met4
         unlink p1,met1,1                              ;вывод транзакта из списка пользователя
         transfer ,met5
    met4 test g CH$och,0,met5                          ;проверка длины списка och, если >0 входим в блок test, если <=0 переходим на met5
         unlink och,met1,1
    met5 advance 1
         transfer ,met
     
    GENERATE 18000                                     ;время моделирования 5 часов
    TERMINATE 1
    START 1

Автор: Adam_di 05.02.12, 19:20
Всем привет, вообщем такая проблема:
С интервалом времени 5 ± 2 мин детали поштучно поступают к станку на обработку и до начала обработки хранятся на рабочем столе, который вмещает 3 детали. Если свободных мест на столе нет, вновь поступающие детали укладываются в тележку, которая вмещает 5 деталей. Если тележка заполняется до нормы, ее увозят к другим станкам, а на ее место через 8 ± 3 мин ставят порожнюю тележку. Если во время отсутствия тележки поступает очередная деталь и не находит на столе места, она переправляется к другому станку. Рабочий берет детали на обработку в первую очередь из тележки, а если она пуста — со стола. Обработка деталей производится за 10 ± 5 мин.

Смоделировать процесс обработки на станке 100 деталей. Подсчитать число деталей поштучно переправленных к другому станку.
Показал преподу этот код, говорит тут минимум 2 generat'a должно быть, но как так не понимаю где, или понимаю но при построение схемы незнаю как её строить с ними.
[Spoiler]
generate 300,120

test L q$table_q,3,cart
queue table_q
assign 5,1
transfer ,meet

cart test L q$cart_q,5,clear_cart
queue cart_q
priority 5
assign 5,2
transfer ,meet

clear_cart gate LR 1,other
logic s 1
advance 480,180
depart cart_q,q$cart_q
logic r 1
terminate 0

meet seize proc
test E p5,2,dep_1
test G q$cart_q,1,adv
depart cart_q
adv advance 600,300
release proc
terminate 1

dep_1 depart table_q
transfer ,adv

other savevalue other_advanced+,1
terminate 0

start 100

Автор: slawkaqwerty 17.02.12, 12:28
kant1288 Здаров,можеш скинуть свой курсач потвоему варианту,а то у меня оч похож

Автор: ETQW 25.04.12, 15:08
Всем доброго времени суток. Прошу вашей помощи в следующей задаче (Нет, не очередной ловец халявы: я уже попытался написать код, но мой преподаватель говорит, что не правильно )
Прошу помощи в этом нелегком деле :3

Постановка задачи: Рассмотрим систему массового обслуживания с заданным числом устройств обслуживания п= 5, действующих параллельно и использующих одну общую очередь. Интервалы времени между поступлениями требований экспоненциально распределены со средним значением 5 (все интервалы времени в этой задаче измеряются в минутах). Требование, поступившее, когда в системе есть свободное устройство, немедленно поступает на обслуживание, Требование, поступившее, когда все устройства заняты, становится в очередь. Когда тре-бование (первый раз) попадает на обслуживание, время его обслуживания равномерно распределено между а = 2 и b = 2,8. Но по завершении первого обслуживания может оказаться, что требование не удовлетворено (вероят¬ность возникновения такой ситуации p = 0,2). Если обслуживание было удов-летворительным, требование покидает систему, в противном случае обслу-живание будет продолжаться. Удовлетворено ли требование обслуживанием, следует определять по его завершении. Если требование не удовлетворено завершившимся обслуживанием и в очереди больше нет других требований, начинается повторное обслуживание этого требования на том же устройстве. Если же по завершении неудовлетворительного обслуживания в очереди еще имеются требования, неудовлетворенное требование должно присоединиться к очереди.
В исходном состоянии в системе нет требований и устройства являются свободными. Моделирование должно выполняться в течение 480 мин. Вычислите среднее и максимальное общее время в системе (включая задержки в очереди и время обслуживания требования) и число удовлетворенных об¬служиванием требований, покинувших систему в процессе моделирования. Кроме того, вычислите среднюю и максимальную длину очереди, среднее по времени и максимальное число занятых устройств обслуживания.
Считаете ли вы работу системы рациональной? Если нет, то предложите пути улучшения ее эффективности. Обоснуйте свой ответ.
  1. Ustr storage 5 ;Задаем 5-устройств действующих параллельно
  2. generate (Exponential(1,0,5)) ;поступление требований экспонециально в среднем 5 мин
  3. assign 1,0 ;создадим параметр, чтобы отметить было ли требование в очереди, или нет
  4. gate sf Ustr,ustr1 ;если все устройства заняты, то требования в очередь, если нет - на ustr1
  5. ustr5 queue Ochered ;реалтзация поступления в очередь
  6. assign 1,1 ;отмечаем требование(присваиваем параметру значение 1)
  7. ustr1 enter Ustr ;вход в устройство
  8. test e p1,1,ustr3 ;проверяем параметр если он равен 1 то уменьшаем очередь
  9. depart Ochered ;уменьшаем очередь
  10. ustr3 seize postupl ;задает поступление
  11. advance 2.4,0.4 ;обслуживание равномерно распределено 2.4+/-0.4(от 2 до 2.8))
  12. release postupl ;переход к след. блоку
  13. transfer 0.2,ustr4,ustr2 ;Вероятность не удовлетворенности 0.2, не удовлетворенные требования
  14. ;уходят на ustr2,оставшиеся 0.8 на ustr4
  15. ustr2 test E Q$Ochered,0,ustr1 ;Проверка очереди на наличие требований, если в очереди есть требования то присоедениться к очереди (ustr5)
  16. transfer ,ustr3 ;иначе переход на повторное обслуживание в этом же устройстве
  17. ustr4 leave Ustr ;освобождаем устройство
  18. savevalue Koltrebov+,1 ;кол-во требований прошедших через модель
  19. savevalue vremya+,QM1 ;общее время обслуженных требований в модели
  20. terminate ;выход из системы
  21. generate 480 ;генерация в течение 480 мин
  22. terminate 1 ;уменьшение счетчика конца моделирования на 1
  23. start 1 ;задание значения счетчика моделирования равным 1

Автор: TEMENb 30.04.12, 19:01
ETQW, вопервых.
нет нужды специально показывать, как устройство курсирует по очереди.
вот такой код вполне соответствует условию

Цитата
Рассмотрим систему массового обслуживания с заданным числом устройств обслуживания п= 5, действующих параллельно и использующих одну общую очередь. Интервалы времени между поступлениями требований экспоненциально распределены со средним значением 5 (все интервалы времени в этой задаче измеряются в минутах). Требование, поступившее, когда в системе есть свободное устройство, немедленно поступает на обслуживание, Требование, поступившее, когда все устройства заняты, становится в очередь.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Ustr storage 5 ;Задаем 5-устройств действующих параллельно
    generate (Exponential(1,0,5)) ;поступление требований экспонециально в среднем 5 мин
    ustr1 queue Ustr
    enter Ustr ;вход в устройство
    depart Ustr
    ...


Добавлено
ETQW, не хочу сказать, что этот код не верен
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    advance 2.4,0.4

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

Добавлено
итого.
задача должна выглядеть так

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    объявление емкости мку
    генерация транзактов
    стать в глобальную очередь, для получения общей статистики пребывания транзактов в системе (это избавляет нас от кучи ненужных счетчиков)
    поступление в очередь
    поступление в мку
    задержка на время выполнения
    выход из мку
    с определенной вероятностью отправляем обратно в очередь
    покинуть глобальную очередь
    транзакт покидает систему
     
    generate 480 ;генерация в течение 480 мин
    terminate 1 ;уменьшение счетчика конца моделирования на 1
    start 1 ;задание значения счетчика моделирования равным 1


вам осталось только заменить мой русский текст на жпсс операторы построчно и нести к преподу.
удачи.

Автор: selflessslaeyr 17.05.12, 16:19
Здравствуйте.
Проблема такая.
Вот код программы.

GENERATE 10,5

QUEUE myq
TRANSFER 0.5,MACHINE1,MACHINE2
DEPART myq

MACHINE1 SEIZE mach1
ADVANCE 15,5
RELEASE mach1
TRANSFER ,TST

MACHINE2 SEIZE mach2
ASSIGN 1,1
ADVANCE 3,2
RELEASE mach2

TST TEST E P1,1,TABUL

MACHINE3 SEIZE mach3
ADVANCE 3,2
RELEASE mach3

TABUL TERMINATE
GENERATE 100000
TERMINATE 1
START 1

Выдает ошибку в строке TEST E P1,1,TABUL ("reference to a non-existent parameter").
Значение параметру транзакта P1 задается в строке ASSIGN 1,1.
Что сделано неправильно?

Автор: TEMENb 18.05.12, 08:18
selflessslaeyr, вы забыли про транзакты, которые пришли с метки MACHINE1. у них первый параметр не задан.

Автор: Lazio 18.05.12, 09:46
Помогите разобраться в задаче: есть три билетные кассы (работают параллельно). К ним приходят люди по эксп. закону со средним 4. Обслуживание каждой кассы 3.333 в среднем по тому же закону. Проблема в том, что код (см. ниже) работает как то некорректно. Надо чтобы люди приходили и занимали свободную кассу ну или ту в которой очередь меньше (если возможно)

SIMULATE
GENERATE (EXPONENTIAL(1,0,4))

TRANSFER BOTH,XX,MM
MM TRANSFER BOTH,YY,ZZ


XX QUEUE OCHER1
SEIZE KASSA1
DEPART OCHER1
ADVANCE (EXPONENTIAL(1,0,10/3))
RELEASE KASSA1
TRANSFER ,OUT


YY QUEUE OCHER2
SEIZE KASSA2
DEPART OCHER2
ADVANCE (EXPONENTIAL(1,0,10/3))
RELEASE KASSA2
TRANSFER ,OUT


ZZ QUEUE OCHER3
SEIZE KASSA3
DEPART OCHER3
ADVANCE (EXPONENTIAL(1,0,10/3))
RELEASE KASSA3
TRANSFER ,OUT

OUT TERMINATE


GENERATE 2400
TERMINATE 1

Автор: TEMENb 18.05.12, 11:14
Цитата Lazio @

TRANSFER BOTH,XX,MM
MM TRANSFER BOTH,YY,ZZ

неверно построена выборка.
я бы написал так

Цитата
TEST E 0,((Q$OCHER3<Q$OCHER2)+(Q$OCHER3<Q$OCHER1)),ZZ
TEST L Q$OCHER1,Q$OCHER2,YY


ну или так
Цитата

TEST L Q$OCHER1,Q$OCHER2,MET1
TEST L Q$OCHER1,Q$OCHER3,ZZ
TRANSFER ,XX
MET1 TEST L Q$OCHER2,Q$OCHER3,ZZ
TRANSFER ,YY


Но правильней всего будет использовать оператор SELECT
например вот так
Цитата

OCHER1 EQU 1
OCHER2 EQU 2
OCHER3 EQU 3

GENERATE (EXPONENTIAL(1,0,4))

ASSIGN 1,XX
ASSIGN 2,YY
ASSIGN 3,ZZ

SELECT MIN NUM,1,3,,Q
TRANSFER ,P*NUM

XX QUEUE OCHER1
SEIZE KASSA1
DEPART OCHER1
ADVANCE (EXPONENTIAL(1,0,10/3))
RELEASE KASSA1
TRANSFER ,OUT


YY QUEUE OCHER2
SEIZE KASSA2
DEPART OCHER2
ADVANCE (EXPONENTIAL(1,0,10/3))
RELEASE KASSA2
TRANSFER ,OUT


ZZ QUEUE OCHER3
SEIZE KASSA3
DEPART OCHER3
ADVANCE (EXPONENTIAL(1,0,10/3))
RELEASE KASSA3
TRANSFER ,OUT

OUT TERMINATE


GENERATE 2400
TERMINATE 1


Добавлено
или даже вот так

Цитата

GENERATE (EXPONENTIAL(1,0,4))

SELECT MIN 1,1,3,,Q

QUEUE P1
SEIZE P1
DEPART P1
ADVANCE (EXPONENTIAL(1,0,10/3))
RELEASE P1

OUT TERMINATE


GENERATE 2400
TERMINATE 1

start 1


Добавлено
а вот вариант на отлично )

Цитата

P_COUNT EQU 3

GENERATE (EXPONENTIAL(1,0,4))

SELECT MIN 1,1,P_COUNT,,Q

ASSIGN 2,RN1
MET1 ASSIGN 2,(P2@P_COUNT)
ASSIGN 2,(P2+1)
TEST E Q*2,Q*1,MET1


QUEUE P2
SEIZE P2
DEPART P2
ADVANCE (EXPONENTIAL(1,0,10/3))
RELEASE P2

OUT TERMINATE


GENERATE 2400
TERMINATE 1

start 1

Автор: 1never1 18.05.12, 17:54
Нужна помощь в решении задачи, отчет, код, ну и скрины результатов моделирования, оплату гарантирую, возможно предоплата! 365574850 моя аська или scype n1ver1986

Автор: Lazio 18.05.12, 18:35
а то что OWNER 577 и 576 в двух кассах а в другой 0 это что значит? и ещё у нас сгенерировано 577 транзактов а в кассы дошло на один меньше.

Автор: TEMENb 19.05.12, 06:40
один транзакт находится внутри кассы.
собственно цифра - это его порядковый номер.
будьте уверены, ваш и мой отчеты отличаются, я могу не увидеть этого овнера. жпсс генерирует немного разные отчеты на разных машинах.

Автор: Lazio 19.05.12, 10:17
:-? а можно мне ваш отчетик.

Автор: TEMENb 19.05.12, 11:18
Lazio, я не выполнял модель ни разу ))

Автор: Orjanruusu 23.05.12, 12:11
Всем доброго времени суток! :)

Помогите, пожалуйста, разобраться!

Такой вопрос: есть программа, через которую я запускаю GPSS модель в BATCH режиме и получаю sim-файл с отчетом. Также программа генерирует Plus-процедуры дисперсионного анализа.

Так вот, в sim файле я получаю только отчет о создании процесса моделирования (Create simulation), а сами наблюдения (Run'ы) вообще не генерируются. Добавление в модель команды CONDUCT ExperimentName() желаемого результата не принесло - выдает ошибку:

**** Experiment in Progress. ****
05/23/12 20:04:03 Error Stop.
05/23/12 20:04:03 Halt.
05/23/12 20:04:03 Clock:0.000000.
05/23/12 20:04:03 Reference to a non-existent Matrix entity.
05/23/12 20:04:03 Identifier: ExperimentName_RESULTS.
05/23/12 20:04:03 Error in Argument 1, calling DATATYPE().
05/23/12 20:04:03 Error in Argument 1, calling STRINGCOMPARE().
05/23/12 20:04:03 ExperimentName, Line 44.
05/23/12 20:04:03 Experiment ended.
05/23/12 20:04:03 Error Stop.
05/23/12 20:04:03 Halt.
05/23/12 20:04:03 Clock:0.000000.
05/23/12 20:04:03 System error. Internal exception.

На 44-ой строке: IF (StringCompare(DataType(ExperimentName_Results[1,1]),"UNSPECIFIED")'E'0)

Хотя, если вызывать команду по F11 или из меню, все работает. С GPSS знакома очень поверхностно. Подскажите, правильно ли я действую, почему не генерируются Run'ы? Ну или направьте где что нужно почитать :)

Автор: TEMENb 23.05.12, 12:15
Orjanruusu, напишите мне в скайп 400852874

Автор: SergeStudent 24.05.12, 12:21
Здравствуйте все.
Помогите решить задание, Очень надо на завтра.

На обрабатывающую участок цеха поступают детали в среднем через 50 мин. Первичная обработка деталей производится на одном из двух станков. Первый станок обрабатывает деталь в среднем 40 мин и имеет до 4% брака, второй соответственно 60 мин и 8% брака. Все бракованные детали возвращаются на повторную обработку на второй станок. Все интервалы времени распределены по экспоненциальному закону.
Детали, которые попали в бракдвичи считаются отходами.
Смоделировать обработку на участке 500 деталей. Определить загрузки второго станка на вторичной обработке и вероятность появления отходов.


Работаем в : GPSS World Student Version

Помогите пожалуйста.

Автор: BSU_Dashka 24.05.12, 13:43
Помогите разобраться
задача
На трикотажной фабрике N швейных машин работают по 8 часов в день и по 5 дней в неделю. В резерве имеется М машин. Время безотказной работы машины распределено по равномерному закону в интервале [а1, b1]. Если машина выходит из строя, ее заменяют резервной либо сразу в случае, когда она имеется в наличии, либо по мере ее появления. Тем временем сломанную машину отправляют в ремонтную мастерскую, где ее чинят и возвращают в цех, но уже в качестве резервной. На ремонт швейной машины уходит время, равномерно распределенное на интервале [а2, b2].
Разработать GPSSV - модель системы с целью минимизации стоимости производства.
Первоначальный перечень экспериментов: N = 50, 1 < M < 5, оплата ремонта машины 3.75 руб/час. За машину, находящуюся в резерве, нужно платить 30 руб/день, а1 = 132, b1 = 182, а2 = 4, b2 = 10.



мой код
Скрытый текст

SIMULATE
REM STORAGE 1
NOWON STORAGE 50

1 GENERATE ,,,51
2 ENTER NOWON
ADVANCE 157,25
LEAVE NOWON
ENTER REM
ADVANCE 7,3
LEAVE REM
TRANSFER ,2

GENERATE 4160
TERMINATE 1
START 1
1 GENERATE ,,,52
CLEAR
START 1
1 GENERATE ,,,53
CLEAR
START 1
1 GENERATE ,,,54
CLEAR
START 1
1 GENERATE ,,,55
CLEAR
START 1



вроде что-то делает..вопрос.правильно ли делает? и как мне дальше определить какое количество резервной техники выгоднее?
если будут какие-то советы по коду- рада выслушать.
Заранее спасибо.

Автор: TEMENb 24.05.12, 13:53
Цитата
1 GENERATE ,,,52
CLEAR


Это зачем? ))

Добавлено
BSU_Dashka, поторопился. реализация похожа на правильную.
сбило с толку generate 51
это вроде как 50 основных и одна резервная?
и уберите все остальные дженерейты, кроме блока с таймером.
Цитата
reset
clear
start 1

вот так очищается модель перед новым запуском

Добавлено
Скрытый текст
REM STORAGE 1
NOWON STORAGE 50
initial x$n,1
GENERATE ,,,x$n
transfer ,met1
GENERATE ,,,50
met1 ENTER NOWON
ADVANCE 157,25
LEAVE NOWON
ENTER REM
ADVANCE 7,3
LEAVE REM
TRANSFER ,met1

GENERATE 4160
TERMINATE 1
START 1
initial x$n,2
reset
CLEAR
START 1
initial x$n,3
reset
CLEAR
START 1
initial x$n,4
reset
CLEAR
START 1
initial x$n,5
reset
CLEAR
START 1


Добавлено
если допишете реализацию расходов за ремонт, я подскажу как писать реализацию расходов за резерв ;)

Автор: BSU_Dashka 24.05.12, 14:33
честно..пока даже не представляю как это делается..((

Добавлено
как бы теоретически просто надо как-то выдернуть из ADVANCE время задержки..либо просто взять всё время работы ремонтного цеха..но откуда извлечь эту информацию я не знаю..

Автор: TEMENb 26.05.12, 08:18
Цитата SenslideR @
Всем доброго времени суток!

Имеется задачка:
Студия выполняет поток заданий (100%) по трем направлениям

I. S + PC + P , V=20 , 30%
II. S + PC , V=8 , 45%
III. S , V=4 , 25%

, где S - сотрудники, PC - компьютеры, P - дополнительное оборудование для компьютеров, V - время выполнения работы.
Время выполнения по распределению Пуассона со средним значением для заданий.

Необходимо создать модель в GPSS World.

Заранее спасибо!


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

Скрытый текст
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        initial x$ps,0
        initial x$ppc,0
        initial x$pp,0
     
        generate    1
        transfer    .203,,mfirst
        transfer    .845,,msec
        transfer    ,mthird
    mfirst  savevalue   pp+,1
    msec    savevalue   ppc+,1
    mthird  savevalue   ps+,1
        terminate   1
     
        start       1000

Автор: Lazio 26.05.12, 20:32
Подаскажите по моей проге:

P_COUNT EQU 3

GENERATE (EXPONENTIAL(1,0,4))

SELECT MIN 1,1,P_COUNT,,Q

ASSIGN 2,RN1
MET1 ASSIGN 2,(P2@P_COUNT)
ASSIGN 2,(P2+1)
TEST E Q*2,Q*1,MET1


QUEUE P2
SEIZE P2
DEPART P2
ADVANCE (EXPONENTIAL(1,0,10/3))
RELEASE P2

OUT TERMINATE


GENERATE 2400
TERMINATE 1

start 1



В итоге выдает средняя длина очереди 0.066 хотя в теории это значение 0.022 ? GPSS как то не так считает или я ?

Автор: TEMENb 26.05.12, 21:10
Lazio, а по какой формуле вы считали среднюю длинну очереди?

Скрытый текст
Цитата Lazio @
SELECT MIN 1,1,P_COUNT,,Q

ASSIGN 2,RN1
MET1 ASSIGN 2,(P2@P_COUNT)
ASSIGN 2,(P2+1)
TEST E Q*2,Q*1,MET1

давно я не видел подобной реализации.
это пятерочка. :rolleyes:

Автор: SenslideR 27.05.12, 03:47
Цитата TEMENb @
в задаче мало данных и не совсем четкое условие.
воможно первая реальзация может выглядеть так


Данных больше нету... =( А условие: определить оптимальное число сотрудников, компов и оборудования.

Автор: TEMENb 27.05.12, 08:53
SenslideR, ну это зделать можно по этой модели

Цитата
SAVEVALUE RETRY VALUE
PS 0 1000.000
PPC 0 868.000
PP 0 224.000


Выходит что на одного сотрудника должно приходится 0,868 компов и 0,224 единицы доп оборудования

Автор: Lazio 27.05.12, 09:18
См. среднее число требовании вы очереди на обслуживание.
131213.png (, : 976)

Автор: TEMENb 27.05.12, 09:31
Lazio, вообщем я этой формулы не знаю, результат деления (0,66 на 0,22) позволяют мне думать, что это коим то образом связанно с трехканальностью рассматриваемого устройства.
Больше помочь ничем не могу. так глубоко анализ не учили.

Автор: SenslideR 27.05.12, 14:51
TEMENb, спасибо, теперь это надо заставить работать =\ а завтра уже сдать! х_Х

Автор: Ghza 28.05.12, 09:57
Доброго времени суток форумчане!
Помогите пожалуйста разобраться с лабораторной, а именно с определением таблиц.

Была задача:

В парикмахерскую с одним креслом приходят клиенты; интервалы времени между ними случайны и распределены равномерно в интервале [35±15] минут. Время обслуживания также распределено равномерно на интервале [13±4] минут. Клиенты, приходящие в парикмахерскую, обслуживаются в порядке очереди «первый пришел – первым обслужен».
Задание: необходимо разработать и отладить имитационную модель парикмахерской в системе моделирования GPSS; модель должна обеспечить получение статистических данных об очереди.

Параметры для построения таблицы равномерного распределения [0,60] шаг 5.

Таблица в модели будет выглядеть следующим образом:

PARIK TABLE M1,0,5,12 ; формирование таблицы (0 - левая граница, 5 - это шаг, 12 - число интервалов (получается 5*12=60, т.е. правая граница, согласно заданию)

Правильно ли я рассуждаю?

Так вроде бы понятно, но при рассмотрении другого примера моделирования никак не могу понять откуда взялись параметры TABLE:

Задача:
Переговорный пункт имеет одно помещение с тремя кабинами для переговоров. Если посетитель застает свободной хотя бы одну кабину, то он оплачивает будущий разговор в кассе, затем ждет соединения и ведет переговоры, после чего покидает переговорный пункт. Если посетитель застает все кабины занятыми, он ждет освобождения одной из них у входа в переговорный пункт.
Интервал времени между приходами посетителей – случайный, распределенный по равномерному закону, составляет 1,5±0,4 мин. Время ожидания соединения – 3,5±1,1 мин., время разговора посетителя по телефону – 4,4±1,35 мин. Длительность разговора и время ожидания соединения – случайные величины, подчиняются равномерному распределению.

Сам текст:
; Вместимость переговорного пункта
Punkt STORAGE 3 ; емкость переговорного пункта
Transit TABLE M1,.5,1,30 ; формирование таблицы
; Имитация прихода посетителей
GENERATE 1.85,1 ; приход посетителей
Povtor GATE SNF Punkt,Zanyt ; регулируется поток посетителей
; Имитация работы переговорного пункта
ENTER Punkt ; войти на переговорный пункт
QUEUE Ocher_kassir ; включение в очередь
SEIZE Kassir ; обращение к кассиру
DEPART Ocher_kassir ; выход из очереди
ADVANCE 1.5,0.4 ; оплата за разговор
RELEASE Kassir ; освобождение кассира
ADVANCE 4.4,1.35 ; время разговора посетителей
LEAVE Punkt ; оставить переговорный пункт
TABULATE Transit ; табулировать переговорный пункт
TERMINATE ; уход посетителей
Zanyt ADVANCE 3.5,1.1 ; время ожидания освобождения телефона
TRANSFER ,Povtor ; переход к оператору с меткой Povtor
; Задание времени моделирования
GENERATE 480 ; время работы модели
TERMINATE 1 ; уменьшение общего времени моделирования на 1 мин
START 1 ; пропускаются по одному посетителю



Вот откуда взялись эти значения M1,.5,1,30? Это высчитывается как-то? Ткните носом конкретно на этом примере, а то не доперает до меня и все(

Автор: TEMENb 28.05.12, 20:35
katenokcat, у вас несколько неправильно построена логика работы.
Если транзакт создаст затор, то вы изымаете его из очереди и уничтожаете. в условии вашей задачи не сказано, что его надо уничтожать
статистику по сумарному времени можно снять, используя mark и m1, запоминая время, если транзакт создавал затор, а вот по продолжительности затора - надо расчиплять первый и крайний транзакт.. примерно так, как вы это делаете, только не перенаправлять, а именно расчиплять. что б родитель продолжил движение по маршруту.

Добавлено
Ghza, да подбирают их.
я, например, стандартно ставлю 0,1,1000
потом подганяю, что б небыло лишних интервалов.
Цитата Ghza @

PARIK TABLE M1,0,5,12 ; формирование таблицы (0 - левая граница, 5 - это шаг, 12 - число интервалов (получается 5*12=60, т.е. правая граница, согласно заданию)

тут вы немного ошибаетесь в суждениях. интервалов на самом деле не 12.. а 10, если память мне не изменяет. т.е. на один или два меньше, чем ожидается. вот ну не помню точно. а лезть проверять - лень :rolleyes:

Автор: Ghza 28.05.12, 22:20
Цитата TEMENb @
katenokcat, у вас несколько неправильно построена логика работы.
Если транзакт создаст затор, то вы изымаете его из очереди и уничтожаете. в условии вашей задачи не сказано, что его надо уничтожать
статистику по сумарному времени можно снять, используя mark и m1, запоминая время, если транзакт создавал затор, а вот по продолжительности затора - надо расчиплять первый и крайний транзакт.. примерно так, как вы это делаете, только не перенаправлять, а именно расчиплять. что б родитель продолжил движение по маршруту.

Добавлено
Ghza, да подбирают их.
я, например, стандартно ставлю 0,1,1000
потом подганяю, что б небыло лишних интервалов.
Цитата Ghza @

PARIK TABLE M1,0,5,12 ; формирование таблицы (0 - левая граница, 5 - это шаг, 12 - число интервалов (получается 5*12=60, т.е. правая граница, согласно заданию)

тут вы немного ошибаетесь в суждениях. интервалов на самом деле не 12.. а 10, если память мне не изменяет. т.е. на один или два меньше, чем ожидается. вот ну не помню точно. а лезть проверять - лень :rolleyes:

Теперь вообще потерялась:(
Ибо в задании где параметры для построения таблицы распределения были [0,50],с шагом 5 в исходнике было указано
TABLE M1,0,5,10

Почитала литературу:

num TABLE A, B, C, D, E

где num – имя или номер таблицы (это понятно)
А – поле, в котором может быть записан либо аргумент таблицы (это M1)
B – верхняя граница нижнего интервала; (это 0)
C – ширина интервала; (это шаг 5)
D – число интервалов; (ну тут чисто логически определила, что пять раз по 10 - выйдет 50)

В общем непонятно. И как подбирать тоже:( Я понимаю, что не понимаю (простите за тавтологию)самого принципа построения таблиц. И стремаюсь жутко, потому что наверняка задаю тут тупые вопросы), но мне надо писать курсач. Потому очень хочу разобраться:(
Помогите кто-нить, а:(

Автор: TEMENb 29.05.12, 07:21
Ghza, ну в чем проблема провести маленький эксперимент? ))

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ttt table   rn1,0,5,12
     
        generate    1
        tabluate    ttt
        terminate   1
     
        start   1000


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TABLE              MEAN    STD.DEV.       RANGE           RETRY FREQUENCY CUM.%
     TTT             499.794  298.497                           0
                                           _  -        0.000             4     0.40
                                       0.000  -        5.000             8     1.20
                                       5.000  -       10.000             9     2.10
                                      10.000  -       15.000             7     2.80
                                      15.000  -       20.000             7     3.50
                                      20.000  -       25.000             4     3.90
                                      25.000  -       30.000             3     4.20
                                      30.000  -       35.000             5     4.70
                                      35.000  -       40.000             4     5.10
                                      40.000  -       45.000             3     5.40
                                      45.000  -       50.000             6     6.00
                                      50.000  -  _                     940   100.00


как видите получили 10 полноценных интервала, + два интервала от минусбесконечности до нуля и от 50 до плюс бесконечности.

Добавлено
кстати, стоит заметить, что 0 попадает в интервал (минус бесконечность; ноль]
ну и остальные числа аналогично.

Автор: Ghza 29.05.12, 08:05
Цитата TEMENb @

Спасибо большое, теперь дошло:)

Автор: TEMENb 29.05.12, 10:38
prototype, вам нужно добавить параметр в initial, что бы определить время приохда
кроме того вставить блок таймера.

Автор: qwert-chan 29.05.12, 21:15
Здравствуйте.
Подскажите пожалуйста, если у меня есть фрагмент программы

TARR1 VARIABLE 0
GENERATE 1
TEST E V$TARR1,0,MET1
SAVEVALUE TARR1,4
TEST E V$TARR1,4,MET1
SAVEVALUE TARR1,8
MET1 TERMINATE 1
START 1

то почему по завершению программы значение TARR1 - 4, а не 8?

Версия GPSS - 4.1.3

Автор: qwert-chan 29.05.12, 21:28
...и сразу дополнение: почему в аналогичной программе переменная себя так необычно ведет? если я правильно понимаю - в первый проход я сравниваю ее с нулем, она увеличивается до четырех - затем я сравниваю четыре с четырем и получается что это неверно(!), а затем, на втором проходе - четыре снова увеличивается на четыре и дает восемь.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    TARR1 VARIABLE 0
    GENERATE 2
    TEST E V$TARR1,0,MET1
    SAVEVALUE TARR1+,4
    TEST E V$TARR1,4,MET1
    SAVEVALUE TARR1+,3
    MET1 TERMINATE 1
    START 2

Автор: TEMENb 29.05.12, 21:35
Цитата qwert-chan @
Здравствуйте.
Подскажите пожалуйста, если у меня есть фрагмент программы

TARR1 VARIABLE 0
GENERATE 1
TEST E V$TARR1,0,MET1
SAVEVALUE TARR1,4
TEST E V$TARR1,4,MET1
SAVEVALUE TARR1,8
MET1 TERMINATE 1
START 1

то почему по завершению программы значение TARR1 - 4, а не 8?

Версия GPSS - 4.1.3


потому что
V$TARR1 всегда равно нулю и аж никак не четырем

наблюдая за ходом ваших мыслей, думаю ваша программа должна выглядеть так
initial x$TARR1,0
GENERATE 1
TEST E x$TARR1,0,MET1
SAVEVALUE TARR1,4
TEST E x$TARR1,4,MET1
SAVEVALUE TARR1,8
MET1 TERMINATE 1
START 1

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

Автор: qwert-chan 29.05.12, 21:37
Черт, а я всю ночь ошибку ищу. Спасибо вам большое.)) =)

Автор: katenokcat 30.05.12, 14:04
TEMENb, спасибо! Вы были правы :)

Автор: Костя030392 03.06.12, 19:08
Здравствуйте помогите пожалуйста ..



Тема. Решение задачи сетевого планирования средствами имитационного моделирования.
Логическая взаимосвязь работ, подлежащих выполнению в ходе технического обслуживания средств вычислительной техники, представлена на рис. Для обозначения каждого вида работы используется пара вершин графа, соединенных дугой. Числа, записанные над дугами, означают продолжительность соответствующих работ в часах. Необходимо построить модель, позволяющую получить распределение времени всего комплекса работ. Найти вероятность того, что все работы будут выполнены не более, чем за 70 часов. Найти наиболее вероятное время завершения технического обслуживания.
____________________.docx (, : 306)

Автор: Cadmus 26.06.12, 06:43
Здравствуйте. Задали задачу по GPSS, бьюсь довольно долго.

Специализированное вычислительное устройство, работающее в режиме реального времени, имеет в своем составе два процессора, соединенные с общей оперативной памятью. В режиме нормальной эксплуатации задания выполняются на первом процессоре, а второй является резервным. Первый процессор характеризуется низкой надежностью и работает безотказно лишь в течение 150+-20 минут. Если отказ происходит во время решения задания, в течение 2 минут производится включение второго процессора, который продолжает решение прерванного задания, а также решает и последующие задания до восстановления первого процессора. Это восстановление происходит за 20+-10, после чего выключается. Задания поступают каждые 10+-5 минут и решаются за 5+-2 минут. Надежность резервного процессора считается идеальной.

Смоделировать: процесс работы устройства в течение 50ч; Подсчитать число решенных заданий, число отказов процессора и число прерванных заданий. Определить максимальную длину очереди заданий и коэффициент загрузки резервного процессора.

Я набросал логику, как мне кажется это должно работать

user posted image

tштрих это текущее модельное время, t0 время в которое было зафиксирована предыдущая поломка первого процессора
x - это число в диапазоне (150+-20) которое определяет наступило время поломки или нет
xштрих - это число в диапазоне (20+-10) которое определяет произошло восстановление первого процессора или нет

Первый вопрос, как сохранить в переменную случайное значение в интервале (150+-20)?

Я нашел вот эту формулу Х=А-В+RN1*(2B+1) и попробовал сделать такое выражение

FAIL VARIABLE (130+(-40)+RN1#(2#40+1))) - правильно ли это? Ошибок вроде не выдает

Автор: spring 27.10.12, 10:40
Помогите, пожалуйста, доработать программу,
необходимо чтобы выходила гистограмма с такими значениями:

λ 1 1.3 1.68 1.7 1.9 2
p 0,000028 0,00007 0,00019 0,00028 0,00038 0,00056



Operator STORAGE 5;
GENERATE (Exponential(1,0,0.5));
TEST g R$Operator,0,met
QUEUE Other;
ENTER Operator;
DEPART Other;
ADVANCE (Exponential(1,0,1));
LEAVE Operator;
TERMINATE ;
MET TERMINATE;
GENERATE 3600;
TERMINATE 1;
START 1;

Автор: spring 27.10.12, 11:55
Ребят, ну ответьте пожалуйста!!!!

Автор: 4er 14.11.12, 06:14
Здравствуйте, возникла проблема: в институте дали задание.

Задание:
На решение в процессор поступает поток программ.
Интервалы времени в потоке распределены по экспоненциальному закону со средним временем, распределенным равномерно от 20 до 40 единиц времени.
Время решения программ распределено по равномерному закону в диапазоне от 15 до 55 единиц времени.
При поступлении на процессор время обработки программы неизвестно (оно становится известно только после окончания ее обработки).
Представить модель обработки программ, когда в первую очередь обрабатываются программы с меньшим временем решения.
ОПРЕДЕЛИТЬ:
1.Написать модель на языке GPSS/PC-2.

Написал 2 рабочие версии: 1 с использованием приоритетов, сказал можно проще и сделать по-другому без приоритетов. 2 с использованием Link/unlink, опять же сказал, что мы на лекциях линки не проходили и написать модель без использования их.
Подскажите, пожалуйста, еще варианты решения данной задачи? :wub:

Автор: kriiisenish 09.03.13, 09:04
Доброго дня ребята. Курсач горит, а я тут дубом просто :fool: Помогите чем сможете. :'(

Задание 7. В ремонтную мастерскую тракторов ООО «Салют» на капитальный ремонт поступают тракторы каждые 50 ± 10 дн., ремонт длится 20 + 5 дн. Текущий ремонт (замена и ремонт топливного насоса, замена свечей, колес и т.д.) производится за 1,5 ± 0,5 дн. Необходимость в текущем ремонте возникает в среднем каждые 10 ± 3 дн. В мастерскую поступают также машины работников аппарата управления хозяйством через 15 ± 5 дн., которые имеют более высокий приоритет обслуживания, чем капитальный ремонт, но ниже, чем текущий. Их ремонт производится обычно за 5 ± 1 дн. Необходимо:
1)Смоделировать работу мастерской в течение полугода.
2)Определить коэффициент использования мастерской.
Мастерская функционирует по принципу хозрасчета. Если капитальный ремонт трактора дает чистый доход в размере 5 0 00 р., а текущий - 3 000, то каков будет чистый доход от проведения ремонта за период моделирования?
Если покупка нового оборудования для ремонта увеличит скорость текущего ремонта тракторов с 1,5 до 0,7 дн., существенно ли это отразится на уменьшении очереди. Оценить статистически.

Автор: Eugen 09.03.13, 13:15
примерно так должно быть DSCN5418.jpg (, : 1047)

Автор: kriiisenish 09.03.13, 16:10
Цитата Eugen @
примерно так должно быть DSCN5418.jpg (, : 1047)

Спасибо большое за направление) теперь все понятно) буду сидеть дорабатывать)

Автор: kriiisenish 15.03.13, 08:58
Ребята, че тут у меня ошибку постоянно выдает на 15 строке. не знаю в чем дело(((
мож кто нить поймет

GENERATE 50,10
QUEUE Overhaul
TRANSFER Mstr1,Mstr2,Mstr3
Mstr1 SEIZE Mstr1
DEPART Overhaul
ADVANCE 20,5
RELEASE Mstr1
TRANSFER ,Mstr1
Mstr2 SEIZE Mstr2
GENERATE 1.5,0.5
QUEUE Spot
PREEMPT Maintenance
DEPART Spot
ADVANCE 10,3
RELEASE Mstr2
TRANSFER Mstr2
Mstr3 SEIZE Mstr
GENERATE 15,5
QUEUE Service
PREEMPT Maintenance
DEPART Service
ADVANCE 5,1
RELEASE Mstr3
TRANSFER ,Mstr3

GENERATE 120
TERMINATE 1
START 1

Автор: Anjel 02.04.13, 16:25
В цехе производится обработка деталей на 3 различных станках с числовым программным управлением(каждый станок настроен на выполнение определенных автоматических операцией).Часть деталей обработывается только на 1станке, часть на 2станках, часть на всех 3станках,Порядок станке деталей на 1 или на 2 станках не имеет значения, но на третьем станке деталь должна быть обработана только после того как будет обработана на первых двух станках,Время поступления заготовки через каждые А±В минут, время обработки на каждом станке Ск±Dk минут, где k номер станка.Задать времена поступления заготовок и обработки и на соотвествующих станках, а так же доли деталей, которые обрабатываются только на 1станке, на 2станках и на 3станках.помогите пожалуйста(((

Автор: willburninhell 22.04.13, 00:18
Приветствую

Есть следующая задача:
На вход некоторого обрабатывающего цеха, состоящего из трех участков, поступает случайный поток деталей. Интервалы поступления распределены экспоненциально со средним значением времени 4 мин. Поступающая деталь с вероятностью 0,65 имеет тип 1, с вероятностью 0,35 - тип 2. Сначала детали поступают на участок 1, где обрабатываются последовательно одна за другой, время обработки распределено равномерно на интервале от 2 до 5 мин. Детали второго типа имеют больший приоритет при обработке, чем детали первого типа.
Далее, после обработки на участке 1, детали 1-го типа поступают на участок 2, а детали 2-го типа - на участок 3. На участке 2 имеется 3 идентичных станка, время обработки детали станком распределено экспоненциально со средним значением 11 мин. На участке 3 имеется 2 станка (время обработки на каждом из них распределено экспоненциально со средним значением 7 мин). Промоделировать работу цеха в течение 40 часов со сбором статистики об очереди деталей перед вторым и третьим участком.


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ; начальные условия
        DEV2    STORAGE 3   ; три станка на втором участке
        DEV3    STORAGE 2   ; два станка на третьем участке
     
        GENERATE    (Exponential(1,0,4))    ; случайный поток деталей, экспоненциальное распределение со средним значением 4 минуты
        TRANSFER    .35,TYPE1,TYPE2     ; вероятность детали первого или второго типа
        
    TYPE1   PRIORITY    1       ; устанавливаем низкий приоритет для детали первого типа
        SEIZE   DEV1        ; деталь попадает на первый участок
        ADVANCE 3.5,1.5     ; деталь обрабатывается от 2 до 5 минут
        RELEASE DEV1        ; деталь покидает первый участок
        PRIORITY    0
        TRANSFER    ,ROOM2      ; отправляем на второй участок
     
    TYPE2   PRIORITY    2       ; устанавливаем высокий приоритет для детали второго типа
        SEIZE   DEV1        ; деталь попадает на первый участок
        ADVANCE 3.5,1.5     ; деталь обрабатывается от 2 до 5 минут
        RELEASE DEV1        ; деталь покидает первый участок
        PRIORITY    0
        TRANSFER    ,ROOM3      ; отправляем на третий участок
     
    ROOM2   QUEUE   QU2     ; очередь перед участком 2
        ENTER   DEV2        ; попадает на второй участок
        DEPART  QU2     ; покидает очередь перед участком 2
        ADVANCE (Exponential(1,0,11))   ; время обработки, экспоненциальное распределение, ср. значение - 11 минут
        LEAVE   DEV2        ; покидает второй участок
        TRANSFER    ,EXT        ; отправляем на выход
     
    ROOM3   QUEUE   QU3     ; очередь перед участком 3
        ENTER   DEV3        ; попадает на третий участок
        DEPART  QU3     ; покидает очередь перед участком 3
        ADVANCE (Exponential(1,0,7))    ; время обработки, экспоненциальное распределение, ср. значение - 7 минут
        LEAVE   DEV3        ; покидает третий участок
        TRANSFER    ,EXT        ; отправляем на выход
     
    EXT TERMINATE
     
     
        GENERATE    2400        ; время симуляции 40 часов
        TERMINATE   1      
        START   1


Вот такое решение у меня получилось, но я сомневаюсь в его правильности, а потому решил спросить ваше мнение, как более опытных в GPSS товарищей
Заранее благодарен за помощь

Автор: darks1de 29.04.13, 18:57
Помогите решить задачу, пожалуйста!

Исходные данные:
На некотором городском маршруте по кольцевому маршруту с десятью остановками работают пять 11-местных и десять 14-местных микроавтобусов. Время движения между остановками имеет равномерное распределение в интервале 5±8 мин. На каждую остановку в соответствии с экспоненциальным за-коном распределения со средним значением 2 мин прибывают пассажиры и ждут микроавтобуса. Микроавтобус подъезжает к остановке и забирает столько пассажиров, сколько имеется свободных мест. Если свободных мест больше, чем пассажиров, то микроавтобус забирает всех. Если на остановке никто не выходит и в микроавтобусе нет свободных мест, он не останавливается. Вероятность того, что пассажир проедет некоторое количество остановок, задана в таблицы.Стоимость проезда - 30 руб.

Вероятность
0,1 0,15 0,2 0,25 0.3
Количество остановок
3 4 5 6 7

Промоделировать работу микроавтобусов на протяжении 16 ч.

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

Автор: Timur2013 05.05.13, 10:51
Здравствуйте. В моей проге выдается ошибка

05/05/13 14:50:17 Model Translation Begun.
05/05/13 14:50:17 Ready.
05/05/13 14:50:17 Error Stop.
05/05/13 14:50:17 Halt.
05/05/13 14:50:17 Clock:0.000000.
05/05/13 14:50:17 Operand A. Invalid expression.
05/05/13 14:50:17 Datum has not been initialized.

Вот сам код:
INITIAL ZAPOMINAEM,0

EVM STORAGE 12

GENERATE (EXPONENTIAL(1,0,160))
QUEUE 1
SEIZE terminal
DEPART 1
ENTER EVM,3
ADVANCE 10
LEAVE EVM,3
ENTER EVM,4
TEST E EVM,0,Met1
SAVEVALUE ZAPOMINAEM+,1
Met1 ADVANCE 10
LEAVE EVM,4
ENTER EVM,12
ADVANCE 10
LEAVE EVM,12
ENTER EVM,6
ADVANCE 10
LEAVE EVM,6
RELEASE terminal
TERMINATE 1

GENERATE (EXPONENTIAL(1,0,160))
QUEUE 2
SEIZE terminal
DEPART 2
ENTER EVM,3
ADVANCE 10
LEAVE EVM,3
ENTER EVM,4
TEST E EVM,0,Met2
SAVEVALUE ZAPOMINAEM+,1
Met2 ADVANCE 10
LEAVE EVM,4
ENTER EVM,12
ADVANCE 10
LEAVE EVM,12
ENTER EVM,6
ADVANCE 10
LEAVE EVM,6
RELEASE terminal
TERMINATE 1

GENERATE (EXPONENTIAL(1,0,160))
QUEUE 3
SEIZE terminal
DEPART 3
ENTER EVM,3
ADVANCE 10
LEAVE EVM,3
ENTER EVM,4
TEST E EVM,0,Met3
SAVEVALUE ZAPOMINAEM+,1
Met3 ADVANCE 10
LEAVE EVM,4
ENTER EVM,12
ADVANCE 10
LEAVE EVM,12
ENTER EVM,6
ADVANCE 10
LEAVE EVM,6
RELEASE terminal
TERMINATE 1

GENERATE (EXPONENTIAL(1,0,160))
QUEUE 4
SEIZE terminal
DEPART 4
ENTER EVM,3
ADVANCE 10
LEAVE EVM,3
ENTER EVM,4
TEST E EVM,0,Met4
SAVEVALUE ZAPOMINAEM+,1
Met4 ADVANCE 10
LEAVE EVM,4
ENTER EVM,12
ADVANCE 10
LEAVE EVM,12
ENTER EVM,6
ADVANCE 10
LEAVE EVM,6
RELEASE terminal

Generate 14400
Terminate 1
start 1

Что нужно исправить в коде, чтоб он работал?

Автор: Alex 11 22.06.13, 09:24
Помогите пожалуйста решить задачу по GPSS, если не трудно.
Условие: В парикмахерскую в среднем заходит 10 клиентов в час. В парикмахерской работают два мастера, причем если оба они заняты, то клиент уходит. Среднее время обслуживания одного клиента составляет 20 минут. Содержание одного рабочего места обходится 150руб в час. Доход от обслуживания одного клиента - 150руб. Определить Р0, Ротк, Qотн, А, Кср, общий доход за один час (Д) и прибыль

Автор: Kykyryza:* 14.11.13, 12:32
Помогите кто-нибууудь решить задачу в GPSS:В офис приходят клиенты через 8±3 мин.,причем 45% клиентов приходят к менеджеру,с которым общаются в течении 10±2 мин.,а остальные приходят на оформление документов ,кот. длится 15±4 мин.После чего все клиенты идут на кассу.Определить количество кассиров,при которых длина очереди будет не более 4-X человек.

Автор: nexusOk 09.12.13, 15:25
Cadmusесли у тебя получилось сделать задание на gpss можешь дать исходник?

Автор: bombadil 19.12.13, 17:31
Поток покупателей распределён по экспоненциальному закону Tср=8мин, Тmin=5мин.
Есть 2 зала, Вероятность покупки 1зал= 65% 2зал=78%
Время покупки 1зал= 10 ± 4 2зал=12 ± 2
Кол-во товаров, шт 1зал= 4 ± 2 2зал=2 ± 1
Время оформление товара 0.5мин

TovarA Function RN1,D5
.2,2/.4,3/.6,4/.8,5/1,6

TovarB Function RN1,D3
.33,1/.66,2/1,3

T_oformlenia Fvariable (FN$TovarA+FN$TovarB)#0.5

Generate (Exponential(1,8,5))
TRANSFER .35,,zal2
Advance 10,4
Zal2 TRANSFER .22,,cassa
Advance 12,2
Cassa Queue ochered
Seize casa
Depart ochered
Advance V$T_oformlenia
Release casa
Terminate
Generate 840
Terminate 1
Start 1

результат
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
CASA 63 0.221 2.944 1 64 0 0 0 0


QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY
OCHERED 1 0 63 57 0.012 0.157 1.653 0

как определит например среднее время подбора товара или число покупок в течении дня ибо в отчёте этого нету?

Автор: julya92 11.08.14, 04:25
Команду Split(разъединять) в GPSS, чем заменить в Arena? быть может Dispose? у меня установлен только пакет Basic Process в Arena для Student..нужны дополнительные?

Автор: julya92 11.08.14, 08:32
Цитата julya92 @

Dispose разобралась

Автор: Savandei 03.11.15, 11:54
veamin здраствуййте,вы нашли ответ на ваш вопрос?

Автор: Cameroon 26.03.16, 15:28
Всем привет, можете помочь с решение следующей задачи?
Промоделировать решение задач в двухпроцессорной ЭВМ с общей памятью, разделенной на 10 блоков. Каждой задаче отводится при её решении один блок. Интервалы времени между поступлениями задач распределены по нормальному закону с параметрами: . Время обработки порции информации подчинено экспоненциальному закону с интенсивностью в первом процессоре и интенсивностью во втором процессоре. Между обработкой с вероятностью, равной 0,39, возможно обращение к устройству вывода графической информации, состоящему из 7 принтеров. Запросы на вывод равновероятны. Интервалы времени между запросами распределены по экспоненциальному закону с интенсивностью.

Как правильно доделать?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MEM                   STORAGE         8  
                          GENERATE       10,2,300
                          QUEUE              SSS1
                          ENTER              MEM,1
                          DEPART            SSS1
    RRR1                  TRANSFER         BOTH,CPU1,CPU2
    CPU1                  SEIZE            PROC1
                          ADVANCE        20,FN$XPdis
                          RELEASE          PROC1
                          TRANSFER       ,RRR2
    CPU2                  SEIZE           PROC2
                          ADVANCE         50,FN$XPdis
                          RELEASE               PROC2
    RRR2                  TRANSFER             0.6,RRR3,DISK
    DISK             TRANSFER             0.333,CCC2,CCC1
    CCC2             TRANSFER              0.5,CCC4,CCC3
    CCC1             QUEUE                     BBB1
                           SEIZE                        DISK1
                           DEPART                   BBB1
                           ASSIGN                    1,DISK1
                           ADVANCE               10,FN$XPdis
                           TRANSFER              ,CCC5
    CCC3             QUEUE                     BBB2
                           SEIZE                        DISK2
                           DEPART                   BBB2
                           ASSIGN                    1,DISK2
                           ADVANCE               10,FN$XPdis
                           TRANSFER              ,CCC5
    CCC4             QUEUE                     BBB3
                           SEIZE                       DISK3
                           DEPART                  BBB3
                           ASSIGN                   1,DISK3
                           ADVANCE              10,FN$XPdis
    CCC5             QUEUE                     BBB4
                           SEIZE                        CAN
                           DEPART                    BBB4
                           ADVANCE                 1
                           RELEASE                   CAN
                           RELEASE                   P1
                           TRANSFER              ,RRR1
    RRR3             LEAVE                       MEM,1
                          TERMINATE              1

Автор: Cameroon 04.04.16, 20:40
Сделал так. Результат получился правильный.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    MEM                   STORAGE         10  
                          GENERATE       10,2,300
                          QUEUE              SSS1
                          ENTER              MEM,1
                          DEPART            SSS1
    RRR1                  TRANSFER         BOTH,CPU1,CPU2
    CPU1                  SEIZE            PROC1
                          ADVANCE        14,FN$XPdis
                          RELEASE          PROC1
                          TRANSFER       ,RRR2
    CPU2                  SEIZE           PROC2
                          ADVANCE         37,FN$XPdis
                          RELEASE               PROC2
    RRR2                  TRANSFER             0.39,RRR3,printer
    printer                 TRANSFER             0.143,CCC2,CCC1
    CCC2                  TRANSFER             0.167,CCC4,CCC3
    CCC4                  TRANSFER             0.2,CCC6,CCC5
    CCC6                  TRANSFER             0.25,CCC8,CCC7
    CCC8                  TRANSFER             0.333,CCC10,CCC9
    CCC10                TRANSFER             0.5,CCC12,CCC11
    CCC1             QUEUE                     BBB1
                           SEIZE                        printer1
                           DEPART                   BBB1
                           ASSIGN                    1,printer1
                           ADVANCE               12,FN$XPdis
                           TRANSFER              ,CCC15
    CCC3             QUEUE                     BBB2
                           SEIZE                        printer2
                           DEPART                   BBB2
                           ASSIGN                    1,printer2
                           ADVANCE               12,FN$XPdis
                           TRANSFER              ,CCC15
    CCC5             QUEUE                     BBB3
                           SEIZE                       printer3
                           DEPART                  BBB3
                           ASSIGN                   1,printer3
                           ADVANCE              12,FN$XPdis
                           TRANSFER              ,CCC15
    CCC7             QUEUE                     BBB3
                           SEIZE                       printer4
                           DEPART                  BBB3
                           ASSIGN                   1,printer4
                           ADVANCE              12,FN$XPdis
                           TRANSFER              ,CCC15
    CCC9             QUEUE                     BBB3
                           SEIZE                       printer5
                           DEPART                  BBB3
                           ASSIGN                   1,printer5
                           ADVANCE              12,FN$XPdis
                           TRANSFER              ,CCC15
    CCC11             QUEUE                     BBB3
                           SEIZE                       printer6
                           DEPART                  BBB3
                           ASSIGN                   1,printer6
                           ADVANCE              12,FN$XPdis
                           TRANSFER              ,CCC15
    CCC12             QUEUE                     BBB3
                           SEIZE                       printer7
                           DEPART                  BBB3
                           ASSIGN                   1,printer7
                           ADVANCE              12,FN$XPdis
                          
    CCC15             QUEUE                     BBB4
                           SEIZE                        CAN
                           DEPART                    BBB4
                           ADVANCE                 1
                           RELEASE                   CAN
                           RELEASE                   P1
                           TRANSFER              ,RRR1
    RRR3             LEAVE                       MEM,1                  
     TERMINATE              1

Автор: pretttymom 01.12.22, 14:40
Цитата spring @

Помогите сделать программу, горит фпроектнвя работа:
на обработку по равномерному закону в устройство поступает 2 потока заготовок деталей первый - со временем 5+-2 мин, а второй - 25+-2 мин. Второй поток прерывает изготовление деталей первого потока. Время обработки деталей первого потока 7+-2 мин, второго 11+-2 мин. Смоделировать процесс обработки 100 деталей, образующих 2 потока

Автор: Betelgeuse 21.07.23, 06:37
https://cyberforum7.rssing.com/chan-5994357...rticle6289.html

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)