Автор работы: Пользователь скрыл имя, 20 Декабря 2011 в 23:13, курсовая работа
В данной работе будет рассмотрено имитационное моделирование процесса обслуживания клиентов автозаправочной станции (далее АЗС). Исследование такой системы с помощью имитационного моделирования состоит в организации и проведении компьютерного эксперимента на имитационной модели. Такой компьютерный эксперимент, по сути, сводится к выполнению модели и наблюдению за ее поведением при заданных значениях входных факторов, то есть проведению экспериментов вида «что-если».
Введение 3
Назначение автозаправочной станции 5
Экономический интерес 5
Время принятия решений 7
Возможные альтернативы 7
Вывод о целесообразности моделирования 7
Основные понятия имитационного моделирования в применении к данной модели 10
Показатели и критерии эффективности 14
Программное обеспечение 15
Расчет результатов и выводы по результатам 20
Заключение 23
Листинг
программы
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,
Nkassirov,n,i,Nk,time,Tend,m,
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.
then T:=(SpinEdit2.Value-SpinEdit1.
if SpinEdit1.Value=SpinEdit2.
then T:=24*60*60;
Tend:=T*30*SpinEdit3.Value;
if Edit2.Text<>''
then Tbetween:=StrToFloat(Edit2.
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)/(
else ShowMessage('');
if Edit8.Text<>''
then Rzarp:=StrToFloat(Edit8.Text)/
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]:=
StringGrid1.ColCount:=
for i:=2 to strtoint(Edit10.Text)+1 do
StringGrid1.Cells[i,0]:=
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*
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-
Rashod[Nk]:=Rashod[Nk]+Rezh+
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]+
Dohod[Nk]:=Dohod[Nk]+Komissia/
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-
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((
Edit11.Text:=inttostr(Nobs[n]
for i:=1 to maxkass do
StringGrid1.Cells[i,1]:=
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
begin
if (SpinEdit2.Value=SpinEdit1.
begin
SpinEdit1.Value:=SpinEdit1.
end;
end;
procedure TForm1.SpinEdit3Change(Sender: TObject);
begin
if (SpinEdit2.Value=SpinEdit1.
begin
SpinEdit2.Value:=SpinEdit1.
end;
end;
end.
Пользователь программного обеспечения для работы с программой должен иметь входные данные. Такие данные, как: среднее время приезда между двумя клиентами, среднее время обслуживания клиента, надбавка на бензин, средняя сумма покупки вводятся на основании имеющейся информации у владельца АЗС. Эта информация может быть получена различными методами, например:
Количество итераций, желаемая прибыль и моделируемый промежуток времени самостоятельно выбирается пользователем.
Предположим, что владелец автозаправочной станции имеет следующие исходные данные для работы с программой, их ввод отображен на рис 2.:
среднее время приезда между двумя клиентами = 300сек;
среднее время обслуживания одного клиента = 7мин;
надбавка на бензин = 10%;
средняя сумма покупки = 250 руб;
максимальная длина очереди = 10машин;
максимальное количество колонок = 6шт;
первоначальные затраты = 21000руб;
расходы на установку одной колонки = 9000руб;
общая сумма заработной платы работника = 7500 руб;
прочие расходы = 4500руб;
моделируемый промежуток времени = 2мес;
желаемая прибыль = 60000 руб.;
количество
имитаций = 100раз;
Рис.2
Ввод исходных данных
После ввода исходных данных пользователь должен нажать на кнопку «Расчет». Выходные данные работы программы представлены на рис 3.
Рис.3
Вывод данных
После
проведения моделирования пользователь
на основании полученных данных должен
самостоятельно принять решение, какое
количество раздаточных колонок ему необходимо
установить. Из таблицы видно, что оптимальное
число касс при заданных начальных условиях
составляет – 2. Если колонок будет меньше,
то и вероятность получения прибыли не
менее заданной будет меньше, т.к. колонки
скорее всего не будут справляться с потоком
клиентов, а если, наоборот, увеличить
количество колонок, то вероятность также
уменьшится вследствие того, что будут
большие затраты на содержание еще одной
раздаточной колонки.
Заключение
В данной курсовой работе было рассмотрено имитационное моделирование процесса обслуживания клиентов на АЗС. Была поставлена задача - рассчитать оптимальное количество раздаточных колонок, которое обеспечит максимальную вероятность получения прибыли, не меньше заданной. Были выявлены причины применения моделирования, а также обосновано применение именно имитационного моделирования.
Разработанное
программное обеспечение
Информация о работе Имитационное моделирование обслуживания клиентов на автозаправочной станции