Имитационное моделирование обслуживания клиентов на автозаправочной станции

Автор работы: Пользователь скрыл имя, 20 Декабря 2011 в 23:13, курсовая работа

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

В данной работе будет рассмотрено имитационное моделирование процесса обслуживания клиентов автозаправочной станции (далее АЗС). Исследование такой системы с помощью имитационного моделирования состоит в организации и проведении компьютерного эксперимента на имитационной модели. Такой компьютерный эксперимент, по сути, сводится к выполнению модели и наблюдению за ее поведением при заданных значениях входных факторов, то есть проведению экспериментов вида «что-если».

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

Введение 3
Назначение автозаправочной станции 5
Экономический интерес 5
Время принятия решений 7
Возможные альтернативы 7
Вывод о целесообразности моделирования 7
Основные понятия имитационного моделирования в применении к данной модели 10
Показатели и критерии эффективности 14
Программное обеспечение 15
Расчет результатов и выводы по результатам 20
Заключение 23

Файлы: 1 файл

Эмитационное моделирование АЗС.doc

— 1.43 Мб (Скачать файл)

Листинг программы 
 

unit Unit1; 

interface 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, jpeg, ExtCtrls, StdCtrls, Spin, Grids; 

Type

TForm1 = class(TForm)

Image1: TImage;

GroupBox1: TGroupBox;

Label1: TLabel;

Edit2: TEdit;

Label2: TLabel;

Edit3: TEdit;

Label3: TLabel;

Edit4: TEdit;

Label4: TLabel;

Edit5: TEdit;

Label5: TLabel;

GroupBox2: TGroupBox;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

SpinEdit3: TSpinEdit;

Label12: TLabel;

Label13: TLabel;

Label14: TLabel;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Edit9: TEdit;

Edit10: TEdit;

Button1: TButton;

GroupBox3: TGroupBox;

Label15: TLabel;

Label16: TLabel;

Edit13: TEdit;

Edit11: TEdit;

Edit14: TEdit;

Edit1: TEdit;

Label6: TLabel;

Edit12: TEdit;

StringGrid1: TStringGrid;

procedure FormShow(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure SpinEdit2Change(Sender: TObject);

procedure SpinEdit3Change(Sender: TObject);

private

{ Private declarations }

public

 { Public declarations }

 end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);

begin

StringGrid1.Cells[1,0]:='1';

StringGrid1.Cells[2,0]:='2';

StringGrid1.Cells[0,1]:='3';

end;

procedure TForm1.Button1Click(Sender: TObject);

var Tbetween,Tobs,Plata,Rperv,Rzarp,Rkassa,Rezh,x,Tob,Cplata,komissia,Tb: real;

Nkassirov,n,i,Nk,time,Tend,m,T,maxkass:integer;

Dohod,Rashod,pribil: array of real;

arr:array[0..100] of boolean;

ar: array[0..100] of real;

Nobs:array of integer;

begin

if SpinEdit1.Value<SpinEdit2.Value

then T:=(SpinEdit2.Value-SpinEdit1.Value)*60*60;

if SpinEdit1.Value=SpinEdit2.Value

then T:=24*60*60;

Tend:=T*30*SpinEdit3.Value;

if Edit2.Text<>''

then Tbetween:=StrToFloat(Edit2.Text)

else ShowMessage('');

if Edit4.Text<>''

then Plata:=StrToInt(Edit4.Text)

else ShowMessage('');

if Edit3.Text<>''

then Tobs:=StrToFloat(Edit3.Text)

else ShowMessage('');

if Edit6.Text<>''

then Rperv:=StrToFloat(Edit6.Text)

else ShowMessage('');

if Edit7.Text<>''

then Rkassa:=StrToFloat(Edit7.Text)

else ShowMessage('');

if Edit9.Text<>''

then Rezh:=StrToFloat(Edit9.Text)/(30*T)

else ShowMessage('');

if Edit8.Text<>''

then Rzarp:=StrToFloat(Edit8.Text)/(30*T)

else ShowMessage('');

if Edit10.Text<>''

then maxkass:=StrToInt(Edit10.Text)

else ShowMessage('');

if Edit5.Text<>''

then komissia:=StrToInt(Edit5.Text)

else ShowMessage('');

for i:=2 to maxkass do

StringGrid1.Cells[i,0]:=IntToStr(i)+'?????';

StringGrid1.ColCount:=strtoint(Edit10.Text)+1;

for i:=2 to strtoint(Edit10.Text)+1 do

StringGrid1.Cells[i,0]:=IntToStr(i)+'?????';

SetLength(Dohod,maxkass+1);

SetLength(Rashod,maxkass+1);

SetLength(Pribil,maxkass+1);

SetLength(Nobs,maxkass+1);

Nk:=1;

while (Nk<=maxkass) do

  begin

  Pribil[Nk]:=0-(Rperv+Rkassa*Nk);

  for i:=1 to Nk do

  begin

  arr[i]:=true;

  ar[i]:=0;

  end;

  Tb:=0;

  Randomize;

  for time:=1 to Tend do

  begin

  Pribil[Nk]:=Pribil[Nk]-Rezh-Rzarp*Nk;

  Rashod[Nk]:=Rashod[Nk]+Rezh+Rzarp*Nk;

  for i:=1 to Nk do

  begin

  if (ar[i]<=time) then

  begin

  arr[i]:=true

  end;

  end;

  if (time>=Tb) then

  begin

  i:=0;

  while (i<=Nk) do

  begin

  if (arr[i]=true) then

  begin

  x:=0;

  for m:=1 to 12 do x:=x+random;

  Tob:=Tobs+0.5*Tobs*(x-6);

  ar[i]:=time+Tob;

  arr[i]:=false;

  x:=0;

  for m:=1 to 12 do x:=x+random;

  Cplata:=Plata+0.5*Plata*(x-6);

  Pribil[Nk]:=Pribil[Nk]+Komissia/100*Cplata;

  Dohod[Nk]:=Dohod[Nk]+Komissia/100*Cplata;

  i:=Nk+1;

  Nobs[Nk]:=Nobs[Nk]+1;

  end

  else i:=i+1;

  end;

  x:=0;

  for i:=1 to 12 do x:=x+random;

  Tb:=Tbetween+0.5*Tbetween*(x-6);

  Tb:=Tb+time;

  end;

  end;

  Nk:=Nk+1;

  end;

  x:=Pribil[1];

  for Nk:=1 to maxkass do

  begin

  if (Pribil[Nk]>=x) then

  begin

  x:=Pribil[Nk];

  n:=Nk;

  end;

  end;

  Edit13.Text:=inttostr(n);

 Edit12.Text:=floattostr((Dohod[n]-Rashod[n])/SpinEdit3.Value);

 Edit11.Text:=inttostr(Nobs[n]);

 for i:=1 to maxkass do

StringGrid1.Cells[i,1]:=FloatToStr(Pribil[i]);

 end; 
 

procedure TForm1.SpinEdit2Change(Sender: TObject);

begin

if (SpinEdit2.Value=SpinEdit1.Value) then

begin

SpinEdit1.Value:=SpinEdit1.Value-1;

end;

end; 

procedure TForm1.SpinEdit3Change(Sender: TObject);

begin

if (SpinEdit2.Value=SpinEdit1.Value) then

begin

SpinEdit2.Value:=SpinEdit1.Value+1;

end;

end;

end.  
 

    Расчет  результатов и выводы по рассчетам

     Пользователь  программного обеспечения для работы с программой должен иметь входные  данные. Такие данные, как: среднее время приезда между двумя клиентами, среднее время обслуживания клиента, надбавка на бензин, средняя сумма покупки вводятся на основании имеющейся информации у владельца АЗС. Эта информация может быть получена различными методами, например:

    • на основании экспертных оценок;
    • путем анкетирования потенциальных покупателей;
    • на основании данных о работе аналогичных АЗС.

     Количество  итераций, желаемая прибыль и моделируемый промежуток времени самостоятельно выбирается пользователем.

     Предположим, что владелец автозаправочной станции имеет следующие исходные данные для работы с программой, их ввод отображен на рис 2.:

     среднее время приезда между двумя клиентами = 300сек;

     среднее время обслуживания одного клиента = 7мин;

     надбавка  на бензин = 10%;

     средняя сумма покупки = 250 руб;

     максимальная длина очереди = 10машин;

     максимальное количество колонок = 6шт;

     первоначальные  затраты = 21000руб;

     расходы на установку одной колонки = 9000руб;

     общая сумма заработной платы работника = 7500 руб;

     прочие  расходы = 4500руб;

     моделируемый  промежуток времени = 2мес;

     желаемая  прибыль = 60000 руб.;

     количество  имитаций = 100раз; 

 

     Рис.2 Ввод исходных данных 

     После ввода исходных данных пользователь должен нажать на кнопку «Расчет». Выходные данные работы программы представлены на рис 3.

     Рис.3 Вывод данных 

     После проведения моделирования пользователь на основании полученных данных должен самостоятельно принять решение, какое количество раздаточных колонок ему необходимо установить. Из таблицы видно, что оптимальное число касс при заданных начальных условиях составляет – 2. Если колонок будет меньше, то и вероятность получения прибыли не менее заданной будет меньше, т.к. колонки скорее всего не будут справляться с потоком клиентов, а если, наоборот, увеличить количество колонок, то вероятность также уменьшится вследствие того, что будут большие затраты на содержание еще одной раздаточной колонки. 
 
 

     Заключение

      В данной курсовой работе было рассмотрено имитационное моделирование процесса обслуживания клиентов на АЗС. Была поставлена задача -  рассчитать оптимальное количество раздаточных колонок, которое обеспечит максимальную вероятность получения прибыли, не меньше заданной. Были выявлены причины применения моделирования, а также обосновано применение именно имитационного моделирования.

    Разработанное программное обеспечение поможет  владельцу автозапрвки принять решение – выбрать оптимальное количество колонок. Окончательное решение остается за человеком, программа лишь является средством поддержки принятия решений. 

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