8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
|
|
1 | |
Простая схема СМО03.04.2015, 19:59. Показов 2002. Ответов 16
Метки нет (Все метки)
Здравствуйте, форумобитатели.
Сегодня начал изучать этот очень своеобразный язык с замысловатым синтаксисом, наткнулся совершенно случайно и пришло откровение - ведь, оказывается, что на этом языке смоделировать систему намного легче, чем на Си++ и т.п. языках!!! - такое задание у меня, вот По делу: я хочу получить характеристики системы (рисунок во вложении) и, насмотревшись примеров, написал такой код (с дискретной величиной, я пока не понял можно ли вообще), в любом случае, код не работает - ругается при создании симуляции на transfer. Помогите, пожалуйста: Код
; FIRST GENERATE (Exponential(1, 0, (1/2))) QUEUE INCOMING_STREAM SEIZE STATION1 DEPART INCOMING_STREAM ADVANCE (Exponential(1, 0, (1/0.47))) RELEASE STATION1 QUEUE BEFORE_ST2 SEIZE STATION2 DEPART BEFORE_ST2 ADVANCE (Exponential(1, 0, (1/0.43))) RELEASE STATION2 QUEUE BEFORE_ST3_AND_ST4 TRANSFER BOTH, ST3, ST4 ST3 SEIZE STATION3 DEPART BEFORE_ST3_AND_ST4 ADVANCE (Exponential(1, 0, (1/0.9))) RELEASE STATION3 TRANSFER ,OUT ST4 SEIZE STATION4 DEPART BEFORE_ST3_AND_ST4 ADVANCE (Exponential(1, 0, (1/0.83))) RELEASE STATION4 OUT TERMINATE ; SECOND GENERATE 50 TERMINATE 1 И еще вопрос, если не трудно: GENERATE 50 - правильно ли, что все это будет генерация транзактов будет в течении 50 условных минут по тому эксп. закону в начале?
0
|
03.04.2015, 19:59 | |
Ответы с готовыми решениями:
16
Модель СМО Модель СМО Одноканальная СМО СМО с отказами |
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
03.04.2015, 21:14 | 2 |
Код
04/03/15 23:06:55 Model Translation Begun. 04/03/15 23:06:55 Line 15, Col 23. Invalid SNA in GPSS Statement. Operand E. 04/03/15 23:06:55 ST3 SEIZE STATION3 04/03/15 23:06:55 Line 20, Col 1. Invalid SNA. Expecting a Label or GPSS Verb. 04/03/15 23:06:55 ST4 SEIZE STATION4 04/03/15 23:06:55 **** Model Translation Aborted **** TRANSFER - убрать лишние пробелы между запятыми и в конце строчки, GPSS очень не любит пробелы!!! убирайте везде (по уму) в конец программы можно поставить сразу счётчик завершения моделирования START 1 то есть сколько должно покинуть систему заявок через TERMINATE 1 чтобы завершилось моделировании системы
0
|
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
|
|
03.04.2015, 23:45 [ТС] | 3 |
Спасибо, все заработало! Все же вопрос в силе: 50 - это время в течении которого мы создаем заявки?
И еще: программа верно написано? Насчет счетчика, сейчас примеры поищу Добавлено через 3 минуты А все понял насчет счетчика, такой вопрос как задать дискретное распределение (ну прошу ссылку какую-нить?) Добавлено через 39 минут ага! правильно, что дискретная величина так для моего примера задается таким образом: Код
MY_INCOM FUNCTION RNj,D3 .35,5/.7,10/1,50
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
04.04.2015, 09:55 | 4 |
j здесь номер генератора случайных чисел (хорошо про генераторы написано в начале книги Шрайбер Имитационное моделирование на GPSS).
j=от 1 до 8, хотя в теории можно и больше, эти генераторы ПСЕВДОслучайных чисел имеют определённое начальное значение(см. Шрайбер) которое может быть изменено в начале программы другим блоком (запамятовал), но обычно их переопределять нет смысла для обычной задачи
0
|
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
|
|
04.04.2015, 13:50 [ТС] | 5 |
да, нашел, стр.140 Шрайбера. Даже при неизмененных начальных значениях у генератора будет ли код в целом верен? Есть ли ошибки какие-нибудь логические или потери где-нибудь в силу кривоты кода?
Код
DISC0 FUNCTION RN1,D3 .4,5/.8,10/1,50 DISC1 FUNCTION RN2,D3 .35,5/.7,10/1,50 DISC2 FUNCTION RN3,D3 .3,5/.6,10/1,50 DISC3 FUNCTION RN4,D3 .25,5/.5,10/1,50 DISC4 FUNCTION RN5,D3 .2,5/.4,10/1,50 ; FIRST ;GENERATE (Exponential(1, 0, (1/2))) GENERATE FN$DISC0 QUEUE INCOMING_STREAM SEIZE STATION1 DEPART INCOMING_STREAM ADVANCE FN$DISC1 RELEASE STATION1 QUEUE BEFORE_ST2 SEIZE STATION2 DEPART BEFORE_ST2 ADVANCE FN$DISC2 RELEASE STATION2 QUEUE BEFORE_ST3_AND_ST4 TRANSFER BOTH, ST3, ST4 ST3 SEIZE STATION3 DEPART BEFORE_ST3_AND_ST4 ADVANCE FN$DISC3 RELEASE STATION3 TRANSFER ,OUT ST4 SEIZE STATION4 DEPART BEFORE_ST3_AND_ST4 ADVANCE FN$DISC4 RELEASE STATION4 OUT TERMINATE ; SECOND GENERATE 50 TERMINATE 1 Потому что отчет ненормальный какой-то:
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
04.04.2015, 15:19 | 6 |
Нормальная модель, нормальный отчёт.
Модель у вас работает 50 единиц времени, за которые не успевает ни 1 заявка обработаться нигде. 50 единиц потомучто у вас есть сегмент Код
GENERATE 50 ; В момент времени 50 формируется заявка TERMINATE 1 ; Вычитается единица из счётчика завершения модели (START -1 ->0 завершение моделирования) START 1 ; Счётчик числа заявок до конца обслуживания
0
|
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
|
|
04.04.2015, 16:09 [ТС] | 7 |
А ведь действительно, отлично! спасибо.
И последний вопрос: в таблице отчета есть колонка UTIL., которая показывает время занятости данного прибора за все время работы системы. но это проценты. вот, если необходимо мне вычислить время простоя на каждом приборе в единицах времени, как мне это сделать? Как это реализовать? Если можно, то пример какой-нибудь прошу.
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
04.04.2015, 17:05 | 8 |
UTIL. это коэффициент загрузки устройства, обычно в долях 0..1, идея верная доля времени занятости устройства от общего времени моделирования.
UTIL = время занятости / общее время общее время моделирования (AC1 это текущее время в модели) вам в этой формуле известно UTIL тоже известно FR$NAME ; где NAME имя устройства остаётся неизвестным время занятости - уравнение с одной переменной далее время занятости + время простоя = общее время (АС1) ещё одно уравнение с одной неизвестной. вычислите из этих уравнений неизвестное вам время простоя через известные величины и сделайте расчёт в конце моделирования автоматическим Код
GENERATE 50 ; В момент времени 50 формируется заявка SAVEVALUE VREMYA_PROSTOYA,(AC1+FR$NAME) ; Пример TERMINATE 1 ; Вычитается единица из счётчика завершения модели (START -1 ->0 завершение моделирования) START 1 ; Счётчик числа заявок до конца обслуживания
0
|
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
|
|
04.04.2015, 17:49 [ТС] | 9 |
так... что-то странное получается
Код
GENERATE 5000 SAVEVALUE VREMYA_PROSTOYA1,(AC1-(FR$STATION1#AC1)) SAVEVALUE VREMYA_PROSTOYA2,(AC1-(FR$STATION2#AC1)) SAVEVALUE VREMYA_PROSTOYA3,(AC1-(FR$STATION3#AC1)) SAVEVALUE VREMYA_PROSTOYA4,(AC1-(FR$STATION4#AC1)) TERMINATE 1 START 1
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
04.04.2015, 20:22 | 10 |
В конце моделирования - меню Command/SHOW SHOW FR$STATION1
Внизу увидите .... выводит значение не в дроби 0..1, а в целом 0...999
0
|
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
|
|
04.04.2015, 21:34 [ТС] | 11 |
ООооо огромное спасибо!!! Да показывает все верно, а как понять эту дробь "-4.86e+006"
Добавлено через 7 минут или исправить как нибудь чтобы сразу выводило в целом? Добавлено через 11 минут Потому что выводится, например, для SHOW FR$STATION1 - 973.0, а это в 2 раза больше 486 и так для каждого. Добавлено через 1 минуту Независимо от START 1 или START 10 ничего не меняется у SHOW FR$STATION1, а в таблице в соответствующее число раз все возрастает Добавлено через 3 минуты или SHOW FR$STATION1 - усредненный показатель, если несколько раз запускается система?
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
04.04.2015, 21:38 | 12 |
Усреднённый показатель, чем больше время моделирования тем статистически корректнее результат.
"-4.86e+006" = -4.86*10^6 Думаю можно в формуле поделить FR$.... на 1000, чтобы привести значение к доле 0..1 (вероятности, загрузке)
0
|
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
|
|
04.04.2015, 22:02 [ТС] | 13 |
понятно. а почему show другие числа показывает? (поделил на 10000)
Добавлено через 12 минут aaa SHOW FR$STATION1 - это время загрузки прибора, а не простоя! Так ведь? Добавлено через 8 минут не время а процент загрузки прибора *1000
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
04.04.2015, 22:13 | 14 |
Угу, то что умножение на 1000 это GPSS сам Вернее его разработчики, поэтому всегда нужен глаз да глаз.
Прикрепляю к сообщению все стандартные числовые атрибуты которые доступны пользователям Вложение 403900
0
|
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
|
|
04.04.2015, 22:22 [ТС] | 15 |
Хм, а можно сделать вот так?
Код
INITIAL X$MY_NUM,2 ...код... START V$MY_NUM Код
SAVEVALUE VREMYA_PROSTOYA1,(((AC1-(FR$STATION1#AC1))/10000)/V$MY_NUM) Вложение весьма полезное, спасибо. правда больше половины мне не понятными кажутся)
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
04.04.2015, 22:28 | 16 |
В последней формуле наверно НЕ V$MY_NUM а X$ всётаки сохраняемая величина (savevalue).
На счёт написанного нужно проверять, возьмёт ли он переменную величину для START - врядли ... можно константой Код
PRIMER EQU 2 SAVEVALUE ....,PRIMER
0
|
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
|
|
04.04.2015, 22:44 [ТС] | 17 |
Код
START Как итог, хочу сказать что очень благодарен Вам, Dukalys!!!! вроде с чем-то разобрался и вроде что-то понял, так что... огромное СПАСИБО!!!
0
|
04.04.2015, 22:44 | |
04.04.2015, 22:44 | |
Помогаю со студенческими работами здесь
17
Модель СМО Разомкнутая СМО Моделирование СМО Моделирование СМО Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |