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), különben x ≤ -f(y) + M azaz mintha nem is lenne M-et válasszuk jól: M = 2* |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