Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичні вказівки з курсової роботи AтаПЗОВПвТ....doc
Скачиваний:
7
Добавлен:
05.12.2018
Размер:
7.49 Mб
Скачать

Текст процедури побудови опорного плану перевезень

вантажу методом мінімального вузла призначення ТТ

// A[m, n] – матриця транспортних комунікацій (суміжності), де у A[i, j]-ї

клітинці знаходяться вартість транспортування одиниці вантажу із і-того транспортного вузла в j

// TT[m+1, n+1] – транспортна таблиця, де у (n+1)-ї колонці знаходяться обсяги

запасів, а у (m+1)-ї строки – обсяги заявок вантажу

// m – кількість постачальників вантажу

// n – кількість споживачів вантажу

for j:=1 to n do

for i:=1 to m do

A[m+2,j] := A[m+2,j] + A[i,j];

for j:=1 to n do

begin

min := A[m+2,1];

ind := 1;

for i:=2 to n do

if (A[m+2,i] < min) then

begin

min := A[m+2,i];

ind := i;

end;

A[m+2,ind] := 999;

A[m+3,j] := ind;

end;

sum_vid := 1; // Сумарний обсяг відправлення вантажу

sum_pryz := 1; // Сумарний обсяг призначення вантажу

while ((sum_vid <> 0) and (sum_pryz <> 0)) do

begin

for j:=1 to n do

begin

min := A [1,A[m+3,j]];

i_ := 1;

j_ := A[m+3,j];

for i:=2 to m do

if (A[i,A[m+3,j]] < min) then

begin

min := A[i,A[m+3,j]];

i_ := i;

end;

if (min <> 999) then

begin

if (A[m+1,j_] <= A[i_,n+1]) then

TT[i_,j_] := A[m+1,j_]

else

TT[i_,j_] := A[i_,5];

A[i_,j_] := 999;

A[m+1,j_] := A[m+1,j_] - TT[i_,j_];

A[i_,n+1] := A[i_,n+1] - TT[i_,j_];

if (A[m+1,j_] = 0) then

for l:=1 to m do

A[l,j_] := 999;

if (A[i_,n+1] = 0) then

for l:=1 to n do

A[i_,l] := 999;

end;

end;

sum_vid := 0;

for i:=1 to m do

sum_vid := sum_vid + A[i,n+1];

sum_pryz := 0;

for j:=1 to n do

sum_pryz := sum_pryz + A[m+1,j];

end;

Додаток 13

Текст процедури побудови опорного плану перевезень

вантажу методом мінімального вузла відправлення-призначення ТТ

// A[m, n] – матриця транспортних комунікацій (суміжності), де у A[i, j]-ї

клітинці знаходяться вартість транспортування одиниці вантажу із і-того транспортного вузла в j

// TT[m+1, n+1] – транспортна таблиця, де у (n+1)-ї колонці знаходяться обсяги

запасів, а у (m+1)-ї строки – обсяги заявок вантажу

// m – кількість постачальників вантажу

// n – кількість споживачів вантажу

for j:=1 to n do

begin

for i:=1 to m do

A[m+2,j] := A[m+2,j] + A[i,j];

A[m+3,j] := A[m+2,j];

end;

for i:=1 to m do

for j:=1 to n do

A[i,n+2] := A[i,n+2] + A[i,j];

for j:= (n+1) To (m+n) Do

A[m+3,j] := A[m+3,j] + A[j-4,n+2];

for j:=1 to (m+n) Do

begin

min := A[m+3,1];

ind := 1;

for i:=2 To (m+n) Do

if (A[m+3,i] < min) then

begin

min := A[m+3,i];

ind := i;

end;

A[m+3,ind] := 999;

if (ind <= n) then

begin

for k:=1 To n do

if (A[m+2,k] = min) then

A[m+4,j] := k;

A[m+5,j] := 2;

end

else

begin

for k:= 1 to m do

if (A[k,n+2] = min) then

A[m+4,j] := k;

A[m+5,j] := 1;

end;

end;

sum_vid := 1; // Сумарний обсяг відправлення вантажу

sum_pryz := 1; // Сумарний обсяг призначення вантажу

while ((sum_vid <> 0) and (sum_pryz <> 0)) do

begin

for j:=1 to (m+n) do

if (A[m+5,j] = 1) then

begin

min := A[A[m+4,j],1];

i_ := A[m+4,j];

j_ := 1;

for i:=2 to n do

if (A[A[m+4,j],i] < min) then

begin

min := A[A[m+4,j],i];

j_ := i;

end;

if (min <> 999) then

begin

if (A[m+1,j_] <= A[i_,n+1]) then

TT[i_,j_] := A[m+1,j_]

else

TT[i_,j_] := A[i_,n+1];

A[i_,j_] := 999;

A[m+1,j_] := A[m+1,j_] - TT[i_,j_];

A[i_,n+1] := A[i_,n+1] - TT[i_,j_];

if (A[m+1,j_] = 0) then

for l:=1 to m do

A[l,j_] := 999;

if (A[i_,n+1] = 0) then

for l:=1 to n do

A[i_,l] := 999;

end;

end

else

begin

min := A[1,A[m+4,j]];

i_ := 1;

j_ := A[m+4,j];

for i:=2 to m do

if (A[i,A[m+4,j]] < min) then

begin

min := A[i,A[m+4,j]];

i_ := i;

end;

if (min <> 999) then

begin

if (A[m+1,j_] <= A[i_,n+1]) then

TT[i_,j_] := A[m+1,j_]

else

TT[i_,j_] := A[i_,n+1];

A[i_,j_] := 999;

A[m+1,j_] := A[m+1,j_] - TT[i_,j_];

A[i_,n+1] := A[i_,n+1] - TT[i_,j_];

if (A[m+1,j_] = 0) then

for l:=1 to m do

A[l,j_] := 999;

if (A[i_,n+1] = 0) then

for l:=1 to n do

A[i_,l] := 999;

end;

end;

sum_vid := 0;

for i:=1 To m do

sum_vid := sum_vid + A[i,n+1];

sum_pryz := 0;

for j:=1 To n do

sum_pryz := sum_pryz + A[m+1,j];

end;

Додаток 14