Автор работы: Пользователь скрыл имя, 26 Апреля 2013 в 21:45, курсовая работа
Моделирование - это исследование какого-либо объекта или системы объектов путем построения и изучения их моделей. А также – это использование моделей для определения или уточнения характеристик и рационализации способов построения вновь конструируемых объектов.
Модель является средством для изучения сложных систем.
1. Теоретическая часть.................................................................................3-10
1.1. Понятие моделирования..................................................................3-4
1.2. Элементы теории массового обслуживания..................................4-7
1.3. Имитационное моделирование систем массового обслуживания......................................................................................7-10
2. Постановка задачи.......................................................................................11
3. Имитационная модель...........................................................................12-14
4. Реализация имитационной модели (среда Borland Delphi)................15-20
4.1 Описание переменных.....................................................................15
4.2 Листинг программы.....................................................................16-20
5. Краткое руководство пользователя......................................................21-23
6. Список использованной литературы.........................................................24
Пусть стационарный ординарный поток с ограниченным последействием задан функцией плотности f(z). В соответствии с формулой Пальма (6) найдем функцию плотности f1(z1) для первого интервала z1.
Теперь можно сформировать случайное число z1, как было показано выше, соответствующее функции плотности f1(z1), и получить момент появления первой заявки t1 = z1. Далее формируем ряд случайных чисел, соответствующих функции плотности f(z), и при помощи соотношения (4) вычисляем значения величин t2, t3, …, tk.
Пример. Пусть получено равномерно распределенное на случайное число .Решаем уравнение
С учетом этого уравнение (7) принимает вид
откуда . Последнее верно, т. к. и , и - равномерно распределенные на случайные числа.
Требуется провести моделирование работы автозаправочной станции (АЗС) в течении 8 часов
Параметры АЗС:
время заправки на второй и третьей колонке подчиняется экспоненциальному закону с параметрами λ=4 мин. и β мин. (разумное значение β установить самостоятельно);
Требуется определить следующие параметры работы АЗС в течение 8 часов:
Согласно поставленной задаче разрабатываем следующую имитационную модель.
АЗС функционирует в течении 8 часов (480 минут). АЗС имеет три колонки – 3 канала обслуживания.
Поток автомобилей, поступающих на заправку – поток заявок – случаен, ординарен и подчиняется экспоненциальному закону распределения. Это говорит о необходимости получения случайных чисел, распределенных по экспоненциальному закону распределения. Воспользуемся методом обратных функций, описанным выше.
Время заправки на первой колонке 10±2,5 мин. Это означает необходимость генерации случайного числа на интервале (0,1) и дальнейшее его сдвижение на интервал (7,5 , 12,5). Для этого воспользуемся следующей формулой (4):
Время заправки на второй и третьей колонке подчиняется экспоненциальному закону. Для получения случайных чисел, распределенных по экспоненциальному закону воспользуемся методом, описанным выше.
Результатом имитации работы АЗС будут следующие параметры:
Представим схему
рис.1
Представим алгоритм функционирования модели (рис.2), причем представим наиболее общий случай, когда каждая из колонок уже имеет очередь заявок.
рис.2
4.1. Описание переменных
tgeneral – текущее время в системе. Программа имитирует работу систему пока Tgeneral < 8 часов (480 минут)
t – случайная величина, распределенная по экспоненциальному закону распределения с параметрами λ=0 мин. и β=5 мин. Определяет моменты поступления заявок в СМО
t1 – случайная величина, определяющая время обслуживания заявки колонкой 1 (каналом 1), распределена на интервале 10±2,5
t2 – случайная величина, определяющая
время обслуживания заявки
t3 – случайная величина, определяющая
время обслуживания заявки
twait1, twait2, twait3 – время ожидания автомобилем своей очереди к каждой из колонок соответственно
sum_twait1, sum_twait2, sum_twait3 – суммарное
время ожидания всех
tengaged1, tengaged2, tengaged3 – время, на которое каждая из колонок занята и не может временно обслуживать другие заявки
sum_t1, sum_t2, sum_t3 – суммарное время работы (непосредственно обслуживания) каждой из колонок
queue1, queue2, queue3 – количество автомобилей в очереди в данный момент времени
max1, max2, max3 – максимальная очередь к каждой колонке соответственно
quancar1, quancar2, quancar3 – количество, автомобилей, обслуженных каждой из колонок соответственно
length_queue1, length_queue2, length_queue3 – сумма длин очередей для каждой из колонок соответсвенно
q1, q2, q3 – счетчики состояний для каждой очереди соответствено
4.2. Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Visible:=false;
form2.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
halt;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids;
type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Bevel1: TBevel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Bevel2: TBevel;
Label14: TLabel;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var tgeneral,t,t1,t2,t3,
twait1,twait2, twait3,
sum_twait1,sum_twait2,sum_
tengaged1,tengaged2,tengaged3,
sum_t1,sum_t2,sum_t3:real;
queue1,queue2,queue3,max1,
quancar1,quancar2,quancar3,
length_queue1,length_queue2,
q1,q2,q3:integer;
begin
stringgrid1.Visible:=true;
tgeneral:=0;
queue1:=0; queue2:=0; queue3:=0;
max1:=0; max2:=0; max3:=0;
tengaged1:=0; tengaged2:=0; tengaged3:=0;
twait1:=0; twait2:=0; twait3:=0;
sum_twait1:=0; sum_twait2:=0; sum_twait3:=0;
quancar1:=0; quancar2:=0; quancar3:=0;
sum_t1:=0; sum_t2:=0; sum_t3:=0;
length_queue1:=0; length_queue2:=0; length_queue3:=0;
q1:=1;q2:=1;q3:=1;
Randomize;
while tgeneral<480 do
begin
t:=abs(5*ln(5*random));
if (queue1<=queue2) and (queue1<=queue3) then
begin
t1:=abs(7.5+random*(12.5-7.5))
sum_t1:=sum_t1+t1;
queue1:=queue1+1;
length_queue1:=length_queue1+
q1:=q1+1;
if max1<queue1 then max1:=queue1;
if tengaged1>tgeneral
then twait1:=tengaged1-tgeneral+t1
else twait1:=0;
sum_twait1:=sum_twait1+twait1;
tengaged1:=tgeneral+t1;
quancar1:=quancar1+1;
end
else
begin
if queue2<=queue3 then
begin
t2:=abs(4-4*ln(4*random));
sum_t2:=sum_t2+t2;
queue2:=queue2+1;
length_queue2:=length_queue2+
q2:=q2+1;
if max2<queue2 then max2:=queue2;
if tengaged2>tgeneral
then twait2:=tengaged2+t2-tgeneral
else twait2:=0;
sum_twait2:=sum_twait2+twait2;
tengaged2:=tgeneral+t2;
quancar2:=quancar2+1;
end
else
begin
t3:=abs(4-4.5*ln(4.5*random));
sum_t3:=sum_t3+t3;
queue3:=queue3+1;
length_queue3:=length_queue3+
q3:=q3+1;
if max3<queue3 then max3:=queue3;
if tengaged3>tgeneral
then twait3:=tengaged3+t3-tgeneral
else twait3:=0;
sum_twait3:=sum_twait3+twait3;
tengaged3:=tgeneral+t3;
quancar3:=quancar3+1;
end;
end;
if (tengaged1<tgeneral) and (queue1<>0) then
begin
queue1:=queue1-1;
length_queue1:=length_queue1+
q1:=q1+1;
end;
if (tengaged2<tgeneral) and (queue2<>0) then
begin
queue2:=queue2-1;
length_queue2:=length_queue2+
q2:=q2+1;
end;
if (tengaged3<tgeneral) and (queue3<>0) then
begin
queue3:=queue3-1;
length_queue3:=length_queue3+
q3:=q3+1;
end;
tgeneral:=tgeneral+t;
end;
stringgrid1.Cells[1,0]:='Колон
stringgrid1.Cells[2,0]:='
stringgrid1.Cells[3,0]:='Колон
stringgrid1.Cells[0,1]:='Коэфф
stringgrid1.Cells[0,2]:='Средн
stringgrid1.Cells[0,3]:='
stringgrid1.Cells[0,4]:='
stringgrid1.Cells[0,5]:='
stringgrid1.Cells[1,1]:=
stringgrid1.Cells[2,1]:=
stringgrid1.Cells[3,1]:=
stringgrid1.Cells[1,2]:=
stringgrid1.Cells[2,2]:=
stringgrid1.Cells[3,2]:=
stringgrid1.Cells[1,3]:=
stringgrid1.Cells[2,3]:=
stringgrid1.Cells[3,3]:=
stringgrid1.Cells[1,4]:=
Информация о работе Моделирование работы автозаправочной станции