Appendice C. CPLEX e Principali Funzioni. C.1 Creazione del modello

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Appendice C. CPLEX e Principali Funzioni. C.1 Creazione del modello"

Transcript

1 Appendice C CPLEX e Principali Funzioni Questo appendice è stato pensato come semplice guida relativa all utilizzo del software IBM ILOG CPLEX all interno della tesina. I contenuti sono divisi in sezioni, ognuna delle quali cerca di corrispondere ad un modulo del progetto finale. Viene inoltre brevemente descritto un generico output generato dal programma durante il processo di ottimizzazione. Inoltre saranno illustrate brevemente e in generale le modalità di utilizzo delle varie routine di CPLEX, per i dettagli del loro impiego, all interno di questo lavoro, si rinvia ai relativi capitoli dell elaborato, invece per quanto riguarda la descrizione riguardante la parametrizzazione dei metodi, che verranno citati, si rimanda alla documentazione ufficiale. C.1 Creazione del modello Il modello può essere creato tramite due approcci diversi: mediante un file specifico generato secondo una certa sintassi, o attraverso alcune routine di libreria. In entrambi i casi, le operazioni preliminari da eseguire sono le seguenti: i n t e r r ; CPXENVptr env ; CPXLPptr lp ; // in e r r vengono s a l v a t i e v e n t u a l i c o d i c i di e r r o r e env = CPXopenCPLEX(& e r r ) ; // " tsp " d e f i n i s c e i l nome d e l problema lp = CPXcreateprob ( env, &err, "tsp" ) ; La prima operazione da effettuare (prima di qualsiasi altra chiamata alla libreria di CPLEX) è quella alla funzione CPXopenCPLEX, la quale genera il nuovo environment in cui verrà creato il modello. A questo punto è necessario definire il problema di programmazione lineare tramite la funzione CPXcreateprob, che ha il compito di crearne uno vuoto (senza vincoli e senza variabili).come riportato precedentemente, è possibile scegliere di completare il modello a partire da un file di input, dal formato e sintassi specifici (sav, mps o lp), tramite la funzione CPXreadcopyprob. Succesivamente viene riportato un esempio di file lp. 137

2 138 APPENDICE C. CPLEX E PRINCIPALI FUNZIONI \ENCODING=ISO \ Problem name : TSP Minimize obj : 408 x ( 1, 2 ) x ( 1, 3 ) x ( 1, 4 ) x ( 1, 5 ) x ( 2, 3 ) x ( 2, 4 ) x ( 2, 5 ) x ( 3, 4 ) x ( 3, 5 ) x ( 4, 5 ) Subject To degree ( 1 ) : x ( 1, 2 ) + x ( 1, 3 ) + x ( 1, 4 ) + x ( 1, 5 ) = 2 degree ( 2 ) : x ( 1, 2 ) + x ( 2, 3 ) + x ( 2, 4 ) + x ( 2, 5 ) = 2 degree ( 3 ) : x ( 1, 3 ) + x ( 2, 3 ) + x ( 3, 4 ) + x ( 3, 5 ) = 2 degree ( 4 ) : x ( 1, 4 ) + x ( 2, 4 ) + x ( 3, 4 ) + x ( 4, 5 ) = 2 degree ( 5 ) : x ( 1, 5 ) + x ( 2, 5 ) + x ( 3, 5 ) + x ( 4, 5 ) = 2 Bounds 0 <= x ( 1, 2 ) <= 1 0 <= x ( 1, 3 ) <= 1 0 <= x ( 1, 4 ) <= 1 0 <= x ( 1, 5 ) <= 1 0 <= x ( 2, 3 ) <= 1 0 <= x ( 2, 4 ) <= 1 0 <= x ( 2, 5 ) <= 1 0 <= x ( 3, 4 ) <= 1 0 <= x ( 3, 5 ) <= 1 0 <= x ( 4, 5 ) <= 1 B i n a r i e s x ( 1, 2 ) x ( 1, 3 ) x ( 1, 4 ) x ( 1, 5 ) x ( 2, 3 ) x ( 2, 4 ) x ( 2, 5 ) x ( 3, 4 ) x ( 3, 5 ) x ( 4, 5 ) End Listing C.1: File location.lp Come si nota, il file fa riferimento a un problema TSP per cinque nodi, e la sua struttura è divisa in più sezioni: nella prima parte (Minimize) viene riportata la funzione obiettivo, e quindi i costi associati a ciascun lato; nella seconda parte (sotto a Subject to) vengono elencati i vincoli del problema, ai quali è possibile assegnare un nome per ciascuno (in questo caso degree(x)) e che qui corrispondono ai vincoli di grado dei singoli nodi; seguono la parte che definisce il dominio delle variabili e l insieme delle variabili binarie (rispettivamente indicate da Bounds e Binaries). La seconda opzione, come esposto precedentemente, consiste nel creare il modello da codice; i passaggi da eseguire (non necessariamente nell ordine) sono essenzialmente due. La funzione obiettivo viene creata aggiungendo al problema una o più variabili per volta, tramite la funzione CPXnewcols, con la quale è possibile specificare il dominio e la natura di tali variabili (per esempio, il

3 C.2. RISOLUZIONE DEL MODELLO E REPERIMENTO DEI DATI 139 fatto che siano binarie). L inserimento di un nuovo vincolo di grado avviene invece tramite l uso combinato di due routine: con la prima, CPXnewrows, viene creato un vincolo nel modello in cui tutti i coefficienti delle variabili sono inizialmente settati a zero, con la seconda, CPXchgcoef, è possibile cambiare il valore di tali coefficienti solo per le variabili di interesse (in questo caso, considerando il vincolo di grado sul nodo i-esimo, vengono settati a 1.0 tutti i coefficienti delle variabili corrispondenti agli archi uscenti dal i-esimo nodo) 1. In qualsiasi momento è possibile reperire il numero corrente di righe (vincoli) o colonne (variabili) del modello, rispettivamente con le chiamate alle funzioni CPXgetnumrows e CPXgetnumcols. C.2 Risoluzione del modello e Reperimento dei dati Una volta che il modello viene creato la chiamata alle routine di risoluzione sono banali: la routine CPXmipopt risolve il modello generato e salva i risultati ottenuti (se ce ne sono) all interno del suo environment associato. A questo punto l utente può esplorare tale environment per ricavare informazioni sulla soluzione ottima, sul vettore della soluzione, sul tempo di esecuzione ecc. Segue un elenco delle principali routine utili per estrapolare caratteristiche sul risultato della soluzione di un problema tramite ottimizzazione intera: CPXgetstat: restituisce un valore intero corrispondente alla stato della soluzione. In generale, per ogni problema di programmazione lineare intera esistono tre esiti possibili: Problema Impossibile (infeasible): non esiste una soluzione ammissibile Problema Illimitato (unbounded): la funzione obiettivo non è limitata inferiormente Problema risolto all ottimo: esiste almeno una soluzione amissibile ed essa è stata certificata all ottimo Poichè in CPLEX il processo di ottimizzazione può essere controllato e se necessario interrotto secondo vari parametri, i valori possibili di ritorno sono in realtà più dei tre immaginabili: in tabella C.1 sono elencati alcuni dei principali CPXgetobjval: parametro salva il valore della soluzione in una variabile passata dall utente come CPXgetx: la routine permette di esplorare il valore assunto dalle singole variabili del modello (anche parzialmente), memorizzando il vettore soluzione all interno di un array passato come parametro (dopo averlo allocato opportunamente) 1 In generale, è possibile aggiungere un vincolo al modello tramite la funzione CPXaddrows, la quale permette di creare il taglio e specificare i coefficienti con una sola chiamata. La scelta di usare le due funzioni separatamente è dettata unicamente dalla natura del vincolo, per la quale tale modalità è probabilmente più semplice (in termini di costruzione dei parametri da passare alle routine).

4 140 APPENDICE C. CPLEX E PRINCIPALI FUNZIONI parametro (valore) CPXMIP_OPTIMAL (101) CPXMIP_INFEASIBLE (103) CPXMIP_TIME_LIM_FEAS (107) CPXMIP_TIME_LIM_INFEAS (108) CPXMIP_SOL_LIM (104) CPXMIP_OPTIMAL_TOL (102) descrizione Problema risolto all ottimo Problema impossibile Raggiunto timelimit, esiste una soluzione intera Raggiunto timelimit, non esiste una soluzione intera Raggiunto il limite di soluzioni Raggiunto il valore di epgap Tabella C.1: Lista dei principali codici di ritorno della funzione CPXgetstat C.3 Metodo Loop Il metodo Loop, come approfondito nel Capitolo 3, è la modalità di risoluzione secondo cui il modello, inizialmente composto solo dai vincoli di grado sui nodi, viene risolto all ottimo, e iterativamente ri-risolto una volta inseriti i vincoli anticiclo sulle componenti connesse trovate dalla soluzione precedente. La tecnica tende pertanto a utilizzare CPLEX come risolutore "black box", e non fa uso di routine avanzate. In questa sezione si farà riferimento alle funzione di settaggio dei parametri, relativi alle tecniche adottate allo scopo di ridurre il tempo di esecuzione di ciascuna iterazione di risoluzione. Timelimit, gap e sollimit CPLEX permette all utente di modificare decine di valori legati ai suoi processi interni di ottimizzazione; il fissaggio di tali parametri avviene mediante funzioni come (ma non solo) CPXsetintparam, CPXsetdblparam e CPXsetlongparam, che impostano un dato campo del risolutore al valore specificato dall utente. Di seguito, viene proposto il codice per impostare i parametri utilizzati nella sezione 3.2.1: // imposta i l numero massimo di s o l u z i o n i i n t e r e da trovare, prima di terminare l o t t i m i z z a z i o n e, a 3 CPXsetintparam ( env, CPX_PARAM_INTSOLLIM, 3) ; // imposta i l tempo l i m i t e massimo per ogni i t e r a z i o n e a 10 secondi ; l o t t i m i z z a z i o n e s i fermer á dopo t a l e l a s s o di tempo, indipendentemente dal f a t t o che una s o l u z i o n e ammissibile s i a s t a t a trovata o no CPXsetdblparam ( env, CPX_PARAM_TILIM, 1 0) ; // imposta i l v a l o r e di t o l l e r a n z a d e l gap t r a m i g l i o r s o l u z i o n e ( di un nodo v a l i d o ) e m i g l i o r s o l u z i o n e i n t e r a a l 5% CPXsetdblparam ( env, CPX_PARAM_EPGAP, ) ; In tabella C.2 vengono riportati i valori di default dei parametri citati.

5 C.4. METODO CALLBACK 141 parametro valore di default CPX_PARAM_INTSOLLIM CPX_PARAM_TILIM 1e+75 CPX_PARAM_EPGAP 1e-04 Tabella C.2: Valori di default dei parametri di timelimit, sollimit e gap Settaggio del possibile vicinato di un nodo Indipendentemente dal metodo utilizzato per circoscrivere il numero di nodi raggiungibili da ciascun nodo, la routine necessaria, a tale scopo, prevede la modifica dell upper bound da 1 a 0, per tutte quelle variabili associate ad archi di collegamento tra un nodo e un altro al di fuori del suo vicinato. Per eseguire questa operazione è possibile utilizzare la funzione CPXchgbds, che permette appunto di modificare i bound di una o più variabili. Metodi alternativi per l aggiunta dei vincoli La funzione normalmente utilizzata per aggiungere un vincolo anticiclo al modello è la CPXaddrows (aggiunge staticamente uno o più tagli alla matrice dei vincoli). Sono stati testati altri due metodi per l inserimento dei suddetti tagli, CPXaddlazyconstraints e CPXaddusercuts, ma per maggiori informazioni si rimanda alla sezione dove sono già stati trattati. C.4 Metodo Callback A differenza del metodo precedente, le callback richiedono maggior impiego della libreria di CPLEX. In questa sezione si farà riferimento alle routine di installazione delle callback, a metodi di riperimento dei dati all interno dei singoli nodi dell albero di ricorsione e a qualche parametro accessorio; per qualsiasi riferimento al funzionamento delle callback usate, si rimanda al Capitolo 4. Procedure pre-installazione Le callback di CPLEX sono strumenti di programmazione avanzati che, se usati nel corretto modo, consentono una maggiore efficienza del processo di ottimizzazione di default, in quanto permettono all utente di sfruttare le caratteristiche peculiari del problema che si intende risolvere. Anche per questo motivo, tuttavia, non sempre viene garantito che tali modifiche siano completamente compatibili con l intero processo di ottimizzazione standard (preprocessing e processing); per ovviare a tale complicazione, di default l installazione di una callback richiede che alcune procedure di preprocessing vengano disattivate. A tale scopo si riporta le chiamate a funzione necessarie: CPXsetintparam ( env, CPX_PARAM_MIPCBREDLP, CPX_OFF) ; CPXsetintparam ( env, CPX_PARAM_PRELINEAR, 0) ; CPXsetintparam ( env, CPX_PARAM_REDUCE,CPX_PREREDUCE_PRIMALONLY) ;

6 142 APPENDICE C. CPLEX E PRINCIPALI FUNZIONI Il parametro CPX_PARAM_MIPCBREDLP regola l accesso alle informazioni del modello originale o quello creato da riduzioni o da altre procedure di preprocessing (default): alcune callback supportano entrambe le modalità, tuttavia, come si può vedere, la lazyconstraintcallback utilizza dei metodi al suo interno che rendono la modifica necessaria. Discorso analogo è valido per il parametro CPX_PARAM_PRELINEAR, che controlla il livello della complessità delle possibili riduzioni del modello originale. Il terzo parametro modificato, CPX_PARAM_REDUCE, indica se durante il preprocessing debbano essere eseguite riduzioni a livello di problema duale, primale, entrambi o nessuno dei due; di default l installazione della lazyconstraintcallback impone la limitazione a solo riduzioni sul problema primale. Installazione Una volta impostati i parametri è possibile procedere con l installazione delle callback. Si riporta di seguito le tre chiamate a funzione adibite a tale scopo (corrispondenti alle tre tipologie di callback utilizzate nel progetto): C P X s e t l a z y c o n s t r a i n t c a l l b a c k f u n c ( env, callback, &data_for_lcc ) ; C P X s e t h e u r i s t i c c a l l b a c k f u n c ( env, callback, &data_for_hc ) ; CPXsetusercutcallbackfunc ( env, callback, &data_for_ucc ) ; Come si nota, le funzioni presentano tutte la stessa struttura; il parametro callback si riferisce al corpo di codice da eseguire ogni volta che verrà eseguita la callback (è quindi un puntatore a metodo); tali funzioni dovranno avere pertanto una firma specifica (per tali approfondimenti si rimanda alla documentazione). Procedure post-installazione L ultimo accorgimento prima di poter avviare l ottimizzazione consiste nel correggere le impostazioni di multithreading: l installazione di una qualsiasi callback di controllo (ovvero che modifichi in qualche modo l andamento della ricerca nell albero di ricorsione, aggiungendo vincoli per esempio) fa in modo infatti che CPLEX annulli qualsiasi settaggio precedente a tale operazione riguardo al numero di thread concorrenti a disposizione, non potendo garantire la thread safety del processo in presenza di codice scritto dall utente. Se le impostazioni precedenti all installazione non vengono ristabilite, l ottimizzazione procede utilizzando un solo thread, sequenziando quindi le esecuzioni delle callback. Segue un esempio di come impostare il numero di thread uguale al numero di processori presenti nella macchina (in accordo con la documentazione, è consigliabile non impostare il parametro a un numero superiore a tale valore). i n t c o r e s ; // l a r o u t i n e r e s t i t u i s c e i l numero di p r o c e s s o r i f i s i c i d e l l a macchina CPXgetnumcores ( env, &c o r e s ) ; CPXsetintparam ( env, CPX_PARAM_THREADS, c o r e s ) ;

7 C.4. METODO CALLBACK 143 Reperimento dei dati all interno della callback Una volta che le callback vengono installate, non è comunque detto che l utente voglia che vengano eseguite a prescindere dallo stato dell albero di ottimizzazione: come discusso nel Capitolo 4, per esempio, l esecuzione della UserCutCallback e HeuristicCallback può essere subordinata al fatto che il nodo che deve eseguire la callback sia in un livello al di sopra o al di sotto di una certa profondità dell albero. Per recuperare, durante l esecuzione di una callback, l informazione sulla profondità del nodo, o altri dettagli, vengono usati i seguenti metodi: CPXgetcallbacknodeinfo CPXgetcallbackinfo Le due funzioni ricevono, tra i vari parametri, un valore intero che specifica il dato che si desidera ottenere: la prima è utilizzata principalmente per informazioni riguardo al nodo da cui viene chiamata, come numero seriale o profondità del nodo; la seconda per ricavare informazioni riguardo allo stato globale dell ottimizzazione (incumbent, migliore soluzione disponibile, numero di iterazioni, timestamp, tempo di esecuzione ecc.), all albero di ricorsione (es. numero di nodi processati e ancora da processare) o riguardo alla callback stessa (es. id del thread che la esegue). Per esempio, le seguenti righe di codice hanno il compito di ottenere i dati sul thread e sulla profondità del nodo corrente: i n t thread, node_depth ; // env, cbdata e wherefrom sono parametri che fanno r i f e r i m e n t o a g l i s t e s s i parametri p a s s a t i d a l l a c a l l b a c k. I l quarto parametro, s e t t a t o a 0, i n d i c a che i l nodo a l quale di s t a facendo r i f e r i m e n t o é q u e l l o c o r r e n t e CPXgetcallbacknodeinfo ( env, cbdata, wherefrom, 0, CPX_CALLBACK_INFO_NODE_DEPTH, &node_depth ) ; CPXgetcallbackinfo ( env, cbdata, wherefrom, CPX_CALLBACK_INFO_MY_THREAD_NUM, &t h r e a d ) ; All interno di una callback è ovviamente anche possibile richiedere il valore della soluzione al nodo corrente, unitamente al vettore delle variabili: double s o l ; double sol_vector ; // env, cbdata e wherefrom sono parametri che fanno r i f e r i m e n t o a g l i s t e s s i parametri p a s s a t i d a l l a c a l l b a c k. CPXgetcallbacknodeobjval ( env, cbdata, wherefrom, &s o l ; // [ 0, c o l s 1 ] rappresenta l i n t e r v a l l o di i n t e r e s s e a l l i n t e r n o d e l v e t t o r e d e l l e v a r i a b i l i CPXgetcallbacknodex ( env, cbdata, wherefrom, sol_vector, 0, c o l s 1) ;

8 144 APPENDICE C. CPLEX E PRINCIPALI FUNZIONI Soluzione iniziale In questa modalità di risoluzione ha anche senso fornire al risolutore una soluzione incumbent di partenza: invece nel Metodo Loop, dare una soluzione iniziale ha un effetto molto marginale sull ottimizzazione, in quanto molto probabilmente tale soluzione (un circuito ammissibile per le specifiche del problema) sarà peggiore delle soluzioni trovate nelle prime iterazioni (soluzioni disconnesse, in quanto molti vincoli anticiclo non sono ancora stati trovati) e quindi scartata. La soluzione trovata, in questo caso attraverso i diversi algoritmi euristici (e in aggiunta opzionalmente una ridefinizione matheuristica), viene fornita a CPLEX attraverso la routine CPXaddmipstarts. Aggiunta dei tagli Infine, si cita il metodo per inserire correttamente i tagli trovati all interno delle due callback LazyConstraintCallback e UserCutCallback. Si ricorda che esse cercano rispettivamente vincoli anticiclo mediante la funzione di SecSeparation e vincoli di mincut, o meglio capacità violata. Una volta che tali vincoli vengono trovati, l aggiunta al modello avviene attraverso il metodo CPXcutcallbackadd, che aggiunge i tagli nel problema a livello globale (usando la routine CPXcutcallbackaddlocal è possibile invece aggiungere i tagli solo a livello del nodo corrente, e quindi del suo sottoalbero). C.5 Output CPLEX offre la possibilità all utente di visionare l andamento dell ottimizzazione attraverso alcune stampe real time sul flusso di output specificato. In questa sezione verrà brevemente descritto come vengono strutturate e interpretate queste stampe, sottolineando le informazioni più importanti o utili. Innanzitutto, è necessario attivare la modalità "verbosa" legata al realtivo parametro interno: CPXsetintparam ( env, CPX_PARAM_SCRIND, CPX_ON) ; CPLEX a questo punto stamperà i progressi riguardo ciascuna fase di ottimizzazione, dal preprocessing alla risoluzione dei singoli nodi, fornendo informazioni sul modello e sull albero di ricorsione. Dal momento che CPLEX implementa l algoritmo branch-and-cut, è in grado di gestire una coda di nodi, all interno della quale sono contenuti quelli che devono essere ancora elaborati. Inizialmente la coda ha zero nodi. Al termine del preprocessing il primo nodo a essere eseguito è il nodo radice, in cui verrà risolto il rilassamento continuo del problema originale. Si osserva che in queste prime fasi può darsi che il risolutore non trovi rapidamente una soluzione intera ammissibile, pertanto l unico valore a disposizione, come riferimento per l ottimalità della soluzione, è quello della miglior soluzione frazionaria disponibile. Una volta trovato il primo incumbent, il risolutore continuerà ad espandere l albero di branching aggiornando i due valori (incumbent e miglior soluzione), fino a quando la differenza tra questi non diventa accettabile (se non specificato diversamente, fino a quando tale differenza raggiunge un valore 0). Nell esempio in Figura C.1 viene riportato uno screenshot di report di un esecuzione di CPLEX.

9 C.5. OUTPUT 145 Figura C.1: Screenshot di report di un esecuzione di CPLEX: viene mostrato all utente l andamento dello sviluppo del branch-and-cut. In particolare, si deduce che l ottimizzazione abbia coinvolto circa 2400 nodi, e abbia impiegato 5.42 secondi, di cui 2.37 di processing al nodo radice e 3.05 di branch-and-cut. Come si nota, il report mostra diversi dati relativi alla risoluzione di ciascun nodo: node: l indice del nodo. Un valore uguale a 0 indica una fase di processing a livello della radice. Prima di tale valore può essere presente un asterisco (*), indicante che il valore incumbent è stato aggiornato Nodes Left: il numero di nodi ancora da processare Objective: valore della funzione obiettivo al nodo, o nel caso in cui un nodo e il suo albero vengono scartati, la ragione del pruning Best Integer: se non vuoto, indica il valore della miglior soluzione intera trovata fino a questo momento Cuts/Best Bound: il miglior objective trovato fino a questo momento. In caso di generazione di tagli di un unico genere, nella colonna viene scritto Cuts o il nome della loro famiglia ItCnt: somma del numero di iterazioni dell algoritmo del simplesso, nei nodi eseguiti fino ad ora Gap: dissimilarità percentuale tra Best Bound e Best Integer

10 146 APPENDICE C. CPLEX E PRINCIPALI FUNZIONI

11 Appendice D Concorde Poichè, rispetto a CPLEX, la documentazione disponibile online per Concorde è meno abbondante, si conclude commentando brevemente le due funzioni di libreria utilizzate all interno del progetto. Le funzioni di Concorde impiegate sono state la CCcut_connect_components e la CCcut_violated_- cuts. D.1 Funzioni utilizzate CCcut_connect_components La funzione CCcut_connect_components è stata utilizzata come funzione di SecSeparation all interno del Metodo Loop e all interno della LazyConstraint- Callback per il riconoscimento delle componenti connesse in una soluzione intera. Essa riceve i seguenti sette parametri (i primi quattro di input e gli ultimi tre di output): int ncount: numero di nodi del grafo n int ecount: numero di nodi del grafo, rispettivamente pari a n (n 1) 2 int *elist: è un vettore di lunghezza ecount che specifica i vertici di ciascun lato. Al momento della creazione di tale vettore è necessario tenere presente come è stato generato il vettore delle variabili della soluzione (x), per far corrispondere ogni lato al valore rispettivo double *x: la soluzione di cui calcolare le componenti int *ncomp: il numero di componenti connesse int **compscount: un vettore di vettori contenenti il numero di nodi per ciascuna componente connessa, in modo che compscount[i] contenga il numero di nodi presenti nell i-esima componente connessa. Non è necessario che l utente costruisca tale vettore da passare come parametro, sarà il metodo stesso a crearlo efficientemente a run time 1 int **comps: un vettore di vettori contenenti gli indici dei nodi presenti all interno delle componenti; valgono le stesse considerazioni esposte precedentemente. 1 Poichè il numero di componenti connesse non è noto a run time, se ncessario, l utente dovrà stimare sia tale valore che il numero di nodi per componente: ponendo ragionevolmente che una componente sia formata almeno da tre nodi, si avrà che il numero massimo di componenti sarà n 3 e il numero massimo di nodi per componente n

12 148 APPENDICE D. CONCORDE CCcut_violated_cuts La funzione CCcut_violated_cuts è stata utilizzata come funzione di ricerca di sezioni di capacità inferiore a una certa soglia all interno della UserCutCallback. Essa riceve i seguenti sette parametri: int ncount, int ecount, int *elist: definiti ugualmente a quanto spiegato per CCcut_- connect_components double *dlen: lista delle capacità dei lati, ovvero il vettore soluzione double cutoff: valore di soglia per determinare se un taglio è violato o meno: nel caso del problema del TSP, tale valore è impostato a (2 - EPSILON) dove EPSILON deve essere pensato in modo che un taglio violato risulti effettivamente tale durante sia l esecuzione del metodo che, una volta aggiunto al modello (durante l ottimizzazione (tipicamente EPSILON = 0.1)). Per EPSILON troppo piccoli, è possibile che la funzione rilevi il taglio violato, ma che venga poi ignorato (e quindi possibilmente non soddisfi la nuova soluzione) dal risolutore, poichè la sua soglia di tolleranza interna è maggiore di tale valore: la funzione all iterazione successiva riscontrerà nuovamente il medesimo taglio e il sistema sarebbe soggetto a un loop int (*doit_fn) (double, int,int *, void *): funzione callback da eseguire ogni qualvolta venga trovato un taglio violato; in particolare la callback passerà come parametri il valore del taglio, il numero di nodi, l indice dei nodi e la struttura dati fornita in input dall utente in pass_param void *pass_param: struttura dati passata dall utente, tipicamente la stessa o una simile a quella utilizzata per memorizzare i vincoli trovati da una funzione di SecSeparation Quindi il funzionamente della routine prevede che ogni volta che un taglio viene trovato, venga passato all utente tramite la callback doit_fn, che a sua volta lo potrà inserire nel nuovo insieme di tagli da aggiungere al modello. Poichè durante la sua esecuzione il metodo suppone che la soluzione rappresenti un grafo connesso, è necessario effettuare tale controllo prima di eseguire la routine (per esempio eseguendo CCcut_connect_components e verificando il valore ncomp), o gestire il caso di un errore di ritorno 2. D.2 Esempio di utilizzo Si riportano in questa sezione dei brevi code snippets al fine di fornire un semplice esempio di possibile utilizzo delle funzioni presentate precedentemente. Per prima cosa, si precisa che Concorde è resa disponibile tramite una libreria statica. Tali tipi di librerie rappresentano cataloghi di moduli oggetto collezionati in un unico contenitore e vengono installati direttamente nell eseguibile del programma (senza richiedere la ricompilazione dei loro sorgenti). 2 É necessario effettuare il controllo anche nel caso in cui alla funzione venga sempre passato il grafo completo, in quanto i lati con capacità nulla non vengono considerati.

13 D.2. ESEMPIO DI UTILIZZO 149 Di seguito si riporta un esempio di possibile integrazione della libreria Concorde nella compilazione dell eseguibile all interno di un MakeFile: CONCORDELIB =/path/to/concorde... CCDIR =/path/to/concorde... CFLAGS=-I$(IDIR) -I${CPLEX_HOME}/include/ilcplex -I${CCDIR}... LIBS = -L${CPLEX_HOME}/lib/x86-64_linux/static_pic -L. -lcplex -lm -lpthread ${CONCORDELIB}/concorde.a... main: $(OBJ) gcc -o $@ $^ $(CFLAGS) $(LIBS) All interno del codice, per utilizzare le funzioni di tutti i moduli della libreria Concorde è necessario includerla tramite #include <concorde.h>. In questo caso, dato che le funzioni di interesse appartengono a un modulo solo, basterà #include <cut.h>. La funzione CCcut_connect_components è utilizzata per la ricerca di componenti connesse, e viene anche usata all interno della UserCutCallback (vedi Listing D.1) allo scopo di determinare se una soluzione sia connessa o no, come descritto precedentemente.... i f ( CCcut_connect_components ( i n s t >nnodes, nedge, e l i s t, xstar, &ncomp, &compscount, &comps ) ) p r i n t _ e r r o r ( "Error during concorde connect comps algortihm!" ) ;... i f (ncomp = = 1) i f ( CCcut_violated_cuts ( i n s t >nnodes, nedge, e l i s t, xstar, 2. 0 EPSILON, doit_fn_concorde, ( void ) &in ) ) p r i n t _ e r r o r ( " error in CCcut_violated_cuts" ) ;... Listing D.1: Porzione di codice della callback UserCutCallback Per quanto riguarda i parametri passati alle funzioni, possono essere ricavati nel seguente modo: // numero di a r c h i i n t nedge = i n s t >nnodes ( i n s t >nnodes 1) / 2 ; // s t r u t t u r a e l i s t

14 150 APPENDICE D. CONCORDE i n t e l i s t [ nedge 2 ] ; i n t i, j ; i n t l o a d e r = 0 ; f o r ( i = 0 ; i < i n s t >nnodes ; ++i ) f o r ( j = i + 1 ; j < i n s t >nnodes ; ++j ) { e l i s t [ l o a d e r++] = i ; e l i s t [ l o a d e r++] = j ; } // s t r u t t u r e per l e componenti i n t ncomp = 0 ; i n t comps = ( i n t ) malloc ( i n s t >nnodes s i z e o f ( i n t ) ) ; i n t compscount = ( i n t ) malloc ( i n s t >nnodes s i z e o f ( i n t ) ) ; La doit_fn_concorde è stata instanziata come segue: i n t doit_fn_concorde ( double cutval, i n t cutcount, i n t cut, void inparam ) Al suo interno, il taglio generato verrà creato ed aggiunto al modello di CPLEX. É utile a tal proposito costruire una struttura dati appositamente creata per l integrazione con tale callback: typedef s t r u c t { i n s t a n c e i n s t ; CPXCENVptr env ; void cbdata ; i n t wherefrom ; i n t useraction_p ; } input ; Come si nota, si tratta principalmente di impacchettare e passare gli stessi parametri necessari alla UserCutCallback di CPLEX (env, cbdata, wherefrom, useraction_p), includendo le informazioni sull istanza (inst).

3.4 Metodo di Branch and Bound

3.4 Metodo di Branch and Bound 3.4 Metodo di Branch and Bound Consideriamo un generico problema di Ottimizzazione Discreta dove X è la regione ammissibile. (P ) z = max{c(x) : x X} Metodologia generale di enumerazione implicita (Land

Dettagli

Il Branch & Bound. Definizione 1. Sia S R n. La famiglia S = {S 1, S 2,..., S k S} tale che S 1 S 2 S k = S viene detta suddivisione di S.

Il Branch & Bound. Definizione 1. Sia S R n. La famiglia S = {S 1, S 2,..., S k S} tale che S 1 S 2 S k = S viene detta suddivisione di S. Il Branch & Bound Il metodo Branch & Bound è una tecnica che permette di risolvere all ottimo un generico problema di Programmazione Lineare Intera. Tale metodo si basa su due concetti cardine: quello

Dettagli

RICERCA OPERATIVA (a.a. 2016/17) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2016/17) Nome: Cognome: Matricola: Secondo appello //0 RICERCA OPERATIVA (a.a. 0/) Nome: Cognome: Matricola: ) Si risolva il seguente problema di PL max x x x x x + x x x per via algebrica, mediante l algoritmo del Simplesso Primale a partire

Dettagli

1 Il metodo dei tagli di Gomory

1 Il metodo dei tagli di Gomory Il metodo dei tagli di Gomory Esercizio Sia dato il problema min(x x ) x + x (P 0 ) x + x x, x 0, interi. Calcolare la soluzione ottima applicando il metodo dei tagli di Gomory. Risoluzione Per applicare

Dettagli

RICERCA OPERATIVA (a.a. 2018/19) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2018/19) Nome: Cognome: Matricola: Primo appello //9 RICERCA OPERATIVA (a.a. /9) Nome: Cognome: Matricola: ) Si risolva il seguente problema di PL max x + x x + x x + x x x x x applicando l algoritmo del Simplesso Primale, per via algebrica,

Dettagli

Quinto appello 27/6/ = 4. B b B = 2 b N = 4

Quinto appello 27/6/ = 4. B b B = 2 b N = 4 Quinto appello // RICERCA OPERATIVA (a.a. /) Nome: Cognome: Matricola: ) Si risolva il problema di PL dato applicando l algoritmo del Simplesso Duale, per via algebrica, a partire dalla base B {, }. Per

Dettagli

Massimo flusso e matching

Massimo flusso e matching Capitolo Massimo flusso e matching. Problema del massimo matching. Nel problema del massimo matching è dato un grafo non orientato G(V, A); un matching in G è un insieme di archi M A tale che nessuna coppia

Dettagli

Programmazione Lineare Intera (ILP)

Programmazione Lineare Intera (ILP) Programmazione Lineare Intera (ILP) (P) min (x), x F Z : R n ->R è lineare: (x) = c, x = c 1 x 1 + c 2 x 2 +... + c n x n F R n è definito da : g i (x) 0 (i = 1,...,m), con g i : R n R lineare i Z insieme

Dettagli

METODI DELLA RICERCA OPERATIVA

METODI DELLA RICERCA OPERATIVA Università degli Studi di Cagliari FACOLTA' DI INGEGNERIA CORSO DI METODI DELLA RICERCA OPERATIVA Dott.ing. Massimo Di Francesco (mdifrance@unica.it) i i Dott.ing. Maria Ilaria Lunesu (ilaria.lunesu@unica.it)

Dettagli

RICERCA OPERATIVA (a.a. 2018/19)

RICERCA OPERATIVA (a.a. 2018/19) Secondo appello //9 RICERCA OPERATIVA (a.a. 8/9) Nome: Cognome: Matricola: ) Si consideri il seguente problema di PL: min y + y y y y y = y + y y = y, y, y, y Si verifichi se la soluzione ȳ =,,, sia ottima

Dettagli

COMPITO DI RICERCA OPERATIVA. max 5 2x 1 + 3x 2 x 3 = 2 + x 1 5x 2 x 4 = 5 + x 2. x 5 = 1 + x 1 x 2

COMPITO DI RICERCA OPERATIVA. max 5 2x 1 + 3x 2 x 3 = 2 + x 1 5x 2 x 4 = 5 + x 2. x 5 = 1 + x 1 x 2 COMPITO DI RICERCA OPERATIVA ESERCIZIO. ( punti) La riformulazione di un problema di PL rispetto alla base B = {x, x, x } è la seguente: max 2x + x 2 x = 2 + x x 2 x = + x 2 x = 2 + x + x 2 x, x 2, x,

Dettagli

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 20 giugno 2014

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 20 giugno 2014 A Ricerca Operativa 1 Seconda prova intermedia Un tifoso di calcio in partenza da Roma vuole raggiungere Rio De Janeiro per la finale del mondiale spendendo il meno possibile. Sono date le seguenti disponibilità

Dettagli

Il valore di flusso che si ottiene è

Il valore di flusso che si ottiene è 1) Si consideri un insieme di piste da sci e di impianti di risalita. Lo si modelli con un grafo orientato che abbia archi di due tipi: tipo D (discesa e orientato nel senso della discesa) e tipo R (risalita

Dettagli

RICERCA OPERATIVA (a.a. 2016/17) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2016/17) Nome: Cognome: Matricola: Sesto appello // RICERCA OPERATIVA (a.a. /) Nome: Cognome: Matricola: ) Si risolva il seguente problema di PL max x x x x x x + x x per via algebrica, mediante l algoritmo del Simplesso Primale a partire

Dettagli

RICERCA OPERATIVA (a.a. 2015/16) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2015/16) Nome: Cognome: Matricola: o Appello 8// RICERCA OPERATIVA (a.a. /) Nome: Cognome: Matricola: ) Si risolva il seguente problema di PL max x x x x x x + x x per via algebrica, mediante l algoritmo del Simplesso Primale a partire

Dettagli

Domini di funzioni di due variabili. Determinare i domini delle seguenti funzioni di due variabili (le soluzioni sono alla fine del fascicolo):

Domini di funzioni di due variabili. Determinare i domini delle seguenti funzioni di due variabili (le soluzioni sono alla fine del fascicolo): UNIVERSITA DEGLI STUDI DI SALERNO C.d.L. in INGEGNERIA GESTIONALE Esercizi di Ricerca Operativa Prof. Saverio Salerno Corso tenuto nell anno solare 2009 I seguenti esercizi sono da ritenersi di preparazione

Dettagli

COMPITO DI RICERCA OPERATIVA APPELLO DEL 08/01/04

COMPITO DI RICERCA OPERATIVA APPELLO DEL 08/01/04 COMPITO DI RICERCA OPERATIVA APPELLO DEL 08/01/04 Esercizio 1 Si risolva con il metodo branch-and-bound il seguente problema di PLI max x 1 + x 4x 1 + x + x = 0 x 1 + x + x 4 = x 1, x, x, x 4 0 x 1, x,

Dettagli

Figura 1: 1) Si scriva la formulazione del problema come problema di PLI (con un numero minimo di vincoli) e la matrice dei vincoli.

Figura 1: 1) Si scriva la formulazione del problema come problema di PLI (con un numero minimo di vincoli) e la matrice dei vincoli. ESERCIZIO 1 Sia dato il grafo orientato in Figura 1. Si consideri il problema di flusso a 1 2 4 Figura 1: costo minimo su tale grafo con b 1 = 4 b 2 = 2 b = b 4 = e c 12 = 2 c 1 = 4 c 14 = 1 c 2 = 1 c

Dettagli

RICERCA OPERATIVA (a.a. 2015/16) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2015/16) Nome: Cognome: Matricola: o Appello // RICERCA OPERATIVA (a.a. /) Nome: Cognome: Matricola: ) Si consideri il seguente problema di PL: max x + x x x x x x + x x Si applichi l algoritmo del Simplesso Duale, per via algebrica, a

Dettagli

RICERCA OPERATIVA (a.a. 2014/15) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2014/15) Nome: Cognome: Matricola: o Appello // RICERCA OPERATIVA (a.a. /) Nome: Cognome: Matricola: ) Si risolva il seguente problema di PL max x x x + x x x x x x applicando l algoritmo del Simplesso Primale per via algebrica a partire

Dettagli

RICERCA OPERATIVA (a.a. 2017/18) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2017/18) Nome: Cognome: Matricola: Sesto appello 7/7/8 RICERCA OPERATIVA (a.a. 7/8) Nome: Cognome: Matricola: ) Si risolva il seguente problema di PL applicando l algoritmo del Simplesso Duale, per via algebrica, a partire dalla base B

Dettagli

Introduzione al Column Generation Caso di Studio: il Bin Packing Problem

Introduzione al Column Generation Caso di Studio: il Bin Packing Problem Introduzione al Column Generation Caso di Studio: il Bin Packing Problem November 15, 2014 1 / 26 Introduzione Il column generation è una metodologia che può essere usata per risolvere problemi di ottimizzazione

Dettagli

1) Data la seguente istanza di TSP (grafo completo con 5 nodi): c 12 = 52; c 13 = 51; c 14 = 40; c 15 = 53; c 23 = 44;

1) Data la seguente istanza di TSP (grafo completo con 5 nodi): c 12 = 52; c 13 = 51; c 14 = 40; c 15 = 53; c 23 = 44; 1) Data la seguente istanza di TSP (grafo completo con 5 nodi): c 12 = 52; c 13 = 51; c 14 = 40; c 15 = 53; c 23 = 44; c 24 = 15; c 25 = 12; c 34 = 32; c 35 = 55; c 45 = 24 Si calcoli l ottimo duale (formulazione

Dettagli

COMPITO DI RICERCA OPERATIVA. min 2x 1 x 2 + x 3 x 4 x 1 x 2 + x 3 + x 4 = 5 x 1 + x 2 + x 3 3. x 1, x 2, x 3, x 4, x 5 I

COMPITO DI RICERCA OPERATIVA. min 2x 1 x 2 + x 3 x 4 x 1 x 2 + x 3 + x 4 = 5 x 1 + x 2 + x 3 3. x 1, x 2, x 3, x 4, x 5 I COMPITO DI RICERCA OPERATIVA ESERCIZIO. (8 punti) Sia dato il seguente problema di PL: min x x + x x 4 x x + x + x 4 = 5 x + x + x x, x, x, x 4 0 Lo si trasformi in forma standard ( punto). Si determini

Dettagli

FACOLTA DI ECONOMIA ESAME SCRITTO DI RICERCA OPERATIVA. Verona, 5 Febbraio , : ; ;,, trovare il punto di

FACOLTA DI ECONOMIA ESAME SCRITTO DI RICERCA OPERATIVA. Verona, 5 Febbraio , : ; ;,, trovare il punto di Verona, Febbraio 99 ) Dato il problema min( cx + cx ) x+ x x = x + x x = ax + x x = x i 0 i =,... a) dire, giustificando, per quali valori di c, c ed a in una soluzione ammissibile si ha x =x =/; la soluzione

Dettagli

COMPITO DI RICERCA OPERATIVA APPELLO DEL 07/04/04

COMPITO DI RICERCA OPERATIVA APPELLO DEL 07/04/04 COMPITO DI RICERCA OPERATIVA APPELLO DEL 07/04/04 Esercizio 1 1)Dato il seguente problema di PL: max 2x 1 x 2 x 1 + x 2 2 x 1 + 2x 2 7 x 1 + x 2 1 x 1, x 2 0 trasformarlo in forma standard (2 punti) 2)

Dettagli

5.3 Metodo dei piani di taglio

5.3 Metodo dei piani di taglio 5.3 Metodo dei piani di taglio (PLI) min s.v. c T x Ax b x interi X Ipotesi: a ij, c j e b i interi Osservazione: La regione ammissibile di un PLI può essere descritta mediante dei vincoli più o meno stringenti

Dettagli

I Appello Ricerca Operativa 2 bis Compito A

I Appello Ricerca Operativa 2 bis Compito A I Appello Ricerca Operativa 2 bis Compito A Cognome e nome:. Esercizio 1. Si consideri il problema del matching di cardinalità massima in un grafo G ed il suo problema di decisione associato: esiste un

Dettagli

RICERCA OPERATIVA (a.a. 2011/12) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2011/12) Nome: Cognome: Matricola: 5 o Appello 8/0/0 RICERCA OPERATIVA (a.a. 0/) Nome: Cognome: Matricola: ) Si individui un albero dei cammini minimi di radice sul grafo in figura, utilizzando l algoritmo più appropriato dal punto di vista

Dettagli

4. Programmazione Lineare Intera

4. Programmazione Lineare Intera . Programmazione Lineare Intera Programmazione Lineare Intera (ILP) A(m n), b(m), c(n) interi; ILP in forma standard: min c x Ax = b x x intero Forma canonica, forma generale, trasformazioni: come LP.

Dettagli

Esame di Ricerca Operativa del 22/01/18

Esame di Ricerca Operativa del 22/01/18 Esame di Ricerca Operativa del /0/8 (Cognome) (Nome) (Numero di Matricola) Esercizio. Un azienda informatica produce tre tipi di processori P, P, P nelle sedi S, S, S. La capacitá di produzione settimanale

Dettagli

COMPITO DI RICERCA OPERATIVA. max x 1 + 2x 2 + x 3 x 1 x 2 + x 3 = 1 2x 1 + 3x 2 + x 4 = 2

COMPITO DI RICERCA OPERATIVA. max x 1 + 2x 2 + x 3 x 1 x 2 + x 3 = 1 2x 1 + 3x 2 + x 4 = 2 COMPITO DI RICERCA OPERATIVA ESERCIZIO. (9 punti) Sia dato il seguente problema di PL: max x + 2x 2 + x 3 x x 2 + x 3 = 2x + 3x 2 + x 4 = 2 x, x 2, x 3, x 4 0 Si determini il duale del problema ( punto).

Dettagli

Parte III: Algoritmo di Branch-and-Bound

Parte III: Algoritmo di Branch-and-Bound Parte III: Algoritmo di Branch-and-Bound Sia Divide et Impera z* = max {c T x : x S} (1) un problema di ottimizzazione combinatoria difficile da risolvere. Domanda: E possibile decomporre il problema (1)

Dettagli

COMPITO DI RICERCA OPERATIVA. max 3x 1 + 2x 2 x x 2 + x 3 = 4 2x 1 + x 2 + x 4 = 3

COMPITO DI RICERCA OPERATIVA. max 3x 1 + 2x 2 x x 2 + x 3 = 4 2x 1 + x 2 + x 4 = 3 COMPITO DI RICERCA OPERATIVA ESERCIZIO 1. (7 punti) Sia dato il seguente problema di PL: max 3x 1 + 2x 2 x 1 + 1 2 x 2 + x 3 = 4 2x 1 + x 2 + x 4 = 3 Lo si risolva con l algoritmo che si ritiene più opportuno

Dettagli

COMPITO DI RICERCA OPERATIVA. max x 1 + x 2 x 1 2x 2 + x 3 = 4 x 1 x 2 x 3 = 3 x 2 + 2x 3 = 1 x 1, x 2, x 3 0

COMPITO DI RICERCA OPERATIVA. max x 1 + x 2 x 1 2x 2 + x 3 = 4 x 1 x 2 x 3 = 3 x 2 + 2x 3 = 1 x 1, x 2, x 3 0 COMPITO DI RICERCA OPERATIVA ESERCIZIO. (5 punti) Sia dato il seguente problema di PL: max x + x 2 x 2x 2 + x 3 = 4 x x 2 x 3 = 3 x 2 + 2x 3 = x, x 2, x 3 0 Utilizzando il metodo due fasi, si stablisca

Dettagli

x 1 x 2 x 3 x 5 La base iniziale è B 0 = I e risulta x B 0 = , x N 0 = Iterazione 0. Calcolo dei costi ridotti. γ 0 = c N 0 (N 0 ) T c B 0 =

x 1 x 2 x 3 x 5 La base iniziale è B 0 = I e risulta x B 0 = , x N 0 = Iterazione 0. Calcolo dei costi ridotti. γ 0 = c N 0 (N 0 ) T c B 0 = 56 IL METODO DEL SIMPLESSO 7.4 IL METODO DEL SIMPLESSO In questo paragrafo sono riportati alcuni esercizi risolti sul metodo del simplesso. Alcuni sono risolti utilizzando la procedura di pivot per determinare,

Dettagli

Esame di Ricerca Operativa del 18/06/18

Esame di Ricerca Operativa del 18/06/18 Esame di Ricerca Operativa del 8/0/8 (Cognome) (Nome) (Numero di Matricola) Esercizio. Completare la seguente tabella considerando il problema di programmazione lineare: max x x x +x x x x +x x x x + x

Dettagli

Esame di Ricerca Operativa del 22/01/18

Esame di Ricerca Operativa del 22/01/18 Esame di Ricerca Operativa del /0/8 (Cognome) (Nome) (Numero di Matricola) Esercizio. Un azienda informatica produce tre tipi di processori P, P, P nelle sedi S, S, S. La capacitá di produzione settimanale

Dettagli

Tecniche di Decomposizione per Programmazione Lineare Intera (Mista)

Tecniche di Decomposizione per Programmazione Lineare Intera (Mista) Tecniche di Decomposizione per Programmazione Lineare Intera (Mista) Domenico Salvagnin 2011-06-12 1 Introduzione Dato un problema di programmazione lineare intera (mista), non è sempre possibile (o conveniente)

Dettagli

Esercizi sulla Programmazione Lineare Intera

Esercizi sulla Programmazione Lineare Intera Soluzioni 4.7-4.0 Fondamenti di Ricerca Operativa Prof. E. Amaldi Esercizi sulla Programmazione Lineare Intera 4.7 Algoritmo del Simplesso Duale. Risolvere con l algoritmo del simplesso duale il seguente

Dettagli

Gestione della produzione e della supply chain Logistica distributiva. Paolo Detti Dipartimento di Ingegneria dell Informazione Università di Siena

Gestione della produzione e della supply chain Logistica distributiva. Paolo Detti Dipartimento di Ingegneria dell Informazione Università di Siena Gestione della produzione e della supply chain Logistica distributiva Paolo Detti Dipartimento di Ingegneria dell Informazione Università di Siena Un algoritmo per il flusso a costo minimo: il simplesso

Dettagli

Ottimizzazione Combinatoria 2 Presentazione

Ottimizzazione Combinatoria 2 Presentazione Ottimizzazione Combinatoria Presentazione ANTONIO SASSANO Università di Roma La Sapienza Dipartimento di Informatica, Automatica e Gestionale «Antonio Ruberti» Roma, Febbraio Prerequisiti (cosa sapete)

Dettagli

Esame di Ricerca Operativa del 11/02/2015

Esame di Ricerca Operativa del 11/02/2015 Esame di Ricerca Operativa del /0/0 (Cognome) (Nome) (Matricola) Esercizio. Un azienda produce tipi di TV (, 0, 0 e pollici) ed è divisa in stabilimenti (A e B). L azienda dispone di 0 operai in A e 0

Dettagli

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015 1 Lunedí 20 Aprile 2015 1 Istituto di Analisi dei Sistemi ed Informatica IASI - CNR Rilassamento di un problema Rilassare un problema di Programmazione Matematica vuol dire trascurare alcuni (tutti i)

Dettagli

5.1 Metodo Branch and Bound

5.1 Metodo Branch and Bound 5. Metodo Branch and Bound Consideriamo un generico problema di ottimizzazione min{ c(x) : x X } Idea: Ricondurre la risoluzione di un problema difficile a quella di sottoproblemi più semplici effettuando

Dettagli

RICERCA OPERATIVA (a.a. 2017/18) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2017/18) Nome: Cognome: Matricola: Primo appello 9//8 RICERCA OPERATIVA (a.a. 7/8) Nome: Cognome: Matricola: ) Si risolva il seguente problema di PL max x + x x + x x x x x applicando l algoritmo del Simplesso Primale, per via algebrica,

Dettagli

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione

Dettagli

RICERCA OPERATIVA (a.a. 2017/18) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2017/18) Nome: Cognome: Matricola: Appello straordinario //8 RICERCA OPERATIVA (a.a. 7/8) Nome: Cognome: Matricola: ) Si consideri il seguente problema di PL: max x + x x x x x x + x x Si applichi l algoritmo del Simplesso Duale, per via

Dettagli

Esame di Ricerca Operativa del 19/01/2016

Esame di Ricerca Operativa del 19/01/2016 Esame di Ricerca Operativa del 19/01/201 (Cognome) (Nome) (Matricola) Esercizio 1. Una banca offre ai suoi clienti diversi tipi di prestito: mutuo casa, credito auto, credito famiglia, che rendono un interesse

Dettagli

L Allocazione Dinamica della Memoria

L Allocazione Dinamica della Memoria L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento

Dettagli

5.1 Metodo Branch and Bound

5.1 Metodo Branch and Bound 5. Metodo Branch and Bound Si consideri il problema min{ c(x) : x X } Idea: Ricondurre la risoluzione di un problema difficile a quella di sottoproblemi più semplici effettuando una partizione (ricorsiva)

Dettagli

Una breve introduzione all implementazione in C di algoritmi su grafo

Una breve introduzione all implementazione in C di algoritmi su grafo Una breve introduzione all implementazione in C di algoritmi su grafo A cura di Gianmaria Leo Introduzione La lezione è un introduzione a concetti e strumenti che permettono l implementazione di algoritmi

Dettagli

RICERCA OPERATIVA (a.a. 2014/15) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2014/15) Nome: Cognome: Matricola: 7 o Appello /9/ RICERCA OPERATIVA (a.a. /) Nome: Cognome: Matricola: ) Si consideri il seguente problema di PL max x x x x x x + x 6 x e la corrispondente soluzione x = [,. Utilizzando il teorema degli

Dettagli

Programmazione Lineare Intera. Programmazione Lineare Intera p. 1/4

Programmazione Lineare Intera. Programmazione Lineare Intera p. 1/4 Programmazione Lineare Intera Programmazione Lineare Intera p. 1/4 Programmazione Lineare Intera Problema di PLI in forma standard: max cx Ax = b x 0, x I n I insieme degli interi. Regione ammissibile:

Dettagli

Esame di Ricerca Operativa del 6/2/18. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare:

Esame di Ricerca Operativa del 6/2/18. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare: Esame di Ricerca Operativa del //8 (Cognome) (Nome) (Numero di Matricola) Esercizio. Completare la seguente tabella considerando il problema di programmazione lineare: min y +9 y + y +9 y + y + y y + y

Dettagli

RICERCA OPERATIVA (a.a. 2008/09) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2008/09) Nome: Cognome: Matricola: o Appello /09/009 RICERCA OPERATIVA (a.a. 008/09) Nome: Cognome: Matricola: ) Si applichi l algoritmo di Kruskal per determinare un albero di copertura di costo minimo sul grafo in figura. Per ogni iterazione

Dettagli

Algoritmo Branch and Cut (B&C)

Algoritmo Branch and Cut (B&C) Programmazione Lineare Intera: III Algoritmo Branch and Cut Daniele Vigo DEIS Università di Bologna dvigo@deisuniboit rev.0 aprile 2005 Algoritmo Branch and Cut (B&C) Sviluppato negli anni 90, nasce come

Dettagli

RICERCA OPERATIVA (a.a. 2017/18) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2017/18) Nome: Cognome: Matricola: Terzo appello //8 RICERCA OPERATIVA (a.a. 7/8) Nome: Cognome: Matricola: ) Si risolva il seguente problema di PL max x x x x x x x x x applicando l algoritmo del Simplesso Primale, per via algebrica, a

Dettagli

Esame di Ricerca Operativa del 19/01/2016

Esame di Ricerca Operativa del 19/01/2016 Esame di Ricerca Operativa del 9/0/06 (Cognome) (Nome) (Matricola) Esercizio. Una banca offre ai suoi clienti diversi tipi di prestito: mutuo casa, credito auto, credito famiglia, che rendono un interesse

Dettagli

Esame di Ricerca Operativa del 07/06/2019

Esame di Ricerca Operativa del 07/06/2019 Esame di Ricerca Operativa del 0/0/09 (Cognome) (Nome) (Numero di Matricola) Esercizio. (a) Risolvere il seguente problema di programmazione lineare applicando l algoritmo del simplesso duale: min y y

Dettagli

Esame di Ricerca Operativa del 25/06/12

Esame di Ricerca Operativa del 25/06/12 Esame di Ricerca Operativa del /0/ Cognome) Nome) Corso di laurea) Esercizio. Completare la seguente tabella considerando il problema di programmazione lineare: max x x x x x + x x x 8 x x x + x x x Base

Dettagli

Esame di Ricerca Operativa del 08/09/17

Esame di Ricerca Operativa del 08/09/17 Esame di Ricerca Operativa del 08/09/ (Cognome) (Nome) (Numero di Matricola) Esercizio. Una dieta giornaliera consiste di tre cibi C, C e C, che vengono assunti nella quantità complessiva di 00 grammi.

Dettagli

Gestione della produzione e della supply chain Logistica distributiva

Gestione della produzione e della supply chain Logistica distributiva Gestione della produzione e della supply chain Logistica distributiva Paolo Detti Dipartimento di Ingegneria dell Informazione e Scienze Matematiche Università di Siena Convergenza dell algoritmo Se non

Dettagli

Macchine parallele M 1 M 2 M 3 J 1 J 2 LAVORI J 3 J 4

Macchine parallele M 1 M 2 M 3 J 1 J 2 LAVORI J 3 J 4 Macchine parallele M 1 J 1 J 2 LAVORI M 2 J 3 J 4 M 3 Macchine parallele Scheduling su macchine parallele scorrelate R C max Descrizione del problema n lavori devono essere processati da m macchine diverse

Dettagli

Esame di Ricerca Operativa del 04/02/16. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare:

Esame di Ricerca Operativa del 04/02/16. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare: Esame di Ricerca Operativa del 0/0/ (Cognome) (Nome) (Corso di laurea) Esercizio. Completare la seguente tabella considerando il problema di programmazione lineare: min y + y + y + y + y + y y y +y y +

Dettagli

Programmazione a numeri interi: il metodo del Branch and Bound

Programmazione a numeri interi: il metodo del Branch and Bound Programmazione a numeri interi: il metodo del Branch and Bound L. De Giovanni G. Zambelli Un problema di programmazione lineare intera è una problema della forma z I = maxc T x Ax b x 0 x i Z, i I. (1)

Dettagli

COMPITO DI RICERCA OPERATIVA. max 8 5x 1 3x 2 x 3 = 1 + 4x 1 + x 2 x 4 = 1 x 1 + x 2 x 5 = 5 x 1 x 2

COMPITO DI RICERCA OPERATIVA. max 8 5x 1 3x 2 x 3 = 1 + 4x 1 + x 2 x 4 = 1 x 1 + x 2 x 5 = 5 x 1 x 2 COMPITO DI RICERCA OPERATIVA ESERCIZIO. (5 punti) Dato un problema di PL, la sua riformulazione rispetto alla base B = {x 3, x, x 5 } é la seguente: max 8 5x 3x x 3 = + x + x x = x + x x 5 = 5 x x Solo

Dettagli

Esame di Ricerca Operativa del 19/02/2019. Esercizio 1. Risolvere il seguente problema di programmazione lineare applicando l algoritmo del simplesso:

Esame di Ricerca Operativa del 19/02/2019. Esercizio 1. Risolvere il seguente problema di programmazione lineare applicando l algoritmo del simplesso: Esame di Ricerca Operativa del 9/0/09 (Cognome) (Nome) (Numero di Matricola) Esercizio. Risolvere il seguente problema di programmazione lineare applicando l algoritmo del simplesso: max x x x 0 x + x

Dettagli

RICERCA OPERATIVA (a.a. 2012/13) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2012/13) Nome: Cognome: Matricola: o Appello 7// RICERCA OPERATIVA (a.a. /) Nome: Cognome: Matricola: ) Si individui un albero dei cammini minimi di radice sul grafo in figura utilizzando l algoritmo più appropriato dal punto di vista della

Dettagli

Metodi e Modelli per l Ottimizzazione Combinatoria Cover inequalities

Metodi e Modelli per l Ottimizzazione Combinatoria Cover inequalities Metodi e Modelli per l Ottimizzazione Combinatoria Cover inequalities L. De Giovanni M. Di Summa In questa lezione introdurremo una classe di disuguaglianze, dette cover inequalities, che permettono di

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Scopo del laboratorio

Scopo del laboratorio p. 1/1 Scopo del laboratorio Imparare ad usare programmi che implementino metodi di ottimizzazione: simplesso, branch and bound ecc. utilizzarli per risolvere un problema proposto Modellatori Solver p.

Dettagli

Esame di Ricerca Operativa del 16/02/15. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare:

Esame di Ricerca Operativa del 16/02/15. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare: Esame di Ricerca Operativa del /0/ Cognome) Nome) Corso di laurea) Esercizio. Completare la seguente tabella considerando il problema di programmazione lineare: min y + y +0 y +0 y +y + y y y +y y y y

Dettagli

Esame di Ricerca Operativa del 15/09/14. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare:

Esame di Ricerca Operativa del 15/09/14. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare: Esame di Ricerca Operativa del /09/ Cognome) Nome) Corso di laurea) Esercizio. Completare la seguente tabella considerando il problema di programmazione lineare: max x x x x x x x x +x 9 x + x 8 x +x Base

Dettagli

3.2 Rilassamenti lineari/combinatori e bounds

3.2 Rilassamenti lineari/combinatori e bounds 3.2 Rilassamenti lineari/combinatori e bounds Consideriamo un problema di Ottimizzazione Discreta min{f(x) : x X} e sia z il valore di una soluzione ottima x X. Metodi di risoluzione spesso generano una

Dettagli

Branch and Bound. Branch and Bound p. 1/3

Branch and Bound. Branch and Bound p. 1/3 Branch and Bound Branch and Bound p. 1/3 Branch-and-bound Un esempio di problema di PLI: P 0 : max x 1 + 3x 2 (u 1 ) x 1 1 2 (u 2 ) 5x 1 + 3x 2 5 (u 3 ) x 1 + 7 5 x 2 13 2 x 1,x 2 0 x 1,x 2 I Branch and

Dettagli

A.A. 2018/2019. Fondamenti di Programmazione in MATLAB FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante

A.A. 2018/2019. Fondamenti di Programmazione in MATLAB FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante A.A. 2018/2019 Fondamenti di Programmazione in MATLAB Strutturazione del Codice Sorgente Docente Prof. Raffaele Pizzolante FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE Fondamenti di Programmazione in MATLAB:

Dettagli

Soluzione dei problemi di Programmazione Lineare Intera

Soluzione dei problemi di Programmazione Lineare Intera Fondamenti di Ricerca Operativa T-A a.a. 2014-2015 Soluzione dei problemi di Programmazione Lineare Intera Andrea Lodi, Enrico Malaguti, Daniele Vigo rev. 1.1.a ottobre 2014 Fondamenti di Ricerca Operativa

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

Esame di Ricerca Operativa del 11/07/2016

Esame di Ricerca Operativa del 11/07/2016 Esame di Ricerca Operativa del /0/01 (Cognome) (Nome) (Matricola) Esercizio 1. Un erboristeria vuole produrre una nuova tisana utilizzando tipi di tisane già in commercio. Tali tisane sono per lo più composte

Dettagli

RICERCA OPERATIVA (a.a. 2014/15) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2014/15) Nome: Cognome: Matricola: 3 o Appello /2/2 RICERCA OPERATIVA (a.a. 2/) Nome: Cognome: Matricola: ) Si risolva algebricamente il seguente problema di PL max x 2x 2 x x 2 2 x x + x 2 3 x 2 7 mediante l algoritmo del Simplesso Primale

Dettagli

Capitolo 3. Ambiente di sviluppo. 3.1 CPLEX con Visual Studio

Capitolo 3. Ambiente di sviluppo. 3.1 CPLEX con Visual Studio Capitolo 3 Ambiente di sviluppo In questo capitolo andremo ad elencare i software utilizzati nel corso della realizzazione dell applicazione, andando ad evidenziare e descrivere i passaggi da svolgere

Dettagli

Algoritmi generali per PLI

Algoritmi generali per PLI Programmazione Lineare Intera: II Algoritmo Cutting Planes Daniele Vigo D.E.I.S. Università di Bologna dvigo@deis.unibo.it rev.. ottobre Algoritmi generali per PLI Metodi esatti tradizionali (anni 6 oggi):

Dettagli

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE PROGRAMMAZIONE BIENNIO: SECONDA DISCIPLINA: INFORMATICA PIANO DI LAVORO DEL DOCENTE / RELAZIONE FINALE Anno scolastico 2014/2015 DOCENTE Prof. PAOLO ARMANI CLASSE:

Dettagli

RICERCA OPERATIVA. Tema d esame del 04/12/2008 (Simulazione 2)

RICERCA OPERATIVA. Tema d esame del 04/12/2008 (Simulazione 2) RICERCA OPERATIVA Tema d esame del 04/12/2008 (Simulazione 2) COGNOME: NOME: MATRICOLA: 1. Un azienda di telefonia mobile deve installare delle antenne per la copertura di sei zone sul territorio. Sono

Dettagli

Esercizio 1. Variabili decisionali:

Esercizio 1. Variabili decisionali: Esercizio 1 Si noti che i costi sono dati per tonnellata, mentre molti vincoli riguardano il numero di navi. Si introducono pertanto DUE tipi di variabili, uno relativo al numero di tonnellate per tipo

Dettagli

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013 Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 4 24/10/2013 Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano Macedonio, University

Dettagli

Esame di Ricerca Operativa del 17/07/17. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare:

Esame di Ricerca Operativa del 17/07/17. Esercizio 1. Completare la seguente tabella considerando il problema di programmazione lineare: Esame di Ricerca Operativa del 7/07/7 (Cognome) (Nome) (Numero di Matricola) Esercizio. Completare la seguente tabella considerando il problema di programmazione lineare: max x +x x + x x x x x x x +x

Dettagli

Esame di Ricerca Operativa del 15/01/2015

Esame di Ricerca Operativa del 15/01/2015 Esame di Ricerca Operativa del 1/01/201 (Cognome) (Nome) (Matricola) Esercizio 1. Un azienda produce palloni da calcio e da basket che vende a 1 e 20 euro rispettivamente. L azienda compra ogni settimana

Dettagli

Esame di Ricerca Operativa del 15/01/2015

Esame di Ricerca Operativa del 15/01/2015 Esame di Ricerca Operativa del 1/01/01 (Cognome) (Nome) (Matricola) Esercizio 1. Un azienda produce palloni da basket e da calcio che vende rispettivamente a 1 e euro. L azienda compra ogni settimana 00

Dettagli

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013 A UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa Seconda prova intermedia 7 giugno 0 Nome: Cognome: Matricola: Orale /06/0 ore aula N Orale 0/07/0 ore aula N

Dettagli

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015 APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 15.VI.2015 VINCENZO MARRA Indice Esercizio 1 1 Definizione dei tipi P e T, e calcolo dell area.

Dettagli

Esame di Ricerca Operativa del 12/06/18. Base x Degenere? y Indice Rapporti Indice uscente entrante

Esame di Ricerca Operativa del 12/06/18. Base x Degenere? y Indice Rapporti Indice uscente entrante Esame di Ricerca Operativa del /0/ (Cognome) (Nome) (Numero di Matricola) Esercizio. Effettuare due iterazioni dell algoritmo del simplesso duale: min y + y + y + y + y + y y y y + y +y = y y + y +y y

Dettagli

Fac-simile dell esame di Ricerca Operativa. max 7 x 1 2 x 2 3 x 1 +x 2 2 x 1 2 x 2 3 x x 1 +x x 1 x 2 5

Fac-simile dell esame di Ricerca Operativa. max 7 x 1 2 x 2 3 x 1 +x 2 2 x 1 2 x 2 3 x x 1 +x x 1 x 2 5 Fac-simile dell esame di Ricerca Operativa (Cognome) (Nome) (Numero di Matricola) Esercizio. Completare la seguente tabella considerando il problema di programmazione lineare: max x x x +x x x x x +x x

Dettagli

RICERCA OPERATIVA (a.a. 2015/16) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2015/16) Nome: Cognome: Matricola: o Appello // RICERCA OPERATIVA (a.a. /) Nome: Cognome: Matricola: ) Si consideri il seguente problema di PL: max x +x x +x x +x +x 7 x x Utilizzando il Teorema degli scarti complementari, si dimostri che

Dettagli

Algoritmi generali per PLI

Algoritmi generali per PLI Programmazione Lineare Intera: Parte II: Algoritmo Cutting Planes Daniele Vigo D.E.I.S. Università di Bologna dvigo@deis.unibo.it rev. 3.1 ottobre 23 Algoritmi generali per PLI Metodi esatti tradizionali

Dettagli

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Primo appello 30 gennaio Esercizio 1.

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Primo appello 30 gennaio Esercizio 1. A = Esercizio In tabella sono riportati gli archi di un grafo con nodi, e sono dati i costi di ogni arco. Risolvere il problema del camo imo per ogni coppia di nodi applicando l algoritmo di Floyd e Warshall.

Dettagli