Operációkutatás Kalmár János, Hiperbolikus és kvadratikus programozás
Hiperbolikus programozás Alapfeladat: A x b, x 0 d T x + 0 (1) c T x + max d T x + Legyen x = y/t (y 0, t > 0) akkor
Hiperbolikus programozás A y b t c T y + t max d T y + t Válasszuk meg t paramétert úgy, hogy d T y + t = 1 Teljesüljön, akkor (1) ekvivalens
Hiperbolikus programozás A y - b t 0 d T y+ t = 1 (2) c T y+ t max lineáris programozási feladattal, melynek y megoldásából (1) megoldása x = y / t alapján számítható.
Hiperbolikus programozás Tételek: 1.(2) feladat mindig megoldható, és t>0 teljesül 2.Ha (y, t) optimális megoldása (2)-nek, akkor x = y/t optimális megoldása (1)- nek 3.Ha x optimális megoldása (1)-nek akkor t= 1/(d T x + ) és y=t x optimális megoldása (2)-nek.
Hiperbolikus programozás Számpélda: x 1 + x 2 4 x 1 - x 2 2 (2 x 1 + x 2 - 2)/(x 1 + x 2 + 1) max helyett megoldandó y 1 + y 2 – 4 t 0 y 1 - y 2 -2 t 0 y 1 + y 2 + t = 1 2 y 1 + y 2 – 2 t max
Hiperbolikus programozás A számpéldát LP-ként megoldva kapjuk: y 1 = 0,6 y 2 = 0,2 t = 0,2 ezért a megoldások x-re x 1 = 3 x 2 = 1 a célfgv értéke pedig 1
Kvadratikus programozás Alapfeladat: A x b, x 0 (1) p T x+x T C x min Ahol C szimmetrikus és pozitív szemidefinit ( x-re x T C x 0, a szimmetria pedig mindig elérhető x T C x =x T C T x és C’ = (C + C T )/2 miatt). (1) helyett oldjuk meg a (2) feladatot:
Kvadratikus programozás A x + y = b, x, y, v, u 0 - C x + v - A T u = p (2) x T v + y T u = 0 b T u max (2) már közel lineáris programozási feladat, ahol az x T v + y T u = 0 nemlineáris feltételt úgy teljesítjük, hogy x i és v i, illetve y i és u i ismeretlenek nem lehetnek egyidejűleg a bázisban, mert a különben pozitív tagú összeg csak akkor lesz 0, ha minden tagja 0, ezért a tagok egyik tényezője kötelezően 0 lesz, tehát ismeretlenként nem tartozhat a bázisba. Tétel: (2)-nek mindig van megoldása, ha az A x b összefüggést nem csak az üres halmaz elégíti ki, és x egyben (1)-nek is megoldása.
Kvadratikus programozás (1) és (2) feladatok ekvivalenciájának belátása: A x + y = b, x, y, v, u 0 rész triviális, - C x + v - A T u = pfeltétel a transzponálás után - x T C + v T - u T A = p T / x - x T C x + v T x - u T A x = p T xezért (1) célfüggvénye p T x + x T C x = v T x - u T A x de u T A x = u T (b – y) = u T b - u T yezért (1) célfüggvénye p T x + x T C x = v T x - u T b + u T y ahol az x T v + y T u = 0 feltétel miatt a célfgv. - b T u min-re egyszerűsödik, ami b T u max alakban is felírható. Tehát újabb változók és lineáris feltételek segítségével sikerült a célfüggvényt is lineárissá tenni, csak az x T v + y T u = 0 feltétel okoz – az előző dián ismertetett - változást a standard megoldáshoz képest.
Kvadratikus programozás (2) megoldása: 1. fázis: határozzuk meg A x b, x 0 egy lehetséges x’ megoldását szimplex módszerrel, és definiáljuk F előjel-mátrixot a következőképpen: F = (f 1,f 2,…f n ) diagonális mátrix, ahol f j = sign(e j T (C x’+p)) e j ahol sign az előjelfgv Tekintsük a következő lineáris programozási feladatot:
Kvadratikus programozás A x + y = b, x, y, v, u, z 0 -C x + v - A T u + F z = p (3) x T v + y T u = 0 t = z i min (i=1..n) aminek egy lehetséges bázismegoldása: x’ y’ = b - A x’ v’ = 0 (4) u’ = 0 z’ = F (C x’ + p) (3) feltételei ekvivalensek (2)-vel, ha a megoldásban z = 0, ezt fejezi ki (3) célfüggvénye.
Kvadratikus programozás 2. fázis: (4) Megoldásból kiindulva oldjuk meg (3)-at szimplex módszerrel úgy, hogy minden bázisvektor csere esetén vegyük figyelembe, hogy az aktuális bázisban nem lehet egyidejűleg x j és v j, illetve y j és u j. (3) Megoldása akkor ér véget, ha a t célfüggvény értéke 0 – ezután z oszlopainak elhagyásával folytassuk (2) megoldását a b T u max célfüggvény szerint. Az eredményben szereplő x a tétel szerint egyidejűleg az (1) feladat optimális megoldása is.
Kvadratikus programozás Számpélda: x 1 +x 2 3 x 1, x 2 0 -x 1 +4x 2 4 x x 1 x 2 +5x x 1 -20x 2 min A = 1 1 b = 3 C = 1 -2 p = 6 -1 4 4 -2 5 -20 (1) induló bázismegoldása lehet x 1 =0, x 2 =0, ezért (4) kezdő-megoldás a következő lesz: x 1 =0, x 2 =0, y 1 =3, y 2 =4, v 1 =0, v 2 =0, u 1 =0, u 2 =0, z 1 =6, z 2 =20
Kvadratikus programozás Szimplextábla/1: x 1 x 2 v 1 v 2 u 1 u 2 b y y z z b T u z i y 2 helyére az x 2 kerül a bázisba
Kvadratikus programozás Szimplextábla/2: x 1 y 2 v 1 v 2 u 1 u 2 b y 1 5/4 -1/ x 2 -1/4 1/ z 1 -1/2 -1/ z 2 -3/4 -5/ b T u z i 19/4 7/ z 2 helyére az u 2 kerül a bázisba
Kvadratikus programozás Szimplextábla/3: x 1 y 2 v 1 v 2 u 1 z 2 b y 1 5/4 -1/ x 2 -1/4 1/ z 1 -5/16 -3/16 1 1/4 -5/4 -1/4 1/4 u 2 -3/16 -5/ /4 1/4 1/4 15/4 b T u 3/4 5/ z i 61/16 3/ /4 5/4 5/4 -1/4 z 1 helyére az v 1 kerül a bázisba
Kvadratikus programozás Szimplextábla/4: x 1 y 2 z 1 v 2 u 1 z 2 b y 1 5/4 -1/ x 2 -1/4 1/ v 1 -5/16 -3/16 1 1/4 -5/4 -1/4 1/4 u 2 -3/16 -5/ /4 1/4 1/4 15/4 b T u 3/4 5/ z i 14/
Kvadratikus programozás Elértük, hogy z kikerüljön a bázisból, ezért a redukált szimplex táblával folytathatjuk: x 1 y 2 v 2 u 1 b y 1 5/4 -1/ x 2 -1/4 1/ v 1 -5/16 -3/16 1/4 -5/4 1/4 u 2 -3/16 -5/16 -1/4 1/4 15/ b T u 3/4 5/
Kvadratikus programozás A redukált szimplex táblában csak a pozitív elemeket választhatjuk generáló-elemnek, melyek viszont a x T v + y T u = 0 feltételnek ellentmondó bázisvektor cseréhez vezetnének (pl. x 1 y 1, x 2 y 2, u 1 u 2, v 1 v 2 ), ezért továbblépni nem tudunk, az aktuális táblázat már az optimális eredményt (x 1 =0, x 2 =1, célfüggvény = -15) mutatja.