
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (54) « Первая ... 46 47 [48] 49 50 ... 53 54 ( Перейти к последнему сообщению ) |
Сообщ.
#706
,
|
|
|
Полное условие вам ни к чему, моделируется работа локальной подсистемы хранения информации, элемент который я очень кратко вынес - элемент работы определённой "ветки(куска)" технологии.
![]() ![]() СЕЛЕКТ 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 идея конечно превращается в муд)) |
Сообщ.
#707
,
|
|
|
Попробуйте так
generate 1 assign 5,10 QUEUE P5 SEIZE P5 DEPART P5 savevalue 1,q*5 ADVANCE x1 ;Для простоты допустим так RELEASE P5 terminate generate 10 terminate 1 |
Сообщ.
#708
,
|
|
|
![]() ![]() |
Сообщ.
#709
,
|
|
|
Теперь у Вас все должно работать как надо!
q*5 означает текущее значение длины очереди, номер которой является значением параметра 5 активного транзакта. * означает косвенную адресацию. Извините, что сразу не понял, что Вам надо. |
Сообщ.
#710
,
|
|
|
Большое вам спасибо за своевременную и квалифицированную помощь!
P.S. Да прибудет с нами Шрайбер)) |
Сообщ.
#711
,
|
|
|
Рад был помочь.
|
Сообщ.
#712
,
|
|
|
А вот могли бы ещё по такому вопросу проконсультировать - в процессе создания моделей, изучения литературы - в голову приходят интересны мысли, например в модели мне интересно было бы использовать следующие структуры:
1. Динамически изменяемая ёмкость памяти (STORAGE) - да это может привести к сбою программы в случае уменьшения счётчика и т.д. НО если мне нужно всё время увеличивать очередь, а не уменьшать? Или скажем в начальных исходных данных размер определяется однократно( но зависит от нескольких исходных переменных). Как верно записать, и возможно ли это (выводить и вводить transferom заявки не вариант, выводить и выводить не по 1 тоже не вариант) Пример - Размер очереди(некая общая очередь) зависит от кол-во устройств и ихней(собственной) памяти (компилятор ругаеца) (обе переменные const, и задаются в начале программы. При изменении одной из них(новый прогон) автоматически должна меняться ёмкость памяти) ![]() ![]() QUE STORAGE (V$N#V$P) 2. Как правильно записать следующую функцию и возможно ли это. пример - В зависимости от псевдослучайного значения ГСЧ FN$PRIMER примет одно из след значений (компилятор ругаеца) ![]() ![]() PRIMER FUNCTION RN1,D2 .15,V$I/1,V$Y |
Сообщ.
#713
,
|
|
|
Привет всем!
Прошу посоветовать по следующему вопросу: Пусть имееться некая модель (я ее упростил, но для примера думаю сойдет): 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; Вопрос: не могу никак понять как их соединить в одном окне модели и вызвать процедуру после истечения периода моделирования. Подскажите пожайлуста. ![]() |
Сообщ.
#714
,
|
|
|
Уважаемые форумчане!Подскажите начинающему ответ на вот такой вопрос(изучаю GPSS World самостоятельно, литература есть,но терзают смутные сомнения):что задается в START?Количество проходов программы?Или время работы программы?Поясню свой вопрос на примере:допустим нужно смоделировать работу какой либо системы за полный рабочий день-8часов,т.е.при старте я задам 8 часов(в минутах допустим)?Так?
А если нужно по заданию узнать время обработки 300 заявок например,то в старте 300 будем писать?Так? Или я не так все понимаю ![]() Сразу извиняюсь за такой школьный вопрос ![]() ![]() ![]() |
Сообщ.
#715
,
|
|
|
Чтобы обработать 300 заявок необходимо указывать start 300, но в тексте модели надо при удалении заявки из системы указывать terminate 1
|
Сообщ.
#716
,
|
|
|
Цитата olsheu @ Чтобы обработать 300 заявок необходимо указывать start 300, но в тексте модели надо при удалении заявки из системы указывать terminate 1 Спасибо за ответ ![]() А тогда чем будет отличаться код,программа для 8часового рабочего дня например? |
Сообщ.
#717
,
|
|
|
Надо сделать дополнительный сегмент модели и если единица модельного времени = 1 мин, то надо написать
generate 480 terminate 1 start 1 480=8*60 - в одном часе 60 мин. А в тексте модели при уничтожении транзакта использовать terminate без единицы. |
Сообщ.
#718
,
|
|
|
Цитата olsheu @ Надо сделать дополнительный сегмент модели и если единица модельного времени = 1 мин, то надо написать generate 480 terminate 1 start 1 480=8*60 - в одном часе 60 мин. А в тексте модели при уничтожении транзакта использовать terminate без единицы. Спасибо большое!!!Теперь мне понятно ![]() Добавлено У меня еще один вопрос:если start прописать в тексте программы-обязательно\не обязательно выполнять команду start, после симуляции? |
Сообщ.
#719
,
|
|
|
Если start в тексте программы, то после команды create simulation, модель будет выполнена автоматически и появится отчет.
|
Сообщ.
#720
,
|
|
|
Цитата olsheu @ Если start в тексте программы, то после команды create simulation, модель будет выполнена автоматически и появится отчет. Т.е. ничего "страшного" не будет если я не в тексте,а командой задам Start? Спасибо за ответ Вам ![]() |