
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.87] |
![]() |
|
Страницы: (54) 1 2 [3] 4 5 ... 53 54 ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
из другой темы
Цитата Но лучше для этих целей использовать параметры транзакта. Т.к. в этой задаче у вас один транзакт (пакет), а реально в сети их дофига. Маркер должен быть у каждого свой. 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кбайт |
Сообщ.
#32
,
|
|
|
variable - это вычисляемое выражение...
Вам же нужна сохраняемая величина (я б сказал переменная, но это вводит в заблуждение))) теперь касаемо вашей задачи ![]() ![]() GENERATE ,,,1 SAVAVALUE MARKER,1 SMET SAVEVALUE MARKER+,1 TEST G X$MARKER,5,SMET TERMINATE 1 START 1 следующий момент. это ж получается так, что маркер обходит 5 компов и покидает систему. Разве так должно быть? может вам надо что то типа ![]() ![]() 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.о Я думал дипломик... |
Сообщ.
#33
,
|
|
|
Цитата 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$ от реализации) |
Сообщ.
#34
,
|
|
|
Ребят! Помогите советом!
Задача: В цех сборки поступает три типа деталей: детали первого типа с интервалом 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, у тебя был ряд претензий по этой задаче ))) выкладывай! а то так и не научусь задачи нормально решать ))) |
Сообщ.
#35
,
|
|
|
Цитата 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 мин". чуствуете разниццу? |
Сообщ.
#36
,
|
|
|
Цитата 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 - это просто эксперимент я ставила ![]() |
Сообщ.
#37
,
|
|
|
угу, нащет упаковщика не доглядел. Действительно отдельный сегмент на него не нужен.
нащет сплит - посудите сами. у вас ведь генерируется три типа деталей. так? =) вот идет транзакт. он проходит через первый сплит, появляется потомок, которого отправляют на метку ММ2, родитель движет дальше. т.е. по прохождении одного сплита получается два транзакта. Далие родитель попадает во второй сплин - потомок идет на ММ3, а родитель - дальше.. а дальше - это мм1 =))) два сплита - три транзакта. все верно =) |
Сообщ.
#38
,
|
|
|
ага, действительно ))) правильно все!спасибо за помощь!
|
Сообщ.
#39
,
|
|
|
а вот задача такого плана: даны графы состояния системы...имеется система вероятности состояний. для их получения проделала кучу математики : составлялась матрица интенсивности по указанному графу состояния системы, получаем систему уравнений Колмогорова,решаем методом Крамера, применяем обратное преобразование Лапласа и далее, по полученным преобразованиям, постоена зависимость р(t), где р-стационарная вероятность системы в Маткаде).. и мне осталось постоить модель такой системы в GPSS. ума не приложу как делать это((.
![]() буду очень рада за помошь |
Сообщ.
#40
,
|
|
|
Подскажите,пожалуйста,как узнать время переходного(неустановившегося)режима?!оч нужно!
|
Сообщ.
#41
,
|
|
|
Задан экспоненциальный закон распределения интенсивности поступления клиентов. Почему при построении графика зависимости вероятности отказа от интенсивности поступления в нескольких точках при одинаковой интенсивности поступления и разной интенсивности обслуживания получается одна и та же вероятность отказа?
|
Сообщ.
#42
,
|
|
|
код в студию
|
Сообщ.
#43
,
|
|
|
Помогите пожалуйста решить задачу на MICRO-GPSS (STUDENT VERSION 95-01-01).
Задание: На комплексный конвейер сборочного цеха каждые 5+-1 мин. (случайная величина распределена по нормальному закону распределения) поступают 5 изделий первого типа, и каждые 20+-7 мин поступают (случайная величина распределена по экспоненциальному закону распределения) 20 изделий второго типа. Конвейер состоит из секций, вмещаемых по 10 изделий каждого типа. Комплектация начинается только при наличии деталей обоих типов в требуемом количестве и длится 10 мин. При нехватке деталей секция конвейера остается пустой.Смоделировать работу конвейера в течение 8 часов. Также необходимо "Определить вероятность пропуска секции, средние и максимальные очереди по каждому типу изделий. Определить экономическую целесообразность перехода на секции по 20 изделий со временем комплектации 20 мин.", но это уже не главное. Я находила решение этой задачи в Интернете, но не на MICRO-версии, а на обычном GPSS: ![]() ![]() 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: ![]() ![]() 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'ов: ![]() ![]() 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 раз... не знаю почему... В общем у меня складывается ощущение что я концептуально неправильно что-то делаю - помогите пожалуйста бедной девушке - уже третий день сижу вот мучаюсь... ;( |
Сообщ.
#44
,
|
|
|
эээээээээээээ.........
А что за микроверсия и с чем ее едят? Де можно ее качнуть и есть ли мануалы по ней? Сам я юзаю 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" и сишные коментарии, вызывающие ошибку. |
Сообщ.
#45
,
|
|
|
Вообщем программа совсем не соответствует заданию.
![]() Исходя из программы - для детали каждого вида свой отдельный контейнер. работают они независимо друг от друга.принцип действия таков - детальки идут и не глядя направо-налево, без лишних слов становятся в контейнер. ![]() ![]() ![]() ![]() ![]() Цитата makingbeauty @ В глубину мысли такого экстеррного завершения моделлирования даже лезть не хочецца LEAVE NN1,10 //освобождает 10 единиц памяти в накопителе NN1 TERMINATE 9 //уничтожение 9 транзактов ![]() а после того, как этот момент пройден - снова начинаем по одной детальке плевать в комплектацию )) НО!! Это еще не все!! ![]() Контейнеры заполняются только один раз!! ![]() Даже не заполняются, а позволяют войти десяти деталям. А потом грят - "наша суточная норма закончена, приходите завтра" - и никого не пускают больше ![]() Ээээ.... вам такая модель нада была? ![]() |