MIP Practice Linear Programming Solvers Implementation Domenico Salvagnin
Dalla teoria alla pratica... Solver LP/MIP sono molto usati in pratica: perchè? Successo del paradigma LP/MIP dovuto alla disponibilità di solver molto efficaci da due punti di vista: efficienza stabilità numerica
Evoluzione recente Negli ultimi 15 anni (circa): hardware speedup: 1000x miglioramenti simplesso: 1000x miglioramenti branch-and-cut: 1000x 1.000.000.000 x (meglio della legge di Moore!)
Simplesso Revised: forma standard min c T x Ax = b x 0 base B min c T B B 1 b +(CF T ct B B 1 N)x N x B + B 1 Nx N = B 1 b x 0 Quantità fondamentali: β z π T = B 1 b = c T B B 1 = c T B B 1 b = c T B β = πt b
Sketch Algoritmo (1) 0) trova base iniziale B 1) calcola B 1, β, π,z 2) [PRICING] calcola i costi ridotti: d j = c j π T a j j B Se sono tutti positivi sono all ottimo. Altrimenti scelgo una variabile d q < 0 x q con costo ridotto Calcola α q = B 1 a q
Sketch algoritmo (2) 3) [PIVOT] sia I = {i : α iq > 0} Se I è vuoto allora il problema è unbounded. Altrimenti effettua il ratio-test: θ = min i I βi α iq e determina variabile che esce dalla base x p 4) [UPDATE] β β θα q z z + θd q B 1 EB 1
Elementary Transformation Matrices Descrivono le operazioni pivot Possono essere salvate in modo molto compatto E = 1 η 1...... η p...... η m 1 η = v 1 v p,..., v p 1 v p, 1 v p, v p+1 v p,..., v m v + p
Simplesso: Operazioni Base (FTRAN) (BTRAN) α = B 1 a π T = h T B 1 Bα = a B T π = h Possono essere ottenute in 2 modi: product form inverse (PFI) fattorizzazione LU
PFI: definizione e operazioni Update step: B 1 EB 1 Partendo da I, dopo m pivot: B 1 = E m E m 1...E 1 Operazioni FTRAN BTRAN UPDATE α = B 1 a = E k...e 1 a π T = h T B 1 = h T E k...e 1 B 1 E k+1 B 1 = E k+1 E k...e 1 Ogni tanto viene effettuata una reinversione da zero, per accorciare la catena di matrici E
Fattorizzazione LU B = LU upper triangular lower triangular FTRAN BTRAN LUα = a U T L T π = h Lγ = a Uα = γ U T γ = h L T π = γ tutto facilmente calcolabile con back/forward substitutions
Fattorizzazione LU(2) In pratica si ottiene la forma L 1 B = U I passi FTRAN e BTRAN sono comunque ottenibili usando solo tali matrici (o le relative trasposte) Dopo un operazione pivot perdo la fattorizzazione => algoritmi di recover! Fattorizzazione LU è la più stabile per problemi di grandi dimensioni
Simplesso: forma generale min c T x {,, =} alcuni bound +/- infinito a T i x b i l x u min c T x Ax + Is = b l x u ID Tipo Bounds FX fixed x j =0 P non-neg x j 0 N non-pos x j 0 BD bounded 0 x j u j FR free x j
Perchè? Generalizzazione forma standard Più libertà nel tipo di variabili Bound sulle variabili gestiti implicitamente, per avere una base più piccola Noi considereremo il caso in cui non ci sono variabili non positive Cosa cambia nel simplesso revised?
Basic Solutions Cambia il concetto di soluzione feasible: x è feasible se ogni componente è dentro i rispettivi bound variabili fuori base non necessariamente nulle (anche all upper bound), ma determinano ancora univocamente quelle in base var. in base B var. fuori base all upper U x B = B 1 (b Nx F ) = B 1 (b k U a k u k ) = B 1 b u
Optimality Conditions La formula dei costi ridotti non cambia, ma le variabili fuori base possono comportarsi diversamente: ID Valore Cond. costo ridotto FX 0 qualsiasi non entra mai in base! P 0 BD 0 d j 0 d j 0 BD u j d j 0 novità FR 0 d j =0
Cambio base Ci sono 2 casi: d q < 0 e d q > 0. Vediamo il primo Bx B (t)+ta q = b u t indica di quanto si muove la var. che entra x B (t) =B 1 b u tb 1 a q β α q x B(i) (t) =β i tα iq Devo fare in modo che tutte le variabili in base rimangano all interno dei rispettivi bound (sempre vero per le var. free) una var. free in base non esce mai
Cambio base (2) Definiamo: I + = {i : α iq > 0, type(x B(i) ) {FX, P, BD}} I = {i : α iq < 0, type(x B(i) ) {FX, BD}} allora: θ + βi = min i I + α iq θ = min i I βi u B(i) α iq θ = min{θ +, θ,u q } bound flip: molto vantaggioso!
Cambio base (3) Caso d q > 0 : Definiamo: I + = {i : α iq > 0, type(x B(i) ) {FX, BD}} I = {i : α iq < 0, type(x B(i) ) {FX, P, BD}} allora: θ βi = max i I α iq θ + = max i I + βi u B(i) α iq θ = max{θ +, θ, u q } bound flip: molto vantaggioso!
Qualche link... COIN CLP: http://www.coin-or.org/projects/clp.xml ZIB SoPLEX: http://soplex.zib.de GNU GLPK: http://www.gnu.org/software/glpk Maros Computational Techniques of the Simplex Method, 2002