0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
1 | |
Моделирование работы склада22.03.2016, 20:14. Показов 4586. Ответов 41
Помогите пожалуйста,
задание: На склад готовой продукции предприятия каждые 5 ± 2 мин поступают изделия типа А партиями по 500 шт., а каждые 20 ± 5 мин — изделия типа В партиями по 2000 шт. С интервалом времени 10 ± 5 мин к складу подъезжают автомобили, в каждый из которых надо погрузить по 1000 шт. изделий типа А и В. Погрузка начинается, если изделия обоих типов имеются на складе в нужном количестве, и продолжается 10 ± 2 мин. У склада одновременно могут находиться не более трех автомобилей, включая автомобиль, стоящий под погрузкой. Автомобили, не нашедшие места у склада, уезжают с его территории без груза. Смоделировать работу склада при условии, что загрузиться должны 50 автомобилей. Подсчитать число автомобилей, уехавших без груза. Определить среднее и максимальное количество изделий каждого типа, хранящихся на складе. На форуме уже была такая задача, и с её решением человеку, судя по всему, очень помогли, но у меня лично возник вопрос, как смоделировать работу склада не с QUEUE а с LINK? Справок по этому оператору не понимаю, объясните пожалуйста что такое дисциплина списка из хелпа приведенного ниже? LINK - помещает транзакт в список пользователя. Формат: LINK А,В, С А - номер списка; В - дисциплина списка (FIFO, LIFO, номер параметра); С - альтернативный блок.
0
|
22.03.2016, 20:14 | |
Ответы с готовыми решениями:
41
Моделирование работы склада Моделирование работы склада Исследование эффективности моделирование работы склада средствами имитационного моделирования. Модель работы склада |
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
23.03.2016, 11:36 | 2 |
Чтобы лучше разобраться с LINK-UNLINK нужно писать и анализировать простенькие программки.
Например, Код
GENERATE 100 LINK SPISOK,FIFO GENERATE 1000 TERMINATE 1 START 1 Так время моделирования задано 1000, то есть по идее к концу моделирования в списке может быть 10 заявок (1000/100). Проверяем, такс ... запускаем программу. Код
START TIME END TIME BLOCKS FACILITIES STORAGES 0.000 1000.000 4 0 0 LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY 1 GENERATE 9 0 0 2 LINK 9 9 0 3 GENERATE 1 0 0 4 TERMINATE 1 0 0 Это так лирика. Идём в меню Window/Simulation Snapschot/Userchains snapschot Вот тон наш список с 9 заявками !!! все они ждут не дождутся своего часа. Кстати номерки там идут 1, а потом 3, что подтверждает что номер 2 заявки был занят для генерации заявки (GENERATE 1000). Такс ... теперь нужно както изымать из этого списка заявки - в соответствии с логикой работы модели. Для этого нужно использовать блок UNLINK. Никогда не забывайте, что заявки далее LINK не пойдут, записавшись в блок LINK, заявка удаляется из модели или просто переносится в ваш список. То есть в такой последовательности работать не будет. Код
LINK UNLINK Код
GENERATE 100 LINK SPISOK,FIFO GENERATE 200 UNLINK SPISOK,DEL,1 TERMINATE DEL TERMINATE GENERATE 1000 TERMINATE 1 START 1 Код
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY 1 GENERATE 10 0 0 2 LINK 10 6 0 3 GENERATE 5 0 0 4 UNLINK 5 0 0 5 TERMINATE 5 0 0 DEL 6 TERMINATE 4 0 0 7 GENERATE 1 0 0 8 TERMINATE 1 0 0 Теперь уже можно и очередь на базе LINK-UNLINK строить тут логику продумать надо 1. сначала проверить, занято ли устройство обслуживания TEST 1 2. В зависимости от результата, если занято то в LINK заявку, если свободно то на обслуживание 3. после обслуживания заявка выходящая должна посмотреть есть что-то в списке или нету TEST CH$имяСписка 4. если есть то вынимаем из LINK и отправляем в устройство. вродебы всё.
0
|
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
25.03.2016, 15:26 [ТС] | 3 |
Dukalys,
[Code] Код
GENERATE 100 LINK SPISOKA,FIFO ; создаем список деталей А GENERATE 5,2,,500 ;каждые 5±2 мин 500 штук UNLINK SPISOKA,DELA,1000 ;вытащить оттуда 1000 штук и послать на DELA TERMINATE DELA TERMINATE LINK SPISOKB, FIFO ;детали типа B GENERATE 20,5,,2000; 20±5 мин 2000 штук UNLINK SPISOKB,DELB,1000 ;вытащить также 1000 штук DELB TERMINATE ;послать на DELB -----вот тут не знаю как----- GENERATE 10,5 ;интервал когда машины подъезжают ADVANCE 10,2 ; грузятся 10±2 мин и уезжают TERMINATE 1; Но вот только есть ещё условия что не должно находиться более 3 машин(включая "грузящийся"), лишние авто уезжают без груза START 1
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
25.03.2016, 15:31 | 4 |
Код не бред!
0
|
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
25.03.2016, 15:42 [ТС] | 5 |
Dukalys, а как делать тогда помогите пожалуйста
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
25.03.2016, 15:52 | 6 |
Код
каждые 20 ± 5 мин — изделия типа В Добавлено через 4 минуты Я думаю можно разнести заявки типа А и Б по различным спискам. Сложнее когда заявки все будут в 1 списке, тогда чтобы вынуть нужную заявки придётся весь список (ALL) перетряхать и выбирать там заявку нужного типа. Чтобы разделить заявки обычно используют индивидуальные параметры заявок. Код
GENERATE 100 ASSIGN TYPE,1 ; записываем в параметр P$TYPE индивидуальное значение заявки TEST E P1,1,NERAVNO1 ; проверяем значение параметра1 = 1? если равно - то ниже, иначе по метке ... NERAVNO1 ... TERMINATE
0
|
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
25.03.2016, 16:04 [ТС] | 7 |
Dukalys, не в списке надо создавать, а созданные в список складывать?
Как тогда? Если так нельзя делать: Код
LINK UNLINK
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
25.03.2016, 16:13 | 8 |
По задаче.
Разложите задачу по фрагментам. Создайте шаблон модели. 1. каждые 5 ± 2 мин поступают изделия типа А 2. каждые 20 ± 5 мин — изделия типа В 3. С интервалом времени 10 ± 5 мин к складу подъезжают автомобили Первые два события ДОБАВЛЯЮТ заявки в списки. Третье событие достаёт нужное количество. Шаблон Код
GENERATE 5,2 LINK A (минимум 3 символа название) GENERATE 20,5 LINK B (у Вас здесь почему то UNLINK) GENERATE 10,5 TEST Q$OCHERED проверка размера очереди машин, больше 3 не нужно QUEUE OCHERED очередь машин Проверка, есть по тыще материалов в списках А и Б ? если есть идём далее (нет - ждём) DEPART UNLINK 1000 из А, отправляем их на выход куданить, здесь эти детали не нужны, здесь заявка машина которая их перевозит, смысл сделать МИНУС 1000 в списке. UNLINK 1000 из Б , тоже их куданить выкинуть на выход. ADVANCE 10,2 ; погрузка ... TERMINATE ....
1
|
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
25.03.2016, 19:27 [ТС] | 9 |
Код
DETA GENERATE 5,2 LINK SPISOK_A,FIFO ;детали А DETB GENERATE 20,5 LINK SPISOK_B,FIFO ;детали B GENERATE 10,5 TEST_L Q$OCHERED,3,out QUEUE OCHERED TRU TEST GE CH$SPISOK_A,1000 TEST GE CH$SPISOK_B,1000 DEPART OCHERED UNLINK SPISOK_A,DELA,1000 DELA TERMINATE UNLINK SPISOK_B,DELB,1000 ADVANCE 10,2 TERMINATE 1 START 1 03/25/16 21:20:26 Model Translation Begun. 03/25/16 21:20:26 Line 8, Col 7. Invalid SNA. Expecting a GPSS Verb. 03/25/16 21:20:26 TEST_L Q$OCHERED,3,out 03/25/16 21:20:26 **** Model Translation Aborted ****
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
25.03.2016, 20:55 | 10 |
Внимательно за синтаксисом. Добавлено через 17 минут Допустим в системе 1000 груза А и 0 Б. Теперь заходит 1 машина, делает проверку А, больше 1000 и встаёт на проверке Б. Заходит вторая заявка, УДАЧНО проходит проверку А и встаёт Б. Ошибка здесь в чём? в том, что 1000 груза А хватит только на 1 машину !!! а прошло проверку уже две, и третья пройдёт без труда. Нужно заменить проверку на одну, после чего машина сразу должна забирать груз и А и Б!!! TEST E ((CH$SPISOK_A'GE'1000)&&(CH$SPISOK_B'GE'1000)),1 GE (>=) && - И , кстати возможно нужно будет 'AND' если условие правда, то возвращается 1, иначе 0. Добавлено через 19 минут Да кстати, заходить должно у вас по 500 груза, а сейчас по факту по 1. В принципе можно сделать как. пускай заходит по 1 (вы юудете знать что это 500 единиц). Но тогда и забираемый груз нужно привести к этим единицам, то есть забирается две.
0
|
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
26.03.2016, 16:43 [ТС] | 11 |
Добавлено через 8 минут
Dukalys, ошибку понял, только вот насчет погрузки: как сделать чтобы unlink и А и Б одновременно? Код
DETA GENERATE 5,2 LINK SPISOK_A,FIFO ;детали А DETB GENERATE 20,5 LINK SPISOK_B,FIFO ;детали B GENERATE 10,5 TEST L Q$OCHERED,3,out QUEUE OCHERED TRU TEST E ((CH$SPISOK_A'GE'2)'AND'(CH$SPISOK_B'GE'2)),1 DEPART OCHERED UNLINK SPISOK_A,DELA,2 * UNLINK SPISOK_B,DELB,2 * DELA TERMINATE DELB TERMINATE ADVANCE 10,2 TERMINATE 1 START 1
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
26.03.2016, 16:51 | 12 |
Мы уже разобрали что модель это нечто иное как список событий.
дак вот когда дело доходит например до очередной заявк - её продвижения, то она двигается по коду последовательно блок за блоком ДО ТЕХ ПОР, пока не встретит ограничение. В данном случае уместным будет поставить два блока UNLINK последовательно. Код
UNLINK A ; планируем вывод заявок, активной остаётся вынимающая заявка UNLINK B; планируем вывод заявок ADVANCE ; задерживает активную заявку и тут список событий становится активным сначала для заявок из списка А, а потом для каждой изымаемой из Б.
0
|
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
26.03.2016, 17:10 [ТС] | 13 |
Dukalys, запустил, и теперь ошибка в тесте очереди То есть при альтернативном варианте событий нужно что то другое?
03/26/16 18:54:22 Model Translation Begun. 03/26/16 18:54:22 Ready. 03/26/16 18:54:23 Simulation in Progress. 03/26/16 18:54:23 Error Stop. 03/26/16 18:54:23 Halt. XN: 12. Block 6 Next. 03/26/16 18:54:23 Clock:39.320020. Next: TEST. Line 8. 03/26/16 18:54:23 TEST L Q$OCHERED,3,out ;проверка количества машин для погрузки 03/26/16 18:54:23 Operand C. Invalid expression. 03/26/16 18:54:23 Datum has not been initialized. Добавлено через 14 минут Код
DETA GENERATE 5,2 LINK SPISOK_A,FIFO ;детали А DETB GENERATE 20,5 LINK SPISOK_B,FIFO ;детали B GENERATE 10,5 TEST L Q$OCHERED,3,out QUEUE OCHERED TRU TEST E ((CH$SPISOK_A'GE'2)'AND'(CH$SPISOK_B'GE'2)),1 DEPART OCHERED UNLINK SPISOK_A,DELA,2 UNLINK SPISOK_B,DELB,2 DELA TERMINATE ;выкидывание А DELB TERMINATE ;выкидывание Б ADVANCE 10,2;погрузка TERMINATE 1 START 1
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
26.03.2016, 17:11 | 14 |
говорит не понимаю параметр C
TEST X A,B,C нет out
0
|
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
26.03.2016, 17:15 [ТС] | 15 |
если в очереди не 3 машины то как "подождать"?
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
26.03.2016, 17:17 | 16 |
Не понял для чего, вроде всё правильно. Метку out только добавить куданить.
0
|
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
26.03.2016, 17:20 [ТС] | 17 |
Dukalys, а в начало перед generate нельзя добавить? Ну чтоб заново начиналось если нету 3-х машин
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
26.03.2016, 17:27 | 18 |
в генерейт ничего входить не может.
Вы определитесь какую систему моделирует - открытую с отказами больше 3 - отказ. или же систему без отказов ....
0
|
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
|
|
26.03.2016, 17:27 [ТС] | 19 |
если без отказов, без out , то ничего не происходит, зависает, а при закрытии окна репорта
03/26/16 19:31:48 Halt. XN: 28154. Block 6 Next. 03/26/16 19:31:48 Clock:91584.102430. Next: TEST. Line 8. 03/26/16 19:31:48 TEST L Q$OCHERED,3 ;очередь машин на погрузку
0
|
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
26.03.2016, 17:38 | 20 |
хоть с out хоть без
запускайте моделирование - меню Window/Simulation Winodw/Block Window - анализируем Думаем почему машина после UNLINK не идёт Код
ADVANCE 10,2;погрузка TERMINATE 1 START 1
1
|
26.03.2016, 17:38 | |
26.03.2016, 17:38 | |
Помогаю со студенческими работами здесь
20
Модель работы склада с грузовыми автомобилями Модель работы склада. Блок TABLE Разработать имитационную программу для анализа работы склада в течение календарного года Оптимизация работы склада Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |