Optymalizacja bazy transportowej
Wyznaczanie najkr贸tszej drogi w sieci
Pierwszym zadaniem, kt贸re musi by膰 rozwi膮zane w bazie transportowej, jest przygotowanie bazy podstawowych parametr贸w. Nale偶y do nich wyznaczenie najkr贸tszych dr贸g przejazd贸w z uwzgl臋dnieniem specyfiki sieci po艂膮cze艅. Przyjmuj膮c, 偶e droga z miejscowo艣ci i do miejscowo艣ci j mo偶e by膰 inna ni偶 z miejscowo艣ci j do miejscowo艣ci i, potencjalne trasy przejazdu b臋dziemy przedstawia膰 za pomoc膮 strza艂ek. Gdy kierunek przejazdu nie b臋dzie odgrywa艂 roli, strza艂ki b臋d膮 zast膮pione kraw臋dziami.
W pierwszej kolejno艣ci rozpatrzymy przypadek, gdy kierunek przejazdu jest istotny. Struktur臋 grafu 1.1 i okre艣lone przy strza艂kach odleg艂o艣ci zapiszemy teraz w macierzy, w kt贸rej wiersze i kolumny odpowiadaj膮 w臋z艂om grafu. Przyjmiemy, 偶e w wierszach b臋d膮 reprezentowane w臋z艂y jako pocz膮tki a w kolumnach jako ko艅ce strza艂ek. W uj臋ciu tabelarycznym nasza macierz jest przedstawiona w tabeli 1.1.
Rys. Graf skierowany z warto艣ciami oznaczaj膮cymi odleg艂o艣ci.
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
1 |
* |
30 |
* |
35 |
* |
* |
* |
2 |
* |
* |
13 |
* |
42 |
* |
* |
3 |
* |
14 |
* |
15 |
38 |
27 |
46 |
4 |
* |
* |
12 |
* |
* |
34 |
* |
5 |
* |
* |
* |
* |
* |
* |
18 |
6 |
* |
* |
* |
* |
* |
* |
20 |
7 |
* |
* |
* |
* |
* |
* |
* |
Tab. Macierz odleg艂o艣ci.
Nasze zadanie b臋dzie polega膰 na podaniu algorytmu wyznaczaj膮cego najkr贸tsze drogi mi臋dzy okre艣lon膮 miejscowo艣ci膮 a wszystkimi pozosta艂ymi. B臋dziemy oczywi艣cie zak艂ada膰, 偶e obowi膮zuje nas kierunek przemieszczania zgodny ze wskazaniami strza艂ek.
Najpierw jednak musimy pozna膰 pewne podstawowe poj臋cia i oznaczenia, kt贸rych znajomo艣膰 przyda nam si臋 dla lepszego zrozumienia prowadzonych w dalszej cz臋艣ci oblicze艅.
Drog臋 w grafie skierowanym okre艣la ci膮g w臋z艂贸w b臋d膮cymi pocz膮tkami i ko艅cami nast臋puj膮cych po sobie strza艂ek, przy czym wszystkie strza艂ki musz膮 mie膰 zgodny kierunek. Drog臋 mi臋dzy w臋z艂ami i0 i is b臋dziemy zaznacza膰 jako F=[i0,i1,...,is]. W naturalny spos贸b mo偶emy okre艣li膰 d艂ugo艣膰 tej drogi jako:
c(F)=
i
F = [1,...,j] - ci膮g w臋z艂贸w (wskazuj膮cych jednoznacznie ci膮g strza艂ek) najkr贸tszej drogi od w臋z艂a 1 do w臋z艂a j;
dj - odleg艂o艣膰 od w臋z艂a 1 do w臋z艂a j;
S(j) -zbi贸r nast臋pnik贸w w臋z艂a j (rysunek 1.2);
P(j) - zbi贸r poprzednik贸w w臋z艂a j (rysunek 1.2);
(j) - bezpo艣redni poprzednik w臋z艂a j na najkr贸tszej drodze z a do j.
Rys. Zbi贸r poprzednik贸w P(j)={1,2,3} i nast臋pnik贸w S(j)={4,5}.
Rozpatrzymy og贸lny przypadek, gdy mi臋dzy obiektami i oraz j mog膮 wyst臋powa膰 dwie strza艂ki: od i do j oraz od j do i, przy czym ka偶da z nich mo偶e mie膰 przypisan膮 inn膮 liczb臋, a wi臋c dopuszcza si臋, 偶e cij =cji . Pozwala to rozpatrywa膰 zadania, w kt贸rych rol臋 miary odleg艂o艣ci mo偶e odgrywa膰 czas przejazdu, kt贸ry wcale nie musi by膰 taki sam dla przejazdu w jedn膮 i drug膮 stron臋.
Rys. Dwie drogi mi臋dzy w臋z艂ami i oraz j.
Nasze zadanie ujmiemy nast臋puj膮co: w sieci znany jest pewien wyr贸偶niony w臋ze艂, kt贸ry dalej b臋dziemy oznacza膰 symbolem a (np. a=1). Nale偶y wyznaczy膰 najkr贸tsze drogi z tego w臋z艂a do wszystkich innych w臋z艂贸w oraz obliczy膰 odleg艂o艣ci od w臋z艂a do ka偶dego z w臋z艂贸w.
Zastosujemy tu algorytm Dijkstry I.
Algorytm Dijkstry I
Za艂o偶enia startowe:
Znamy w臋ze艂 a.
Przyjmujemy: Q:={a} i da:=0, a dla pozosta艂ych w臋z艂贸w i
a przyjmujemy: di:=
.
ITERACJE
Krok I
W zbiorze Q wyznaczamy w臋ze艂 h, dla kt贸rego zachodzi: dh= min di
Krok II
Ze zbioru Q usuwamy w臋ze艂 h, w wyniku czego Q:=Q\{h}.
Krok III
Wyznaczamy wszystkie w臋z艂y, kt贸re s膮 nast臋pnikami h, a wi臋c S(h).
Krok IV
Kolejno dla ka偶dego w臋z艂a j
S(h) por贸wnujemy wcze艣niej przyporz膮dkowana odleg艂o艣膰 dj z suma odleg艂o艣ci dh powi臋kszonej o d艂ugo艣膰 przemieszczenia chj. Sprawdzamy wi臋c, czy spe艂niona jest nier贸wno艣膰:
dh+chj<dj
Je偶eli nier贸wno艣膰 jest prawdziwa, to:
Star膮 odleg艂o艣膰 zast臋pujemy now膮: dj:= dh+chj.
Dla j identyfikujemy poprzednika:
(j):=h.
W臋ze艂 j wprowadzamy do zbioru Q:Q:=Q
{j}.
W przeciwnym przypadku pozostawiamy dj bez zmiany.
Krok V
Je偶eli Q
0, to przechodzimy do nast臋pnej iteracji, a wi臋c powracamy do kroku I.
Je偶eli Q = 0, post臋powanie ko艅czy si臋.
W samym post臋powaniu koncentrujemy si臋 na obliczeniach odleg艂o艣ci dj. W celu odczytania ci膮gu w臋z艂贸w le偶膮cych na najkr贸tszych drogach wystarczy odczytywa膰 ich numery w trakcie okre艣lania odleg艂o艣ci. Pomoc膮 b臋d膮 zapami臋tane wskazania bezpo艣rednich poprzednik贸w
(i).
Przyk艂ad
Rozpatrzmy przyk艂ad sieci przedstawiony na rysunku 1.1. przyjmijmy, 偶e w臋ze艂 1 odzwierciedla producenta. Nale偶y wyznaczy膰 najkr贸tsze drogi od producenta do wszystkich pozosta艂ych oraz odpowiadaj膮ce im odleg艂o艣ci.
Start
Przyjmujemy: a:=1, Q:={1}, d1:=0, d2:=
,..., d7:=
.
ITERACJA I
Poniewa偶 Q={1}, wyb贸r h jest zdeterminowany i mamy h=1.
Wykre艣lamy w臋ze艂 1 ze zbioru Q i otrzymujemy Q=0.
Dla h=1 mamy S(1)={2,4}.
Rozpatrujemy kolejno:
j=2, d2:=
, d1+c12=30
d2:=30 i Q:={2}
j=4, d4:=
, d1+c14=35
d4:=35 i Q:={2,4}
Wyniki przej艣ciowe zawiera tabela 1.2.
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
dj |
0 |
30 |
|
35 |
|
|
|
|
* |
1 |
- |
1 |
- |
- |
- |
Tab. Zapis wynik贸w iteracji 1.
ITERACJA 2
W zbiorze Q={2,4} wyznaczamy w臋ze艂 h, dla kt贸rego dh= min di. Korzystaj膮c z wynik贸w pierwszej iteracji otrzymujemy h=2. Wykre艣lamy w臋ze艂 2 ze zbioru Q i otrzymujemy Q={4}. Dla h=2 mamy S(2)={3,5}.
Rozpatrujemy kolejno:
j=3, d3=
, d2+c23=30+13=43
d3:=43 i Q:={3,4}
j=5, d5=
, d2+c25=30+30=60
d5:=60 i Q:={3,4,5}.
Wyniki przej艣ciowe zawiera tabela 1.3.
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
dj |
0 |
30 |
43 |
35 |
60 |
|
|
|
* |
1 |
2 |
1 |
2 |
- |
- |
Tab. Zapis wynik贸w iteracji 2.
ITERACJA 3
W zbiorze Q={3,4,5} wyznaczamy w臋ze艂 h, dla kt贸rego dh= min di.
Korzystaj膮c z wynik贸w drugiej iteracji otrzymujemy h=4.
Wykre艣lamy w臋ze艂 4 ze zbioru Q i otrzymujemy Q={3,5}.
Dla h=4 mamy S(4)={3,6}.
Rozpatrujemy kolejno:
j=3, d3:=43, d4+c43=35+12=47
d3:=43
j=6, d6:=
, d4+c46=35+34=69
d6:=69 i Q:={3,5,6}.
Wyniki przej艣ciowe zawiera tabela 1.4.
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
dj |
0 |
30 |
43 |
35 |
60 |
69 |
|
|
* |
1 |
2 |
1 |
2 |
4 |
- |
Tab. Zapis wynik贸w iteracji 3.
ITERACJA 4
W zbiorze Q={3,5,6} wyznaczamy w臋ze艂 h, dla kt贸rego dh= min di.
Korzystaj膮c z wynik贸w trzeciej iteracji otrzymujemy h=3.
Wykre艣lamy w臋ze艂 3 ze zbioru Q i otrzymujemy Q={5,6}.
Dla h=3 mamy S(3)={2,4,5,6,7}.
Rozpatrujemy kolejno:
j=2, d2:=30, d3+c32=43+14=57
d2:=30
j=4, d4:=35, d3+c34=43+15=58
d4:=35
j=5, d5:=60, d3+c35=43+38=81
d5:=60
j=6, d6:=69, d3+c36=43+27=70
d6:=69
j=7, d7:=
, d3+c37=43+46=89
d7:=89 i Q:={5,6,7}.
Wyniki przej艣ciowe przedstawia tabela 1.5.
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
dj |
0 |
30 |
43 |
35 |
60 |
69 |
89 |
|
* |
1 |
2 |
1 |
2 |
4 |
3 |
Tab. Zapis wynik贸w iteracji 4.
ITERACJA 5
W zbiorze Q={5,6,7} wyznaczamy w臋ze艂 h, dla kt贸rego dh= min di.
Korzystaj膮c z wynik贸w czwartej iteracji otrzymujemy h=5.
Wykre艣lamy w臋ze艂 5 ze zbioru Q i otrzymujemy Q={6,7}.
Dla h=5 mamy S(5)=7.
Dla w臋z艂a 7 otrzymujemy:
j=7, d7:=89, d5+c57=60+18=78
d7:=78.
Wyniki przej艣ciowe przedstawia tabela 1.6.
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
dj |
0 |
30 |
43 |
35 |
60 |
69 |
78 |
|
* |
1 |
2 |
1 |
2 |
4 |
5 |
Tab. Zapis wynik贸w iteracji 5.
ITERACJA 6
W zbiorze Q={6,7} wyznaczamy w臋ze艂 h, dla kt贸rego dh= min di.
Korzystaj膮c z wynik贸w czwartej iteracji otrzymujemy h=6.
Wykre艣lamy w臋ze艂 6 ze zbioru Q i otrzymujemy Q={7}.
Dla h=6 mamy S(6)={7}.
Dla w臋z艂a 7 otrzymujemy:
j=7, d7:=78, d6+c67=69+20=89
d7:=78.
Wyniki przej艣ciowe przedstawia tabela 1.7.
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
dj |
0 |
30 |
43 |
35 |
60 |
69 |
78 |
|
* |
1 |
2 |
1 |
2 |
4 |
5 |
Tab. Zapis wynik贸w iteracji 6.
ITERACJA 7
Poniewa偶 Q={7} otrzymujemy natychmiast h=7 i po wykre艣leniu tego w臋z艂a, Q=0.
Dla h=7 mamy S(7)=0.
Post臋powanie ko艅czy si臋, a wyniki odczytujemy z ostatniej tabeli.
Odczytajmy drog臋 od w臋z艂a 1 do w臋z艂a 7. Jej d艂ugo艣膰 wynosi 78. Bezpo艣rednim poprzednikiem w臋z艂a 7 jest w臋ze艂 5, dla w臋z艂a 5 bezpo艣rednim poprzednikiem jest w臋ze艂 2, dla w臋z艂a 2 bezpo艣rednim poprzednikiem jest w臋ze艂 1.Wobec tego drog臋 wyznacza ci膮g w臋z艂贸w [1,2,5,7].
Analogicznie odczytujemy wyniki dla pozosta艂ych w臋z艂贸w:
Drog臋 z w臋z艂a 1 do w臋z艂a 2 o d艂ugo艣ci 30 wyznacza ci膮g [1,2].
Drog臋 z w臋z艂a 1 do w臋z艂a 3 o d艂ugo艣ci 43 wyznacza ci膮g [1,2,3].
Drog臋 z w臋z艂a 1 do w臋z艂a 4 o d艂ugo艣ci 35 wyznacza ci膮g [1,4].
Drog臋 z w臋z艂a 1 do w臋z艂a 5 o d艂ugo艣ci 60 wyznacza ci膮g [1,2,5].
Drog臋 z w臋z艂a 1 do w臋z艂a 6 o d艂ugo艣ci 69 wyznacza ci膮g [1,4,6].
Algorytm Dijkstry II
W przypadku, gdy w grafie nie wyr贸偶niamy kierunk贸w przemieszczania, a wi臋c gdy rol臋 strza艂ek przejmuj膮 kraw臋dzie, algorytm ulega pewnej modyfikacji, kt贸ra poci膮ga za sob膮 zmiany w zapisie post臋powania. Poniewa偶 w rozpatrywanych zadaniach nie pojawiaj膮 si臋 p臋tle typu [i,j,i], nie b臋dziemy rozpatrywa膰 przemieszcze艅 z i do j i z powrotem. Upraszcza to zapis post臋powania, gdy偶 nie musimy zapami臋tywa膰 bezpo艣rednich poprzednik贸w.
Algorytm
Za艂o偶enia startowe:
Zadany jest graf nie skierowany, warto艣ciowany z wyr贸偶nionym w臋z艂em startowym w, np. w=1.
Ka偶demu w臋z艂owi i b臋dziemy przyporz膮dkowywa膰 cech臋 tymczasow膮 dit oraz cech臋 sta艂膮 dis.
Cecha tymczasowa odpowiada wyznaczonej na bie偶膮co odleg艂o艣ci od w臋z艂a startowego, cecha sta艂a okre艣la ostateczn膮 odleg艂o艣膰, wobec czego po jej wyznaczeniu nie ulega ona zmianie w trakcie dalszego post臋powania. Dla w臋z艂贸w maj膮cych cech臋 sta艂膮, nie rozpatrujemy cechy tymczasowej.
Start
Rozpoczynamy od pewnego okre艣lonego w臋z艂a, np. w=1. Przypisujemy mu cech臋 sta艂膮 d1s=0. Pozosta艂e w臋z艂y nie maja cechy sta艂ej. Jako warto艣ci cech tymczasowych przyjmujemy dit:=
, i
1.
Iteracje
Krok I
Rozpatrujemy wszystkie w臋z艂y po艂膮czone bezpo艣rednio z w臋z艂em w, kt贸remu nadali艣my cech臋 sta艂膮. Wykorzystamy tutaj symbol zbioru nast臋pnik贸w i powiemy, 偶e wyznaczamy zbi贸r S(w).
Krok II
Sprawdzamy, czy w zbiorze S(w) wszystkie w臋z艂y maj膮 cech臋 sta艂膮.
Je偶eli tak, przechodzimy do kroku 4.
Je偶eli istnieje przynajmniej jeden w臋ze艂 nie maj膮cy cechy sta艂ej przechodzimy do kroku 3.
Krok III
Rozpatrujemy kolejno wszystkie w臋z艂y zbioru S(w), kt贸re nie maja cechy sta艂ej. Dla ka偶dego z nich obliczamy sum臋 cechy sta艂ej w臋z艂a w i odleg艂o艣ci danego w臋z艂a od w臋z艂a w i sprawdzamy, czy jest spe艂niona nier贸wno艣膰:
dws+cwi<dit.
Je偶eli nier贸wno艣膰 jest prawdziwa, star膮 cech臋 tymczasow膮 zast臋pujemy now膮: dit:=dws+cwi.
W przeciwnym wypadku pozostawiamy dit bez zmiany.
Krok IV
Sprawdzamy, czy istniej膮 w臋z艂y, kt贸re maja cech臋 tymczasow膮.
Je偶eli taki w臋ze艂 nie istnieje - post臋powanie ko艅czy si臋.
W przeciwnym przypadku, spo艣r贸d w臋z艂贸w maj膮cych cech臋 tymczasow膮 wyznaczamy w臋ze艂 o najni偶szej jej warto艣ci. Przyporz膮dkowana cech臋 tymczasow膮 tego w臋z艂a uznajemy za jego cech臋 sta艂膮, a jednocze艣nie w臋ze艂 ten przejmuje rol臋 w臋z艂a w.
Przyk艂ad
Zmodyfikowane post臋powanie przedstawimy na przyk艂adzie, w kt贸rym graf przedstawiony na rysunku 1.4 odzwierciedla rzeczywiste po艂膮czenia mi臋dzy miejscowo艣ciami wok贸艂 Wroc艂awia. Korzystaj膮c z algorytmu Dijkstry II, wyznaczymy najkr贸tsze drogi z Wroc艂awia do ka偶dej z wymienionych miejscowo艣ci.
Odleg艂o艣ci zaznaczone na grafie 1.4 przedstawia tabela 1.8.
W tabeli wymieniamy jedynie odleg艂o艣ci odzwierciedlaj膮ce bezpo艣rednie po艂膮czenia mi臋dzy miastami. Dla po艂膮cze艅 oznaczonych gwiazdkami najkr贸tsze drogi wymagaj膮 przejazdu przez inn膮 miejscowo艣膰.
Rys. Graf po艂膮cze艅.
Miejscowo艣膰 |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
Wroc艂aw |
1 |
|
34 |
31 |
62 |
56 |
* |
27 |
* |
58 |
* |
* |
Brzeg Dolny |
2 |
34 |
|
58 |
43 |
62 |
* |
* |
* |
* |
* |
* |
Ole艣nica |
3 |
31 |
58 |
|
64 |
51 |
68 |
44 |
* |
* |
* |
* |
Rawicz |
4 |
62 |
43 |
64 |
|
41 |
* |
* |
* |
* |
* |
* |
Milicz |
5 |
56 |
62 |
51 |
41 |
|
71 |
* |
* |
* |
* |
* |
Ostr贸w Wlkp. |
6 |
* |
* |
68 |
* |
71 |
|
* |
* |
* |
* |
* |
O艂awa |
7 |
27 |
* |
44 |
* |
* |
* |
|
15 |
60 |
* |
* |
Brzeg |
8 |
* |
* |
* |
* |
* |
* |
15 |
|
73 |
96 |
40 |
Dzier偶oni贸w |
9 |
58 |
* |
* |
* |
* |
* |
60 |
73 |
|
41 |
109 |
K艂odzko |
10 |
* |
* |
* |
* |
* |
* |
* |
96 |
41 |
|
109 |
Opole |
11 |
* |
* |
* |
* |
* |
* |
* |
40 |
109 |
109 |
|
Tab. Tabela odleg艂o艣ci mi臋dzy miastami wok贸艂 Wroc艂awia.
ITERACJA 1
Mamy w=1 i d1s=0, dit=
, i
1.
Identyfikujemy S(1)={2,3,4,5,7,9}. 呕aden z nich nie ma cechy sta艂ej. Dla ka偶dego z nich okre艣lamy cech臋 tymczasow膮.
d2t:=
, d1s+c12=0+34=34,
d2t:=34,
d3t:=
, d1s+c13=0+31=31,
d3t:=31,
d4t:=
, d1s+c14=0+62=62,
d4t:=62,
d5t:=
, d1s+c15=0+56=56,
d5t:=56,
d7t:=
, d1s+c17=0+27=27,
d7t:=27,
d9t:=
, d1s+c19=0+58=58
d9t:=58.
Wyniki pierwszej iteracji zapisane s膮 w tabeli 1.9.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
1 |
ds dt |
0 - |
- 34 |
- 31 |
- 62 |
- 56 |
- - |
- 27 |
- - |
- 58 |
- - |
- - |
27 |
Tab. Cechy sta艂e i tymczasowe po pierwszej iteracji.
Wskazujemy w臋ze艂 maj膮cy najmniejsz膮 cech臋 tymczasow膮. Jest nim 7. Przyporz膮dkowana mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d7s=27. W臋ze艂 7 przejmuje rol臋 w臋z艂a w.
ITERACJA 2
Mamy w=7 i d7s=27.
Identyfikujemy S(7)={1,3,8,9}. Cechy sta艂ej nie maj膮 w臋z艂y 3,8,9. Dla ka偶dego z nich okre艣lamy cech臋 tymczasow膮 po sprawdzeniu z wcze艣niej przyporz膮dkowan膮.
d3t:=31, d7s+c73=27+44=71
d3t:=31,
d8t:=
, d7s+c78=27+15=42
d8t:=42,
d9t:=58, d7s+c79=27+60=87
d9t:=58.
Wyniki drugiej iteracji zapisane s膮 w tabeli 1.10.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
2 |
ds dt |
0 - |
- 34 |
- 31 |
- 62 |
- 56 |
- - |
27 - |
- 42 |
- 58 |
- - |
- - |
31 |
Tab. Cechy sta艂e i tymczasowe po drugiej iteracji.
Wskazujemy w臋ze艂 maj膮cy najmniejsz膮 cech臋 tymczasow膮. Jest nim 3. Przyporz膮dkowana mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d3s=31. W臋ze艂 3 przejmuje rol臋 w臋z艂a w.
ITERACJA 3
Mamy w=3 i d3s=31.
Identyfikujemy S(3)={1,2,4,6,7}. Cechy sta艂ej nie maja w臋z艂y 2,4,6. Dla ka偶dego z nich okre艣lamy cech臋 tymczasow膮 po sprawdzeniu z wcze艣niej przyporz膮dkowan膮.
d2t:=34, d3s+c32=31+58=89
d2t:=34,
d4t:=62, d3s+c34=31+64=95
d4t:=62,
d6t:=
, d3s+c36=31+68=99
d6t:=99.
Wyniki trzeciej iteracji przedstawione s膮 w tabeli 1.11.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
3 |
ds dt |
0 - |
- 34 |
31 - |
- 62 |
- 56 |
- 99 |
27 - |
- 42 |
- 58 |
- - |
- - |
34 |
Tab. Cechy sta艂e i tymczasowe po trzeciej iteracji.
Wskazujemy w臋ze艂 maj膮cy najmniejsz膮 cech臋 tymczasow膮. Jest nim 2. Przyporz膮dkowana mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d2s=24. W臋ze艂 2 przejmuje rol臋 w臋z艂a w.
ITERACJA 4
Mamy w=2 i d2s=34.
Identyfikujemy S(2)={1,3,4,5}. Cechy sta艂ej nie maj膮 w臋z艂y 4,5. Dla ka偶dego z nich okre艣lamy cech臋 tymczasow膮 po sprawdzeniu z wcze艣niej przyporz膮dkowana.
d4t:=62, d2s+c24=34+43=77
d4t:=62,
d5t:=56, d2s+c25=34+62=96
d5t:=56.
Wyniki czwartej iteracji przedstawia tabela 1.12.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
4 |
ds dt |
0 - |
34 - |
31 - |
- 62 |
- 56 |
- 99 |
27 - |
- 42 |
- 58 |
- - |
- - |
42 |
Tab. Cechy sta艂e i tymczasowe po czwartej iteracji.
Wskazujemy w臋ze艂 maj膮cy najmniejsz膮 cech臋 tymczasow膮. Jest nim 8. Przyporz膮dkowan膮 mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d8s=42. W臋ze艂 8 przejmuje rol臋 w臋z艂a w.
ITERACJA 5
Mamy w=8 i d8s=42.
Identyfikujemy S(8)={7,9,10,11}. Cechy sta艂ej nie maj膮 w臋z艂y 9,10,11. Dla ka偶dego z nich okre艣lamy cech臋 tymczasow膮 po sprawdzeniu z wcze艣niej przyporz膮dkowan膮.
d9t:=58, d8s+c89=42+73=115
d9t:=58,
d10,t:=
, d8s+c8,10=42+96=138
d10t:=138,
d11,t:=
, d8s+c8,11=42+40=82
d11,t:=82.
Wyniki pi膮tej iteracji przedstawia tabela 1.13.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
5 |
ds dt |
0 - |
34 - |
31 - |
- 62 |
- 56 |
- 99 |
27 - |
42 - |
- 58 |
- 138 |
- 82 |
56 |
Tab. Cechy sta艂e i tymczasowe po pi膮tej iteracji.
Wskazujemy w臋ze艂 maj膮cy najmniejsz膮 cech臋 tymczasow膮. Jest nim 5. Przyporz膮dkowan膮 mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d5s=56. W臋ze艂 5 przejmuje rol臋 w臋z艂a w.
ITERACJA 6
Mamy w=5 i d5s=56.
Identyfikujemy S(5)={1,2,4,6}. Cechy sta艂ej nie maj膮 w臋z艂y 4,6. Dla ka偶dego z nich okre艣lamy cech臋 tymczasow膮 po sprawdzeniu z wcze艣niej przyporz膮dkowan膮.
d4t:=62, d5s+c54=56+41=97
d4t:=62,
d6t:=99, d5s+c56=56+71=127
d4t:=99.
Wyniki sz贸stej iteracji przedstawia tabela 1.14.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
6 |
ds dt |
0 - |
34 - |
31 - |
- 62 |
56 - |
- 99 |
27 - |
42 - |
- 58 |
- 138 |
- 82 |
58 |
Tab. Cechy sta艂e i tymczasowe po sz贸stej iteracji.
Wskazujemy w臋ze艂 maj膮cy najmniejsz膮 cech臋 tymczasow膮. Jest nim 9. Przyporz膮dkowan膮 mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d9s=58. W臋ze艂 9 przejmuje rol臋 w臋z艂a w.
ITERACJA 7
Mamy w=9 i d9s=58.
Identyfikujemy S(9)={1,7,8,10,11}. Cechy sta艂ej nie maj膮 w臋z艂y 10,11. Dla ka偶dego z nich okre艣lamy cech臋 tymczasow膮 po sprawdzeniu z wcze艣niej przyporz膮dkowan膮.
d10,t:=138, d9s+c9,10=58+41=99
d10,t:=99,
d11,t:=82, d9s+c9,11=58+109=167
d4t:=82.
Wyniki si贸dmej iteracji przedstawia tabela 1.15.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
7 |
ds dt |
0 - |
34 - |
31 - |
- 62 |
56 - |
- 99 |
27 - |
42 - |
58 - |
- 99 |
- 82 |
62 |
Tab. Cechy sta艂e i tymczasowe po si贸dmej iteracji.
Wskazujemy w臋ze艂 maj膮cy najmniejsz膮 cech臋 tymczasow膮. Jest nim 4. Przyporz膮dkowan膮 mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d4s=62. W臋ze艂 4 przejmuje rol臋 w臋z艂a w.
ITERACJA 8
Mamy w=4 i d4s=62.
Identyfikujemy S(4)={1,2,3,5}. Wszystkie w臋z艂y maj膮 cech臋 sta艂膮. Przechodzimy wi臋c do analizy tabeli po zmianie cechy dla w臋z艂a 4.
Wyniki przedstawia tabela 1.16.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
8 |
ds dt |
0 - |
34 - |
31 - |
62 - |
56 - |
- 99 |
27 - |
42 - |
58 - |
- 99 |
- 82 |
82 |
Tab. Cechy sta艂e i tymczasowe po 贸smej iteracji.
Wskazujemy w臋ze艂 maj膮cy najmniejsz膮 cech臋 tymczasow膮. Jest nim 11. Przyporz膮dkowan膮 mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d11,s=82. W臋ze艂 11 przejmuje rol臋 w臋z艂a w.
ITERACJA 9
Mamy w=11 i d11,s=82.
Identyfikujemy S(11)={8,9,10}. Cechy sta艂ej nie ma w臋ze艂 10. Okre艣lamy dla niego cech臋 tymczasow膮 po sprawdzeniu z wcze艣niej przyporz膮dkowan膮.
d10,t:=99, d11,s+c11,10=82+109=191
d10,t:=99.
Wyniki dziewi膮tej iteracji przedstawia tabela 1.17.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
9 |
ds dt |
0 - |
34 - |
31 - |
62 - |
56 - |
- 99 |
27 - |
42 - |
58 - |
- 99 |
82 - |
99 |
Tab. Cechy sta艂e i tymczasowe po dziewi膮tej iteracji.
Wskazujemy w臋ze艂 maj膮cy najmniejsz膮 cech臋 tymczasow膮. Z dw贸ch maj膮cych identyczne warto艣ci wybieramy 6. Przyporz膮dkowan膮 mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d6s=99. W臋ze艂 6 przejmuje rol臋 w臋z艂a w.
ITERACJA 10
Mamy w=6 i d6s=99.
Identyfikujemy S(6)={3,5}. Wszystkie w臋z艂y maj膮 cech臋 sta艂膮. Przechodzimy wi臋c do analizy tabeli po zmianie cechy dla w臋z艂a 6.
Wyniki przedstawia tabela 1.18.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
10 |
ds dt |
0 - |
34 - |
31 - |
62 - |
56 - |
99 - |
27 - |
42 - |
58 - |
- 99 |
82 - |
99 |
Tab. Cechy sta艂e i tymczasowe po dziesi膮tej iteracji.
Wyb贸r w臋z艂a, kt贸ry przejmuje rol臋 w jest jednoznaczny. Jest nim 10. Przyporz膮dkowan膮 mu cech臋 tymczasow膮 zamieniamy na cech臋 sta艂膮 d10,s=99.
Otrzymujemy tabel臋 1.19.
Iteracja |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
min |
|
ds dt |
0 - |
34 - |
31 - |
62 - |
56 - |
99 - |
27 - |
42 - |
58 - |
99 - |
82 - |
|
Tab. Cechy sta艂e i tymczasowe po zako艅czeniu post臋powania.
Poniewa偶 wyczerpali艣my tym samym zbi贸r w臋z艂贸w nie maj膮cych cechy sta艂ej, post臋powanie ko艅czy si臋. Cechy sta艂e ostatniej tabeli okre艣laj膮 poszukiwane odleg艂o艣ci.
Zestawienie, kt贸re pozwala szybko odczytywa膰 ka偶da drog臋 zaczynaj膮c膮 si臋 w w臋藕le 1, przedstawia tabela 1.20., w kt贸rej podajemy numer w臋z艂a ko艅cowego, d艂ugo艣膰 drogi do niego i w臋ze艂 bezpo艣rednio go poprzedzaj膮cy.
Odczytujemy teraz przyk艂adowo: dla w臋z艂a 11 poprzednikiem jest 8, dla 8 poprzednikiem jest 7, a dla 7 poprzednikiem jest 1. Mamy wi臋c drog臋 1-7-8-11 o d艂ugo艣ci 82.
W臋ze艂 ko艅cowy |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
D艂ugo艣膰 drogi |
0 |
34 |
31 |
62 |
56 |
99 |
27 |
42 |
58 |
99 |
82 |
W臋ze艂 poprzedzaj膮cy |
- |
1 |
1 |
1 |
1 |
3 |
1 |
7 |
1 |
9 |
8 |
Tab. Zestawienie odleg艂o艣ci i dr贸g z Wroc艂awia do pozosta艂ych miast.
Planowanie tras dostaw dla wielu pojazd贸w
2.1 Zasady tworzenia tras
Rozpatrzymy zadanie dostaw produkt贸w do klient贸w. Przyjmujemy, 偶e s膮 spe艂nione nast臋puj膮ce za艂o偶enia:
Wsp贸lna miara 艂adowno艣ci ze wzgl臋du na jednorodno艣膰 produkt贸w
Symbolem Lo oznaczamy magazyn produkt贸w producenta, z kt贸rego pobieramy produkty i dostarczamy do na odbiorc贸w
Symbolami Bi,….Bn oznaczamy potencjalnych odbiorc贸w
Ma艂e bi to zam贸wienie odbiorcy
Q - 艂adowno艣膰 艣rodk贸w transportowych
艁adowno艣膰 艣rodk贸w transportowych musi by膰 wi臋ksza ni偶 zam贸wienie odbiorcy, czyli Q>bi, i=1,2…n
Dopuszczalny czas trwania przewozu przez jeden 艣rodek transportu ( od producenta do klienta i z powrotem ) nie mo偶e przekroczy膰 T jednostki czasu
Czas wy艂adowania 艂adunku jest r贸wny zero
Nasze zadnie sformu艂ujemy nast臋puj膮co: nale偶y wyznaczy膰 ilo艣膰 艣rodk贸w transportowych od trasy ich przejazd贸w pozwalaj膮ce obs艂u偶y膰 wszystkie zam贸wienia klient贸w przy zachowaniu warunk贸w przewozu tak, aby 艂膮czny czas obs艂ugi wszystkich klient贸w by艂 minimalny. Sformu艂owanie zadania sk艂ada si臋 z dw贸ch zada艅 cz臋艣ciowych:
Przydzia艂u klient贸w do okre艣lonego 艣rodka transportu
Wyznaczenia tras dla ka偶dego z nich
Jako H oznaczamy dowoln膮 tras臋 rozpoczynaj膮c膮 si臋 w punkcie Lo, czyli od magazynu producenta, przebiegaj膮c膮 przez punkty i1, i2….ir i ko艅cz膮ca si臋 ponownie w punkcie Lo. Niech ty ozncza czas przejazdu z punktu i do punktu j. na mocy przyj臋tego za艂o偶enia o dopuszczalnym czasie trwania przejazdu musimy mie膰 spe艂nion膮 nier贸wno艣膰:
t +t T
reprezentujemy tras臋 H=[0,i1,i2,....ir,o]
Czas przejazdu tej trasy wynosi: t(H)=toi1+ti1i2+….=tiro
艁膮czna wielko艣膰 zam贸wie艅 odbiorc贸w tej trasy: b(H)=bi1+…bir
Tras臋 H nazwiemy dopuszczalna gdy
B(H) Q i t(H) T
Na pocz膮tku za艂贸偶my, 偶e ka偶dy klient jest obs艂u偶ony indywidualnie. Oznacza to, 偶e dla obs艂ugi wszystkich n klient贸w potrzebujemy n pojazd贸w i ka偶dy z nich ma prosta tras臋 z punktu Lo do swojego klienta i z powrotem. 艁膮czny czas trwania dosta wynosi wtedy:
Z= (t + t )
Teraz rozpatrzmy dw贸ch odbiorc贸w i i produkt贸w, kt贸rych m贸g艂by obs艂u偶y膰 jeden pojazd w ramach ca艂ej trasy, wtedy 艂膮czny czas trwania dostaw przy indywidualnej ich obs艂udze wynosi:
To=(toi+tio)+(toj+tjo)
Rys. indywidualna obs艂uga dw贸ch odbiorc贸w
Gdyby jednak w miejsce dw贸ch odr臋bnych tras zaproponowaliby艣my jedna wsp贸ln膮 od 0 do i potem do j i z powrotem do 0. Wtedy czas obs艂ugi wyni贸s艂by:
t1=toi+tij+tjo
Rys. Po艂膮czenie obs艂ugi dw贸ch odbiorc贸w
Obliczaj膮c r贸偶nice otrzymujemy:
sij=to-ti=tio+toj-tij
Je艣li sij>0, to sumaryczny czas indywidualnej obs艂ugi trwa d艂u偶ej ni偶 czas obs艂ugi w ramach po艂膮czonej trasy. Warto艣膰 ta okre艣la wielko艣膰 zaoszcz臋dzonego czasu sij<0 oznacza ujemna oszcz臋dno艣膰, tzn. 偶e indywidualny tras nie powinno si臋 艂膮czy膰 we wsp贸ln膮 tras臋.
Rozwa偶amy przypadek dw贸ch tras:
H=[0,h,…i,0]
H=[0,j,….k,0]
W ka偶dej z tych tras wyr贸偶nili艣my dw贸ch klient贸w, kt贸rzy s膮 obs艂ugiwani jako pierwsi (h,j) i jako ostatni (i,k). B臋dziemy ich nazywa膰 odbiorcami kra艅cowymi w swoich trasach. Pozostali to odbiorcy po艣redni. Dokonujemy po艂膮czenia tych dw贸ch tras w jedn膮. Po odwiedzeniu klienta z pierwszej trasy powinien nast膮pi膰 powr贸t do punktu startu. Zamiast tego nast臋puje wizyta u pierwszego klienta drugiej trasy i dalej kontynuacja odwiedzin zgodnie z wytyczona druga tras膮. Wyr贸偶nienie kt贸ra z tras jest pierwsza a kt贸ra druga odgrywa jedynie rol臋 ilustracyjn膮 podobnie jak wyr贸偶nienie strza艂ek na rysunku.
Rys. Po艂膮czenie dw贸ch tras
Nowa trasa H = [0,h,…i,j….k,0] wymaga realizacji dostaw o 艂膮cznej 艂adowno艣ci:
b(h )=b(H1)+b(H2),
a czas jej przejazdu wynosi:
t(H)=t(H1)+t(H2)-toi-toj+tij=t(H1)+t(H2)-sij
Gdy nast膮pi skr贸cenie 艂膮cznego czasu przejazdu i b臋d膮 zachowane warunki dopuszczalno艣ci przejazdu, czyli b(H )< Q oraz t(H ) < T to tras臋 H uznamy za oszcz臋dn膮. Wraz z oszcz臋dno艣ci膮 czasu przejazdu uzyskujemy zmniejszenie liczby 艣rodk贸w transportu, gdy偶 w miejsce dw贸ch wysy艂amy na tras臋 tylko jeden pojazd. Liczba tras b臋dzie r贸wnoznaczna z liczb膮 pojazd贸w potrzebnych do obs艂ugi klient贸w.
S膮 przypadki w kt贸rych nie ma sensu rozpatrywanie 艂膮czenia tras. S膮 to:
Odbiorcy, kt贸rzy ju偶 zostali uwzgl臋dnieni w tej samej trasie
Nowi odbiorcy - do艂膮czenie do trasy mo偶e nast膮pi膰 albo do jej pocz膮tku albo na jej koniec, czyli nie ma sensu rozpatrywanie oszcz臋dno艣ci czasu mi臋dzy nowym a jakimkolwiek po艣rednim odbiorc膮 grupy uwzgl臋dnionej ju偶 w trasie.
2.2 Oszcz臋dno艣ciowe 艂膮czenie tras
Za艂o偶enia startowe:
Rozpatrujemy zadanie w kt贸rym znamy czasy przejazd贸w tij, i, j=0,1…n. Na podstawie czas贸w tij obliczamy potencjalne oszcz臋dno艣ci czas贸w przejazdu sij. Warto艣ci sij porz膮dkujemy malej膮co, odrzucaj膮c wcze艣niej wszystkie sij<0
Przyjmujemy pocz膮tkowo, 偶e ka偶dy odbiorca jest obs艂ugiwany indywidualnie, co oznacza 偶e do obs艂ugi kierujemy n pojazd贸w, co oznacza, 偶e wst臋pnie dopuszczamy
Przyk艂ad:
Producent ma sw贸j magazyn we Wroc艂awiu. Odbiorcy maja swe lokalizacje w r贸偶nych miejscach rejonu dystrybucji. Rysunek przedstawia map臋 po艂膮cze艅 komunikacyjnych mi臋dzy miejscowo艣ciami rejonu dystrybucji. W tabeli mamy przedstawione czasy przejazdu mi臋dzy miejscowo艣ciami w minutach oraz wielko艣膰 dostawy do danej miejscowo艣ci z magazynu producenta. Jednostk膮 dostawy jest paleta. Podstawow膮 jednostk膮 transportow膮 jest samoch贸d mog膮cy przewie藕膰 Q=32 palety produkt贸w, a czas przebywania kierowcy w trasie nie mo偶e przekroczy膰 T=16 godzin, czyli 960 minut.
Rys. Mapa po艂膮cze艅 komunikacyjnych dystrybutora z Wroc艂awia
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
Wroc艂aw |
0 |
0 |
83 |
78 |
198 |
156 |
212 |
309 |
361 |
216 |
131 |
0 |
Wa艂brzych |
1 |
83 |
0 |
81 |
273 |
228 |
282 |
380 |
439 |
291 |
63 |
8 |
Legnica |
2 |
78 |
81 |
0 |
277 |
211 |
292 |
396 |
450 |
307 |
66 |
7 |
Pozna艅 |
3 |
198 |
273 |
227 |
0 |
156 |
345 |
466 |
427 |
90 |
288 |
14 |
Kalisz |
4 |
156 |
228 |
211 |
156 |
0 |
200 |
338 |
271 |
268 |
274 |
6 |
Cz臋stochowa |
5 |
212 |
282 |
292 |
345 |
200 |
0 |
139 |
157 |
81 |
336 |
5 |
Krak贸w |
6 |
309 |
380 |
396 |
466 |
338 |
139 |
0 |
158 |
93 |
451 |
15 |
Kielce |
7 |
361 |
439 |
450 |
427 |
271 |
157 |
158 |
0 |
207 |
512 |
12 |
Katowice |
8 |
216 |
291 |
307 |
390 |
268 |
81 |
93 |
207 |
0 |
346 |
11 |
Jelenia G贸ra |
9 |
131 |
63 |
66 |
288 |
274 |
336 |
451 |
512 |
346 |
0 |
9 |
Tab. Czasy przejazd贸w mi臋dzy miejscowo艣ciami rejonu dystrybucji
W tym przyk艂adzie zak艂adamy, 偶e mamy okre艣lone czasy przejazdu mi臋dzy ka偶dymi dwoma miejscowo艣ciami, nawet gdy nie ma mi臋dzy nimi bezpo艣redniego po艂膮czenia. Z mapy po艂膮cze艅 mo偶na odczyta膰, 偶e z Wroc艂awia do Krakowa mo偶na dojecha膰 przez Katowice, albo przez Cz臋stochow臋. Pierwsza trasa ma czas przejazdu 216+93=309 min , natomiast druga 212+139=351 min. W tabeli czas贸w przejazdu uwzgl臋dniana jest kr贸tsza, pierwsza trasa.
Wyznaczamy teraz macierz S, kt贸rej elementy sij=tio+tjo-tij, dla i, j=1,…n,i>j oraz sij=0 dla i=j. bierzemy najwi臋ksz膮 warto艣膰 sij i odczytujemy wskazania numer贸w odbiorc贸w. Je偶eli zbi贸r tych warto艣ci jest pusty - post臋powanie si臋 ko艅czy.
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
80 |
8 |
11 |
13 |
12 |
5 |
8 |
151 |
2 |
0 |
80 |
0 |
-1 |
23 |
-2 |
-9 |
-11 |
-13 |
143 |
3 |
0 |
8 |
-1 |
0 |
198 |
65 |
41 |
132 |
24 |
41 |
4 |
0 |
11 |
23 |
198 |
0 |
168 |
127 |
246 |
104 |
13 |
5 |
0 |
13 |
-2 |
65 |
168 |
0 |
382 |
416 |
347 |
7 |
6 |
0 |
12 |
-9 |
41 |
127 |
382 |
0 |
512 |
432 |
-11 |
7 |
0 |
5 |
-11 |
132 |
246 |
416 |
512 |
0 |
370 |
-20 |
8 |
0 |
8 |
-13 |
24 |
104 |
347 |
432 |
370 |
0 |
1 |
9 |
0 |
151 |
143 |
41 |
13 |
7 |
-11 |
-20 |
1 |
0 |
Tab. Planowanie tras dostaw dla wielu pojazd贸w
Macierz S dla przewoz贸w w rejonie dystrybucji
Tworzymy teraz ci膮g malej膮cych warto艣ci z dodatnich element贸w macierzy S. Jest on nast臋puj膮cy:
S67> S68> S57> S56> S78> S58> S47> S34> S45> S19>
432> 416> 382> 370> 347> 246> 198> 168> 151>
S29> S37> S46> S48> S12> S35> S39= S36> S38> S24>
143> 132> 127> 104> 80> 65> 41= 41> 24> 23>
S49= S15> S16> S14> S18= S13> S59> S17> S89
13= 13> 12> 11> 8= 8> 7> 5> 1
Rozwi膮zaniem startowym jest indywidualna obs艂uga ka偶dego z klient贸w, co oznacza, 偶e powinni艣my dysponowa膰 9 samochodami. W kolejnych interakcjach b臋dziemy sprawdza膰, czy mo偶na trasy i tym samym zmniejsza膰 liczb臋 samochod贸w.
INTERAKCJA 1
S67=512. Zar贸wno 6 jak i 7 s膮 obs艂ugiwani indywidualnie, a wi臋c tworzymy grup臋 {i,j} i sprawdzamy, czy trasa H=[0,6,7,0] spe艂nia warunki dopuszczalno艣ci przewozu. Gdy warunki s膮 spe艂nione - tworzymy tras臋 [0,6,7,0]. W przeciwnym wypadku skre艣lamy s z listy i przechodzimy do nast臋pnego wska藕nika oszcz臋dno艣ci.
Mamy zatem:
T=309+158+361=828<960 - dopuszczalny czas przewozu
b=15+12=27<32 - 艂adowno艣膰
trasa spe艂nia warunki dopuszczalno艣ci. Przyjmujemy zatem:
H=[0,6,7,0]
INTERAKCJA 2
S62=432. 6 nale偶y do trasy H i jest odbiorc膮 kra艅cowym, a konkretnie - pierwszym. Natomiast 8 jest obs艂ugiwany indywidualnie. Odbiorca i jest wi臋c odbiorc膮 kra艅cowym, sprawdzamy zatem, czy do艂膮czenie odbiorcy j do trasy nie naruszy warunk贸w dopuszczalno艣ci przewozu. Je艣li warunki przewozu s膮 spe艂nione to odbiorc臋 j do艂膮czamy do trasy zawieraj膮cej i przy czym j b臋dzie obs艂ugiwany:
Przed i, gdy i wyst臋powa艂 w trasie jako pierwszy
Rys. Do艂膮czenie j do trasy przed i
Trasa wygl膮da nast臋puj膮co [0,j,i….0]
Po i, gdy i wyst臋puje jako ostatni z obs艂ugiwanych
Rys. Do艂膮czenie j do trasy po i
Trasa wygl膮da nast臋puj膮co [0,….,i,j,0]
Mo偶emy w tej interacji rozpatrywa膰 tras臋 H=[0,8,6,7,0]. Dopuszczalny czas przejazdu wynosi:
T=216+93+158+361=828<960
B=11+15+12=38>32
Jeden warunek przewozu dotycz膮cy dopuszczalno艣ci nie zosta艂 spe艂niony i dlatego nie mo偶emy odbiorcy 8 do艂膮czy膰 do trasy.
INTERACJA 3
S67=416. 7 nale偶y do trasy H1 i jest odbiorca kra艅cowym, a konkretnie ostatnim. Natomiast 5 jest obs艂ugiwany indywidualnie. Mo偶emy rozpatrywa膰 tras臋 H=[0,6,7,5,0].
Mamy:
T=309+158+157+212=830<960
b=15+!2+5=32=32
5 do艂膮czamy do trasy H11 i obs艂ugujemy po i, czyli7, gdy偶 i wyst臋powa艂 jako ostatni z obs艂ugiwanych. Otrzymujemy tras臋:
H1=[0,6,7,5,0]
Zauwa偶amy, 偶e pojemno艣膰 samochodu trasy H1 jest w pe艂ni wykorzystana, zatem w nast臋pnych interacjach mo偶emy z g贸ry odrzuca膰 mo偶liwo艣ci po艂膮czenia tej trasy z innymi.
INTERACJA 9
S45=168. 4 nale偶y do trasy H2, natomiast 5 do trasy H1. po艂膮czenie tras ma sens, gdy zar贸wno i jak i j s膮 odbiorcami kra艅cowymi swych tras oraz gdy po po艂膮czeniu tras s膮 spe艂nione warunki przewozu. Zatem po艂膮czenie tych tras jest niemo偶liwe.
INTERACJA 11
S29=143. 2 jest obs艂ugiwana indywidualnie, natomiast 9 nale偶y do trasy H3, gdzie jest odbiorc膮 kra艅cowym - konkretnie ostatnim. Mo偶emy wie膰 rozpatrywa膰 tras臋:
H=[0,1,9,2,0]
Mamy:
T=83+63+66+78=290<960
b=8+9+7=24<32
Modyfikujemy tras臋 H3, gdy偶 warunki przewozu zosta艂y spe艂nione:
H3=[0,1,9,2,0]
INTERACJA 14
S48=104. 4 nale偶y do trasy h2 jako ostatni odbiorca, natomiast 8 jest odbiorca indywidualnym. Tworzymy tras臋:
H=[0,3,4,8,0]
Mamy:
T=198+156+268+216=838<960
b=14+6+11=31<32
Modyfikujemy wi臋c tras臋 H2=[0,3,4,8,0]
Po wyczerpaniu listy mo偶liwych stwierdzimy, 偶e zasadnicze s膮 trasy:
H1=[0,6,7,5,0], dla kt贸rej T=830 min. i b =32 palety
H2=[0,3,4,8,0], dla kt贸rej T=838 min. i b = 31 palety
H2=[0,1,9,2,0], dla kt贸rej T=290 min. i b = 24 palety
Wyznaczone trasy s膮 przedstawione na rysunku.
Rys. Trasy przewozu w rejonie dystrybucji
Wprowadzaj膮c nazwy miejscowo艣ci mamy:
H1: Wroc艂aw-Krak贸w-Kielce-Cz臋stochowa-Wroc艂aw
H2: Wroc艂aw-Pozna艅-Kalisz-Katowice-Wroc艂aw
H3: Wroc艂aw-Wa艂brzych-Jelenia G贸ra-Legnica-Wroc艂aw
3. Rozdzia艂 zada艅 przewozowych
3.1 Zadania przyporz膮dkowania
Okre艣lenie tras przewozu i ilo艣ci pojazd贸w nie gwarantuje, 偶e s膮 to trasy o podobnej skali przewoz贸w. Tak偶e 艂adunki r贸偶ni膮 si臋 sk艂adem produkt贸w, r贸wnie偶 pojazdy nie zawsze s膮 dostosowane do przewozu danego typu 艂adunku. Powstaje wtedy problem odpowiedniego przyporz膮dkowania pojazd贸w do tras przewoz贸w. Jest to zadanie og贸lniejsze, znane w literaturze, jako zadanie przyporz膮dkowania.
U艣ci艣lijmy najpierw za艂o偶enia problemu:
mamy n jednostek wykonawczych Ri , i = ,....,n (os贸b, maszyn, samochod贸w) oraz n zada艅 Zj , j = ,....,n do wykonania
przyjmijmy, 偶e ka偶da jednostka Ri mo偶e w艂a艣ciwie wykona膰 dowolne zadanie Zj, ale efektywno艣膰 wykonania ka偶dego z nich jest r贸偶na
efektywno艣膰 wykonania zadania Zj przez Ri mo偶e by膰 wyra偶ona albo przez miar臋 korzy艣ci - oznaczamy j膮 dij albo przez miar臋 nak艂adu - oznaczamy j膮 kij
Cel zadania sformu艂ujemy nast臋puj膮co: nale偶y jednostkom Ri tak przyporz膮dkowa膰 zadania Zj, aby efekt sumaryczny by艂 jak najkorzystniejszy.
Nale偶y wprowadzi膰 zmienne x, i = ,....,n; j = 1,....,n, kt贸re b臋d膮 odzwierciedla膰 czy jednostce wykonawczej Ri zosta艂o przyporz膮dkowane zadanie Zj czy te偶 nie.
1, gdy Ri otrzymuje zadanie Zj
xij =
0, w przeciwnym przypadku
Gdy efektywno艣膰 jest wyra偶ana poprzez miary korzy艣ci, najkorzystniej efekt wyra偶a funkcja kryterium:
ZL = dij * xij max
Gdy efektywno艣膰 jest wyra偶ona przez miary nak艂ad贸w, najkorzystniejszy efekt wyra偶a funkcja kryterium:
Zk = kij * xij min
Algorytmy rozwi膮zywania zada艅 tej klasy s膮 na og贸艂 formu艂owane przy za艂o偶eniu poszukiwania minimum. Zadanie, w kt贸rym poszukiwane jest maksimum efektywno艣ci mo偶na zast膮pi膰 zadaniem poszukiwania minimum w nast臋puj膮cy spos贸b:
ZL max
Mo偶emy teraz wprowadzi膰 standardowe oznaczenia wsp贸艂czynnik贸w funkcji kryterium, mianowicie cij. Zadanie przyporz膮dkowania mo偶emy zatem sformu艂owa膰 nast臋puj膮co:
(Jest to tzw. Zadanie prymalne)
Wprowadzone zmienne xij s膮 zmiennymi binarnymi, czyli xij = 1 lub xij = 0. Praktycznie zapis zadania sprowadza si臋 do macierzowego uj臋cia zmiennych xij oraz wsp贸艂czynnik贸w cij
c11 c1j c1n
C = cil cij cin
cn1 cnj cnn
Wskazane przyporz膮dkowanie jest, w tej konwencji r贸wnoznaczne ze wskazaniem elementu macierzy C. Je偶eli zostanie wskazany np. element c23 to odczytujemy, 偶e jednostka wykonawcza R2 otrzyma艂a zadanie Z3.
Gdy zadanie (minimalizacja) nie jest symetryczne tzn. gdy liczba wykonawc贸w nie jest r贸wna liczbie zada艅, sprowadzamy go do symetrycznego wprowadzaj膮c pomocnicze kolumny lub wiersze z elementami b臋d膮cymi liczbami „du偶ymi” zwanymi „big - M”. W zadaniu z maksymalizacj膮 wprowadzane wsp贸艂czynniki musz膮 by膰 r贸wne 0. Gdy chcemy zablokowa膰 pewien przedzia艂, przyjmujemy, 偶e warto艣膰 wsp贸艂czynnika c jest r贸wna „big - M”.
3.2 W艂asno艣ci zada艅 przyporz膮dkowa艅
Zadania przyporz膮dkowania nale偶膮 do klasy zada艅 liniowych o specjalnej strukturze. Poniewa偶 w omawianym dalej post臋powaniu b臋dziemy korzysta膰 z zapisu macierzy C, w pierwszej kolejno艣ci musimy odpowiednio przeformu艂owa膰 interpretacj臋 bazowego rozwi膮zania dopuszczalnego. Podobnie jak w klasycznych zadaniach transportowych wprowadzamy macierz przyporz膮dkowa艅 X, kt贸rej elementami s膮 poszukiwane zmienne xij;
i = 1,....,n; j = 1,...., n. Ma ona posta膰 zgodn膮 z zapisem macierzy C (zwany wektorem przyporz膮dkowa艅).
x11 x1j x1n
X = xi1 xij xin
Xn1 xnj xnn
W trakcie wyznaczania rozwi膮zania b臋dziemy dokonywa膰 przekszta艂ce艅 macierzy C. B臋d膮 to przekszta艂cenia nie maj膮ce wp艂ywu na wyznaczanie wektora przyporz膮dkowa艅 x.
1 w艂asno艣膰 przekszta艂ce艅 macierzy C - je偶eli w macierzy C do ka偶dego elementu pewnego wiersza dodamy liczb臋 伪 lub do ka偶dego elementu pewnej kolumny dodamy liczb臋 尾 nie ma to 偶adnego wp艂ywu na wektor przyporz膮dkowa艅 x. Zmienia si臋 jedynie warto艣膰 funkcji kryterium.
Istotne warunki komplementarno艣ci wi膮偶膮ce rozwi膮zania obu zada艅. S膮 one okre艣lane przez r贸wnanie:
(ui + vj - cij) * xij = 0, i = 1,....,n; j = 1,....,n.
Wykorzystamy zale偶no艣ci mi臋dzy zadaniami dualnymi, aby poprzez zadanie dualne uzyska膰 rozwi膮zanie zadania prymalnego. W tym celu przeprowadzimy redukcj臋 element贸w macierzy C.
najpierw w kolejnych wierszach od ka偶dego elementu odejmujemy liczb臋 r贸wn膮 warto艣ci minimalnej w tym wierszu i otrzymujemy:
w nast臋pnej kolejno艣ci w kolejnych kolumnach od ka偶dego elementu zmodyfikowanej macierzy odejmujemy liczb臋 r贸wn膮 warto艣ci minimalnej w tej kolumnie i otrzymujemy:
Po redukcji macierzy C w ka偶dej kolumnie i w ka偶dym wierszu otrzymujemy co najmniej jedno 0. Przekszta艂cenia macierzy C sprawiaj膮, 偶e otrzymujemy w niej elementy r贸wne 0, kt贸re maj膮 r贸偶ne znaczenie. Wyr贸偶niamy wi臋c pewne kategorie zer:
zera niezale偶ne - dwa zera nazywamy zerami niezale偶nymi je偶eli w zredukowanej macierzy C1 nie maj膮 wsp贸lnej kolumny ani wiersza.
Macierz, w kt贸rej wyst臋puj膮 elementy zerowe ma w艂asno艣膰, kt贸r膮 przedstawia twierdzenie K枚niga i Egerv谩ry'ego. Je偶eli macierz zawiera elementy zerowe, to maksymalna liczba mo偶liwych do wybrania zer niezale偶nych jest r贸wna minimalnej liczbie linii, kt贸rymi mo偶na pokry膰 te wszystkie zera.
Linie tworz膮 minimalne pokrycie zer w macierzy. Wykorzystujemy je do sprawdzenia czy wyznaczyli艣my optymalne przyporz膮dkowanie. Je偶eli bowiem liczba linii b臋dzie mniejsza od n, b臋dzie to oznacza艂o, 偶e poszukiwanie rozwi膮zania nale偶y kontynuowa膰.
Przyjmijmy, 偶e mamy zmodyfikowan膮 macierz Ck i wprowadzone linie pokrycia.
Wyr贸偶niamy teraz:
Ip - zbi贸r pokrytych wierszy
Inp - zbi贸r nie pokrytych wierszy
Jp - zbi贸r pokrytych kolumn
Jnp - zbi贸r nie pokrytych kolumn
W macierzy Ck rozpatrujemy elementy ckcj, kt贸re znajduj膮 si臋 w nie pokrytych wierszach, a wi臋c i nale偶膮ce do Inp i nie pokrytych kolumnach czyli j nale偶膮ce do Jnp.
Mamy nast臋puj膮ce proste regu艂y modyfikacji element贸w macierzy Ck:
je偶eli element jest pokryty przez dwie linie (poziom膮 i pionow膮) - dodajmy
je偶eli element nie jest pokryty przez 偶adn膮 lini臋 - odejmujemy
pozosta艂e elementy pozostaj膮 bez zmian
3.3 Algorytm w臋gierski
Za艂o偶enia startowe:
Znamy macierz kwadratow膮 C, kt贸rej elementy s膮 nie ujemne. W zadaniu poszukujemy minimum funkcji kryterium
Start
Wyznaczamy zredukowan膮 macierz C1 dokonuj膮c operacji:
dla i = 1, ...., n wyznaczamy kolejno
ui = min cij i = 1,....,n
i tworzymy macierz C o elementach
cij = cij - ui i = 1,....,n j = 1,....,n;
dla j = 1,....,n okre艣lamy kolejno:
vj = min cij i = 1,....,n j = 1,....,n
i tworzymy macierz C1 o elementach:
ckij = cij - vj i = 1,....,n j = 1,....,n.
W macierzy C1 a w nast臋pnych interacjach w macierzach Ck, otrzymujemy zera, kt贸re podzielimy na r贸偶ne kategorie. Wyr贸偶niamy zera, kt贸re podzielimy na r贸偶ne kategorie. Wyr贸偶niamy zera:
„wskazuj膮ce przyporz膮dkowanie” a wi臋c te, kt贸re w ramach danej iteracji wskazuj膮 przyporz膮dkowanie xij = 1.
„wykluczone”, kt贸re ze wzgl臋du na dokonane ju偶 przyporz膮dkowania nie mog膮 by膰 brane pod uwag臋,
„swobodne”, kt贸re nie s膮 ani wskazuj膮cymi przyporz膮dkowanie ani wykluczonymi.
Interacje
Krok 1
Wskazujemy wiersz lub kolumn臋 o najmniejszej liczbie zer „swobodnych”. Jedno z tych zer uznajemy za „wskazuj膮ce przyporz膮dkowanie” wszystkie inne zera zamieniamy na „wykluczone”
Powtarzamy ten krok a偶 do uzyskania sytuacji, gdy w macierzy nie b臋dzie zer „swobodnych.
Krok 2
Sprawdzamy liczb臋 zer „wskazuj膮cych przyporz膮dkowanie”
je偶eli liczba tych zer jest r贸wna n - mamy optymalne przyporz膮dkowanie i nast臋puje koniec post臋powania,
w przeciwnym przypadku przechodzimy do kroku 3.
Krok 3
Oznaczamy wszystkie wiersze, kt贸re nie zawieraj膮 偶adnego zera „wskazuj膮cego przyporz膮dkowanie”
Krok 4
Wykonujemy na przemian nast臋puj膮ce operacje:
oznaczamy wszystkie kolumny, kt贸re w ju偶 oznaczonych wierszach maj膮 przynajmniej jedno zero „wykluczone”
oznaczamy wszystkie wiersze, kt贸re w kolumnach oznaczonych w 1 podpunkcie maj膮 przynajmniej jedno zero „wskazuj膮ce przyporz膮dkowanie”
Operacje 1) i 2) powtarzamy na przemian dop贸ki nie wyczerpiemy mo偶liwo艣ci oznaczania
Krok 5
Pokrywamy liniami oznaczone wiersze oraz oznaczone kolumny
Krok 6
W艣r贸d nie pokrytych element贸w wierszy i kolumn wyznaczamy
Krok 7
Dokonujemy modyfikacji macierzy Ck
do element贸w pokrytych przez dwie linie dodajemy
od element贸w nie pokrytych 偶adn膮 lini膮 odejmujemy
pozosta艂e elementy pozostawiamy bez zmian
Jako wynik otrzymujemy macierz Ck+1 dla kt贸rej powtarzamy interacj臋.
2
3
4
1
7
6
5
1
2
3
j
4
5
i
j
4
5
6
2
3
1
9
7
8
1111111
10
0
j
i
0
j
i
0
h
k
j
i
3
4
7
6
8
5
1
9
2
0
0
j
i
i
j
0
9
2
3
4
0
1
8
6
7
5