--PAGE_BREAK--
2.6 Определение процедур аппроксимации Для возможности аппроксимации числовых значений интересующих характеристик системы S необходимо в процессе моделирования провести аппроксимации, для чего обычно используются процедуры: детерминированная, вероятностная и (или) процедура определения средних значений.
— детерминированные процедуры, при которых результаты моделирования однозначно определяются по данной совокупности входных воздействий переменных и параметров системы (в этом случае случайные элементы отсутствуют). Этот тип нам не подходит, так как у нас наличествует элемент случайности при поступлении заявок в систему;
— вероятностные (рандомизированные) применяются, когда случайные элементы, включая воздействие внешней среды, влияют на функционирование системы и необходимо получить закон распределения выходных переменных системы;
— определение средних значений, когда результатом моделирования являются средние значения выходной переменной при наличии случайных переменных или случайных воздействий;
Для рассматриваемой задачи моделирования СМО будем использовать как вероятностную процедуру, так и процедуру определения средних значений. Использование вероятностной процедуры объясняется тем, что в функционировании СМО присутствуют случайные элементы, влияющие на результаты моделирования. Процедура определения средних значений при моделировании процесса функционирования СМО используются по причине того, что интерес представляют средние значения выходных переменных при наличии случайных факторов: среднее число заявок в очереди и средняя загрузка ЭВМ.
3 Алгоритмизация и машинная реализация модели системы 3.1 Выбор вычислительных средств моделирования СМО На втором этапе моделирования математическая модель, сформированная на первом этапе, воплощается в конкретную машинную модель. Этот этап представляет собой этап практической деятельности, направленной на реализацию идей и математических схем в виде машинной модели процесса функционирования системы, ориентированной на использование конкретных программно — технических средств
Процессы, происходящие в СМО (поступление запросов в систему через разные промежутки времени, освобождение и занятие ЭВМ в различные моменты времени), имеют дискретный и равномерный характер. С учётом этого, а также исходя из стремления сокращения затрат времени на разработку модели СМО, для машинной реализации модели процесса функционирования СМО был выбран язык объектно-ориентированного программирования Delphi 6.
Мы выбрали именно эту среду потому, что она является наиболее оптимальной для решения всех поставленных задач в ходе курсового проекта. Программная среда Delphi 6.0 содержит в себе визуальные компоненты, такие как TButton, TLabel, TChart, TEdit, TPanel и многие другие, которые упрощают и оптимизируют работу разработчика. Важно отметить, что в среде Delphi очень просто отобразить выходные величины, с помощью компонентов TChart и TStringrig.
Исходя из этих соображений можем сказать, что для работы данной модели достаточно любого современного IBM PC совместимого компьютера, работающего под управлением ОС Windows 98 и выше.
3.2 Программирование модели Программирование в среде Delphi, можно разделить на два этапа: создание интерфейса и написание программного кода.
Основная работа программы осуществляется следующим образом:
Источник генерирует заявки через дискретные промежутки времени, в которые производится смена состояний элементов системы. Исходя из постановки задачи неизменные данные являются продолжительность моделирования (400 сек), время поступления запросов (10±3сек), первичная обработка запроса (2 сек), выдача ответа (18±2 сек), и изменяемые – ёмкость накопителя № 1 и № 2, манипулируя которыми достигается оптимальность системы. После ввода ёмкости накопителя № 1 и № 2 следует нажать на кнопку «Выполнить» для начала работы программы. После чего в нижнем окне будут выведены все найденные параметры системы и столбцовая диаграмма, отражающая количество сигналов в накопителе №1 в единицу времени, в которую в каждую единицу времени добавляется объём накопителя № 1 (рис 3.2.1).
Рисунок 3.2.1- Внешний вид программы.
Листинг программы представлен в приложении А.
4 Получение и интерпретация результатов моделирования 4.1 Планирование машинного эксперимента Перед проведением рабочих расчетов на ЭВМ должен быть составлен план проведения эксперимента. Проведение планирования машинных экспериментов призвано дать возможность получить максимальный объем необходимой информации об объекте моделирования при минимальных затратах ресурсов ЭВМ. Решаются частные задачи планирования конкретного машинного эксперимента при уже заданных условиях его проведения и выбранных инструментальной ЭВМ и ее математического обеспечения.
Так как модель стохастична, в ней присутствует случайный элемент (время поступления заявок), то и результаты не будут одинаковы для двух запусков программы. Но тем не менее, можно определить некое число, к которому будет стремиться конкретный параметр (ранее мы выбрали из трех методов аппроксимации метод определения средних значений). Для этого необходимо увеличить количество прогонов программы, или, говоря языком теории вероятностей, число опытов. Это число должно быть конечным, и точность результатов при нем достаточно высока.
Определим количество прогонов необходимых для получения достоверной информации по формуле (1):
(1)
где: p — частота = n1/n;
n1 — число исходов в n – экспериментах;
Q — доверительная вероятность;
Ф-1 -обратная функция Лапласа.
Таблица 4.1.1- Обратная функция Лапласа.
Q
0.9
0.95
0.98
0.99
(Ф-1 *Q/2)2
2.7
3.84
5.7
6.61
Исходя из задания Q=0.95, Е=0.05 следовательно (Ф-1 *Q/2)2 = 3,84
Проведем 10 экспериментов на модели (n=10) и проследим за значением расчетной величины – вероятностью отказа. Т.к. по при длине очереди накопителя № 1 равной 5, сбойных сигналов нет, то, следовательно, вероятность отказа будет равна 0, что делает невозможным расчет количества прогонов. Поэтому будем вести расчет при длине очереди накопителя № 1 и № 2 равной 1, только при этом значении наблюдается появление сбойных сигналов.
Таблица 4.1.2 – Экспериментальные данные.
№ эксп
Кол.-во сбоев
№ эксп
Кол-во сбоев
1
8
6
10
2
10
7
8
3
10
8
7
4
6
9
10
5
9
10
9
n=8+10+10+6+9+10+8+7+10+9=87;
p1=8/87=0,091954; p6=10/87=0,114943;
р2=10/87=0,114943; р7=8/87=0,091954;
р3=10/87=0,114943; р8=7/87=0,08046;
р4=6/87=0,068966; р9=10/87=0,114943;
р5=9/87=0,103448; р10=9/87=0,103448;
Выбираем самую худшую (большую) вероятность — 0,114943 и подставляем её в формулу (1):
Следовательно, чтобы точность экспериментов составляла 0.95 необходимо произвести 156 эксперимента. Статистические данные и результаты всех прогонов представлены в приложении Б.
4.2 Анализ результатов моделирования
По полученным результатам моделирования рассчитаем математическое ожидание величины — вероятность отказа— по формуле (2):
M[X] = X1*P1+X2*P2………..Xn*Pn, (2)
где P = Ni/N;
N — количество опытов (прогонов);
Ni — количество появлений Xi в опытах.
По приложению Б определяем x, n, p (таблица 4.2)
Таблица 4.2 – Результаты моделирования
Xi
0
0,00421941
0,0126582
0,00843882
0,0168776
Ni
36
38
33
48
1
Pi
0,230769231
0,24358974
0,2115385
0,30769231
0,0064103
М[X]= 0+ 0,0010278+ 0,0026777+ 0,00259656+ 0,0001082= 0,0064103
Дисперсию рассчитаем по формуле (3):
D[X]=∑(Xi-M)2 *Pi (3)
D[X]= 0,0000095+ 0,0000012+ 0,0000083+ 0,0000013+ 0,0000007= 0,00002
4.3 Форма представления результатов моделирования В каждом конкретном случае целесообразно выбирать наиболее подходящую форму представления результатов моделирования (таблицы, графики, диаграммы, гистограммы, схемы и т.п.) т.к. это существенно влияет на эффективность дальнейшего использования результатов моделирования (например, заказчиком). В большинстве случаев удобнее результаты моделирования сводить в таблицы.
В рассматриваемой задаче моделирования СМО на экран монитора окончательный результат выводится в отдельном окне, в виде таблицы.
Заключение
В данной курсовой работе успешно были разработаны концептуальная, математическая и машинная модели процесса функционирования СМО.
Полученные на ЭВМ результаты моделирования процесса функционирования СМО отражают основные особенности функционирования реального объекта и позволяют качественно и количественно оценить его поведение. На основе полученных оценок характеристик можно сделать следующие выводы и дать соответствующие рекомендации.
Полученные результаты моделирования системы показывают достаточно эффективную работу системы при средней загрузке ЭВМ №1 98% и ЭВМ №2 80%, при этом в системе происходит минимальное количество сбоев и идет 100% обслуживание заявок. Для улучшения параметров системы можно увеличить ёмкость накопителя № 1 до 7 заявок, но при этом его загруженность снизится в среднем до 40 %.
В целом создание программы, моделирующей систему массового обслуживания, можно считать удачным. Алгоритм разрабатывался максимально простой и эффективный. Результаты моделирования показали не только эффективность работы данной системы, но и возможные пути повышения её производительности.
Список использованных источников 1. Бусленко Н.П. Моделирование сложных систем // – М.: Наука, 1978. — 51с.
2. Лифшиц А.Л. Статистическое моделирование СМО, М., 1978. -216 с.
3. Мухин О. И. Моделирование систем. Конспект лекций — 1985. — 95с.
4. Советов Б.Я., Яковлев С.А. Моделирование систем // Учебник для ВУЗов -М.: Высшая школа, 1985. — 224 с.
5. Советов Б.Я., Яковлев С.А. Моделирование систем // Курсовое проектирование -М.: Высшая школа, 1988. — 232 с.
6. Архангельский А. Я. Программирование в Delphi 5.–М.: ЗАО «Издательство БИНОМ», 2000.–1070 с.
7. Бобровский С. И. Delphi 5: Учебный курс. – СПб.: Питер, 2002. – 640 с.
8. Вендров А. М. Проектирование программного обеспечения ЭИС. М.: «Финансы и статистика», 2000. – 452 с.
Приложение А (обязательное)
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, ExtCtrls, TeEngine, Series, TeeProcs, Chart;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Image1: TImage;
Label1: TLabel;
Label3: TLabel;
GroupBox4: TGroupBox;
Label6: TLabel;
seNak: TSpinEdit;
Label7: TLabel;
seNak2: TSpinEdit;
Label2: TLabel;
Label4: TLabel;
Chart1: TChart;
Series1: TBarSeries;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure Kanal;
procedure Istok;
procedure Kanal_2;
end;
var
Form1: TForm1;
ZKan,zkan_2:boolean;
t1,t2,n,t,tIstok,InSig,VNak,Sboy,OutSig,tkan,SZKan,SZNak,sekanal_2,sboy_2,outsig_2,SZNak_2,szkan_2,tkan_2,vnak_2:integer;
in_k1:byte;
{ var nak_2:byte;{накопитель для канала № 2}
{colnak1-кол-во сигналов, пройденных через накопитель 1}
{in_k1-true-сигнал обслуж-ся каналом № 1, false-сигнал обслуж-ся каналом № 2}
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var j:integer;
begin
VNak:=0; {Накопитель}
Sboy:=0;
sboy_2:=0;
InSig:=0;{подсчет посланных сигналов}
OutSig:=0;{подсчет количества сигналов, покинувших систему обслуженными}
vnak_2:=0;
outsig_2:=0;
SZNak:=0;{подсчет средней занятости накопителя в сигналах}
SZNak_2:=0;{подсчет средней занятости накопителя в сигналах}
SZKan:=0;{подсчет количества единиц времени, которое канал находится в состоянии занятости}
szkan_2:=0;
ZKan:=False; {состояние канала}
ZKan_2:=false;
in_k1:=0;
ListBox1.Items.Clear;
T:=0;
tIstok:=T+7+random(7);
Series1.Clear;
Repeat
Istok;
Kanal;
kanal_2;
SZNak:=SZNak+VNak;
SZNak_2:=SZNak_2+VNak_2;
inc(t);
Series1.Add(vnak); {добавление данных в диаграмму о накопителе №1}
Until T>400;
with ListBox1.Items do
begin { zkan_2:boolean;sekanal_2,sboy_2,outsig_2,szkan_2,tkan_2:integer;}
{ Add('Должно поступить сигналов: '+IntToStr(400 div 10));}
Add('Поступло сигналов: '+IntToStr(InSig));
Add('Обработано сигналов каналом № 1: '+IntToStr(OutSig));
Add('Обработано сигналов каналом № 2: '+IntToStr(OutSig_2));
Add('Сбойных сигналов: '+IntToStr(Sboy+sboy_2));
if ZKan then Inc(VNak);
Add('Учтенных сигналов: '+IntToStr(VNak+vnak_2+Sboy+sboy_2+OutSig+OutSig_2));
if ZKan_2 then Inc(VNak);
if t-t1
if t-t2
Add('Осталось в системе сигналов: '+IntToStr(VNak));
Add('Средняя занятость накопителя № 1 (в сиг.): ' + FloatToStrF(SZNak/400,ffNumber,8,2));
Add('Средняя занятость накопителя № 1 (в %): ' + IntToStr(Round(SZNak/400/seNak.Value*100)));
Add('Средняя занятость накопителя № 2 (в сиг.): ' + FloatToStrF(SZNak_2/400,ffNumber,8,2));
Add('Средняя занятость накопителя № 2 (в %): ' + IntToStr(Round(SZNak_2/400/seNak2.Value*100)));
Add('Средняя занятость канала № 1 (в %): '+ IntToStr(Round(SZKan/400*100)));
Add('Средняя занятость канала № 2 (в %): '+ IntToStr(Round(SZKan_2/400*100)));
end;
end;
procedure TForm1.Kanal;
begin
if ZKan
then
begin
Dec(tKan);
Inc(SZKan);{подсчет количества единиц времени, которое канал находится в состоянии занятости}
if tKan=0 {время, оставшееся до конца обработки сигнала}
then
begin
ZKan:=False;
if in_k1=1 then begin
Inc(OutSig){подсчет количества сигналов, покинувших канал № 1 обслуженными};
t1:=t;
end
else begin
if vnak_2
else inc(sboy_2);
end;
end;
end;
if not ZKan and (VNak>0)
then
begin
Dec(VNak);
if in_k1=1 then in_k1:=0
else in_k1:=1;
ZKan:=True;
if in_k1=1 then tKan:=2+16+random(5){18+/-2: количество единиц времени, отводимое на обработку одного сигнала}
else tKan:=2;
end;
end;
procedure TForm1.Istok;
begin
{ if T mod N=0
then
tIstok:=T+7+random(7); {источник}
if T=tIstok
then
begin
tIstok:=T+7+random(7); {источник}
Inc(InSig); {подсчет посланных сигналов}
продолжение
--PAGE_BREAK--