cij = vj - ui / • ∈ C+
.
:
cks =vs - uk /•( ) ∈ C-
Każdy składnik występuje tu dokładnie 2 razy.
crs• = vs• - ur • δrs•
crj =vj - ur /•(-
crj =vj - ur /•
cks =vs - ur /•(-
Dodając stronami mamy:
Stąd widać, że jeżeli δrs>0,to funkcja celu maleje, a gdy δ rs=0 , to funkcja celu nie zmienia się.
Założymy teraz, że mamy rozwiązanie optymalne cykliczne. Wtedy w kroku III wyrzucamy jedną klatkę, żeby nie było cyklu ( i wartość funkcji celu nie może zmaleć, bo rozwiązanie jest optymalne). Wtedy to rozwiązanie będzie acykliczne.
Zatem rozwiązania zadania transportowego należy szukać wśród rozwiązań acyklicznych. Rozwiązań cyklicznych jest skończona ilość.
Funkcja celu jest słabo malejąca.
z'=z-δrs
uj-ui≥cij
δrs = min {vj - ui - cij }<0
PROBLEMY SIECIOWE
Problem największego przepływu.
Załóżmy, że dany jest graf skierowany S=<P,U> - jest to para <P,U>, gdzie P- zbiór wierzchołków, U - zbiór tuków skierowanych bez pętli i cykli.
s- źródło \
t- ujście / wyróżnione wierzchołki
Pozostałe wierzchołki nazywamy węzłami pośrednimi
Jest to graf skierowany.
f(<3,4>)=fij ≥0
f(<4,3>) - to nie ma sensu
Na zbiorze łuków U określamy dwie funkcje f i x, które mają wartości rzeczywiste nieujemne.
f(<i,j>)=fij
x(<i,j>)==xij
fij- interpretujemy jako przepustowość łuku <i,j>
xij -interpretujemy jako przepływ po łuku <i,j>
Def.1.
Siecią transportową Gk nazywamy trójkę ( < P,U>,f,x)
Def.2.
Przepływem dopuszczalnym v, w sieci transportowej Gt nazywamy dowolną funkcję rzeczywistą x określoną na zbiorze tuków dopuszczalnych ( z U) spełniającą następujące warunki:
(1) 0≤xij≤fij dla <i,j>∈U
(2)
(3)
i≠s,i≠t
tzn., ze w węźle nie ma żadnych przypływów ani odpływów
(4)
Zagadnienie maksymalnego przepływu sprowadza się do wyznaczenia przepływu dopuszczalnego v spełniającego warunki (1)-(4), dla którego funkcja celu z =max v.
Jest to zadanie programowania liniowego. Zawsze jest rozw dopuszczalne - jest nim zero.
Ze względu na (1) zawsze istnieje rozw optymalne ( może ich być więcej).
Zbiór rozwiązań dopuszczalnych jest ograniczony.
Przykład:
(*)
Rozwiązanie jest dopuszczalne (bo do każdego węzła wpływa ile wypływa)
Przepływ v=3. Można go zwiększyć.
Teraz v=4 ( bo 3+1=4)
(*) można zapisać jako zadanie programowania liniowego)
z=v→max
x12 + x13 = v
-x12 + x24 = 0
-x13 + x34 + x35 = 0
-x24 - x34 + x46 + x45 = 0
-x35 - x45 + x56 = 0
-x46 - x56 = -v
Zmiennych jest tyle ile łuków.
X12 ≤3
X13 ≤4
X24 ≤4
X34 ≤5
X35 ≤3
X45 ≤2
X46 ≤2
X56 ≤4
Xij ≥0
Jeżeli mamy n wierzchołków i m łuków, to zmiennych jest m+1 , a ograniczeń m+n.
ALGORYTM FORDA-FULKERSONA
Mamy Gt {<P,U>,f,x} , P dzielimy na P' i P ” , s∈ P', t∈ P”
Def.3.
Przekrojem w sieci Gt nazywamy zbiór łuków
s:={ <i,j>∈U: i∈P' ∧j∈P”} gdzie P' i P” spełniają następujące warunki:
P'∩P”=∅, P'∪P”=P , s∈P', t∈P” oraz dla każdego <i,j>∈U zachodzi i,j∈P' albo i,j∈P” albo i<∈P' ∧j∈P”
Dla przekroju s możemy zdefiniować przepustowość
Możemy również dla przekroju s* ( przekrój o minimalnej przepustowości) mówić o f(s*) - minimalna przepustowość.
P'={1,2} P”={3,4,5,6}
S1 = {<2,4>,<1,3>} f(s1)=8
S1 = {<4,6>,<5,6>} f(s2)=6
Natomiast para <2,4> <3,4> nie tworzy przekroju, bo możemy iść <1,3>,<3,5>,<5,6>
Def.4.
Łukiem nienasyconym nazywamy łuk <i,j> taki, że fij - xij >0.
Łukiem użytecznym nazywamy łuk <i,j> taki, że xij>0.
Łuk użyteczny może być nasycony lub nienasycony.
Łuk nasycony musi być użytecznym.
<i,j> łuk
{i,j} krawędź
<1,2>,<2,4>,<4,6> ścieżka
{1,2},{2,4},{4,6} łańcuch
Def.5.
Łańcuchem powiększającym nazywamy łańcuch Q={i1,i2},{i2,i3},...,{ir-1,ir} , i1=s , i2 = t
składający się z łuków nienasyconych lub użytecznych.
DKR
Q+ - skierowany zgodnie od s do t nienasycony
Q- - skierowany niezgodnie od s do t użyteczny
Tw.1.
Przepływ v w sieci Gt jest maksymalny, jeżeli sieć nie zawiera łańcucha powiększającego wartość przepływu (i+,vi)(i-,vi) j i→j cechowanie węzłów.
+ - gdy zgodnie z orientacją łuku
- - przeciwnie do orientacji łuku
vi - o ile możemy zwiększyć przepływ