Professional Documents
Culture Documents
Simplex
Simplex
Petar Veličković
Matematička gimnazija
Nedelja informatike v2.0
Uvod
Linearno programiranje
Uvod
Politička kampanja
Uvod
Uvod
Uvod
Algoritmi
I Algoritam za rešavanje sistema linearnih nejednakosti je bio
poznat još Furijeu u 1827. godini (Fourier-Motzkin Elimination).
n
I Užasna složenost: u najgorem slučaju O(m2 ), gde je n broj
promenljivih, a m broj uslova‼
I Dancig postavlja algoritam simpleksa 1947. godine. Ovo je prvi
algoritam ove vrste koji je našao široku industrijsku primenu (i
koristi se i dan-danas).
I U najgorem slučaju, za sve varijante simpleksa koje su
izmišljene do sada, moguće je naći primer koji ga prisiljava da
napravi O(mn/2 ) koraka. I dalje je otvoren problem da li je
moguće napraviti varijantu koja nema ovakve probleme.
I Međutim, prosečna složenost je reda veličine O(n + m)!
I Mnogo kasnije (1979.) pokazano da je linearno programiranje
rešivo u polinomnom vremenu.
Linearno programiranje i algoritam simpleksa Petar Veličković
Linearno programiranje Algoritam simpleksa TSP
Najkraći putevi
Maksimalni protok
2/5 1/2
(a=2) (a=7)
1/1
s t
(a=3)
2/2 3/4
(a=5) (a=1)
y
P
minimizirati au,v fu,v
(u,v)∈E
pod uslovima
∀u, v ∈ V P P fu,v ≤ cu,v
∀u ∈ V \ {s, t} fv,u − fu,v = 0
v∈V
P v∈V
P
fs,v − fv,s = d
v∈V v∈V
∀u, v ∈ V fu,v ≥ 0
Standardna forma
I Da bismo mogli efektivno da primenimo algoritam simpleksa
na ovakve i slične probleme, neophodno je prvo da definišemo
dve specijalne forme linearnih programa.
I Najpre, linearni program je potrebno izraziti u standardnoj
formi; formi u kojoj važi sledeće:
I Potrebno je raditi maksimizaciju;
I Traži se da su sve promenljive nenegativne;
I Svi uslovi (osim uslova nenegativnosti) koriste relaciju ≤.
I Linearni program se tada može zapisati u sledećoj formi:
maksimizirati ~c · ~x
pod uslovima
A~x ≤ ~b
~x ≥ ~0
Linearno programiranje i algoritam simpleksa Petar Veličković
Linearno programiranje Algoritam simpleksa TSP
I Iz minimizacije u maksimizaciju:
Slack forma
maksimizirati ~c · ~x
pod uslovima
A~x + ~b = x~s
~x, x~s ≥ ~0
Pregled i primer
Osnovne ideje
Pregled i primer
Primer
Pregled i primer
Pregled i primer
Primer: iteracija 1
Pregled i primer
Primer: iteracija 1
Pregled i primer
Primer: iteracija 1
I Zamenu vršimo sa onom bazičnom promenljivom čiji uslov
najviše ograničava vrednost x1 .
maksimizirati 3x1 + x2 + 2x3
pod uslovima
x4 = 30 − x1 − x2 − 3x3
x5 = 24 − 2x1 − 2x2 − 5x3
x6 = 36 − 4x1 − x2 − 2x3
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0
x4 : x1 ≤ 30
x5 : x1 ≤ 12
x6 : x1 ≤ 9
Pregled i primer
Primer: iteracija 1
1 1 1
x1 = 9 − x2 − x3 − x6
4 2 4
Pregled i primer
Primer: iteracija 1
27 + 1 1 − 3
maksimizirati 4x 2 + 2x 3 4x 6
pod uslovima
x 1 = 9 − 1 4x 2 − 1
2x 3 − 1
4x 6
x4 = 21 − 3 4x2 − 5
2x 3 + 1
4x 6
x 5 = 6 − 3 2x 2 − 4x3 + 1
2x 6
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0
Pregled i primer
Primer: iteracija 2
I Sada možemo pretvoriti x2 ili x3 u bazičnu promenljivu.
Odabraćemo x2 .
27 + 1 1 − 3
maksimizirati 4x 2 + 2x 3 4x 6
pod uslovima
x 1 = 9 − 1 4x 2 − 1
2x 3 − 1
4x 6
x4 = 21 − 3 4x2 − 5
2x 3 + 1
4x 6
x 5 = 6 − 3 2x 2 − 4x3 + 1
2x 6
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0
x1 : x2 ≤ 36
x4 : x2 ≤ 28
x5 : x2 ≤ 4
Pregled i primer
Primer: iteracija 2
27 + 1 1 − 3
maksimizirati 4x 2 + 2x 3 4x 6
pod uslovima
x 1 = 9 − 1 4x 2 − 1
2x 3 − 1
4x 6
x4 = 21 − 3 4x2 − 5
2x 3 + 1
4x 6
x 5 = 6 − 3 2x 2 − 4x3 + 1
2x 6
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0
8 2 1
x2 = 4 − x3 − x5 + x6
3 3 3
Pregled i primer
Primer: iteracija 2
28 − 1 − 1 − 2
maksimizirati 6x 3 6x 5 3x 6
pod uslovima
x 1 = 8 + 1 6x 3 + 1
6x 5 − 1
3x 6
x 2 = 4 − 8 3x 3 − 2 x
3 5 + 1
3x 6
x4 = 18 − 1 2x3 + 1 x
2 5
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0
Implementacija
Implementacija
Pivotiranje
Implementacija
Pivotiranje, cont’d
Implementacija
Implementacija
Implementacija
Začkoljice
Implementacija
Algoritam simpleksa
I Pretpostavićemo da posedujemo funkciju Initialise-Simplex,
koja nas ili obaveštava da linearan program nema rešenje, ili
nam daje slack formu ekvivalentnu početnoj, u kojoj možemo
postaviti sve nebazične promenljive na 0.
Inicijalizacija
Inicijalizacija
I So meta!
Inicijalizacija
Inicijalizacija
Inicijalizacija
Implementacija inicijalizacije
Inicijalizacija
9 if 0 ∈
/ B ∨ b0 = 0
10 if 0 ∈ B // ako je x0 bazična, uraditi pivot sa bilo kojim xy
11 (N, B, A, ~b, ~c) ← Pivot(N, B, A, ~b, ~c, 0, y)
12 N ← N \ {0}
13 restore the original objective function
14 replace each basic variable in the function with its constraint
15 return the resulting (N, B, A, ~b, ~c)
16 else error “infeasible”
Inicijalizacija
Kraj implementacije
Definicija problema
Definicija problema
Definicija problema
TSP
LP formulacija
Demonstracija
Demo: čvorovi
Sada ćemo, koristeći ove tehnike, rešiti problem putujućeg trgovca
za 42 najveća grada u SAD—koristeći najbolju poznatu metodu za
rešavanje, ovo bi trebalo da traje ∼ 4 sata!
Demonstracija
Demonstracija
Demo: materijali
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija
Demonstracija