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