Имитационное моделирование экономических процессов

Автор работы: Пользователь скрыл имя, 29 Марта 2012 в 05:56, курсовая работа

Описание работы

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

Содержание работы

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 Кб (Скачать файл)

 


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

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

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

–        число колонок 3;

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

 

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

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

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

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

–        коэффициент загрузки каждой колонки;

–        среднее время обслуживания каждой колонкой;

–        максимальное и среднее число автомобилей в очереди к каждой колонке;

–        среднее время нахождения автомобиля в каждой очереди.

 


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

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

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

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

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

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

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

–        коэффициент загрузки каждой колонки;

–        среднее время обслуживания каждой колонкой;

–        максимальное и среднее число автомобилей в очереди к каждой колонке;

–        среднее время нахождения автомобиля в каждой очереди.

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

 

рис.1

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

 

рис.2

4.         Реализация имитационной модели (среда 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));

  stringgrid1.Cells[2,4]:=floattostr(round(length_queue2/q2));

  stringgrid1.Cells[3,4]:=floattostr(round(length_queue3/q3));

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

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

  stringgrid1.Cells[3,5]:=floattostr(round(sum_twait3/quancar3*1000)/1000);end;

 

procedure TForm2.Button2Click(Sender: TObject);

begin

halt;

end;

 

procedure TForm2.Button3Click(Sender: TObject);

begin

form2.Visible:=false;

form1.Show;

end;

 

end.


 

5.        Краткое руководство пользователя

Запуск программы «Имитация работы АЗС» осуществляется двойным щелчком мыши по файлу Project2.exe.

При открытии данного файла вы увидите следующую форму

 

рис.1

Данная форма называется «Курсовая работа» и содержит информацию о разработчике программы.

Данная форма имеет две кнопки:

1)     «Продолжить». При нажатии на эту кнопку происходит переход к следующей форме «Моделирование работы АЗС»

2)     «Выход». При нажатии на эту кнопку происходит корректный выход из приложения

Информация о работе Имитационное моделирование экономических процессов