Форум программистов, компьютерный форум, киберфорум
GPSS
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 34
1

Моделирование работы склада

22.03.2016, 20:14. Показов 4586. Ответов 41

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста,
задание:
На склад готовой продукции предприятия каждые 5 ± 2 мин поступают изделия типа А партиями по 500 шт., а каждые 20 ± 5 мин — изделия типа В партиями по 2000 шт. С интервалом времени 10 ± 5 мин к складу подъезжают автомобили, в каждый из которых надо погрузить по 1000 шт. изделий типа А и В. Погрузка начинается, если изделия обоих типов имеются на складе в нужном количестве, и продолжается 10 ± 2 мин. У склада одновременно могут находиться не более трех автомобилей, включая автомобиль, стоящий под погрузкой. Автомобили, не нашедшие места у склада, уезжают с его территории без груза. Смоделировать работу склада при условии, что загрузиться должны 50 автомобилей. Подсчитать число автомобилей, уехавших без груза. Определить среднее и максимальное количество изделий каждого типа, хранящихся на складе.

На форуме уже была такая задача, и с её решением человеку, судя по всему, очень помогли, но у меня лично возник вопрос, как смоделировать работу склада не с QUEUE а с LINK? Справок по этому оператору не понимаю, объясните пожалуйста что такое дисциплина списка из хелпа приведенного ниже?
LINK - помещает транзакт в список пользователя.
Формат: LINK А,В, С
А - номер списка;
В - дисциплина списка (FIFO, LIFO, номер параметра);
С - альтернативный блок.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2016, 20:14
Ответы с готовыми решениями:

Моделирование работы склада
Необходимо промоделировать работу склада. Существует 2 вида заявок от механиков. Первый вид:...

Моделирование работы склада
Помогите пожалуйста. Я просто недавно начал изучать GPSS. Задание: На склад готовой продукции...

Исследование эффективности моделирование работы склада средствами имитационного моделирования.
Исследование эффективности моделирование работы склада средствами имитационного моделирования. ...

Модель работы склада
Задача На склад поступает товар в среднем каждые 20+5 минут. Время хранения товара на складе...

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
Сначала думаем!!! а что делает программа? Генерируем каждые 100 единиц времени заявку и помещаем её в свой список SPISOK. заявка просто записана в список по порядку прихода (FIFO).

Так время моделирования задано 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
Ага а мы видим по таблице, что почему то 9 заявок было сгенерировано и вошло в блок список. думаем ... ага, порядок событий в модели производится следующим образом. модель запускается - идёт планирование событий, на момент времени 1000 сразу запланировано окончание работы модели, на момент времени 100 запланирован вход заявки. А вот на момент 200 вход заявки будет запланирован ТОЛЬКО когда предыдущая выйдет из него. Таким образом, запланированное сбытие генерации 10ой заявки запланировано на момент 1000 является второстепенным после окончания моделирования (в списке событий модели).
Это так лирика.

Идём в меню 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
Теперь мы каждые 200 ед. времени генерируем новые заявки и ИМИ извлекаем заявки которые расположены в нашем списке (по одной заявке). Таким образом получается что на обычный TERMINATE поступят 4 или 5 заявок которые мы сгенерировали чтобы вынуть из списка что-то, а на выход DEL TERMINATE поступят 4 заявки из списка LINK.
Код
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
Странно сейчас 10 генерирует и 5, ну ладно. В общем вот такая картина. 4 вынули из списка за время моделирования, 6 осталось.

Теперь уже можно и очередь на базе 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
Код не бред!

GENERATE 5,2,,500
- 500 заявок формируется не за раз, а в смысле у генератора ограничение на 500 заявок, после их формирования он не будет генерировать больше.
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
Добавлено через 2 минуты
Погрузка начинается, если изделия обоих типов имеются на складе в нужном количестве
Тут нужна проверка TEST CH$SPISOK_A > 1000 и CH$SPISOK_B > 1000 - тогда идём на погрузку ... задержка 10+-2 ..
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
TEST_L
TEST L

Внимательно за синтаксисом.

Добавлено через 17 минут
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
Две проверки TEST подряд не очень хорошо? объясняю почему.
Допустим в системе 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2016, 17:38
Помогаю со студенческими работами здесь

Модель работы склада с грузовыми автомобилями
На склад прибывают грузовые автомобили с контейнерами (от 4 до 10 штук). В среднем на склад...

Модель работы склада. Блок TABLE
Здравствуйте! По моделированию нужно сдать курсовую :-| Модель составила,работает, но препод просит...

Разработать имитационную программу для анализа работы склада в течение календарного года
ЗАДАНИЕ: a b c e 12 330 45 9 GPSS не нашел PARKING_OUT storage 5 PARKING_IN storage 3...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru