Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Цикл / ТИИК2.doc
Скачиваний:
20
Добавлен:
30.04.2013
Размер:
481.28 Кб
Скачать

Исходные данные

Количество загрузочных линий r = 11

Количество сортировочных линий h = 6

Производительность загрузочной линии Пз = 860 посылок/час

Емкости накопителей m от 2 до 5

L = Пс/Пз L от 3 до 5

Описание алгоритма работы системы по методу математического моделирования

Блок 1: Ввод начальных данных (L, M, h. r, Pz, Em).

Блок 2: Задание интервала моделирования (Ет)

Блок 3 и 4: Обнуление массива Y(n). Показывает, что первая платформа подходит к первому узлу всегда свободной.

Блок 5: Цикл, моделирующий движения «массива тележек» Y(n) от узла к узлу сортировочной линии.

Блок 6: Цикл моделирующий прохождение L тележек мимо узла за один такт загрузочной линии.

Блок 7: Условие показывающее что груз может перегрузиться с сортировочной линии только на 1ю из L тележек между узлами.

Блок 8: Разыгрывание случайной величины t

Блок 9: Условие адресования груза в данный накопитель (Груз по адресу?), (t < 1/h)

Блок 10: Условие: Сортировочная платформа находящаяся в узле занята?

Блок 11: Условие в котором проверяется пустой ли накопитель

Блок 12: Груз из накопителя выгружается на свободную сортировочную платформу Количество отсортированных грузов +1 Груз перешел на Y(n-ю) платформу

Блок 13: Условие: Сортировочная платформа находящаяся в узле занята?

Блок 14: Количество отсортированных грузов +1 Груз перешел на Y(n-ю) платформу

Блок 15: Условие: Накопитель полон?

Блок 16: Кол-во грузов в накопителе увеличилось на +1

Блок 17: Произошел отказ в j-том узле P(j)=P(j)+l

Блок 18: Вычисляется вероятность свободном платформы после r (последнего) угла загрузочной линии

Блок 19: Вычисляет интенсивность свободных платформ всей системы

Блок 20 и 21 Otk - сумма отказов по всем узлам (все отказы)

Блок 22: Вычисляет интенсивность повтора

Блок 23: вывод Ic, Ip. Psv

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

m(j) - число грузов в накопителе на j - ом узле (от 1 до М)

P(j) - число отказов на j - ом узле

Y(n) - массив Y(1)...Y(L) массив состояния тележек между узлами загрузочной линии.

Z - количество загруженных платформ (На выходе одной сорт, линии после моделирования Em раз)

Em - интервал моделирования

Otk - суммарное кол-во отказов системы

Psv - вероятность свободной платформы после последнего r узла загр. Линии

t - случайная величина

Блок-схема алгоритма

Программа

unit TIIK;

procedure TForm1.btGoClick(Sender: TObject);

var

t,Ip,Ic,Psv,Pz: real; //задаём переменные типа real

Em,h,i,j,L,n,nak,otk,r,z: integer; //задаём переменные целочисленного диапазона

L_beg,L_end,m_beg,m_end: integer;

y:array [1..100] of integer; //массив состояний платформ

p:array [1..100] of integer; //массив отказов

m:array [1..100] of integer; //массив состояний накопителей

tmpstr: string;

begin

h:=strtoint(lbe_h.text); //загружаем иисходные данные с формы

r:=strtoint(lbe_r.text);

L_beg:=StrToInt(ed_L_beg.Text);

L_end:=StrToInt(ed_L_end.Text);

m_beg:=StrToInt(ed_m_beg.Text);

m_end:=StrToInt(ed_m_end.Text);

Em:=StrToInt(lbe_Em.Text);

Pz:=StrToFloat(lbe_Pz.text);

st_out.Lines.Clear; //очищаем окно вывода

for L:=L_beg to L_end do for nak:=m_beg to m_end do

begin

st_out.Lines.Add('L='+FloatToStr(L)+', m='+FloatToStr(nak));

z:=0;

otk:=0;

for i:=1 to 100 do

begin

p[i]:=0; m[i]:=0;

end;

for i:=1 to Em do

begin //Начало моделирования Em раз

for n:=1 to L do y[n]:=0; //Обнуления массива Y(N)

for j:=1 to r do

//<<< Основной цикл

for n:=1 to L do

begin

if n=1 then t:=random else t:=1; //условие n=1

if t<1/h then //Груз в адрес данного накопителя? // Да

if y[n]=1 then //Платформа занята? //Да

if m[j]=nak then //Накопитель полон?

inc(p[j]) //Да

else

inc(m[j]) //Нет

else

begin //Платформа занята? //Нет

y[n]:=1;

inc(z);

end

else //Груз в адрес данного накопителя? //Нет

if y[n]=0 then //Платформа свободна? //Да

if m[j]>0 then //Накопитель пуст? //Нет

begin

dec(m[j]);

inc(z);

y[n]:=1;

end;

end;

//Основной цикл >>>

end; //Конец моделирования Em раз

st_out.Lines.Add('Грузов отсортировано: '+IntToStr(z));

st_out.Lines.Add('Количество отказов по узлам загрузочных линий: ');

for i:=1 to r do

begin

//st_out.Lines.Add(IntToStr(i)+': '+IntToStr(p[i]));

otk:=otk+p[i];

end;

Psv:=1-z/(Em*L);

Ic:=Psv*Pz*L*h;

Ip:=Pz*otk/Em;

st_out.Lines.Add('Вероятность свободной платформы после '+IntToStr(r)+'гo узла: '+LeftStr(FloatToStr(Psv),5));

st_out.Lines.Add('Iсв='+FloatToStr(Ic)+', Iп='+FloatToStr(Ip));

st_out.Lines.Add('');

end;

end;

end.

Соседние файлы в папке Цикл