Simplexová metoda pro známé počáteční řešení úlohy LP

Download Report

Transcript Simplexová metoda pro známé počáteční řešení úlohy LP

Simplexová metoda pro známé
počáteční řešení úlohy LP
RNDr. Jiří Dvořák, CSc.
[email protected]
Teorie systémů a operační analýza
1
Kanonický tvar úlohy LP
Uvažujme úlohu ve standardním tvaru


max cT x Ax  b, x  0
(a)
kde A je typu (m,n).
Řekneme, že úloha (a) je v kanonickém tvaru, když
matice A obsahuje jednotkovou matici typu (m,m).
TSOA: Simplexová metoda pro známé počáteční řešení
2
Kanonický tvar úlohy LP a bázické řešení
Nechť úloha


max cT x Ax  b, x  0
(a)
je v kanonickém tvaru a nechť b  0.
Zvolme bázi B = E a označme
xB … vektor bázických proměnných,
xN … vektor nebázických proměnných.
Bázické řešení:
xN = 0
xB = b
TSOA: Simplexová metoda pro známé počáteční řešení
3
Speciální případ úlohy LP
Předpokládejme úlohu LP v kanonickém tvaru, kde
jednotková matice je tvořena posledními m sloupci
matice A a kde b  0.
Nebázické proměnné: xN = (x1, x2, … , xn–m)T
Bázické proměnné: xB = (xn–m+1, xn–m+2, … , xn)T
Bázické řešení: x0 = (0, … ,0, b1, b2, … , bm)T
Obecné řešení: Nebázické proměnné x1, x2, … , xn–m
jsou volné a bázické proměné jsou určeny vztahem
xnmi  bi 
nm
 aij x j ,
i  1, 2,, m
j 1
TSOA: Simplexová metoda pro známé počáteční řešení
4
Úprava účelové funkce
Účelovou funkci
n
f (x)   c j x j
j 1
vyjádříme pomocí nebázických proměnných:
nm


f (x)   c j x j   cn mi  bi   aij x j 


j 1
i 1
j 1


po úpravě dostaneme
nm
m
nm 

f (x)   cnmi bi    c j   cnmi aij  x j

i 1
j 1 
i 1
m
m
TSOA: Simplexová metoda pro známé počáteční řešení
5
Prověření optimality bázického řešení
Označme:
m
F   cn  m i bi ,
i 1
Pak
f (x)  F 
m

 j    cn mi aij   c j
 i 1

nm
 ( j ) x j
j 1
a f(x0) = F.
Nechť x1 = (0, … , , … ,0, 1, … , m)T, kde  >
0 se nachází na s-té pozici a i = bi – ais  .
Potom f(x1) = F –  s . Je-li tedy s < 0, pak řešení x0
není optimální, neboť hodnotu účelové funkce lze
zvětšit o hodnotu  (–s).
TSOA: Simplexová metoda pro známé počáteční řešení
6
Nové řešení musí být přípustné
Aby řešení x1 bylo přípustným řešením dané úlohy LP,
musí splňovat podmínky nezápornosti x1  0.
Hodnota  > 0 tedy musí být řešením soustavy nerovnic
bi – ais   0, i = 1, … ,m.
Je-li aps  0, pak odpovídající nerovnice je splněna pro
jakoukoli kladnou hodnotu  a může být tudíž
vynechána. Řešením zbylé soustavy nerovnic je
podmínka
bi
  min
ais 0 ais
TSOA: Simplexová metoda pro známé počáteční řešení
7
Nové řešení musí být bázické
Aby řešení bylo bázické, musí být některá dosavadní
bázická proměnná anulována.
Položíme-li
bi
  min
ais 0 ais
bude anulována proměnná xn–m+r , kde r je určeno
vztahem
br
bi
 min
ars ais 0 ais
neboť xn–m+r = br – ars .
TSOA: Simplexová metoda pro známé počáteční řešení
8
Kanonický tvar odpovídající nové bázi
K nové bázi B1 patří s-tý sloupec matice A a sloupce
s indexy n–m+i pro i = 1, … , m, i  r.
Nový kanonický tvar získáme eliminační metodou,
při níž s-tý sloupec matice A upravíme na
jednotkový a zachováme jednotkové sloupce s
indexy n–m+i pro i = 1, … , m, i  r.
TSOA: Simplexová metoda pro známé počáteční řešení
9
Algoritmus simplexové metody
Mějme výchozí přípustné bázické řešení x0. Položme
k = 1, xk = x0 , A(k) = A, b(k) = b.
Simplexový algoritmus:
1. Test kritéria optimality pro xk. Je-li splněno, pak konec
(bázické řešení xk je optimálním řešením).
2. Určení klíčového prvku ars(k) matice A(k). Není-li možné
určit klíčový prvek, pak konec (úloha nemá konečné
optimální řešení).
3. Simplexová transformace matice (A(k) | b(k)). Získáme
matici (A(k+1) | b(k+1)) a nové bázické řešení xk+1. Položíme
k = k +1 a postup opakujeme od bodu 1.
TSOA: Simplexová metoda pro známé počáteční řešení
10
Simplexová tabulka
x1
x2
…
xn
c1
c2
…
cn
x 1B
c 1B
a11
a12
…
a1n
b1
x B2
.
.
.
x Bm
c B2
.
.
.
c Bm
a21
.
.
.
am1
a22
.
.
.
am2
…
…
a2n
.
.
.
amn
b2
.
.
.
bm
1
2
…
n
F
x Bi a c Bi
označují i-tou bázickou proměnnou
a její koeficient v účelové funkci
TSOA: Simplexová metoda pro známé počáteční řešení
11
Stanovení hodnot veličin j a F
m B 
 j    c i aij   c j
 i 1

m
F   c Bibi
i 1
Veličiny  j slouží k testování kritéria optimality a F
představuje hodnotu účelové funkce pro aktuální
bázické řešení.
Výchozí hodnoty těchto veličin můžeme získat také tak,
n
že k soustavě rovnic přidáme rovnici
z  c j x j  0
j 1
a pak z ní eliminační metodou odstraníme bázické
proměnné (nesmíme ji přitom ničím násobit ani dělit).
TSOA: Simplexová metoda pro známé počáteční řešení
12
Kritérium optimality
a) Kritérium optimality pro maximalizační úlohu:
(jk )  0
pro j = 1, … , n.
b) Kritérium optimality pro minimalizační úlohu:
(jk )  0
pro j = 1, … , n.
TSOA: Simplexová metoda pro známé počáteční řešení
13
Určení klíčového prvku
a) Určení indexu s klíčového sloupce:
(k )
s
(k )
 max  j
jJ
J je množina indexů těch sloupců, kde nebylo splněno
kritérium optimality. Klíčový sloupec určuje
proměnnou, která vstoupí do báze.
(k )
(k )
b
b
b) Určení indexu r klíčového řádku:
r  min i
(k )
(k )
ais( k ) 0 ais
ars
Klíčový řádek určuje proměnnou, která bude z báze
vyloučena.
Je-li určen klíčový prvek, pak do báze vstupuje proměnná
xs a nahrazuje proměnnou na r-té pozici.
TSOA: Simplexová metoda pro známé počáteční řešení
14
Poznámky k určení klíčového prvku
Pokud podmínce pro klíčový sloupec vyhovuje několik
sloupců tabulky, můžeme volit kterýkoli z nich. Totéž
platí pro určení klíčového řádku.
Klíčovým řádkem může být i ten řádek, kde je pravá
strana bi(k ) nulová (taková situace může nastat v
případě, že aktuální bázické řešení je degenerované).
Musí ale být splněna podmínka, že ais( k )  0 .
TSOA: Simplexová metoda pro známé počáteční řešení
15
Simplexová transformace
Úprava klíčového řádku:
arj( k 1)

arj( k )
(k )
ars
,
j  1, , n
br( k 1)
br( k )
 (k )
ars
Úprava ostatních řádků (i = 1, … , m, i  r):
aij( k 1)  aij( k ) 
bi( k 1)
arj( k )
(k )
a
,
( k ) is
ars
j  1, , n
(k )
b
 bi( k )  r( k ) ais( k )
ars
TSOA: Simplexová metoda pro známé počáteční řešení
16
Poznámky k simplexové transformaci
Z uvedených vzorců vyplývá, že řádek, který není
klíčový, nesmíme při úpravě ničím násobit nebo
dělit. Pokud tuto zásadu nedodržíme, ztratíme
kanonický tvar a hodnota bázické proměnné
odpovídající tomuto řádku se nebude rovnat pravé
straně.
Pokud je zachován kanonický tvar, získáme nové
bázické řešení následujícím způsobem:
• nebázické proměnné se položí rovny nule,
• bázická proměnná v i-tém řádku se rovná pravé
straně.
TSOA: Simplexová metoda pro známé počáteční řešení
17
Zjednodušení úprav j
n
K soustavě rovnic přidáme rovnici z   x  F
 j j
j 1
kde proměnná z reprezentuje hodnotu účelové
funkce. Tuto rovnici pak upravujeme stejně jako
všechny ostatní:
(jk 1)  (jk ) 
F ( k 1)
arj( k )
(k )

,
(k ) s
ars
j  1, , n
(k )
b
 F ( k )  r( k ) (sk )
ars
TSOA: Simplexová metoda pro známé počáteční řešení
18