0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
1

Моделирование устройства обслуживания заявок двух типов

15.09.2015, 22:39. Показов 18370. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Так как вопрос касается СМО и дабы не плодить тем , задам его в этой теме. Я не программист и с GPSS никогда не работал, но требуется решить задачу, а разобраться хочется.
Суть задачи такова: На обработку в устройство поступают "заявки" двух типов, они подчинены закону Пуассона. Известны средние значения времени А и времени B заявок. Данные "заявки" поступают в устройство состоящее из трех приборов. Время выполнения "заявок" равномерно распределено на интервалах . Вероятность попасть в интервал (I1,I2) равна Р1, в интервал (I2,I3) равна Р2, в интервал (I3,I4) - Р3 и в интервал (I4,I5) - Р4. Приоритет выполнения заявок с большим потоком - ниже чем у потока с меньшим количеством "заявок". Определить в каком случае количество выполненных "заявок" будет максимально (в случае общей очереди ко всем приборам или же наличия очереди к каждому прибору отдельно). Известно общее время работы - N.
Так как хочу разобраться, вопросы буду задавать последовательно.
Формирование "заявок" осуществляется блоком выражений GENERATE. А так как изначально известно что формируются они согласно закону Пуассона, соответственно указываем GENERATE (Poisson(A,B,C,D,E)) - я правильно понимаю? Тогда как разграничить формирование заявок различных типов, дважды прописать GENERATE (Poisson(A,B,C,D,E)) ? Если так, то как разграничить заявки по типам?
Здесь же еще один вопрос: параметр A - среднее значение интервала времени заявки (это мне известно, А и B соответственно для первого и второго типов "заявок"); параметры В и С я "опускаю" до вида ", ," и перехожу к параметру D - его я могу в принципе задать исходя из общего времени работы, или лучше этого не делать, а завершить программу в конце блоками выражений
Код
    GENERATE N 
    TERMINATE 1 
    START1
И остался еще один параметр Е, им можно задать приоритет для одного типа заявок выше чем у другого.
У меня уже голова закипела за сегодняшний день, как правильно сформировать два типа заявок?
0
15.09.2015, 22:39
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.09.2015, 22:39
Ответы с готовыми решениями:

Смоделировать работу системы обслуживания заявок двух типов
Помогите пожалуйста, недавно начал изучать этот язык и многое ещё не понимаю. Нужно смоделировать работу системы, но я не знаю как записать...

Моделирование одноканальной многофазной системы массового обслуживания с двумя потоками заявок
кому не сложно, помогите написать Промоделировать работу участка цеха, состоящего из двух станков (P и Q) и вспомогательного...

Обслуживания неоднородного потока заявок с ограничением очередей обслуживания
На вход СМО поступает поток заявок 2-х типов, с вероятностями поступления 0,7 и 0,3 соответственно. Заявки второго типа обслуживаются в S5,...

25
 Аватар для Dukalys
1817 / 1031 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
16.09.2015, 07:02 2
Добрый день.

В принципе всё верно понимаете.
Можно сделать генерацию 2х типов заявок двумя генераторами GENERATE.
При этом даже более, можно программу представить двумя сегментами.

Сегмент GENERATE ... TERMINATE и второй такой-же. Как-бы условно-независимые сегменты моделирующие обслуживание. ПО факту они будут связаны процессом обслуживания. Это моделируется просто - путём использования внутри сегмента одних и тех-же названий очередей, обслуживающих устройств.

Можно разделять заявки и чуть-чуть посложнее - с помощью индивидуальных параметров заявок ASSIGN.

Теперь про GENERATE - структура этого блока GENERATE A,B,C,D,E

В поле А указывается время, которое определяет интервал между моментами генерации транзактов
блоком GENERATE.

При этом в качестве аргумента А вы используете функцию распределения времени POISSON.
У функции POISSON свои входные параметры, не имеющие отношения к параметрам GENERATE (Важно не путать!).
POISSON(A,B)
A - номер генератора случайных чисел от 1 до 8
B - среднее значение интервала времени между входящими заявками

По литературе можете вначале просмотреть Кудрявцев Имитационное моделирование на GPSS.
Более основательной литературой - по каждому программному блоку - Шрайбер Имитационное моделирование на GPSS.
1
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
16.09.2015, 13:15  [ТС] 3
Уважаемый Dukalys, спасибо за ответ! Уже понял одну свою ошибку с функцией POISSON. Кудрявцева уже вчера скачал, помогает. Плюс справочное руководство по GPSS WORLD.

Добавлено через 2 часа 23 минуты
Наваял "сырой" код для одной очереди и одного устройства. По-моему я слишком усложнил. Теперь не пойму как задать несколько приборов в одному устройстве для обработки очереди. А если это сделать, соответственно аналогичным образом можно сделать несколько очередей, я правильно понимаю? Вот что еще, не совсем пойму работу оператора TRANSFER. В задании суть заключается в том что даны три вероятности времени обслуживания прибором, а четвертый интервал времени обслуживания - это оставшаяся вероятность. Я ее высчитал самостоятельно и вписал в код (выделено жирным цветом) или же ее мне нужно "опустить"?!
GENERATE (POISSON(1,31.03)) ; генерация транзактов по Пуассону, среднее время генерации 31,03 сек.


QUEUE Och_1 ; занимаем очередь 1
SEIZE Pr_1 ; занимаем прибор 1
DEPART Och_1 ; фиксируем выход заявки из очереди
TRANSFER .37,,i1i3 ; выбор интервала времени обработки заявки
TRANSFER .12,,i3i5 ;
TRANSFER .23,,i5i7 ;
TRANSFER .28,,i7i8 ;

i1i3 ADVANCE 53.5,13.5 ; обработка заявки
TRANSFER ,New_place ; перенаправляем на завершение прибора
i3i5 ADVANCE 80,13 ;
TRANSFER ,New_place ;
i5i7 ADVANCE 106,13 ;
TRANSFER ,New_place ;
i7i8 ADVANCE 132.5,13.5 ;
New_place RELEASE Pr_1 ; освобождаем прибор 1

TERMINATE ; удаляем обслуженную заявку

GENERATE (POISSON(1,36.73)) ; генерация транзактов по Пуассону, среднее время генерации 36,73 сек.
PRIORITY 1

QUEUE Och_1 ; занимаем очередь 1
SEIZE Pr_1 ; занимаем прибор 1
DEPART Och_1 ; фиксируем выход заявки из очереди
TRANSFER .37,,i1i3 ; выбор интервала времени обработки заявки
TRANSFER .12,,i3i5 ;
TRANSFER .23,,i5i7 ;
TRANSFER .28,,i7i8 ;
RELEASE Pr_1 ; освобождаем прибор 1
TERMINATE ; удаляем обслуженную заявку

GENERATE 16560 ; время моделирования, сек.
TERMINATE 1
START 1
0
 Аватар для Dukalys
1817 / 1031 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
16.09.2015, 19:26 4
Ухх действительно, не самый лучший приём с Transfer !!!
Во первых, проанализируйте пример - разделить поток заявок на 50%, 20% и 30% процентов
Как вы запишите трансферы?
2 трансфера первый 50% а второй 20% или 30%
Код
TRANSFER 0.5,,metka1
TRANSFER 0.3,,metka2
metka3 ; сюда пойдут по вашему 20%.
Нет эта запись не верна.
После первого трансфера отсеено 50% но НИЖЕ на следующий трансфер уже приходит поток который по факту представляет 100% и чтобы выделить из него 30% то выделить нужно из 100, а не из тех 50% что пришли. поэтому
TRANSFER 0.6,,metka2
metka3 ; сюда пойдут 0.4 от 100% или 20% реальных.

Ладно это всё лирика.
Вобщем заменяйте конструкцию с трансферами на функцию FUNCTION которая будет возвращать значение времени обслуживания в зависимости от вероятности
Код
vremya FUNCTION RN1,D4  ; по функциям хорошо в Шрайбере написано с примерами
0.37,(UNIFORM(1,40,67))/... /... /

...
ADVANCE FN$vremya ; вызываем функцию расчёта времени обслуживания
1
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
16.09.2015, 19:50  [ТС] 5
Я размышляю как обыватель, но вижу что слишком сложная получается конструкция. Ваше предложение я понял. Я думал что будет приходить 100 процентов на каждый трансфер. По Шрайберу пытался организовать многоканальное устройство чтобы сымитировать те самые три прибора в устройстве. Использовал комбинацию приборов ENTER и LEAVE, предварительно прописал STORAGE как показано в примере. Но после нажатия Create Simulation программа ничего не делала, только лишь две первые строки выводилось что программа запущена.
0
 Аватар для Dukalys
1817 / 1031 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
16.09.2015, 19:58 6
Цитата Сообщение от wattson_86 Посмотреть сообщение
после нажатия Create Simulation программа ничего не делала, только лишь две первые строки выводилось что программа запущена.
Это скорее всего значит что программа выполняется. можете перейти при этом в меню Window/Simulation Window/Block Window - увидите что происходит в модели, скорее всего заявки как-то зацикливаются, либо тупо накапливаются (пример устройства были заняты, и не освобождены при выходе заявок, или например устройства не справляются с потоком заявок и происходит накопления большого числа заявок).
1
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
16.09.2015, 20:02  [ТС] 7
Хорошо, спасибо! Завтра постараюсь разобраться с функциями.
0
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
05.10.2015, 22:48  [ТС] 8
Прерывал я решение этой задачи, но снова возобновил) Сделал как Вы и посоветовали, применил вышеуказанную конструкцию. К тому же были еще кто советовал ее использовать, НО! Не работает с ней программа. Тут же вопрос, а правильно ли я расставил вероятности? Их нужно было суммировать или оставить на круги своя 0,37, 0,12, 0,23, 0,28?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    time FUNCTION RN1,D4        ; определение времени выполнения заявки в соответствии с вероятностью распределения
    0.37,UNIFORM(1,40,67)/0.49,UNIFORM(1,67,93)/0.72,UNIFORM(1,93,119)/1.0,UNIFORM(1,119,146)
 
    GENERATE (POISSON(1,31.03)) ; генерация транзактов по Пуассону, среднее время генерации 31,03 сек. 
    
    QUEUE Och_1     ; занимаем очередь 1
    SEIZE Pr_1      ; занимаем прибор 1
    DEPART Och_1        ; фиксируем выход заявки из очереди
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
 
    RELEASE Pr_1        ; освобождаем прибор 1
    
    TERMINATE           ; удаляем обслуженную заявку
    GENERATE (POISSON(1,36.73)) ; генерация транзактов по Пуассону, среднее время генерации 36,73 сек. 
    PRIORITY 1
 
    QUEUE Och_1     ; занимаем очередь 1
    SEIZE Pr_1      ; занимаем прибор 1
    DEPART Och_1        ; фиксируем выход заявки из очереди
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
    
    RELEASE Pr_1        ; освобождаем прибор 1
    TERMINATE           ; удаляем обслуженную заявку
    
    GENERATE 16560      ; время моделирования, сек.
    TERMINATE 1     
    START 1
Ждет ввода значения:
10/05/15 22:29:28 Model Translation Begun.
10/05/15 22:29:28 Line 2, Col 5. Expecting a numeric value or Identifier.
10/05/15 22:29:28 0.37,UNIFORM(1,40,67)/0.49,UNIFORM(1,67,93)/0.72,UNIFORM(1,93,119)/1.0,UNIFORM(1,119,146)
10/05/15 22:29:28 **** Model Translation Aborted ****
Добавлено через 17 минут
Получается что конструкция (UNIFORM(1,40,67)) не производит вычисление по равномерному распределению в пределах GMIN - GMAX. Шрайбер писал что нужно ставить "." между парами, но актуальность этого я пока не могу проверить, программа ругается.
0
 Аватар для Dukalys
1817 / 1031 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
06.10.2015, 16:44 9
time FUNCTION RN1,E4
Долго придумывал букву, в результате взял в "учебнике".
непрерывная числовая - С;
дискретная числовая - D;
табличная числовая - L;
дискретная атрибутивная - E;
табличная атрибутивная - М.
1
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
06.10.2015, 17:48  [ТС] 10
Вот оно в чем дело! Если я правильно понимаю получается следующее: при обращении в теле программы к конструкции FN$<имя функции> происходит расчет функции по заданному нами алгоритму. А так как в теле FUNCTION второй параметр в парах определяется стандартным числовым атрибутом (UNIFORM(1,40,67)), если я правильно понял, то когда была конструкция вида FUNCTION RN1,D4 программа ждала появления числа, а получала вместо числа (UNIFORM(1,40,67)). Теперь же, изменив на FUNCTION RN1,E4 функция видит что значение определяется равномерным распределением (UNIFORM(A,GMIN,GMAX)). Я почему так расписываю, мало ли кому пригодится и вопрос решится еще на стадии осмысления.

Добавлено через 46 секунд
Даже не поблагодарил. Спасибо Вам, Dukalys!
0
 Аватар для Dukalys
1817 / 1031 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
06.10.2015, 17:57 11
Да всё верно понимаете. Вместо числа gpss получал атрибут ("функцию" uniform).
0
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
06.10.2015, 18:12  [ТС] 12
Кстати, а вероятности правильно заданы? Необходимы значения 0,37, 0,12, 0,23 и 0,28. Что соответствует 0.37,UNIFORM(1,40,67)/0.49,UNIFORM(1,67,93)/0.72,UNIFORM(1,93,119)/1.0,UNIFORM(1,119,146). Или же выставлять 0,37, 0,12, 0,23 и 0,28?
0
 Аватар для Dukalys
1817 / 1031 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
06.10.2015, 18:29 13
Да правильно, накапливаемый процент, показывающий как-бы интервалы которые будет попадать случайная величина RN1 = 0..0.999
1
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
06.10.2015, 21:19  [ТС] 14
Так, теперь ломаю голову над несколькими приборами в одном устройстве в конструкции, т.е. сформировать многоканальное устройство. Как я понимаю использовать необходимо блоки ENTER и LEAVE, но предварительно необходимо определить емкость многоканального устройства при помощи оператора STORAGE в конструкции <имя устройства> STORAGE <емкость>. Если не ошибаюсь в теле программы необходимо заменить SEIZE на ENTER, и RELEASE на LEAVE. При этом имя прибора, допустим, задаю Pribor, а программа автоматом сформирует три прибора в устройстве, необходимых мне. Или все-таки целиком и полностью придется все тело программы три раза повторить, но это слишком громоздко.
Мне предложили вариант "SELECT MIN 1,1,3,,FC", но этот вариант, по-моему, не формирует три прибора, а только лишь проверяет заняты они или нет.

Добавлено через 42 минуты
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        time FUNCTION RN1,E4        ; определение времени выполнения заявки в соответствии с вероятностью распределения
    0.37,(UNIFORM(1,40,67))/0.49,(UNIFORM(1,67,93))/0.72,(UNIFORM(1,93,119))/1.0,(UNIFORM(1,119,146))
    
        Pribor STORAGE 3        ; прописываем в память создание трехканального прибора
    GENERATE (POISSON(1,31.03)) ; генерация транзактов по Пуассону, среднее время генерации 31,03 сек. 
    
    QUEUE Och_1     ; занимаем очередь 
    ENTER Pribor        ; занимаем прибор 
    DEPART Och_1        ; фиксируем выход заявки из очереди
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
 
    LEAVE Pribor        ; освобождаем прибор 
    
    TERMINATE           ; удаляем обслуженную заявку
    GENERATE (POISSON(1,36.73)) ; генерация транзактов по Пуассону, среднее время генерации 36,73 сек. 
    PRIORITY 1
    
    QUEUE Och_1     ; занимаем очередь 
    ENTER Pribor        ; занимаем прибор 
    DEPART Och_1        ; фиксируем выход заявки из очереди
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
    
    LEAVE Pribor        ; освобождаем прибор 
    TERMINATE           ; удаляем обслуженную заявку
    
    GENERATE 16560      ; время моделирования, сек.
    TERMINATE 1     
    START 1
Кажется все получилось
0
 Аватар для Dukalys
1817 / 1031 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
07.10.2015, 08:01 15
Лучше вот так
Код
SELECT E 1,1,3,0,F
Выбор устройства 1-3 у которого занятость F (это СЧА) равна (Equal) 0, Результат записать в параметр заявки №1. Далее этот результат будет в первом параметре каждой заявки, параметр доступен в коде как P1.
Код
SEIZE P1
ADVANCE
RELEASE P1
Вот и вся структура.

Теперь по поводу seize-release - одноканальное устройство, ENTER-LEAVE - многоканальное. Использовать многоканальное можно, НО оно не даст подробной статистики по каждому каналу, только в целом по многоканальному. И наоборот - одноканальные знают статистику только о себе, и в отчёте не будет статистики по многоканальному.
Поэтому обычно эти конструкции юзают в совокупности чтобы в отчёте получить нужную статистику.
Код
QUEUE
ENTER
DEPART
SELECT
SEIZE P1
ADVANCE
RELEASE P1
LEAVE
1
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
07.10.2015, 18:16  [ТС] 16
Поигрался я тут, теперь нахожусь в смятении.
Первая конструкция: задано трехканальное устройство при помощи ENTER LEAVE. Как я понимаю транзакты поступают по одному и ожидают когда освободится один из трех каналов.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    time FUNCTION RN1,E4        ; определение времени выполнения заявки в соответствии с вероятностью распределения
    0.37,(UNIFORM(1,40,67))/0.49,(UNIFORM(1,67,93))/0.72,(UNIFORM(1,93,119))/1.0,(UNIFORM(1,119,146))
    Pribor STORAGE 3        ; прописываем в память создание трехканального прибора
    GENERATE (POISSON(1,31.03)) ; генерация транзактов по Пуассону, среднее время генерации 31,03 сек. 
    
    QUEUE Och_1     ; занимаем очередь 
    ENTER Pribor        ; занимаем прибор 
    DEPART Och_1        ; фиксируем выход заявки из очереди
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
 
    LEAVE Pribor        ; освобождаем прибор 
    
    TERMINATE           ; удаляем обслуженную заявку
    GENERATE (POISSON(1,36.73)) ; генерация транзактов по Пуассону, среднее время генерации 36,73 сек. 
    PRIORITY 1
    
    QUEUE Och_1     ; занимаем очередь 
    ENTER Pribor        ; занимаем прибор 
    DEPART Och_1        ; фиксируем выход заявки из очереди
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
    
    LEAVE Pribor        ; освобождаем прибор 
    TERMINATE           ; удаляем обслуженную заявку
    
    GENERATE 16560      ; время моделирования, сек.
    TERMINATE 1     
    START 1
Результат: обработано заявок с меньшим приоритетом - 89, с большим приоритетом - 443.
Вторая конструкция: трехканальное устройство задано при помощи SELECT. SELECT проверяет занятость приборов и в случае положительного результата формирует очереди в устройства в соответствии с минимальной длиной очереди.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    time FUNCTION RN1,E4        ; определение времени выполнения заявки в соответствии с вероятностью распределения
    0.37,(UNIFORM(1,40,67))/0.49,(UNIFORM(1,67,93))/0.72,(UNIFORM(1,93,119))/1.0,(UNIFORM(1,119,146))
    
    GENERATE (POISSON(1,31.03)) ; генерация транзактов по Пуассону, среднее время генерации 31,03 сек. 
    SELECT MIN 1,1,3,,FR
    QUEUE Och_1     ; занимаем очередь 
    SEIZE P1            ; занимаем прибор 
    DEPART Och_1        ; фиксируем выход заявки из очереди
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
 
    RELEASE P1      ; освобождаем прибор 
    
    TERMINATE           ; удаляем обслуженную заявку
    GENERATE (POISSON(1,36.73)) ; генерация транзактов по Пуассону, среднее время генерации 36,73 сек. 
    PRIORITY 1
    SELECT MIN 1,1,3,,FR
    QUEUE Och_1     ; занимаем очередь 
    SEIZE P1            ; занимаем прибор 
    DEPART Och_1        ; фиксируем выход заявки из очереди
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
    
    RELEASE P1      ; освобождаем прибор
    TERMINATE           ; удаляем обслуженную заявку
    
    GENERATE 16560      ; время моделирования, сек.
    TERMINATE 1     
    START 1
Результат: обработано 204 заявки с меньшим приоритетом и 335 заявок с большим приоритетом. Вообще красота, мне такие результаты нравятся))) НО!!! если я правильно понимаю сам по себе SELECT не формирует несколько каналов, а лишь проверяет их на соответствие требованиям, если я правильно понимаю. Но по факту отображает в результатах три прибора и по времени обработки транзактов проводит все как надо.
Третья конструкция: по идее работает как первая, но с использованием SELECT. Но результат меня вообще смутил.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    time FUNCTION RN1,E4        ; определение времени выполнения заявки в соответствии с вероятностью распределения
    0.37,(UNIFORM(1,40,67))/0.49,(UNIFORM(1,67,93))/0.72,(UNIFORM(1,93,119))/1.0,(UNIFORM(1,119,146))
    Pribor STORAGE 3        ; прописываем в память создание трехканального прибора
    GENERATE (POISSON(1,31.03)) ; генерация транзактов по Пуассону, среднее время генерации 31,03 сек. 
    
    SELECT MIN 1,1,3,,F
    QUEUE Och_1     ; занимаем очередь 
 
    ENTER Pribor        ; занимаем прибор 
    DEPART Och_1        ; фиксируем выход заявки из очереди
    SEIZE P1
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
    RELEASE P1
    LEAVE Pribor        ; освобождаем прибор 
    
    TERMINATE           ; удаляем обслуженную заявку
 
    GENERATE (POISSON(1,36.73)) ; генерация транзактов по Пуассону, среднее время генерации 36,73 сек. 
    PRIORITY 1
    SELECT MIN 1,1,3,,F
    QUEUE Och_1     ; занимаем очередь 
 
    ENTER Pribor        ; занимаем прибор 
    DEPART Och_1        ; фиксируем выход заявки из очереди
    SEIZE P1
    ADVANCE FN$time     ; обработка заявки в соответствии с вероятностым 
                ; распределением функции времени
    RELEASE P1
    LEAVE Pribor        ; освобождаем прибор 
    TERMINATE           ; удаляем обслуженную заявку
    
    GENERATE 16560      ; время моделирования, сек.
    TERMINATE 1     
    START 1
Результат: обработана 1 заявка с меньшим приоритетом и 205 с большим приоритетом.

Кстати, SELECT в предложенной конструкции ругается, работает только как я написал с МИН.
0
 Аватар для Dukalys
1817 / 1031 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
07.10.2015, 18:30 17
1.
Кстати, SELECT в предложенной конструкции ругается, работает только как я написал с МИН.
МИН нельзя, вдруг они все заняты ! Пройдёт заявка с P1 = первому занятому усройству, а наша цель пропустить заявку только в случае свободности устройства.

2. Сократите код программы - зачем у вас одинаковые структуры в модели?
Код
QUEUE Och_1	; занимаем очередь 
ENTER Pribor	; занимаем прибор 
DEPART Och_1 ; фиксируем выход заявки из очереди
SEIZE P1
ADVANCE FN$time ; обработка заявки в соответствии с вероятностым 
; распределением функции времени
RELEASE P1
LEAVE Pribor ; освобождаем прибор 
TERMINATE ; удаляем обслуженную заявку
[/quote]
Сократить можно так
Код
Generate 1
transfer ,OBSL ; Перенаправляем на метку обсл
Generate 2

OBSL QUEUE ... ; метка обслуживания, единый блок обслуживания заявок разных типов.
...
Правда здесь вы потеряете в открытом виде сколько стоит заявок какого типа в очереди придётся потом проверку делать TEST, разделять, если нужно кол-во заявок разного типа посмотреть.

3.
Код
SELECT E 1,1,3,0,F
Селект делаем после того как вошли в многоканальное устройство !!! Это будет гарантировать что есть свободное устройство и селект не вернёт 0 (т.е. все заняты)

Результат: обработано заявок с меньшим приоритетом - 89, с большим приоритетом - 443.
1
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
07.10.2015, 18:51  [ТС] 18
Спасибо! Сразу много нового узнал. Конструкцию пока упрощать не буду, мониторю прохождение заявок. А насчет SELECT, это я опрофанился. Видел как Вы сделали, но решил переставить на другое место. Теперь наблюдаю каков истинный результат. А я когда читал так понял что трансфер в случае если все очереди заняты заново транзакт прогоняет по кругу и ставит заявку в минимальную очередь. А он, значит, просто заявку пропускает дальше мимо очереди, отсюда такой хороший результат с обработкой транзактов?
0
 Аватар для Dukalys
1817 / 1031 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
07.10.2015, 20:19 19
По первой части ок.
А вот по второй не до конца понял про что речь идёт.
А я когда читал так понял что трансфер в случае если все очереди заняты заново транзакт прогоняет по кругу и ставит заявку в минимальную очередь. А он, значит, просто заявку пропускает дальше мимо очереди, отсюда такой хороший результат с обработкой транзактов?
0
0 / 0 / 0
Регистрация: 15.09.2015
Сообщений: 14
07.10.2015, 23:10  [ТС] 20
Прошу прощения, устал сегодня и мысли разбегаются. Думал про SELECT, а писал TRANSFER. Я правильно понимаю что SELECT в моем случае решает последнюю задачу задания касаемо очереди к каждому прибору в отдельности. Если из конструкции исключить блок SELECT, получается что пара QUEUE - DEPART формирует общую очередь к устройству. А включив SELECT, получаем формирование очереди к каждому из приборов многоканального устройства в отдельности?
0
07.10.2015, 23:10
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2015, 23:10
Помогаю со студенческими работами здесь

Две очереди заявок двух типов
(мне обещали, что эта задача за 15 минут делается х) помогите, пожалуйста, а то до этого через задний проход на С++ пытался делать, но мне...

(Моделирование системы массового обслуживания с параллельными каналами обслуживания с повторами)
Помогите написать программу Рассмотрим систему массового обслуживания с заданным числом устройств обслуживания п= 5, действующих...

Изменение времени обслуживания заявок
вот есть такое задание Заявки входного потока с вероятностью 12% обслуживаются в S1, с вероятностью 35% сразу поступают в общую очередь...

Промоделировать работу пункта обслуживания заявок на ремонт энергосети
Здравствуйте. В общем задача: Промоделировать работу пункта обслуживания заявок на ремонт энергосети в течение 8 часов. Заявки имеют...

Моделирование времени поступления заявок
Всех с прошедшими праздниками и доброго времени суток. Я вновь прошу вашего совета, коллеги. Попалась следующая задача: В систему...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Mapped-типы в TypeScript
stackOverflow 17.02.2025
TypeScript предоставляет развитые средства для типизации данных, и одним из наиболее гибких инструментов являются mapped-типы. По сути, mapped-тип или сопоставленный тип - это способ создания нового. . .
Как вернуть энтузиазм
Uswer 17.02.2025
Приветствую тебя читатель. Сначала небольшая предыстория. Лет 5-6 тому назад появилась у меня идея автоматизации некоего процесса на работе. А так как я уже много лет увлекаюсь (не путать с. . .
Оператор satisfies в TypeScript: как он работает и где применять
stackOverflow 17.02.2025
Оператор satisfies - одна из наиболее полезных возможностей TypeScript, позволяющая проверять типы значений без изменения их исходного типа. В отличие от других операторов типизации, satisfies дает. . .
Почему могут не шифроваться русские символы в Java
Wired 17.02.2025
При разработке на Java нередко возникают сложности с шифрованием русских символов. Эта проблема особенно актуальна для разработчиков, создающих программное обеспечение для русскоязычной аудитории. . . .
Отличия ОС для x86_64 и ARM
Wired 17.02.2025
На данный момент сосуществуют две основные архитектуры процессоров - x86_64 и ARM. Эти архитектуры имеют принципиально разные подходы к организации вычислений и обработке данных, что накладывает. . .
Многопоточность в Python: как использовать Thread
bytestream 17.02.2025
Поток выполнения (thread) - это наименьшая последовательность инструкций, которая может управляться планировщиком операционной системы. Представьте себе, что ваша программа - это книга, а потоки -. . .
Как воспроизвести Race Condition в Python
bytestream 17.02.2025
В многопоточном программировании существует множество подводных камней, и одним из самых коварных является состояние гонки (Race Condition). Этот термин описывает ситуацию, когда результат выполнения. . .
Ошибка "node: --openssl-legacy-provider is not allowed in NODE_OPTIONS"
bytestream 17.02.2025
Каждый разработчик рано или поздно сталкивается с ситуацией, когда при запуске проекта Node. js неожиданно выскакивает ошибка "node: --openssl-legacy-provider is not allowed in NODE_OPTIONS". Это. . .
Ошибка pip Python "AttributeError­: module 'lib' has no attribute 'OpenSSL_add_al­l_algorit­hms'"
bytestream 17.02.2025
При разработке на Python частенько сталкиваешься с разными сюрпризами, но ошибка AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms' - это что-то особенное. Знаете, это как. . .
Сообщение Play Store "You must complete the advertising ID declaration before you can release an app that targets"
bytestream 17.02.2025
Рекламный идентификатор - это уникальный, но восстанавливаемый строковый идентификатор для каждого устройства Android. Думаю, вы удивитесь, но даже если ваше приложение не показывает рекламу. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru