18
Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Embed Size (px)

Citation preview

Page 1: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1

Cplex

Page 2: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 2

IBM ILOG Cplex:•solver commerciale (scritto in C) dedicato alla risoluzione e all’ottimizzazione di problemi matematici di vario tipo;

•fortemente utilizzato in ambito industriale e di ricerca;

•noto per la sua stabilità e le sue elevate prestazioni;

•risolve problemi di PLI tramite Branch&Cut; risolve rilassati continui tramite avanzate routine riconducibili alla tecnica del simplesso

Forum ufficiale:http://www.ibm.com/developerworks/forums/forum.jspa?forumID=2059

Documentazione (versione 10.1):http://www.ieor.berkeley.edu/Labs/ilog docs/html/index.html

Page 3: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 3

CPLEX come solver black-box

CPLEX

Problema Modello matematico

Soluzione ottima

Soluzione ottima: ad ogni variabile del sistema viene attribuito una valore in modo che la funzione obiettivo sia la migliore ottenibile in base ai parametri del problema.

La soluzione potrebbe non essere ottima:

• la soluzione non esiste;

• Cplex potrebbe avere bisogno di troppe risorse (memoria o tempo).

Cplex fornisce ovviamente molte altre informazioni sulla soluzione stessa o sulla risoluzione in sè (possono essere MOLTO utili…)

e altre info…

Page 4: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 4

Interazione fra CPLEX e le vostre euristiche

Non vi è chiesto di risolvere il problema completo (CTQDP) tramite CPLEX!

Cplex potrebbe essere invece utile come risolutore di basso livello per sottoproblemi del (CTQDP) o per rilassati continui. Le possibilità di interazione sono molteplici e dipendono dalla struttura dell’euristica implementata

Individuo un sottoproblema CPLEX

Problema

Soluzione

Meta-euristica

CPLEX

Problema

Soluzione

Meta-euristica

Rilassamento continuo

Page 5: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 5

Cplex e problemi PLIBranch&Cut-Costruzione di un albero decisionale in cui ogni nodo corrisponde ad un sottoproblema (la radice è il rilassamento continuo del problema iniziale);- Ad ogni sottoproblema risolto, se ci sono soluzioni frazionarie, vengono introdotti tagli e il modello risultante viene risolto nuovamente (ogni nodo può prevedere più risoluzioni); - Se non ci sono più tagli da aggiungere, vengono generati i sottoproblemi tramite branching su una delle variabili frazionarie;- L’esplorazione dell’albero si continua finchè non si giunge alla soluzione ottima.

Elementi caratterizzanti del B&C di Cplex- preprocessing (presolve + probing) nel quale vengono eliminati vincoli e variabili inutili e analizzate le implicazioni logiche derivanti dall’assegnamento di valori interi alle variabili intere;- i tagli vengono introdotti nel modello in modo statico;- procedimenti euristici eseguiti “occasionalmente” per migliorare i bound.

Risoluzioni di problemi PLI esplodono in senso combinatorio e possono essere quindi molto difficili (o impossibili) da risolvere

Page 6: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 6

Modalità d’uso

Modalità interattiva: applicazione con la quale è possibile interagire tramite riga di comando. Si può descrivere il modello del problema (o importarlo da un file esterno) tramite una determinata sintassi, configurare il risolutore tramite l’impostazione di parametri opportuni e infine chiedere l’ottimizzazione del modello specificato;

C Callable Library: libreria di funzioni C tramite le quali si può comandare CPLEX e gestirne le funzionalità;

Concert Technology: le funzionalità di CPLEX sono disponibilisottoforma di librerie (C++, .NET e Java) linkabili in modo dinamico.

Le ultime 2 modalità permettono di interfacciarsi col risolutore all’interno di un altro software più ampio (embedding), lasciando ad esso il controllo del processo ed e eliminando la necessità di una interazione realtime da parte di un utente.

Page 7: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 7

Concert TechnologyÈ necessario configurare il proprio IDE affinchè possa utilizzarla correttamente (le seguenti istruzioni riguardano Visual Studio 2008, Cplex 10.1 e Concert Technology 2.3):

Dopo aver creato un nuovo Progetto, entrare nelle sue Proprietà e aggiungere:

C/C++ > General > Additional Include Directories:

<CPLEXDIR>\include

<CONCERTDIR>\include

C/C++ > Preprocessor > Preprocessor Definitions:

IL_STD

Linker > Input > Additional Dependencies:

wsock32.lib

<CPLEXDIR>\lib\x86_.net2005_8.0\stat_mda\cplex101.lib

<CPLEXDIR>\lib\x86_.net2005_8.0\stat_mda\ilocplex.lib

<CONCERTDIR>\lib\x86_.net2005_8.0\stat_mda\concert.lib

Includere all’inizio del file:#include <ilcplex/ilocplex.h>ILOSTLBEGIN

ATTENZIONE:

per utilizzare il risolutore cplex101.dll deve trovarsi nella stessa directory dell’eseguibile (oppure inserito nel PATH di sistema)

Page 8: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 8

Struttura del programmaLa struttura di un’applicazione che utilizza questa tecnologia prevede generalmente le seguenti fasi:

1. costruzione di un ambiente, ovvero un oggetto che si occuperà in particolare della gestione ottimizzata della memoria di sistema;2. creazione di un modello, ovvero un insieme di vincoli da rispettare e una funzione obiettivo da ottimizzare;3. impostazione dei parametri di controllo;4. risoluzione del modello, ovvero il procedimento tramite il quale CPLEX raggiunge la soluzione;5. querying dei risultati (è possibile conoscere il valore di tutte le variabili del modello, non solo della f.o.).

Page 9: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 9

Ambiente e modelloConstructing the Environment: IloEnv

Un ambiente (un istanza di IloEnv) è il primo oggetto che viene creato. Si occupa di gestire in maniera ottimizzata la memoria di sistema per i processi di Cplex. Si può costruire un oggetto IloEnv dichiarando una variabile di tipo IloEnv.

IloEnv env;

L’ambiente deve essere disponibile per i costruttori di tutte le altre classi ILOG Concert Technology!

Per distruggere l’oggetto ambiente:

env.end();

Creating a model: IloModel

È l’oggetto contenitore per tutti gli elementi del modello. Si può costruire un oggetto IloModel dichiarando una variabile di tipo IloModel:

IloModel model(env);

Page 10: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 10

È importante gestire questa eccezione!!

Page 11: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 11

Elementi del modelloDopo che un oggetto IloModel è stato costruito, può essere popolato da altri oggetti che lo definiscono (variabili, vincoli, f.o.).

Alcune delle classi più importanti:

IloNumVar  per rappresentare le variabili del modello; 

IloRange per definire i vincoli (nella forma l <= expr <= u), dove expr è un’espressione lineare;

IloObjective  per rappresentare la funzione obiettivo. 

Questi oggetti possono essere aggiunti al modello tramite:

model.add(object);

Page 12: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 12

VariabiliForma base più flessibile:IloNumVar nome (env, lb, ub, type);

Es: IloNumVar x1 (env, 0.0, 40.0, ILOFLOAT); Crea la variabile x1 con lower bound 0, upper bound 40 e di tipo ILOFLOAT (variabile continua). Altri possibili tipi: ILOINT, ILOBOOL.

Per creare un array di variabili si usa:IloNumVarArray xArray (env, size, lb, ub, type);

Forme più complesse (basate su composizione delle altre):IloArray<IloNumVarArray> z_ik;IloArray<IloArray<IloNumVarArray> > z_ikr;

Page 13: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 13

Vincoli e Funzione obiettivoUna volta create le variabili è possibile utilizzarle per costruire espressioni lineari che identifichino i vincoli e la funzione obiettivo del problema

Vincoli:

IloRange r (env, 2, IloExpr expr, 4);

model.add(r);

IloConstraint v (x + y <= 67);

model.add(v)

Funzione obiettivo:

model.add (ObjFunc == c*x);

model.add (IloMinimize(env, ObjFunc));

IloExpr è una classe molto utile per creare espressioni complesse (ad esempio quelle che nascono da costruzioni iterative all’interno di cicli)

Page 14: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 14

RisoluzioneÈ necessario creare un oggetto IloCplex e estrarre il modello creato; si può fare tutto in una sola istruzione:

IloCplex cplex(model);

È possibile settare alcuni parametri di risoluzione:

cplex.setParam(IloCplex::EpGap, 0.0);

Infine si lancia la risoluzione:

if ( !cplex.solve() ) {

env.error() << "Failed, Doh!" << endl;

throw(-1);

}

Page 15: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 15

Querying dei risultatiAlcune funzioni utili per recuperare informazioni:

cplex.getStatus(); -ritorna lo stato della soluzione trovata

cplex.getObjValue(); -ritorna il valore della funzione obiettivo

cplex.getValue(IloExpr); -ritorna il valore dell’espressione in input

cplex.getValue(IloNumVar); -ritorna il valore della variabile in input

Consultare la documentazione per scoprire tutte le informazioni che può restituire Cplex (costi ridotti delle variabili, bounds, preprocessing…)

Page 16: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 16

Esempio PL:

Provare, provare subito

Page 17: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 17

Esempio PLI:

Provare, provare subito

x1, x2, x3 INTEGER

Page 18: Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 1 Cplex

Manerba Daniele – Università degli Studi di Brescia – a.a. 2009-2010 18

Esempio

Differenze fra le due risoluzioni:

•Tempi (lo stesso problema rilassato richiede meno tempo)

•Soluzione e funzione obiettivo (le regioni di ammissibilità sono diverse)

•Metodo risolutivo (simplesso vs B&C)

Es: cerchiamo il Cutoff per il problema PLI e i costi ridotti delle variabili per il problema PL