Моделирование работы автозаправочной станции

Автор работы: Пользователь скрыл имя, 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

Прикрепленные файлы: 1 файл

пояснилка.doc

— 215.00 Кб (Скачать документ)

Пусть стационарный ординарный поток с ограниченным последействием задан функцией плотности f(z). В соответствии с формулой Пальма (6) найдем функцию плотности f1(z1) для первого интервала z1.

Теперь можно сформировать случайное число z1, как было показано выше, соответствующее функции плотности f1(z1), и получить момент появления первой заявки t1 = z1. Далее формируем ряд случайных чисел, соответствующих функции плотности f(z), и при помощи соотношения (4) вычисляем значения величин t2, t3, …, tk.

Пример. Пусть получено равномерно распределенное на случайное число .Решаем уравнение

                                                                   (7)

 

С учетом этого уравнение (7) принимает вид

,

откуда  .  Последнее верно,   т. к. и , и  -  равномерно распределенные на случайные числа.

 

 

    1. Постановка задачи

Требуется провести моделирование  работы автозаправочной станции (АЗС) в течении 8 часов

Параметры АЗС:

    • число колонок 3;
    • поток автомобилей, поступающих на заправку,  подчиняется экспоненциальному закону  с параметрами λ=0 мин. и β=5  мин.

 

    • время заправки на первой колонке 10±2,5 мин.

время заправки на второй и третьей колонке подчиняется экспоненциальному закону с параметрами λ=4 мин. и β мин. (разумное значение  β установить самостоятельно);

    • автомобиль  подъезжает к  свободной колонке.

Требуется определить  следующие параметры работы АЗС  в течение 8 часов:

    • коэффициент загрузки каждой колонки;
    • среднее время обслуживания каждой колонкой;
    • максимальное и среднее число автомобилей в очереди к каждой колонке;
    • среднее время нахождения автомобиля в каждой очереди.

 

 

    1. Имитационная модель

Согласно поставленной задаче разрабатываем следующую имитационную модель.

АЗС функционирует в  течении 8 часов (480 минут). АЗС имеет три колонки – 3 канала обслуживания.

Поток автомобилей, поступающих  на заправку – поток заявок –  случаен, ординарен и подчиняется экспоненциальному закону распределения. Это говорит о необходимости получения случайных чисел, распределенных по экспоненциальному закону распределения. Воспользуемся методом обратных функций, описанным выше.

Время заправки на первой колонке 10±2,5 мин. Это означает необходимость генерации случайного числа на интервале (0,1) и дальнейшее его сдвижение на интервал (7,5 , 12,5). Для этого воспользуемся следующей формулой (4):

Время заправки на второй и третьей колонке подчиняется  экспоненциальному закону. Для получения случайных чисел, распределенных по экспоненциальному закону воспользуемся методом, описанным выше.

Результатом имитации работы АЗС будут следующие параметры:

    • коэффициент загрузки каждой колонки;
    • среднее время обслуживания каждой колонкой;
    • максимальное и среднее число автомобилей в очереди к каждой колонке;
    • среднее время нахождения автомобиля в каждой очереди.

Представим схему функционирования каждой колонки (рис.1):


рис.1

Представим алгоритм функционирования модели (рис.2), причем представим наиболее общий случай, когда каждая из колонок уже имеет очередь заявок.

 

рис.2 

  1. Реализация имитационной модели (среда Borland Delphi)

4.1. Описание переменных

tgeneral – текущее время в системе. Программа имитирует работу систему пока Tgeneral < 8 часов (480 минут)

t – случайная величина, распределенная  по экспоненциальному закону  распределения с параметрами λ=0 мин. и β=5  мин. Определяет моменты поступления заявок в СМО

t1 – случайная величина, определяющая  время обслуживания заявки колонкой 1 (каналом 1), распределена на интервале 10±2,5

t2 – случайная величина, определяющая  время обслуживания заявки колонкой 2 (каналом 2), распределенная по  экспоненциальному закону распределения с параметрами λ=0 мин. и β=4,5  мин.

t3 – случайная величина, определяющая  время обслуживания заявки колонкой 2 (каналом 2), распределенная по  экспоненциальному закону распределения с параметрами λ=0 мин. и β=4,5  мин.

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_twait3,

tengaged1,tengaged2,tengaged3,

sum_t1,sum_t2,sum_t3:real;

queue1,queue2,queue3,max1,max2,max3,

quancar1,quancar2,quancar3,

length_queue1,length_queue2,length_queue3,

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+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+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+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+queue1;

      q1:=q1+1;

    end;

    if (tengaged2<tgeneral) and (queue2<>0) then

    begin

      queue2:=queue2-1;

      length_queue2:=length_queue2+queue2;

      q2:=q2+1;

    end;

    if (tengaged3<tgeneral) and (queue3<>0) then

    begin

      queue3:=queue3-1;

      length_queue3:=length_queue3+queue3;

      q3:=q3+1;

    end;

    tgeneral:=tgeneral+t;

  end;

  stringgrid1.Cells[1,0]:='Колонка 1';

  stringgrid1.Cells[2,0]:='Колонка 2';

  stringgrid1.Cells[3,0]:='Колонка 3';

  stringgrid1.Cells[0,1]:='Коэффициент загрузки';

  stringgrid1.Cells[0,2]:='Среднее время обслуживания';

  stringgrid1.Cells[0,3]:='Максимальное число автомобилей в очереди';

  stringgrid1.Cells[0,4]:='Среднее число автомобилей в очереди';

  stringgrid1.Cells[0,5]:='Среднее время  нахождения автмобиля в очереди';

  stringgrid1.Cells[1,1]:=floattostr(round(sum_t1/480*1000)/1000);

  stringgrid1.Cells[2,1]:=floattostr(round(sum_t2/480*1000)/1000);

  stringgrid1.Cells[3,1]:=floattostr(round(sum_t3/480*1000)/1000);

  stringgrid1.Cells[1,2]:=floattostr(round(sum_t1/quancar1*1000)/1000);

  stringgrid1.Cells[2,2]:=floattostr(round(sum_t2/quancar2*1000)/1000);

  stringgrid1.Cells[3,2]:=floattostr(round(sum_t3/quancar3*1000)/1000);

  stringgrid1.Cells[1,3]:=inttostr(max1);

  stringgrid1.Cells[2,3]:=inttostr(max2);

  stringgrid1.Cells[3,3]:=inttostr(max3);

  stringgrid1.Cells[1,4]:=floattostr(round(length_queue1/q1));

Информация о работе Моделирование работы автозаправочной станции