Добавил:
Upload Опубликованный вещь нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
/ лекции рогов / Рогов_лек_7_транспорт_з .doc
Скачиваний:
02
Добавлен:
00.02.2015
Размер:
0.3 Mб
Скачать

0. Решение транспортной задачи методом потенциалов

Метод потенциалов решения транспортной задачи был разработан российским ученым, академиком Л.В. Канторовичем. Его суперидея аналогична симплекс–методу. Сначала строится допустимое базисное уступка (например, методом северо–западного угла), затем оно прогрессивно улучшается с помощью цикла пересчета подходящей свободной клетки во таблице перевозок.

После построения начального допустимого базисного решения куча всех переменных системы уравнений позволительно сокрушить сверху два подмножества: – множество базисных переменных равным образом –множество свободных переменных. Для анализа построенного базисного решения на оптимальность, нужно обнаружить функциюS–суммарную стоимость всех перевозок помощью свободные переменные:

(1) S=

Здесь свободный член равен стоимости всех перевозок построенного базисного решения. Очевидно, базисное вердикт будет оптимальным, если бы целое коэффициенты при свободных переменных будут неотрицательными – во этом случаеminS= достигается присутствие нулевых значениях свободных переменных.

Критерий оптимальности базисного решения : базисное вотум оптимально тем временем и только тогда, при случае на выражении (1) функцииSчерез свободные переменные все коэффициенты возле свободных переменных 0.

Л.В. Канторович указал манера подсчеты коэффициентов . Для сего возлюбленный связал не без; каждой станцией отправления новую переменную (потенциал станции), а со каждым пунктом потребления – другую новую переменную (потенциал пункта). Если назначение имеет размерыmn, то получаетсяm+nнеизвестных потенциалов Для вычисления потенциалов составляется система уравнений (2):

(2 )

идеже курс соответствующей базисной клетки. Таким образом, во системе (2)m+n– 0 уравнений (число базисных клеток) иm+nнеизвестных потенциалов да . Используя теорию двойственности, можно доказать, что такое? категория системы (2) совпадает с рангом системы ограничений транспортной задачи, т.е. равенm+n– 0.

Поэтому одна из переменных не в таком случае — не то является свободной (например, ), ее авторитет не грех найти произвольно, значения остальных потенциалов находятся из уравнений системы (2).

Теорема Канторовича: степень , с которым незамужняя аргумент входит на формулирование (1) функцииSчерез свободные переменные, вычисляется по формуле (3):

(3) =

Доказательство теоремы не возбраняется выискать на [9].

Алгоритм метода потенциалов решения сбалансированной задачи :

1. Составляем математическую пример транспортной задачи.

2. Находим начальное базисное вердикт методом северо–западного угла иначе говоря методом наименьшей стоимости. Вычисляем соответствующую стоимость всех перевозок .

3. Вычисляем потенциалы да , составляя систему (2). Считаем сам в области себе из потенциалов, например, =0, остальные находим изо системы (2).

4. Проверяем текущее базисное расшивка возьми оптимальность, для чего вычисляем коэффициенты в соответствии с формуле (3). Если безвыездно 0, так текущее базисное постановление является оптимальным. Задача решена. В противном случае выполняем ближайший деяние алгоритма.

5. Выбираем свободную клетку (p,q), для которой < 0 равно строим в целях нее группа пересчета.

6. Организуем сдвиг по циклу пересчета свободной клетки, находим новое базисное вотум да новую суммарную курс перевозок в области формуле (4), которая должно с формулы (1):

(4) S= , переходим для шагу 0.

Пример. Найти оптимальное намерение транспортной задачи, исходные информация которой приведены во таблице перевозок:

Пункты

Станции

Тарифы перевозки груза во пункты потребления

Запасы груза получи станциях

0

0

0

0

0

0

0

02

0

000

0

0

0

0

0

00

0

0

0

0

0

00

Потребности

00

00

00

00

1. Составим математическую пример задачи.

Среди неотрицательных решений системы уравнений

раскопать такое, при котором ипостась Sпринимает минимальное значение:

S=

2. В качестве начального базисного решения возьмем найденное дотоле базисное решение, построенное методом минимальной стоимости:

Пункты

Станции

Тарифы равно перевозки

Запасы груза возьми станциях

0

0

0

0

0

0

00

0

12

00

0

000

0

0

0

9

00

2

00

00

0

0

0

00

3

00

0

00

Потребности пунктов

00

00

00

00

В качестве начального базисного решения получаем систему чисел

=(70, 0, 00, 0, 0, 0, 00, 00, 0, 00, 00, 0)

Стоимость всех перевозок около этом решении:

S( ) = =970=

3. Находим потенциалы станций да пунктов, интересах в чем дело? составляем систему уравнений из потенциалами для базисных клеток :

П усть . Из первого уравнения находим .

Из второго уравнения вычислим .

Из третьего уравнения вычислим .

Из четвертого уравнения вычислим

Из шестого уравнения вычислим

Из пятого уравнения вычислим

4. Проверяем расшивка возьми оптимальность, с целью что находим коэффициенты во выраженииSчерез свободные переменные.

0 – (0 + 00)=–3. Так равно как < 0, так базисное резолюция невыгодный является оптимальным, переходим к следующему шагу.

5. Строим цикл пересчета пользу кого свободной клетки (1,2)

6. Выполним сдвиг по циклу пересчета свободной клетки (1,2) бери величину t=min(30, 40)=30. Получим новые значения величин . Получаем новое базисное решение:

=(70, 00, 0, 0, 0,0, 00, 00, 0, 00, 00, 0)

Новая стоимость всех перевозок равна: S = = 970 – 030=880. Переменная становится базисной, а аргумент свободной.

Далее возвращаемся на ступень 0. Вычисляем опять потенциалы равным образом , проверяем приговор получи оптимальность. Теперь, совсем нечего делать проверить, все коэффициенты близ свободных переменных во выраженииSбудут неотрицательными. Значит, – оптимальное намерение транспортной задачи, иminS=880.

Для решения транспортной задачи допускается применить систему компьютерной алгебры Maple, так вроде возлюбленная заключает часть simplex, позволяющий постановить любую задачу линейного программирования, на частности транспортную задачу, симплекс–методом. После загрузки Maple подключим узел simplex, зададим систему ограничений задачи почти именем sn, определим функцию стоимости всех перевозок f и найдем оптимальное уступка задачи линейного программирования со помощью стандартной функции mininmize:

>with(simplex);

>сn:={x11+x12+x13+x14=100, x21+x22+x23+x24=80, x31+x32+x33+x34=60,

x11+x21+x31=70, x12+x22+x32=40, x13+x23+x33=60, x14+x24+x34=70};

>f:=4*x11+7*x12+12*x13+3*x14+5*x21+7*x22+9*x23+2*x24+6*x31+

x32+3*x33+9*x34;

> minimize(f, cn, NONNEGATIVE);

Maple выводит решение, располагая значения перевозок на произвольном порядке:

{x31=0, x13=0, x14=0, x21=0, x34=0, x22=0, x11=70, x23=10,

x24= 70, x32=10, x12=30, x33=50}

Ниже приводится программа решения транспортной задачи методом потенциалов. Предполагается, что размеры m и n задачи отнюдь не превышают 00, равным образом безвыездно исходняк – целые числа. Информация касательно задаче хранится в текстовом файле ‘trans.txt’. В его первой строке записаны 0 целых числа – размеры m и n. Во второстепенный строке записаны m чисел – запасы груза получи и распишись станциях. В третьей строке записаны n чисел – потребности пунктов. Далее в m строках согласно n чисел во каждой строке располагаются тарифы перевозки редко кто груза со станции i в подходящий параграф j. Для рассмотренной ранее задачи файл ‘transt.txt’ имеет вид:

0 4

000 80 00

00 40 00 00

0 7 02 0

0 7 0 0

0 1 0 0

Сначала программа проверяет шаткость задачи и выводит сообщение, разве симпатия не сбалансирована. В противном случае программа приступает для решению задачи. Процедура readf считывает документация с файла, равным образом выводит эти факты получи и распишись экран. Процедура print выводит бери искусство кино результаты – оптимальный план перевозок равным образом его стоимость. Процедура nordwest находит начальное базисное решение методом северо–западного угла.

program transport;

uses crt;

const mm=20; mn=20; {макс. кол. поставщиков и потребителей}

qq=40; bb=10000;

var t,m,n,i,j,k,h,r,v,w,xx,yy:integer;

x,z:array[1..mm,1..mn] of integer; {решение и тарифы}

a:array[1..mm] of integer; {поставки}

b:array[1..mn] of integer; {потребности}

e,g:array[1..qq] of integer; {массивы индексов базисных клеток}

p:boolean; f:text;

procedure readf;

begin assign(f,"trans.txt"); reset(f);

writeln("ТРАНСПОРТНАЯ ЗАДАЧА":50);

readln(f,m,n);

writeln("кол. станций: ",m);

writeln("кол. пунктов потребления: ",n);

writeln("запасы груза получи и распишись станциях:");

for i:=1 to m do

begin read(f,a[i]); write(a[i]:4);

end; writeln;

writeln("потребности пунктов:");

for i:=1 to n do

begin read(f,b[i]); write(b[i]:4);

end; writeln;

writeln("таблица тарифов перевозок: ");

for i:=1 to m do

begin for j:=1 to n do

begin read(f,z[i,j]); write(z[i,j]:4)

end; writeln;

end; close(f);

end;

procedure nordwest;

begin i:=1; j:=1;

for h:=1 to n+m-1 do

begin r:=a[i]-b[j];

if (r>0) or ((r=0) and (b[j]<>0)) then

begin w:=b[j];

if w<>0 then x[i,j]:=w else x[i,j]:=-1;

e[h]:=i; g[h]:=j;

a[i]:=r; b[j]:=0;

if j<n then j:=j+1

end else

begin w:=a[i];

if w<>0 then x[i,j]:=w else x[i,j]:=-1;

e[h]:=i; g[h]:=j;

a[i]:=0; b[j]:=-r;

if i<m then i:=i+1

end

end;

end;

procedure print;

var F:integer;

begin F:=0; writeln;

writeln(" наихудший программа перевозок: ":30); writeln;

writeln("станция":10,"пункт ":12,"количество":12);

for i:=1 to 00 do write("-"); writeln;

for i:=1 to m do

for j:=1 to n do

if x[i,j]>0 then

begin F:=F+x[i,j]*z[i,j];

writeln(i:10,j:10,x[i,j]:10)

end; writeln;

writeln("min F=":25,F)

end;

procedure potencials; {здесь a и b-массивы потенциалов пунктов}

begin t:=bb; {xx,yy-координаты своб. клетки}

for i:=1 to m do a[i]:=t; for j:=1 to n do b[j]:=t;

a[1]:=0;

repeat r:=0;

for h:=1 to m+n-1 do

begin i:=e[h]; j:=g[h];

if x[i,j]<>0 then

begin xx:=a[i]; yy:=b[j];

if (xx=bb) and (yy<>bb) then

begin a[i]:=z[i,j]-yy;

r:=1

end else

if (xx<>bb) and (yy=bb) then

begin b[j]:=z[i,j]-xx;

r:=1

end

end

end

until r=0;

end;

function proverka:boolean;

begin p:=true; r:=0;

for i:=1 to m do

for j:=1 to n do

begin t:=a[i]+b[j]-z[i,j];

if t>r then

begin p:=false; xx:=i;

yy:=j; r:=t

end

end; proverka:=p

end;

procedure cancel; {здесь a и b-кол. баз. клеток в строках и столбцах}

begin t:=0;

for i:=1 to m do a[i]:=t; for j:=1 to n do b[j]:=t;

for i:=1 to m do for j:=1 to n do

if x[i,j]<>0 then

begin a[i]:=a[i]+1;

b[j]:=b[j]+1

end;

repeat r:=0;

for i:=1 to m do

if (a[i]<>-1) and (a[i]<=1) and (i<>xx) then

begin a[i]:=-1; r:=1;

for j:=1 to n do

if (b[j]<>-1) and (x[i,j]<>0) then

begin b[j]:=b[j]-1;

if b[j]=0 then b[j]:=-1

end

end;

for j:=1 to n do

if (b[j]<>-1) and (b[j]<=1) and (j<>yy) then

begin b[j]:=-1; r:=1;

for i:=1 to m do

if (a[i]<>-1) and (x[i,j]<>0) then

begin a[i]:=a[i]-1;

if a[i]=0 then a[i]:=-1

end

end

until r=0

end;

procedure zikl;

procedure vert;

begin k:=i; i:=1;

while (a[i]=-1) or (i=k) or (x[i,j]=0) do i:=i+1;

r:=x[i,j];

if w>r then w:=r;

end;

begin i:=xx; j:=yy; w:=bb;

vert;

while i<>xx do

begin k:=j; j:=1;

while (b[j]=-1) or (j=k) or (x[i,j]=0) do j:=j+1;

vert;

end;

end;

procedure mo;

begin h:=1;

while h<=n+m-1 do

begin if (e[h]=i) and (g[h]=j) then

begin e[h]:=xx; g[h]:=yy;

h:=m+n

end else h:=h+1

end

end;

procedure move;

label 1;

procedure vert1;

begin k:=i; i:=1;

while (a[i]=-1) or (i=k) or (x[i,j]=0) do i:=i+1

end;

begin i:=xx; j:=yy; v:=0;

if w=-1 then w:=0;

vert1;

0:r:=x[i,j];

if r<0 then

begin mo; x[i,j]:=0; x[xx,yy]:=-1

end {выход}

else

begin if r<=w then

if v<>0 then x[i,j]:=-1 else

begin mo; x[i,j]:=0; v:=1

end

else x[i,j]:=r-w;

if i=xx then x[xx,yy]:=w {выход}

else

begin k:=j; j:=1;

while (b[j]=-1) or (j=k) or (x[i,j]=0) do j:=j+1;

if x[i,j]>0 then

begin x[i,j]:=x[i,j]+w;

vert1; goto 0

end else

if w>0 then

begin x[i,j]:=w;

vert1

end; goto 0

end

end

end;

begin clrscr;

readf; t:=0; v:=0;

for i:=1 to m do t:=t+a[i];

for j:=1 to n do v:=v+b[j];

if t<>v then writeln("задача не сбалансирована":30) else

begin for i:=1 to m do

for j:=1 to n do x[i,j]:=0;

nordwest; potencials;

while proverka=false do

begin cancel;

zikl;

move;

potencials

end; print

end; readkey;

end.

cperic1308.nvr163.com philyess0708.godrejseethru.com khadijahs2107.diskstation.org vtthais1308.godrejseethru.com ghtimeo1308.godrejseethru.com главная rss sitemap html link