Добрый день. Я приступила сегодня к самостоятельному изучению курса "Моделирование систем". Хочу понять - необходимо ли отсылать мои решения практических заданий на сайт, (и если да - то где найти волшебную кнопку "Загрузить...") или практические задания остаются полностью на моей совести? (никто не проверяет, и отчётности по ним я предоставлять не обязана?) P.S.: тьютора я не брала |
Моделирование многоканальных систем массового обслуживания
2.2. Пример моделирования системы типа М/М/M/K с ограниченным временем ожидания
Пример 2. Получите операционные характеристики системы с ограниченным временем ожидания при следующих параметрах системы:
— интенсивность входного потока требований,
— интенсивность обслуживания каждым прибором,
— интенсивность ухода из очереди "нетерпеливых" требований. Моделирование проведите в MATLAB и GPSS/PC.
Размеченный граф состояний системы показан на рис. 2.3.
На рис. 2.3 вокруг состояния 4 проведена воображаемая окружность для пояснения применения мнемонического правила составления дифференциальных уравнений Колмогорова. В соответствии с мнемоническим правилом получаем следующую систему дифференциальных уравнений:

где — вероятности состояний системы.
Для интегрирования системы дифференциальных уравнений зададим естественные граничные условия:

Программный код решения примера в системе MATLAB:
function MMmKv %% Система M/M/4/7 с ограниченным временем ожидания в очереди % Параметры системы L = 3.52; M = 0.678; v = 1.3; m = 4; K = 7; % Матрица коэффициентов системы дифференциальных уравнений global A A = [-L, M, zeros(1,6); L, -(L+M), 2*M, zeros(1,5); 0, L, -(L+2*M), 3*M, zeros(1,4); 0, 0, L, -(L+3*M), 4*M, zeros(1,3); zeros(1,3), L, -(L+4*M), (4*M+v), 0, 0; zeros(1,4), L, -(L+4*M+v), (4*M+2*v), 0; zeros(1,5), L, -(L+4*M+2*v), (4*M+3*v); zeros(1,6), L ,-(4*M+3*v)]; % Решение дифференциальных уравнений T = [0,20]; % Время интегрирования P0 = [1;zeros(length(A)-1,1)]; % Начальные условия [t, P] = ode23(@cmo, T, P0); %% Построение диаграмм вероятностей состояний % line(t,P,'linew',2) %% сполошные линии с различными цветами line(t,P(:,1),'linew',2, 'color','r') %% Po line(t,P(:,2), 'linew',2,'lines','--') %% P1 line(t,P(:,3), 'linew',2,'lines','-.') %% P2 line(t,P(:,4), 'linew',2,'lines',':') %% P3 line(t,P(:,5), 'marker','o', 'color', 'm') %% P4 line(t,P(:,6), 'marker','h', 'color','k') %% P5 line(t,P(:,7), 'marker','p','color','r') %% P6 line(t,P(:,8), 'marker','>') %% P7 grid on N = length(A)-1; arr = [0:N]'; str = num2str(arr); legend(strcat('\bf\itP\rm\bf_', str, '(\itt\rm\bf)')); title(sprintf('%s Вероятности состояний системы M/M/%d/%d', '\bf\fontsize{12}',m, K)); xlabel('\bf\it\fontsize{12} - - - - - - - - t - - - - - - - -') ylabel('\bf\fontsize{12}\itP\rm\bf(\itt\rm\bf)'); set(gca, 'fontweight','bold', 'fontsize',10) Pcm = P(end,:); % Стационарные вероятности fprintf('\n Стационарные вероятности:\n'); for J = 1 : length(A) fprintf('\tP%d = %f\n', J-1, Pcm(J)); end fprintf('\n\t ОПЕРАЦИОННЫЕ ХАРАКТЕРИСТИКИ:\n'); Pnot = P(end,end); fprintf(' Вероятность отказа Pnot = %f\n', P(end,end)); Q = 1 - Pnot; fprintf(' Относительная пропускная способность Q = %f\n', Q); Ab = L*Q; fprintf(' Абсолютная пропускная способность A = %f\n', Ab); Pq = sum(P(end, m+1:end)); fprintf(' Вероятность наличия очереди Pq = %f\n', Pq); Ps = sum(P(end, m:end)); fprintf(' Вероятность загрузки всех каналов обслуживания Ps = %f\n', Ps); Ns = [0:length(A)-1]*P(end,:)'; fprintf(' Среднее количество требований в системе Ns = %f\n', Ns); fprintf(' Среднее время пребывания требования в системе Ts = %f\n', Ns/L); Nq = [0:(K-m)]*P(end,m:K)'; fprintf(' Средняя длина очереди Nq = %f\n', Nq); fprintf(' Среднее время пребывания требования в очереди Tq = %f\n', Nq/L); function f = cmo(t,P); %% Функция описания правых частей %% дифференциальных уравнений global A f = A*P;
Результат выполнения программы
Стационарные вероятности: P0 = 0.007887 P1 = 0.040947 P2 = 0.106289 P3 = 0.183963 P4 = 0.238701 P5 = 0.209568 P6 = 0.138707 P7 = 0.073939 ОПЕРАЦИОННЫЕ ХАРАКТЕРИСТИКИ Вероятность отказа: Pnot = 0.073939 Относительная пропускная способность: Q = 0.926061 Абсолютная пропускная способность: A = 3.259736 Вероятность наличия очереди: Pq = 0.660915 Вероятность загрузки всех каналов обслуживания: Ps = 0.844877 Среднее количество требований в системе: Ns = 4.157868 Среднее время пребывания требования в системе: Ts = 1.181213 Средняя длина очереди: Nq = 1.073958 Среднее время пребывания требования в очереди: Tq = 0.305102
Диаграмма вероятностей состояний системы с ограниченным временем ожидания показана на рис. 2.4.
Задание 3
- Постройте зависимость среднего времени пребывания в очереди от интенсивности входного потока, изменяя интенсивность от
до
, где
— номер компьютера (1, 2, 3, ...), за которым выполняется лабораторная работа.
- Напишите программу для анализа системы с параметрами, вводимыми с клавиатуры пользователем, т. е.
,
,
,
,
. Предусмотрите также ввод интервала интегрирования дифференциальных уравнений.
Для решения примера в системе GPSS/PC подготовим данные о функциях распределения входного потока, экспоненциальном обслуживании и экспоненциальном уходе из очереди "нетерпеливых" требований.
Программа в MATLAB формирования данных:
clear all,clc L = 3.52; %% Интенсивность входного потока M = 0.678; %% Интенсивность обслуживания v = 1.3; %% Интенсивность ухода из очереди %% Функции экспоненциального распределения x = 0 : 0.2 : 20; F = 1 - exp(-L*x); F2 = 1 - exp(-M*x); F3 = 1 - exp(-v*x); %%% Запись в текстовый файл MC2.txt fid = fopen('MC2.txt', 'w'); %% Для блока generate fprintf(fid, 'puas function RN1,C50\r\n'); for J = 1 : length(x) if J <= 50 if mod(J, 5) fprintf(fid, '%g,%g/', F(J), x(J)); else fprintf(fid, '\r\n'); fprintf(fid, '%g,%g/', F(J), x(J)); end end end fprintf(fid, '\r\n;-----------------------------------\r\n'); %% Для блоков advance fprintf(fid, '\r\nexpM function RN2,C50\r\n'); for J = 1 : length(x) if J <= 50 if mod(J, 5) fprintf(fid, '%g,%g/', F2(J), x(J)); else fprintf(fid, '\r\n'); fprintf(fid, '%g,%g/', F2(J), x(J)); end end end fprintf(fid, '\r\n;-----------------------------------\r\n'); %% Для функции распределения ухода из очереди fprintf(fid, '\r\nexpM function RN3,C50\r\n'); for J = 1 : length(x) if J <= 50 if mod(J, 5) fprintf(fid, '%g,%g/', F3(J), x(J)); else fprintf(fid, '\r\n'); fprintf(fid, '%g,%g/', F3(J), x(J)); end end end fclose(fid);
GPSS-программа приводится ниже. В ней задано условие обработки 1000 требований.
Программный код решения примера в системе GPSS/PC:
simulate puas function RN1,C50 0,0/0.505397,0.2/0.755368,0.4/0.879004,0.6/ 0.940155,0.8/0.970401,1/0.98536,1.2/0.992759,1.4/0.996419,1.6/ 0.998229,1.8/0.999124,2/0.999567,2.2/0.999786,2.4/0.999894,2.6/ 0.999948,2.8/0.999974,3/0.999987,3.2/0.999994,3.4/0.999997,3.6/ 0.999998,3.8/0.999999,4/1,4.2/1,4.4/1,4.6/ 1,4.8/1,5/1,5.2/1,5.4/1,5.6/ 1,5.8/1,6/1,6.2/1,6.4/1,6.6/ 1,6.8/1,7/1,7.2/1,7.4/1,7.6/ 1,7.8/1,8/1,8.2/1,8.4/1,8.6/ 1,8.8/1,9/1,9.2/1,9.4/1,9.6/ 1,9.8/ ;----------------------------------- expM function RN2,C50 0,0/0.126808,0.2/0.237536,0.4/0.334223,0.6/ 0.418649,0.8/0.492369,1/0.556741,1.2/0.612949,1.4/0.662031,1.6/ 0.704888,1.8/0.742311,2/0.774988,2.2/0.803521,2.4/0.828436,2.6/ 0.850192,2.8/0.869189,3/0.885777,3.2/0.900261,3.4/0.912909,3.6/ 0.923953,3.8/0.933596,4/0.942017,4.2/0.949369,4.4/0.95579,4.6/ 0.961396,4.8/0.966291,5/0.970566,5.2/0.974298,5.4/0.977558,5.6/ 0.980403,5.8/0.982888,6/0.985058,6.2/0.986953,6.4/0.988607,6.6/ 0.990052,6.8/0.991314,7/0.992415,7.2/0.993377,7.4/0.994217,7.6/ 0.99495,7.8/0.995591,8/0.99615,8.2/0.996638,8.4/0.997064,8.6/ 0.997437,8.8/0.997762,9/0.998045,9.2/0.998293,9.4/0.99851,9.6/ 0.998699,9.8/ ;----------------------------------- expV function RN3,C50 0,0/0.228948,0.2/0.405479,0.4/0.541594,0.6/ 0.646545,0.8/0.727468,1/0.789864,1.2/0.837974,1.4/0.87507,1.6/ 0.903672,1.8/0.925726,2/0.942731,2.2/0.955843,2.4/0.965953,2.6/ 0.973748,2.8/0.979758,3/0.984392,3.2/0.987966,3.4/0.990721,3.6/ 0.992845,3.8/0.994483,4/0.995746,4.2/0.99672,4.4/0.997471,4.6/ 0.99805,4.8/0.998497,5/0.998841,5.2/0.999106,5.4/0.999311,5.6/ 0.999469,5.8/0.99959,6/0.999684,6.2/0.999756,6.4/0.999812,6.6/ 0.999855,6.8/0.999888,7/0.999914,7.2/0.999934,7.4/0.999949,7.6/ 0.999961,7.8/0.99997,8/0.999977,8.2/0.999982,8.4/0.999986,8.6/ 0.999989,8.8/0.999992,9/0.999994,9.2/0.999995,9.4/0.999996,9.6/ 0.999997,9.8/ *************************************** T_s table m1,0,2,6 ************************************** 10 GENERATE fn$puas 20 test LE q1,3,exit1 30 test L qx1,fn$expV,exit2 40 QUEUE 1 50 TRANSFER ALL,CHAN1,CHAN4,3 ************************************** 100 CHAN1 SEIZE zet1 110 assign 1,zet1 120 transfer ,come ************************************** 200 chan2 SEIZE zet2 210 assign 1,zet2 220 transfer ,come ************************************** 300 chan3 SEIZE zet3 310 assign 1,zet3 320 transfer ,come ************************************** 400 chan4 SEIZE zet4 410 assign 1,zet4 ************************************** 510 come DEPART 1 520 advance fn$expM 530 release p1 540 tabulate T_s 550 work terminate 1 560 exit1 terminate 570 exit2 terminate ************************************** START 1000 ;end
В программе использованы следующие стандартные числовые атрибуты: — длина первой очереди,
— среднее время пребывания в первой очереди без нулевых входов,
— время пребывания транзакта в модели. Освобождение того или иного устройства блоком
выполнено на основе записи в первый параметр транзактов имени устройства, например,
.
Программа реализует следующий алгоритм. Поступающие по пуассоновскому закону требования (транзакты в системах GPSS) попадают в очередь на обслуживание. Если в очереди меньше или равно 3 транзактам, то они ожидают начала обслуживания. В противном случае они покидают систему по метке . Проверка длины очереди осуществляется блоком
в строке 20. Время ожидания соотносится со случайным временем ожидания "нетерпеливых" требований —— со значением функции распределения
. Если оно меньше, то требования поступают в устройства обслуживания, в одно из свободных устройств, начиная с первого (реализуется блоком
в режиме
). Поступающим в устройства обслуживания транзактам в первый параметр записывается имя устройства (
), после чего они отправляются по метке
в блок
, который освобождает одно место в очереди под номером 1. Далее происходит обслуживание транзактов по экспоненциальному закону блоком
в строке 520. Вывод транзакта из работающего устройства осуществляется блоком
по первому параметру, в котором записано имя устройства. Обслуженные транзакты выводятся из системы блоком
с меткой
.
Для получения распределения времени пребывания в модели использован оператор таблицы с меткой
. Сбор статистики для введенной таблицы осуществляется блоком
.
Результат выполнения программы система GPSS/PC оформляет в виде файла стандартного отчета, который имеет следующий вид:
GPSS/PC Report file REPORT.GPS. (V 2, # 37349) 01-08-2010 11:16:14 page 1 START_TIME END_TIME BLOCKS FACILITIES STORAGES FREE_MEMORY 0 416 23 4 0 137072 LINE LOC BLOCK_TYPE ENTRY_COUNT CURRENT_COUNT RETRY 10 1 GENERATE 14227 0 0 20 2 TEST 14227 0 0 30 3 TEST 13127 0 0 40 4 QUEUE 1002 0 0 50 5 TRANSFER 1288 1 0 100 CHAN1 SEIZE 317 0 0 110 7 ASSIGN 317 0 0 120 8 TRANSFER 317 0 0 200 CHAN2 SEIZE 265 0 0 210 10 ASSIGN 265 0 0 220 11 TRANSFER 265 0 0 300 CHAN3 SEIZE 232 0 0 310 13 ASSIGN 232 0 0 320 14 TRANSFER 232 0 0 400 CHAN4 SEIZE 187 0 0 410 16 ASSIGN 187 0 0 510 COME DEPART 1001 0 0 520 18 ADVANCE 1001 1 0 530 19 RELEASE 1000 0 0 540 20 TABULATE 1000 0 0 550 WORK TERMINATE 1000 0 0 560 EXIT1 TERMINATE 1100 0 0 570 EXIT2 TERMINATE 12125 0 0 FACILITY ENTRIES UTIL. AVE._TIME AVAILABLE OWNER PEND INTER RETRY DELAY ZET1 317 0.776 1.02 1 0 0 0 1 0 ZET2 265 0.675 1.06 1 14161 0 0 1 0 ZET3 232 0.557 1.00 1 0 0 0 1 0 ZET4 187 0.507 1.13 1 0 0 0 1 0 QUEUE MAX CONT. ENTRIES ENTRIES(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY 1 4 1 1002 765 0.72 0.30 1.27 0 TABLE MEAN STD.DEV. RETRY RANGE FREQUENCY CUM.% T_S 1.34 1.58 0 - 0 374 37.40 0 - 2 448 82.20 2 - 4 122 94.40 4 - 6 42 98.60 6 - 8 14 100.00 XACT_GROUP GROUP_SIZE RETRY POSITION 0 0
По файлу стандартного отчета определим следующие операционные характеристики: среднее время пребывания в очереди и среднее время пребывания в модели (в системе). Эти характеристики обозначим и
соответственно.
Значение расположено в поле
статистики очереди. Оно равно
.
Значение Ts есть среднее значение таблицы , т. е. в поле
. Оно равно
.
Поскольку очередь имеет нулевые входы – поле , для расчета средней длины очереди
используем аналог формулы Литтла [2], т. е.

Для определения среднего количества требований в системе используем формулу Литтла:

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