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

Как организовать поступление заявок с определённов вероятностью

21.06.2019, 15:20. Показов 2930. Ответов 14
Метки gpss (Все метки)

Студворк — интернет-сервис помощи студентам
Общая задача: В систему поступают заявки, интервалы между которыми распределены следующим образом:

Мин. 100 200 300 400
Вероятность 0.1 0.15 0.55 0.2

Система состоит из двух частей. В первой части системы могут находиться одновременно только 20 заявок, остальные поступают во вторую часть системы. В первой части вначале заявки поступают с заданной вероятностью на один из приборов PRIB1, PRIB2 или PRIB3 или ожидают в очереди с дисциплиной обслуживания LIFO. Затем они обслуживаются на устройстве USTR1, емкостью 3. После чего заявки поступают во вторую часть системы на обслуживания на прибор PRIB4. Во второй части, те заявки, которые прошли первую часть, имеют более высокий приоритет, чем остальные заявки. Длительность обслуживания приведена в таблице.

Устр-во PRIB1 PRIB2 PRIB3 PRIB4 USTR1
Время 800±50 780±50 650±50 180±50 580±50
Вероятность 0.5 0.35 0.15 1 1

Условие завершения работы модели – обслуживание 20 заявок на USTR1.

Вопрос: Как организовать поступление заявок с определённой вероятностью?
Как организовать поступление заявок с определённов вероятностью
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2019, 15:20
Ответы с готовыми решениями:

Случайное поступление заявок
Добрый день! Подскажите есть блок SelectOutput5, на нем занято три канала,можно ли сделать так,...

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

Одноканальная СМО с обслуживанием заявок в случайном порядке с равной вероятностью
Одноканальная СМО с обслуживанием заявок в случайном порядке с равной вероятностью. Почему то...

Как правильно организовать структуру отправки заявок со страницы через форму
Здравствуйте. Организовал средствами html и css три таба. По нажатию на каждый всплывает форма с...

14
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
21.06.2019, 16:09  [ТС] 2
Вот я написал часть работы, только не пойму как описать generate и указать вероятность для поступления на устройства PRIB1-3.
Код
USTR1	STORAGE 	3
	GENERATE	

MET5	GATE NU	PRIB1,MET1
	SEIZE	PRIB1
	ADVANCE	800,50
	RELEASE	PRIB1
	TRANSFER	,MET4

MET1	GATE NU	PRIB2,MET2
	SEIZE	PRIB2
	ADVANCE	780,50
	RELEASE	PRIB2
	TRANSFER	,MET4

MET2	GATE NU	PRIB3,MET3
	SEIZE	PRIB3
	ADVANCE	650,50
	RELEASE	PRIB3
	TRANSFER	,MET4

MET3	LINK 	LINE,LIFO

MET4	UNLINK	LINE,MET5,1
	ENTER	USTR1
	ADVANCE	580,50
	LEAVE	USTR1
	SEIZE	PRIB4
	ADVANCE	180,50
	RELEASE	PRIB4
0
Эксперт GPSS
551 / 410 / 105
Регистрация: 02.07.2010
Сообщений: 1,717
23.06.2019, 06:29 3
Используйте функции

Добавлено через 2 минуты
Цитата Сообщение от blocker147 Посмотреть сообщение
Мин. 100 200 300 400
Вероятность 0.1 0.15 0.55 0.2
C++
1
2
Time FUNCTION RN1,D4
.1,100/.25,200/.8,300/1,400
1
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
24.06.2019, 20:57  [ТС] 4
А как теперь проверить, что в первой части только 20 заявок, чтобы переопределять остальные заявки во вторую часть?
Правильный ли я способ выбираю?
Я сделал, что то вроде этого:
Код
TEST L MET5,20,METKA
но не уверен точно правильно ли это.

Видел такую запись, но она не сработала у меня:
Код
W$;Счетчик текущего содержимого блока

Код
TEST L	W$BLOCKA,20,BLOCKA

BLOCKA	MET5	GATE NU	 PRIB1,MET1
		SEIZE	 PRIB1
		ADVANCE	 800,50
		RELEASE	 PRIB1
		PRIORITY 3
		TRANSFER ,MET4

	MET1	GATE NU	 PRIB2,MET2
		SEIZE	 PRIB2
		ADVANCE	 780,50
		RELEASE	 PRIB2
		PRIORITY 3
		TRANSFER ,MET4

	MET2	GATE NU	 PRIB3,MET3
		SEIZE	 PRIB3
		ADVANCE	 650,50
		RELEASE	 PRIB3
		PRIORITY 3
		TRANSFER ,MET4
MET3	LINK	LINE,LIFO
MET4	UNLINK	LINE,MET5,1		
	ENTER	USTR1
	ADVANCE	580,50
	LEAVE	USTR1
	SEIZE	PRIB4
	ADVANCE	180,50
	RELEASE	PRIB4
	TERMINATE	1
	START	20
0
Эксперт GPSS
551 / 410 / 105
Регистрация: 02.07.2010
Сообщений: 1,717
24.06.2019, 22:29 5
тогда уж так

C++
1
2
3
TEST L  W$MET5,20,BLOCKA
 
MET5    GATE NU  PRIB1,MET1
1
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
24.06.2019, 22:44  [ТС] 6
а можно ли тогда без blocka делать? например так будет такой же самый результат?
Код
TEST L  W$MET5,20,MET6; MET6 = вторая часть
MET5    GATE NU  PRIB1,MET1
0
Эксперт GPSS
551 / 410 / 105
Регистрация: 02.07.2010
Сообщений: 1,717
24.06.2019, 22:48 7
ну да, W$MET5 - тут MET5 и есть название блока

Добавлено через 2 минуты
Только я не увидел у вас функцию распределения времени поступления заявок, которую я писал, и время обработки лучше через функцию делать
1
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
24.06.2019, 22:54  [ТС] 8
по поводу времени обработки, хотел спросить.
Вот у меня есть код:
Код
MET5 GATE NU   PRIB1,MET1
         SEIZE       PRIB1
         ADVANCE  800,50
         RELEASE   PRIB1
         PRIORITY  3
         TRANSFER ,MET4
а как сделать так, чтобы заявки поступали с заданной вероятностью на один из приборов?
Как организовать поступление заявок с определённов вероятностью
0
Эксперт GPSS
551 / 410 / 105
Регистрация: 02.07.2010
Сообщений: 1,717
24.06.2019, 23:15 9
Лучший ответ Сообщение было отмечено blocker147 как решение

Решение

Устр-во PRIB1 PRIB2 PRIB3 PRIB4 USTR1
Время 800±50 780±50 650±50 180±50 580±50
Вероятность 0.5 0.35 0.15 1 1

Эту часть можно реализовать следующим образом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PRIB FUNCTION RN2,D3
.5,PRIB1/.85,PRIB2/1,PRIB3
 
 
TSPRIB FUNCTION P1,D3
PRIB1,800/PRIB2,780/PRIB3,650
 
 
 
ASSIGN 1,FN$PRIB;получение номера прибора и охранение его в первый параметр
SEIZE P1;занимаем PRIB1 или PRIB2 или PRIB3
....
ADVANCE FN$TSPRIB,50  ; обработка на PRIB1 или PRIB2 или PRIB3
 
RELEASE P1;освобождаем PRIB1 или PRIB2 или PRIB3
Добавлено через 43 секунды
А PRIB4 USTR1 там уж весь поток заявок просто поступает, смотрите условие

Добавлено через 1 минуту
Цитата Сообщение от blocker147 Посмотреть сообщение
Затем они обслуживаются на устройстве USTR1, емкостью 3.
Тоесть все заявки поступают на USTR1 поэтому и вероятность 1 (100% всех заявок)

Добавлено через 4 минуты
Цитата Сообщение от blocker147 Посмотреть сообщение
После чего заявки поступают во вторую часть системы на обслуживания на прибор PRIB4
Цитата Сообщение от blocker147 Посмотреть сообщение
В первой части системы могут находиться одновременно только 20 заявок
Учитывая данное условие делаем вывод:
вторая часть состоит из PRIB4
Следовательно я бы сделал так
C++
1
2
3
4
5
6
7
8
9
10
11
TEST L Q$PerChast,20,Met1
QUEUE PerChast
 
Обработка на PRIB1 или PRIB2 или PRIB3
 
Обработка на USTR1
 
DEPART  PerChast
Увеличиваем приоритет
 
Met1 Обработка на PRIB4
Добавлено через 3 минуты
Вообще задача элементарная я бы ее сделал минуты за 2, но я люблю когда люди сами думают и понимают что они пишут. А еще на будущее, Пишите комментарий в каждой строке, тогда понятно как вы понимаете ту или иную строку и видно где вы недопонимаете , а где логика не верна.

Добавлено через 52 секунды
Плюс комментарий помогает читать другим людям ваш код и направить вас в нужном направлении.

Добавлено через 9 минут
Цитата Сообщение от blocker147 Посмотреть сообщение
W$;Счетчик текущего содержимого блока
а вам нужно количество заявок в первой части, тоесть нужно еще отслеживать транзакты что вышли из первой части, Вот выше мой пример это и делает он проверяет содержимое всей первой части
1
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
24.06.2019, 23:54  [ТС] 10
Не могли бы Вы посмотреть, похоже ли это на правду?
C++
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
36
37
Time    FUNCTION RN1,D4
    .1,100/.25,200/.8,300/1,400
 
PRIB    FUNCTION RN2,D3
    .5,PRIB1/.85,PRIB2/1,PRIB3
 
TSPRIB  FUNCTION P1,D3
    PRIB1,800/PRIB2,780/PRIB3,650
 
USTR1   STORAGE     3
    GENERATE(FN$Time)
    TEST L  Q$FirstPart,20,SecondPart
    
    QUEUE   FirstPart
    ASSIGN  1,FN$PRIB
    GATE NU P1,ServiceDiscipline
    SEIZE   P1
    ADVANCE FN$TSPRIB,50
    RELEASE P1
    DEPART  FirstPart
 
    UNLINK  LINE,ServiceOnUSTR1,1
 
ServiceDiscipline   LINK    LINE,LIFO
 
ServiceOnUSTR1  ENTER   USTR1
        ADVANCE 580,50
        LEAVE   USTR1
        TRANSFER    ,SecondPart
    
 
 
SecondPart  SEIZE   PRIB4
        ADVANCE 180,50
        RELEASE PRIB4
        TERMINATE   1
        START   20
0
Эксперт GPSS
551 / 410 / 105
Регистрация: 02.07.2010
Сообщений: 1,717
25.06.2019, 06:40 11
Цитата Сообщение от blocker147 Посмотреть сообщение
Условие завершения работы модели – обслуживание 20 заявок на USTR1.
не выполняется
Цитата Сообщение от blocker147 Посмотреть сообщение
UNLINK* LINE,ServiceOnUSTR1,1
ServiceDiscipline * LINK* * LINE,LIFO
не совсем понятно по условию
Цитата Сообщение от blocker147 Посмотреть сообщение
В первой части вначале заявки поступают с заданной вероятностью на один из приборов PRIB1, PRIB2 или PRIB3 или ожидают в очереди с дисциплиной обслуживания LIFO
Там или или, а получается что заявка которая была обслужена в PRIB1, PRIB2 или PRIB3 в любом случае попадает в очередь и выталкивает от туда одну заявку.

Добавлено через 14 секунд
НЕТ КОММЕНТАРИЕВ В КАЖДОЙ СТРОКЕ
1
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
25.06.2019, 19:39  [ТС] 12
Я не понимаю как сделать первую часть, то есть обслуживание на PRIB1или2или3или помещаем в список.

ASSIGN 1,FN$PRIB; Устанавливаю значение первого параметра функции, чтобы выбрать устройство
GATE NU P1,ServiceDiscipline;Проверяю, не занят ли прибор. Если занят то иду в метку ServiceDiscipline
;Почему это я всегда попадаю в метку ServiceDiscipline
;
;Тогда такой вариант:
ASSIGN 1,FN$PRIB;
GATE NU P1,ServiceOnOtherPribor;будем переходить в метку ServiceOnOtherPribor если прибор занят
ServiceOnOtherPRIB ASSIGN 1,FN$PRIB; Снова устанавливаем значение первого параметра функции, чтобы выбрать другое устройство
GATE NU P1,ServiceOnOtherPRIB2;проверяю не занят ли прибор, иначе иду в метку ServiceOnOtherPRIB2

ServiceOnOtherPRIB2 ASSIGN 1,FN$PRIB
GATE NU P1,ServiceDiscipline;снова повторяю тоже самое, чтобы попасть в другой прибор, иначе иду в метку ServiceDiscipline

ServiceDiscipline LINK LINE,LIFO; Помещаю транзакт в список с именем LINE и дисциплиной обслуживания LIFO

;Вобщем не понятно как тут цикл делать, или что тут надо.

;По поводу условия завершения работы
;Наверное так

ServiceOnUSTR1 UNLINK LINE,ServiceOnOtherPribor,1;один транзакт выводится из списка LINE и попадает в метку ServiceOnOtherPribor
ENTER USTR1;помещаем транзакт в память с именем USTR1
ADVANCE 580,50;задерживаем транзакт на 580+-50единиц модельного времени
LEAVE USTR1;выводим транзакт из памяти с именем USTR1
TERMINATE 1;уничтожаем один активный транзакт
START 20;То самое условие завершения, Моделирование завершится, когда через сегмент модели пройдёт 20 транзактов.
;Это число уменьшается каждый раз, когда транзакт входит в блок TERMINATE
TRANSFER ,SecondPart


Добавлено через 30 минут
Вот вариант, который я вижу, но там нет вероятности попадания на прибор:
Код
Time	FUNCTION RN1,D4
	.1,100/.25,200/.8,300/1,400

PRIB	FUNCTION RN2,D3
	.5,PRIB1/.85,PRIB2/1,PRIB3

TSPRIB	FUNCTION P1,D3
	PRIB1,800/PRIB2,780/PRIB3,650

USTR1	STORAGE 	3;определяем емкость памяти
	GENERATE(FN$Time);вводим транзакты в модель
	TEST L	Q$FirstPart,20,SecondPart;сравниваем два числовых атрибута
;если в текущей длинне очереди с именем FirstPart меньше чем 20 транзактов,
;то идём ниже, иначе попадаем на метку SecondPart
	
	QUEUE	FirstPart;помещаем транзакт в конец очереди FirstPart
	ASSIGN	1,FN$PRIB;изменяем значение первого параметра транзакта на FN$PRIB
	TRANSFER	,ServiceOnPRIB1;изменяем движение транзакта в модели.Передаем транзакт в блок ServiceOnPRIB1	
	DEPART	FirstPart;покидаем очередь


ServiceOnPRIB1	GATE NU	PRIB1,ServiceOnPRIB2;Если PRIB1 не занят, то идём вниз иначе на метку ServiceOnPRIB2
		PRIORITY	127;устанавливаем приоритетность транзатка
		SEIZE	PRIB1;транзакт занимает прибор PRIB1 
		ADVANCE	800,50;задержка транзакта на 800+-50ед. модельного времени
		RELEASE	PRIB1;транзакт освобождает прибор PRIB1
		TRANSFER	,ServiceOnUSTR1;направляем транзакт в блок ServiceOnUSTR1

ServiceOnPRIB2	GATE NU	PRIB2,ServiceOnPRIB3
		PRIORITY	127
		SEIZE	PRIB2
		ADVANCE	780,50
		RELEASE	PRIB2
		TRANSFER	,ServiceOnUSTR1

ServiceOnPRIB3	GATE NU	PRIB3,ServiceDiscipline
		PRIORITY	127
		SEIZE	PRIB3
		ADVANCE	650,50
		RELEASE	PRIB3
		TRANSFER	,ServiceOnUSTR1

ServiceDiscipline	LINK	LINE,LIFO;помещаем транзакт в список с дисциплиной обслуживаниея LIFO

ServiceOnUSTR1	UNLINK	LINE,ServiceOnPRIB1,1;выводим один транзакт из списка в блок ServiceOnPRIB1
		ENTER	USTR1; транзакт занимает память USTR1
		ADVANCE	580,50; задержка транзакта
		LEAVE	USTR1; транзакт освобождает память
		TERMINATE	1; удаляем активный транзакт
		START	20; счетчик числа завершения. уменьшается на 1, когда попадем в блок TERMINATE
		TRANSFER	,SecondPart; транзакт направляем в блок SecondPart
	
SecondPart	SEIZE	PRIB4; занимаем прибор PRIB4
		ADVANCE	180,50;задержка транзакта
		RELEASE	PRIB4; освобождение транзакта
0
Эксперт GPSS
551 / 410 / 105
Регистрация: 02.07.2010
Сообщений: 1,717
25.06.2019, 19:44 13
Извините за откровенность, но вот вам не лень писать длиннющие метки вроде ServiceOnOther , зато лень комментарии написать и код оформить))
Вот так приблизительно, но задание расплывчатое, я написал как я это понимаю

C++
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
36
37
38
39
40
41
42
43
Time    FUNCTION RN1,D4
    .1,100/.25,200/.8,300/1,400
 
PRIB    FUNCTION RN2,D3
    .5,PRIB1/.85,PRIB2/1,PRIB3
 
TSPRIB  FUNCTION P1,D3
    PRIB1,800/PRIB2,780/PRIB3,650
 
USTR1   STORAGE     3
 
GENERATE(FN$Time)
TEST L  Q$FPart,20,SPart   
QUEUE   FPart
ASSIGN  1,FN$PRIB
GATE NU P1,SDiscipline
SEIZE   P1
ADVANCE FN$TSPRIB,50
RELEASE P1
DEPART  FPart;прошли первую часть
PRIORITY 1;увеличили приоритет
TRANSFER ,SOnUSTR1;
SDiscipline SPLIT 1,met; создание копии которая будет отслеживать состояние устройства и выталкивать заявку из очереди
LINK    LINE,LIFO;вход в очередь
met GATE SNF USTR1; если есть место в устройстве
UNLINK  LINE,SOnUSTR1,1 ;выталкиваем заявку из очереди
TERMINATE;удаляем копию
 
SOnUSTR1  ENTER   USTR1 
ADVANCE 580,50
out LEAVE   USTR1; выход заявок обслуженных на USTR1
 
QUEUE OchPRIB4; очередь к PRIB4 (заявки выстраиваются по приоритету)
SEIZE   PRIB4
DEPART OchPRIB4
ADVANCE 180,50
RELEASE PRIB4
TERMINATE   
         
        GENERATE ,,,1
        TEST E N$out,20
        TERMINATE 1 
        START   1
1
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
25.06.2019, 21:10  [ТС] 14
Почему то Ваше сообщение я получил после того, как изменил свое предыдущее, в котором я весь код прокомментировал.
0
Эксперт GPSS
551 / 410 / 105
Регистрация: 02.07.2010
Сообщений: 1,717
25.06.2019, 21:14 15
Цитата Сообщение от blocker147 Посмотреть сообщение
Почему то Ваше сообщение я получил после того, как изменил свое предыдущее, в котором я весь код прокомментировал.
бывает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2019, 21:14
Помогаю со студенческими работами здесь

Из 18 рабочих 5 работает без брака с вероятностью 0.8, 7 - с вероятностью 0.7, 4 с вероятностью 0.6
Из 18 рабочих 5 работает без брака с вероятностью 0.8, 7 - с вероятностью 0.7, 4 с вероятностью 0.6...

Накопление партии заявок / Сбор заявок (Hold, batch-unbatch)
Необходимо собрать 10 деталей, и отправить их на дальнейшую операцию. Каким способом лучше это...

Получение заявок на общий ящик Outlook, разбор заявок участниками
Добрый день. Имеется общий ящик Outlook, он подключен как дополнительный группой сотрудников. На...

Вычисление интенсивности поступления заявок - среднего чила заявок, поступающих в единицу времени
Есть задача: Рассмотрим следующую модель системы массового обслуживания с отказами, описывающую...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru