Когда происходит событие, состояние системы может быть изменено четырьмя способами:
1) изменением значений одной или нескольких переменных модели;
2) изменением количества компонентов в системе;
3) изменением значении одного или нескольких атрибутов одного компонента;
4) изменением взаимосвязей между компонентами с помощью средств оперирования с: файлами. Отметим, что возможны и такие события, при которых состояние системы не меняется.
В ходе имитации осуществляется планирование наступления событий в заданные моменты времени. События имеют атрибуты и заносятся в файл в хронологическом порядке. Например, при планировании наступления события окончания обслуживания атрибуты обслуживаемого клиента являются частью этого события, поэтому они доступны в момент его обработки. Таким образом, если компонент проходит через некоторую последовательность действий, причем завершение каждого из них отображается в соответствующем событии, то по мере обработки событий атрибуты компонента передаются через всю систему.
4. Разработка модели.
Формализованная схема.
если занято если занято
|
|
| |
| |
если свободно если свободно
|
Готовая продукция
Описание формализованной схемы.
В данном примере имеется две ленты и три обслуживающихся устройства (У.1, У.2, У.3). На 1й и 2й ленте обслуживаются два обслуживающихся устройства У.1 и У.2.
Изделия поступают на первую ленту и если устройства свободны, то происходит обслуживание изделия первым или вторым устройством. А если устройства заняты, то они возвращаются на первую ленту и остаются на ней пока устройства не освободятся.
Когда устройство у первой ленты завершает обработку изделия, оно помещает его на ленту второго конвейера. Изделия поступают к третьему устройству через определенный период времени после попадания на второй конвейер. Если третье обслуживающее устройство занято, то изделие остается на ленте конвейера и через определенный период времени снова попадает к этому устройству.
После обслуживания на третьем устройстве изделие покидает систему.
Временная диаграмма.
|
1 лента
У. 1
У. 2
2 лента
У. 3
Описание временной диаграммы.
На данном рисунке изображена временная диаграмма, иллюстрирующая работу конвейерной системы. В данной системе имеется три обслуживающих устройства, которые обслуживаются двумя лентами конвейера. Изделия поступают на первый конвейер с постоянным интервалом, равным 10 единицам времени.
Практика исследования систем обслуживания показывает, что во многих случаях удовлетворительной оказывается аппроксимация функции распределения интервалов между моментами поступления изделия в систему обслуживания экспоненциальной функцией:
1-eпри t >=0,
A(t)=
0 при t <0,
где λ – величина, обратная среднему интервалу времени между заявками.
Время обслуживания изделия распределено экспоненциально:
Методом обратных функций можно показать, что показательное распределенная случайная величина Xсвязана со случайной величиной R, распределенной на [0,1], соотношением:
Y=1/α*ln(1-R) , где α – параметр показательного закона.
Блок-схема
Описание переменных.
t – время поступления изделия
к – количество изделие
к1 - количество изделие на ленте первого конвейера
к2 - количество изделие на ленте второго конвейера
t[к1] – время движения изделия к1 по ленте первого конвейера
t[к2] - время движения изделия к2 по ленте первого конвейера
i – номер изделия
j – номер обслуживающего устройства
Y[j] – время работы j-го обслуживающего устройства
Y[3] – время работы 3-го обслуживающего устройства
time – среднее время пребывания изделия в системе
obsl – время обслуживания изделия
L – Количество обслужившихся изделий
rab– время начало работы
Программа.
uses crt;
label lb1;
var
g,m,rab,time,s,ts,obsl,a,b:real;
k,k1,k2,i,j,l:integer;
t1,t,y,t2:array[1..100] of real;
function akspon(m2:real):real;
var x,r:real;
begin
randomize;r:=random(1);
x:=-(1/m2)*ln(1-r);
end;
function ravnom(a,b:real):real;
var x, r:real;
begin
randomize;r:=random(1);
x:=a+(b-a)*r;
end;
Begin
CLRSCR;
g:=0; k1:=0; k2:=0;
writeln('vvedite a,b,m,rab');
read(a,b,m,rab);
lb1:if g<rab then begin
k:=k+1; k1:=k1+1;
g:=g+10; t1[k1]:=g+3;
ts:=ts+3;
for i:=2 to k1 do
if t1[i]<t1[i-1] then begin
S:=t1[i-1];
t1[i-1]:=t1[i];
t1[i]:=S;
end;
for i:=1 to k1 do begin
for j:=1 to 2 do begin
if t1[i]>=Y[j] then begin
obsl:=ravnom(a,b);
t1[i]:=t1[i]+obsl;
Y[j]:=t1[i]+obsl;
ts:=ts+obsl; k1:=k1-1;
if Y[j]>rab then begin
l:=l+1; k2:=k2+1;
t2[k2]:=t1[i]+5;
end;
for i:=1 to k2 do
if t2[i]<t2[i-1] then begin
S:=t2[i-1];
t2[i-1]:=t2[i];
t2[i]:=S;
end else
goto lb1; end
else
t2[i]:=t1[i]+3;
ts:=ts+3;
t1[i]:=t1[i]+9;
ts:=ts+9;end;
end;
t2[i]:=t1[i]+9;
ts:=ts+9;
end;
for i:=1 to k2 do
if t2[i]>=Y[3] then begin
obsl:=akspon(m); t2[i]:=t2[i]+obsl;
Y[3]:=t2[i]+obsl;
ts:=ts+obsl; k2:=k2-1;
end else
time:=ts/k;
writeln('time=',time,'k=',k,'l=',l);
End.
writen (time;k,l);
end.
Верификация.
'vvedite a, b, m, rab'
0
1
5
8