Смекни!
smekni.com

Моделирование системы массового обслуживания (стр. 2 из 2)

Рисунок 3. Меню программы

Здесь вы можете запустить или остановить процесс моделирования, выйти из программы, а также вызвать форму "О программе" (рисунок 4).

Рисунок 4. Форма "О программе"

Результаты проводимых экспериментов

Эксперимент №1

Количество аппаратов 50

Длительность процесса 1 день

Пришло покупателей 424

Покупателей обслужено 424

Общая полезность системы 100%

Количество использованных аппаратов 9

Примечание: нерационально большое количество аппаратов - большая часть из них попросту простаивает.

Эксперимент №2

Количество аппаратов 10

Длительность процесса 1 день

Пришло покупателей 427

Покупателей обслужено 427

Общая полезность системы 100%

Количество использованных аппаратов 9

Эксперимент №3

Количество аппаратов 9

Длительность процесса 1 день

Пришло покупателей 424

Покупателей обслужено 424

Общая полезность системы 100%

Количество использованных аппаратов 9

Примечание: дальнейшее уменьшение количества аппаратов ведет к падению полезности системы - аппаратов на всех не хватает и покупатели уходят.

Вывод: Так как в каждом из трех экспериментов количество использованных аппаратов было 9, то оптимальное количество аппаратов, необходимых для обслуживания покупателей с периодичностью прихода с 8 до 12 - 3-7 минут, с 12 до 15 - 2-4 минуты, с 15 до 20 часов - 1-2 минуты, без создания очереди равняется 9.

Заключение

В ходе работы была создана программа, позволяющая моделировать систему массового обслуживания “Магазин". Практически в данном курсовом проекте была реализована функциональная модель, позволяющая прослеживать изменения поведения, состояния системы.

Из проведенного исследования видно, что система является эффективной.

В результате работы была выработана способность системного рассмотрения проблем и задач, а также методов их решения.

Список использованных источников

1. Лифшиц А.Л. Статистическое моделирование СМО, М., 1978.

2. Советов Б.А., Яковлев С.А. Моделирование систем, М: Высшая школа, 1985.

3. Гмурман В.Е. Теория вероятностей и математическая статистика, М: Высшая школа, 2001.

4. Пригодин Н.В. Системный подход в моделироании. М., 1986.

Приложение

unitUnit1;

interface

uses

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

Dialogs, StdCtrls, ComCtrls, ExtCtrls, Menus, Grids;

type

TForm1 = class (TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

TrackBar1: TTrackBar;

TrackBar2: TTrackBar;

TrackBar3: TTrackBar;

GroupBox1: TGroupBox;

TrackBar5: TTrackBar;

TrackBar6: TTrackBar;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

GroupBox2: TGroupBox;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Button1: TButton;

Button2: TButton;

Timer1: TTimer;

GroupBox4: TGroupBox;

Label6: TLabel;

Label11: TLabel;

Label12: TLabel;

Edit7: TEdit;

Edit8: TEdit;

Edit9: TEdit;

Label13: TLabel;

Label14: TLabel;

Label15: TLabel;

Edit10: TEdit;

Edit11: TEdit;

Edit12: TEdit;

TrackBar7: TTrackBar;

Label10: TLabel;

Label16: TLabel;

Label17: TLabel;

Label18: TLabel;

Shape1: TShape;

Label23: TLabel;

Label4: TLabel;

Label5: TLabel;

Label24: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

procedure Timer1Timer (Sender: TObject);

procedure Button1Click (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure ClientAppear (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure statistic (Sender: TObject);

procedure Apparat (Sender: TObject);

procedure TrackBar1Change (Sender: TObject);

procedure TrackBar2Change (Sender: TObject);

procedure TrackBar3Change (Sender: TObject);

procedure TrackBar5Change (Sender: TObject);

procedure TrackBar6Change (Sender: TObject);

procedure TrackBar7Change (Sender: TObject);

procedure CroudP (Sender: TObject);

procedure N4Click (Sender: TObject);

procedure N2Click (Sender: TObject);

procedure N3Click (Sender: TObject);

procedure N6Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

S,FA,min,hour,day,minmax,daymax,hourmax,client,croudcount,cleft: integer;

app: array [1. .50] of boolean;

apptime: array [1. .50] of byte;

obsl,appworktime: array [1. .50] of integer;

croud: array [1. .30] of boolean;

croudtime: array [1. .30] of byte;

implementation

uses Unit2;

{$R *. dfm}

procedure TForm1. Timer1Timer (Sender: TObject);

var i,j: integer;

begin

randomize;

s: =0;

for i: =1 to trackbar1. Position do

begin

if app [i] =false then

begin

for j: =1 to trackbar2. Position do

begin

if croud [j] =true then

begin

croud [j]: =false;

app [i]: =true;

apptime [i]: =random (6) +10;

break

end;

end;

break

end;

end;

for i: =1 to trackbar1. Position do

begin

if app [i] =true then

begin

apptime [i]: =apptime [i] -1;

if apptime [i] =0 then

begin

app [i]: =false;

obsl [i]: =obsl [i] +1;

end;

end;

end;

if client=0 then

begin

clientappear (Sender);

apparat (Sender);

end;

for j: =1 to trackbar2. Position do

begin

if croud [j] =true then

begin

croudtime [j]: =croudtime [j] -1;

if croudtime [j] =0 then

begin

croud [j]: =false;

cleft: =cleft+1;

end;

end;

end;

if croud [1] =false then

begin

for j: =1 to trackbar2. Position-1 do

begin

croud [j]: =croud [j+1] ;

croudtime [j]: =croudtime [j+1] ;

end;

croud [trackbar2. Position]: =false;

end;

for i: =1 to trackbar1. Position do

begin

if app [i] =true then appworktime [i]: =appworktime [i] +1;

end;

client: =client-1;

min: =min+1;

if min>59 then

begin

min: =0;

hour: =hour+1;

end;

if hour>19 then

begin

hour: =8;

day: =day+1;

for i: =1 to trackbar1. Position do

begin

if apptime [i] >0 then obsl [i]: =obsl [i] +1;

apptime [i]: =0;

app [i]: =false;

end;

for j: =1 to trackbar2. Position do

begin

croudtime [j]: =0;

croud [j]: =false;

croudcount: =0;

end;

end;

if length (inttostr (min)) <2 then

label5. Caption: =inttostr (hour) +': 0'+inttostr (min)

else label5. Caption: =inttostr (hour) +': '+inttostr (min);

label24. Caption: ='День: ' + inttostr (day);

statistic (sender);

if (day=daymax) and (hour=hourmax) and (min=minmax)

then Button2Click (Sender);

end;

procedure TForm1. ClientAppear (Sender: TObject);

begin

randomize;

case (hour) of

8. .11: Client: =random (strtoint (edit10. Text) - strtoint (edit7. Text)) +strtoint (edit7. Text);

12. .14: Client: =random (strtoint (edit11. Text) - strtoint (edit8. Text)) +strtoint (edit8. Text);

15.19: Client: =random (strtoint (edit12. Text) - strtoint (edit9. Text)) +strtoint (edit9. Text);

end;

end;

procedure TForm1. Apparat (Sender: TObject);

var i: integer;

begin

FA: =0;

randomize;

for i: =1 to trackbar1. Position do

begin

if app [i] =false then

begin

FA: =FA+1;

app [i]: =true;

apptime [i]: =random (7) +3;

break

end;

end;

if FA=0 then CroudP (sender);

end;

procedure TForm1. CroudP (Sender: TObject);

var j,k: integer;

begin

k: =0;

for j: =1 to trackbar2. Position do

begin

if croud [j] =false then

begin

k: =k+1;

croud [j]: =true;

croudtime [j]: =trackbar3. Position;

break

end;

end;

if k=0 then cleft: =cleft+1;

end;

procedure TForm1. statistic (Sender: TObject);

var stat: string;

i,j: integer;

begin

croudcount: =0;

for i: =1 to trackbar1. Position do

begin

stringgrid1. Cells [0, i-1]: ='';

s: =s+obsl [i] ;

if app [i] =true then stat: ='Занят (осталось '+inttostr (apptime [i]) + ' мин) '

else stat: ='Аппарат№'+inttostr (i) +': Свободен';

stringgrid1. Cells [0, i-1]: =stat;

stringgrid2. Cells [0, i-1]: = ('Аппарат №'+inttostr (i) +': обслужено '+inttostr (obsl [i]) +'; время работы '+inttostr (appworktime [i]));

end;

for j: =1 to trackbar2. Position do

begin

if croud [j] =true then

croudcount: =croudcount+1;

end;

label17. Caption: =inttostr (croudcount);

label23. Caption: ='Ушло покупателей: ' + inttostr (cleft);

label18. Caption: ='Всего обслужено: ' + inttostr (S);

end;

procedure TForm1. Button1Click (Sender: TObject);

var i: integer;

begin

stringgrid1. RowCount: =trackbar1. Position;

stringgrid2. RowCount: =trackbar1. Position;

trackbar1. Enabled: =false;

trackbar2. Enabled: =false;

trackbar3. Enabled: =false;

trackbar5. Enabled: =false;

trackbar6. Enabled: =false;

edit1. Enabled: =false;

edit7. Enabled: =false;

edit8. Enabled: =false;

edit9. Enabled: =false;

edit10. Enabled: =false;

edit11. Enabled: =false;

edit12. Enabled: =false;

button1. Enabled: =false;

n2. Enabled: =false;

n3. Enabled: =true;

button2. Enabled: =true;

daymax: =strtoint (edit1. text);

hourmax: =trackbar5. Position+8;

minmax: =trackbar6. Position;

client: =0;

cleft: =0;

S: =0;

timer1. Enabled: =true;

for i: =1 to 50 do

begin

stringgrid2. Cells [0, i-1]: ='';

end;

for i: =1 to trackbar1. Position do

begin

apptime [i]: =0;

obsl [i]: =0;

appworktime [i]: =0;

end;

label5. Caption: ='8: 00';

timer1. Interval: =round (1000/ (Trackbar7. Position));

min: =0;

hour: =8;

day: =0;

for i: =1 to trackbar1. Position do

begin

app [i]: =false;

end;

for i: =1 to trackbar2. Position do

begin

croud [i]: =false;

croudtime [i]: =0;

end;

statistic (Sender);

end;

procedure TForm1. FormCreate (Sender: TObject);

begin

timer1. Enabled: =false;

button2. Enabled: =false;

n3. Enabled: =false;

end;

procedure TForm1. Button2Click (Sender: TObject);

begin

n3. Enabled: =false;

n2. Enabled: =true;

timer1. Enabled: =false;

button2. Enabled: =false;

button1. Enabled: =true;

trackbar1. Enabled: =true;

trackbar2. Enabled: =true;

trackbar3. Enabled: =true;

trackbar5. Enabled: =true;

trackbar6. Enabled: =true;

edit1. Enabled: =true;

edit7. Enabled: =true;

edit8. Enabled: =true;

edit9. Enabled: =true;

edit10. Enabled: =true;

edit11. Enabled: =true;

edit12. Enabled: =true;

end;

procedure TForm1. TrackBar1Change (Sender: TObject);

begin

edit4. Text: =inttostr (TrackBar1. position);

end;

procedure TForm1. TrackBar2Change (Sender: TObject);

begin

edit5. Text: =inttostr (TrackBar2. position);

end;

procedure TForm1. TrackBar3Change (Sender: TObject);

begin

edit6. Text: =inttostr (TrackBar3. position);

end;

procedure TForm1. TrackBar5Change (Sender: TObject);

begin

edit2. Text: =inttostr (TrackBar5. position);

end;

procedure TForm1. TrackBar6Change (Sender: TObject);

begin

edit3. Text: =inttostr (TrackBar6. position);

end;

procedure TForm1. TrackBar7Change (Sender: TObject);

begin

timer1. Interval: =round (1000/ (Trackbar7. Position));

end;

procedure TForm1. N4Click (Sender: TObject);

begin

close;

end;

procedure TForm1. N2Click (Sender: TObject);

begin

button1. Click;

end;

procedure TForm1. N3Click (Sender: TObject);

begin

button2. Click;

end;

procedure TForm1. N6Click (Sender: TObject);

begin

form2. Show;

end;

end.