Modellezési trükkök
===================
Változók
--------
* Ha Ax ≤ b és x ≥ m, hogy modellezzük fele ennyi feltétellel?
Legyen y = x-m, és helyettesítsük x-et y+m-mel:
A(y+m) ≤ b azaz Ay ≤ b - Am és y ≥ 0
* Ha x szabad (előjelkötetlen), hogy modellezzük nemnegatív változókkal?
x = y-z, ahol y, z ≥ 0 új változók. x minden előfordulását cseréljük (y-z)-re
Célfüggvények
-------------
* Ha min f(x) a cél, ahol f(x) nemlineáris, hogyan lehet a célfv-t linearizálni (feltétel lehet nemlineáris)
min f(x) --> t új változó. min t, a t ≥ f(x) feltétellel
* min max célfüggvény lineáriasan
min max f_i --> t új változó, min t, a t ≥ f_i minden i-re feltétellel
* Lineáris függvények aránya mint célfüggvény
min a*x/(b*x) --> 1/t = b*x helyettesítés (b*x*t = 1)
min a*x*t --> w = x*t helyettesítés, min a*w, a b*w = 1 feltétellel (b*x*t -ben is helyettesítjük w-t)
ha volt d*x = f feltétel, helyette d*w = f*t elegendő, így x kihagyható
Feltételek
----------
* abszolút értékes feltételek
x ≥ |f(y)| --> simán az x ≥ f(y) és x ≥ -f(y) feltételekkel
x ≤ |f(y)| --> nehezebb, kell egy új indikátor változó, d, ami 1 ha 0 ≤ f(y), 0 különben.
feltételek:
f(y) ≤ d*M # ha f(y) > 0 ==> d = 1
-f(y) ≤ (1-d)*M # ha f(y) < 0 ==> d = 0. Ha f(y) = 0 ≥ d = 1 vagy 0!!!
x ≤ f(y) + (1-d)*M # ha f(y) > 0, így d=1, ez a feltétel x ≤ f(y), különben x ≤ f(y) + M
azaz mintha nem is lenne
x ≤ -f(y) + d*M # ha f(y) < 0, így d=0, ez x ≤ -f(y), azaz x ≤ |f(y)|, különben x ≤ -f(y) + M
azaz mintha nem is lenne
M-et válasszuk elég nagyra: M = max{x, |f(y)|} jó választás, de minden feltételhez lehet másik M-et is
választani, hogy még pontosabb legyen.
* Alternatív feltételek: több feltétel adott, de azokból nem kell mindnek teljesülnie. Hogyan modellezhető?
Pl: gyártási feladatban, ha több (felcserélhető) alapanyagból is gyárthatjuk (de csak az egyikből), akkor vagy az
egyik, vagy a másik kapacitás-korlátját kell teljesíteni (nem kizáró vagy).
Legyen f(x) ≤ a, g(x) ≤ b a két alternativ feltétel.
Legyen 2 új indikátor változónk, d_f és d_g, ami 1 ha teljesül a feltétel, azaz f(x) ≤ a (g(x) ≤ b), 0 különben.
f(x) ≤ a + (1-d_f)*M_f
g(x) ≤ b + (1-d_g)*M_g
d_f + d_g ≥ 1
* Kizáró vagy: Mi van, ha pontosan az egyik teljesüljön csak?
Akkor az előző feltételek nem elegek, azt is biztosítani kell, hogy d=1 ha a feltétel teljesül:
f(x) ≤ a + (1-d_f)*M_f
f(x) ≥ a -d_f*M_f
g(x) ≤ b + (1-d_g)*M_g
g(x) ≥ b -d_g*M_g
d_f + d_g = 1
* Több feltételre általánosítva: N feltétel van, legalább/legfeljebb vagy pontosan K teljesüljön.
Indikátor változó minden feltételre a fenti feltételekkel, és az indikátorok összege legyen
≤ / = / ≥ K (ahány teljesüljön)
* Ha akkor tipusú feltételek, pl: Ha gyártunk egy terméket, legalább valamennyit gyártsunk.
pl. f(x) > a --> g(x) ≤ b itt alkalmazhatjuk a logikából amit tudunk:
P ==> Q equivalens azzal, hogy ¬P ∨ Q így az alternatív feltételekkel modellezhető.
f (x) ≤ a vagy g(x) ≤ b:
f(x) ≤ a + (1-d_f)*M_f
g(x) ≤ b + (1-d_g)*M_g
d_f + d_g ≥ 1
Változók újra
-------------
* bilineáris tagok: tegyük fel, hogy van két változónk, x, y, aminek a szorzata kell a modellben.
vezessünk be egy új változót, w = x*y ami a szorzatot modellezi, és adjunk meg lineáris feltételeket
hogy tényleg úgy változzon, mint x*y.
- ha x, y, (és így w is) bináris változó:
w ≥ x
w ≥ y
w ≤ x + y - 1
- ha x bináris, y folytonos, így w is folytonos. Legyenek y korlátai L és U, azaz L ≤ y ≤ U
w ≥ x*L
w ≥ y - U*(1-x)
w ≤ y - L*(1-x)
w ≤ x*U
- ha x,y folytonos, nincs ekvivalens átírása, csak közelítő.
Legyen Lx ≤ x ≤ Ux és Ly ≤ y ≤ Uy
w ≥ Lx*y + Ly*x − Lx*Ly
w ≥ Ux*y + Uy*x − Ux*Uy
w ≤ Ux*y + Ly*x − Ux*Ly
w ≤ Lx*y + Uy*x − Lx*Uy
ha nagyok a korlátok, általában sávokra bontjuk a kisebb intervallumú változót,
és sáv darabszámú bináris változóval írjuk fel