Автор работы: Пользователь скрыл имя, 12 Ноября 2014 в 13:53, контрольная работа
Системой массового обслуживания (СМО) называется любая система, предназначенная для обслуживания какого-либо потока заявок.
Примерами систем массового обслуживания могут служить:
посты технического обслуживания автомобилей;
посты ремонта автомобилей;
персональные компьютеры, обслуживающие поступающие заявки или требования на решение тех или иных задач;
станции технического обслуживания автомобилей;
Введение……………………………………………………………..……………….3
1 Постановка задачи………………………………………………………....………5
2 Выявление основных особенностей системы……………………………….…...6
3 Алгоритм движения одного транзакта в системе …………………..…………...7
4 Алгоритм функционирования системы во времени………………….………….8
5 Программа на языке высокого уровня Delphi……………………………….….10
6 Программа в среде имитационного моделирования GPSSWorld………….…..20
Заключение…………………………………………………………………….……22
Список литературы…………………………………………………………...…….23
РОСЖЕЛДОР
Федеральное государственное бюджетное образовательное
учреждение высшего профессионального образования
«Ростовский государственный университет путей сообщения»
(ФГБОУ ВПО РГУПС)
Кафедра «ВТ и АСУ»
КОНТРОЛЬНАЯ РАБОТА
по дисциплине:
«Моделирование информационных систем»
Вариант 1
Выполнила
Проверила
Ростов-на-Дону
2014
Содержание
Введение…………………………………………………………
1 Постановка задачи………………………………………………………...
2 Выявление основных
3 Алгоритм движения одного транзакта в системе …………………..…………...7
4 Алгоритм функционирования
5 Программа на языке высокого уровня Delphi……………………………….….10
6 Программа в среде имитационного моделирования GPSSWorld………….…..20
Заключение……………………………………………………
Список литературы……………………………………………………
Введение
Системой массового обслуживания (СМО) называется любая система, предназначенная для обслуживания какого-либо потока заявок.
Примерами систем массового обслуживания могут служить:
В CMО обслуживаемый объект называют требованием. В общем случае под требованием обычно понимают запрос на удовлетворение некоторой потребности, например, разговор с абонентом, посадка самолета, покупка билета, получение материалов на складе. Средства, обслуживающие требования, называются обслуживающими устройствами или каналами обслуживания. Например, к ним относятся каналы телефонной связи, посадочные полосы, мастера-ремонтники, билетные кассиры, погрузочно-разгрузочные точки на базах и складах. Предметом теории массового обслуживания является установление зависимости между факторами, определяющими функциональные возможности системы массового обслуживания, и эффективностью ее функционирования.
Основной задачей теории СМО является изучение режима функционирования обслуживающей системы и исследование явлений, возникающих в процессе обслуживания.
Одной из характеристик обслуживающей системы является время пребывания требования в очереди. Очевидно, что это время можно сократить за счет увеличения количества обслуживающих устройств. Однако каждое дополнительное устройство требует определенных материальных затрат, при этом увеличивается время бездействия обслуживающего устройства из-за отсутствия требований на обслуживание, что также является негативным явлением. Следовательно, в теории СМО возникают задачи оптимизации: каким образом достичь определенного уровня обслуживания (максимального сокращения очереди или потерь требований) при минимальных затратах, связанных с простоем обслуживающих устройств.
Для моделирования СМО разработан ряд систем имитационного моделирования. Наиболее популярной системой моделирования СМО является система GPSS World. Именно она используется в данной контрольной работе.
1 Постановка задачи
Система обработки информации содержит мультиплексный канал и три мини-ПК. Сигнал от датчиков поступают на вход канала через интервал времени 10 ± 5 мкс. В канале они буферируют и предварительно обрабатываются в течение 10 ± 3 мкс. Затем они поступают на обработку в ту мини-ПК, где имеется наименования по длине входная очередь. Ёмкость входных накопителей во всех мини-ПК рассчитаны на хранение величин 10 сигналов. Время обработки сигнала в любой мини-ПК равно 33 мкс.
Смоделировать процесс обработки 500 символов, поступающих с датчиков. Определить средние времена задержки сигналов в канале и мини-ПК и вероятности переполнения входных накопителей.
Написать программу функционирования системы массового обслуживания на языке высокого уровня со следующими выходными данными:
2 Выявление основных особенностей системы
Структурная схема процесса представлена на рисунке 1.
Рисунок 1 – Структурная схема процесса функционирования АСУТП
Q-схема системы представлена на рисунке 2.
Рисунок 2 – Q-схема системы
Алгоритм движения одного транзакта в системе можно представить в виде схемы, представленной на рисунке 3.
Рисунок 3 – Алгоритм движения одного транзакта в системе
4 Алгоритм функционирования системы во времени
Алгоритм функционирования системы во времени можно представить в виде схемы, представленной на рисунке 4, и таблицы 1.
Рисунок 4 – Алгоритм функционирования системы во времени
Таблица 1 – Алгоритм функционирования системы во времени
N |
Δt |
Tпр.з.i | |
1 |
5 |
→ |
10 |
2 |
15 |
↙→ |
25 |
3 |
9 |
↙→ |
34 |
4 |
10 |
↙→ |
44 |
5 |
8 |
↙→ |
52 |
… |
|||
496 |
13 |
↙→ |
4880 |
497 |
11 |
↙→ |
4891 |
498 |
10 |
↙→ |
4901 |
499 |
7 |
↙→ |
4908 |
500 |
13 |
↙→ |
4921 |
unit Proga;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit6: TEdit;
Label7: TLabel;
Edit7: TEdit;
Edit4: TEdit;
Label4: TLabel;
Label8: TLabel;
Edit5: TEdit;
Label9: TLabel;
Edit8: TEdit;
Label10: TLabel;
Edit9: TEdit;
Label11: TLabel;
Edit10: TEdit;
Label12: TLabel;
Edit11: TEdit;
Label13: TLabel;
Edit12: TEdit;
Label14: TLabel;
Button1: TButton;
Label15: TLabel;
Edit13: TEdit;
Label16: TLabel;
Edit14: TEdit;
Label17: TLabel;
Edit15: TEdit;
Label18: TLabel;
Edit16: TEdit;
Label19: TLabel;
Edit17: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
GEN_time1, GEN_time2, START_END, Time_miniPK, Kanal_time1, Kanal_time2 : Integer;
i,j,k,o,tim1,tim2,timm1,timm2,
Time_Kanal : Array [1..6000,1..2] of Integer ; // для сбора статистики о времени в канале
v_ocheredi : Array [1..3] of Integer ; // 3 очереди для трёх ЭВМ, показывает сколько заявок в очереди
EVM : Array [1..3] of Integer ; // 3 ЭВМ эвм свободен (0), занят (0)
Time_End_Evm: Array [1..3] of Integer ;
Time_Evm : Array [1..6000,1..2] of Integer ; // для сбора статистики о времени в ЭВМ 1 цифра = номер транзакта, 2 - 1 вход 2 выход из ЭВМ
// статистика
Time_raboti : Array [0..3] of Integer; // для сбора статистики по коэффициентам загрузки устройстсв Traboti/Tmodelirovaniya
V_ocherediR : Array [0..3] of Integer; //
для сбора статистики по
V_ocherediRM: Array [0..3] of Integer; //
для сбора статистики по
label
povtor_Kanal;
begin
// Берём исходные данные из формы
GEN_time1 := strtoint(Edit5.Text); // Интервалы формирования сигналов time1+-time2
GEN_time2 := strtoint(Edit8.Text);
START_END := strtoint(Edit11.Text); // Счётчик завершения моделирования
Time_miniPK := strtoint(Edit12.Text); // Время обслуживания в миниПК
Kanal_time1 := strtoint(Edit9.Text);
// Интервалы осблуживания
Kanal_time2 := strtoint(Edit10.Text);
Form1.Edit1.Text:='Начало моделирования ... Пожалуйста подождите';
randomize; // включаем случайный характер случайной величины
// Исходные данные
j:=0;
// Количество транзактов в
i:=1; // Порядковый номер следующего входящего транзакта
k:=0; // Номер выходящего из канала транзакта (для статистики)
v_ocheredi0 := 0; // В очереди к каналу
max_queue_kanal:=0; // максимальная длина
очереди канала за время
KANAL:=0; // канал свободек (0) занят (1)
Time_End_Kanal := -1; // Время освобождения канала заявкой
vx:=0; vix:=0; // номер вошедшей и выходящей заявок в/из миниПК
vibor:=0; // выбор номера очереди 1 2 3
v_ocheredi[1]:=0;v_ocheredi[2]
EVM[1]:=0;EVM[2]:=0;EVM[3]:=0;
Time_End_Evm[1]:=-2;Time_End_
Time:=-1; // Начальное время моделирования (далее текущее)
START :=0; // Счётчик числа успешно обслуженных транзактов
otkaz:=0; // Количество
заявок, которым отказано в
tim1 := abs(GEN_time1-GEN_time2);
tim2 := abs((GEN_time1+GEN_time2)-(
GEN := tim1+random(tim2+1); // время поступлени 1го транзака tim1+-tim2
// Для определения времени
timm1 := abs(Kanal_time1-Kanal_time2);
timm2 := abs((Kanal_time1+Kanal_time2)-
// Время занятости устройств
Time_raboti[0] := 0;Time_raboti[1] := 0;Time_raboti[2] := 0;Time_raboti[3] := 0;
// Количество заявок в очереди
V_ocherediR[0] := 0;V_ocherediR[1] := 0;V_ocherediR[2] := 0;V_ocherediR[3] := 0;
V_ocherediRM[0] := 0;V_ocherediRM[1] := 0;V_ocherediRM[2] := 0;V_ocherediRM[3] := 0;
// <<< Моделируем >>>
while (START<START_END) do begin // Выполняем цикл моделирования, пока число успешно обслуженных транзакто не равно 500
Time:=Time+1; // Крутим время моделирования по едниице
// собираем статистику каждую 1цу времени по размеру в очереди
V_ocherediR[0] := V_ocherediR[0] + v_ocheredi0;
V_ocherediR[1] := V_ocherediR[1] + v_ocheredi[1];
V_ocherediR[2] := V_ocherediR[2] + v_ocheredi[2];
V_ocherediR[3] := V_ocherediR[3] + v_ocheredi[3];
if (V_ocherediRM[0] < v_ocheredi0) then V_ocherediRM[0] := v_ocheredi0;
for o := 1 to 3 do begin
if (V_ocherediRM[o] < v_ocheredi[o]) then V_ocherediRM[o] := v_ocheredi[o];
end;
{GENERATE}
if (Time=GEN) then begin // Если время
поступления первой заявки
j:=j+1; // формируем транзакт. Транзактов в системе j.
i:=i+1; // порядковый номер следующего входящего транзакта
GEN:=Time+tim1+random(tim2+1); // время поступлени следующего транзака
v_ocheredi0 := v_ocheredi0 + 1; // +1 в очереди0
if (v_ocheredi0 > max_queue_kanal) then max_queue_kanal:=v_ocheredi0;
Time_Kanal[i-1,1] := Time; // записываем в массив время входа в очередь (для статистики)
end;
{BUFFER KANAL OUT}
povtor_Kanal:
if ((KANAL = 0)AND(v_ocheredi0 > 0)) then begin // Проверяем если канал не занят (0) , то транзакт отправляем на обслуживание, иначе в очередь
v_ocheredi0 := v_ocheredi0 - 1; // -1 из очереди
KANAL := 1; // канал занят
Time_End_Kanal := Time + timm1 + random (timm2+1) ; // Время освобождения канала = текущее + (10+-3)
Time_raboti[0] := Time_raboti[0] + (Time_End_Kanal-Time);
end;
{ADVANCE KANAL OFF}
if ((KANAL=1)AND(Time=Time_End_
Информация о работе Программа на языке высокого уровня Delphi