Esercitazione AMPL I rev - dis.uniroma1.itor/gestionale/OC/esercitazioni/Esercitazione...

56
1 A.A. 2009-2010 Ottimizzazione Combinatoria Esercitazione AMPL Università di Roma“La Sapienza” Dipartimento di Informatica e Sistemistica Corso di Laurea in “Ingegneria Gestionale” Esercitazione a cura di Silvia Canale contatto e-mail: [email protected]

Transcript of Esercitazione AMPL I rev - dis.uniroma1.itor/gestionale/OC/esercitazioni/Esercitazione...

1

A.A. 2009-2010

Ottimizzazione CombinatoriaEsercitazione AMPL

Università di Roma“La Sapienza”Dipartimento di Informatica e SistemisticaCorso di Laurea in “Ingegneria Gestionale”

Esercitazione a cura di Silvia Canale

contatto e-mail: [email protected]

2

AMPL è un linguaggio di modellazione algebrico per problemi di programmazione matematica:

- problemi lineari e non lineari

- problemi in variabili intere e continue

AMPL in breveAMPL in breve

AMPL impiega una notazione basata su concetti semplici e di uso comune per rendere più facile il processo di modellazione di un problema.

Una volta formulato tramite il linguaggio AMPL, occorre un opportuno solutore di programmazione matematica per risolvere il problema.

L’interprete AMPL permette di risolvere un problema formulato tramite il linguaggio AMPL impiegando direttamente un solutore di programmazione matematica.

A Mathematical Programming Language

3

Solutori per AMPLSolutori per AMPLSono disponibili diversi solutori tramite l’interfaccia grafica AMPL.

La scelta del solutore dipende dal tipo di problema:

- Problemi di programmazione lineare:

con variabili continue: BPMPD, CPLEX, LAMPS, LOQO, lp_solve, MINOS, MOSEK, OSL, SOPT, XA, Xpress-MP

con variabili intere: CPLEX, LAMPS, lp_solve, MINTO, MOSEK, OSL, SOPT, XA, Xpress-MP

- Problemi di programmazione non lineare:

quadratici: CPLEX, MOSEK, OSL

convessi: MOSEK, SOPT

generali continui: CONOPT, DONLP2, FILTER, FSQP, IPOPT, KNITRO, LANCELOT, LOQO, MINOS, NPSOL, PENNON, SNOPT

generali interi: MINLP

In questo corso utilizzeremo l’interprete AMPL ed il solutore CPLEX, versione student.

4

AMPL – Sito ufficiale: www.ampl.comTutte le informazioni relative ad AMPL si trovano sul sito ufficiale

SoftwareSoftware

AMPL – Pagina per il download dell’interfaccia grafica:

www.ampl.com/GUI/expermt.htmlSono disponibili tre diverse interfacce grafiche in versione sperimentale.

AMPL – Pagina per il download dell’interprete APML e dei solutori:

www.ampl.com/DOWNLOADS/index.htmlLa pagina contiene:

- Istruzione per il download (quick start per Windows e Unix);

- software eseguibile dell’interprete AMPL;

- software eseguibile di diversi solutori.

Ulteriori informazioni sul download sono reperibili alla pagina:

www.ampl.com/DOWNLOADS/details.html

5

MaterialeMateriale

Si ringraziano i dott. Piccialli, Bruni, Fasano e Liuzzi per aver reso disponibile il materiale

Oltre alle slide di questa esercitazione, è possibile scaricare dalla pagina della prof.ssa Piccialli

http://www.dis.uniroma1.it/~piccialli/teachita.htm

il seguente materiale:

- Par. 4-11 di Appunti sulla Sintassi e sui Comandi di AMPL Plus v1.6

Manuale in italiano a cura dei dott. R. Bruni, G. Fasano e G. Liuzzi

www.dis.uniroma1.it/~piccialli/AmplMan2.pdf

- Esercitazioni a cura dalla prof.ssa Piccialli con appunti delle lezioni e diversi esempi di problemi di programmazione lineare e non lineare, realizzate per il corso di Ottimizzazione A.A. 2004/2005.

6

AMPL contiene diverse primitive per esprimere la notazione matematica normalmente utilizzata nello scrivere problemi di ottimizzazione (=, <, >, ≤, ≥ , sommatorie, funzioni elementari, etc.)

Il linguaggio AMPLIl linguaggio AMPL

Ciascuna istruzione di AMLP deve terminare con un punto e virgola (;).

E’ quindi possibile l’indentazione nel file dei comandi.

E’ possibile scrivere in un unico file con estensione .mod tutte le istruzioni AMPL che definiscono il modello, ma è bene separare due elementi del problema da risolvere:

- la struttura del modello nel file .mod in cui sono descritte le componenti del modello (variabili, funzione obiettivo, vincoli, etc.);

- i dati del modello nel file .dat in cui sono scritti i dati del problema (che in AMPL vengono chiamati parametri).

Le righe di commento, sia nel file .mod che nel file .dat, devono essere precedute dal simbolo #.

7

AMPL consente di utilizzare la struttura dato insieme.

Gli insiemi in AMPLGli insiemi in AMPL

Esempio: Per definire l’insieme S di elementi a, b, c e d, dichiariamo nel file prova.mod:set S;

Successivamente definiamo nel file prova.dat l’insieme assegnando gli elementi a, b, c e d:set S := a b c d ;

Il linguaggio AMLP è case sensitive.

AMPL consente di utilizzare operazioni elementari tra insiemi, qualiunione, intersezione, differenza, differenza simmetrica e cardinalità.

Un insieme dev’essere:

- dichiarato (nel file .mod), dicendo all’interprete AMPL che un nome identifica l’insieme che vogliamo utilizzare attraverso la parola chaveset;

- definito (nel file .dat), assegnando gli elementi all’insieme dichiarato.

8

I parametri sono i dati del problema, da non confondere con le variabili.

Una volta invocato il solutore, il valore dei parametri resta costante.

I parametri in AMPLI parametri in AMPL

Esempio: Per definire il parametro N dichiariamo nel file prova.mod:param N;

Successivamente definiamo nel file prova.dat il valore del parametro N:param N := 1 ;

Se il parametro assume un valore INTERO, possiamo dichiararlo di tipo integer:param N integer;

Analoghe restrizioni sul valore assunto dal parametro possono essere indicate in fase di dichiarazione.

Un parametro dev’essere:

- dichiarato (nel file .mod), dicendo all’interprete AMPL che un nome identifica il parametro che vogliamo utilizzare attraverso la parola chave param;

- definito (nel file .dat), assegnando il valore al parametro dichiarato.

9

I vettori di parametri sono molto utili per definire vettori di coefficienti.

Parametri a piParametri a piùù dimensioni in AMPLdimensioni in AMPL

Esempio: Per definire il vettore di parametri vett di componenti indicizzate su un insieme S dichiariamo nel file prova.mod:set S;

param vett{S};

Successivamente definiamo nel file prova.dat i valori dei parametri:set S := a b c d;

param vett := a 1 b 2 c 3 d 4;

Un vettore di parametri dev’essere:

- dichiarato (nel file .mod), dicendo all’interprete AMPL il nome che identifica il vettore e l’insieme entro cui varia l’indice delle sue componenti attraverso la parola chiave param e le parentesi {};

- definito (nel file .dat), assegnando i valori al vettore di parametri dichiarato.

10

A.A. 2009-2010

GrafoEsercitazione AMPL

11

Sia dato il grafo orientato G(N,A) in figura

N = {A, B, C, D, E}

A = {AB, AC, BC, BE, CD, DB, DE}

Problema Problema –– Il grafoIl grafo

A

C

B

E

DMatrice di incidenza M di G(N,A) matrice 5 x 7 a valori {1, 0, -1}

10010001110000001011001011010000011– –

––M =

12

A.A. 2009-2010

Flusso di costo minimo (MCF)Esercitazione AMPL

13

Sia dato il vettore c di capacità definito sull’insieme A degli archi del grafo G(N,A)

c = { 6, 4, 2, 7, 8, 4, 5 }

A = {AB, AC, BC, BE, CD, DB, DE}

A

C

B

E

D

Sia dato il vettore d di domande definito sull’insieme N dei nodi del grafo G(N,A)

d = {-5, 6, -5, 0, 4}

N = {A, B, C, D, E }

4 8 5

6

42

7

-5

6

-5 0

4

Problema Problema –– Flusso su grafo orientatoFlusso su grafo orientato

14

Sia w il vettore di costi definito sull’insieme A degli archi del grafo G(N,A)

w = { 2, 3, 1, 5, 1, 2, 4 }

A = {AB, AC, BC, BE, CD, DB, DE}

A

C

B

E

D

Vogliamo risolvere il problema di flusso a costo minimoflusso a costo minimo (MCF)(MCF) sul grafo orientato G(N,A) rispetto al vettore w di costi

3 1 4

2

21

5

-5

6

-5 0

4

Problema Problema –– Flusso su grafo orientatoFlusso su grafo orientato

(MCF)(MCF)min wTx

M x = d0|A| ≤ x ≤ c

15

A

C

B

E

D

Vogliamo determinare un flusso x di (G, c, d) di costo minimocosto minimo

(xAB, 6)

-5

6

-5 0

4

Problema di Flusso di Costo MinimoProblema di Flusso di Costo Minimo

(xAC, 4)

(xBC, 2)

(xCD, 8)

(xDB, 4)

(xDE, 5)

(xBE, 7)

costo(x) = wTx = 2 xAB + 3 xAC + xBC + 5 xBE + xCD + 2 xDB + 4 xCD

(MCF)(MCF) Modelliamo il problema tramite

AMPL

min wTxM x = d0|A| ≤ x ≤ c

16

Modellazione con AMPLModellazione con AMPL

Modelliamo il problema tramite AMPL creando due file:

- file .mod contenente:

- la dichiarazione dei parametri: insiemi N, A; vettori w, d, c e M;

- la dichiarazione delle variabili: vettore x;

- la struttura e la definizione della funzione obiettivo: wTx;

- la struttura e la descrizione dei vincoli: M x = d, 0|A| ≤ x ≤ c.

- file .dat contenente i valori numerici dei parametri

- N = {A, B, C, D, E}

- A = {AB, AC, BC, BE, CD, DB, DE}

- w = { 2, 3, 1, 5, 1, 2, 4 }

- d = {-5, 6, -5, 0, 4}

- c = { 6, 4, 2, 7, 8, 4, 5 }

(MCF)(MCF)min wTx

M x = d0|A| ≤ x ≤ c

10010001110000001011001011010000011– –

––M =

17

File modelloFile modelloFile modello MCF.mod

- dichiarazione dei parametri:

dichiariamo gli insiemi dei nodi N e degli archi A che identifichiamo con insieme NODI e insieme ARCHI:

set NODI; (N)

set ARCHI; (A)

dichiariamo i vettori a una (w, d, c) e a due dimensioni (M):

param costo {ARCHI}; (w)

param domanda {NODI}; (d)

param capacita {ARCHI}; (c)

param M {NODI, ARCHI}; (M)

18

File modelloFile modelloFile modello MCF.mod

- dichiarazione delle variabili x positive e soggette a vincoli di capacità:

var x {j in ARCHI} >= 0, <= capacita[j]; (x)

0|A| ≤ x ≤ c

- la struttura e la definizione della funzione obiettivo wTxminimize Costo_Totale:

sum {j in ARCHI} costo[j] * x[j];

- la struttura e la descrizione dei vincoli M x = dsubject to Incidenza {i in NODI}:

sum {j in ARCHI} M[i,j] * x[j] = domanda[i];

etichetta

etichettaparametrizzata

19

File datiFile datiFile dati MFC.dat

- definizione dei parametri:

definiamo gli insiemi NODI e ARCHI:set NODI := A B C D E ;

set ARCHI := AB AC BC BE CD DB DE ;

definiamo i vettori a una dimensione (w, d, c):

param domanda := A -5 B 6 C -5 D 0 E 4 ;

param: capacita costo :=

AB 6 2

AC 4 3

BC 2 1

BE 7 5

CD 8 1

DB 4 2

DE 5 4 ;

il simbolo “:”indica che stiamo

definendopiù di un vettore

20

File datiFile datiFile dati MFC.dat

- definizione dei parametri:

definiamo i vettori a due dimensioni (M):

param M :

AB AC BC BE CD DB DE :=

A -1 -1 0 0 0 0 0

B 1 0 -1 -1 0 1 0

C 0 1 1 0 -1 0 0

D 0 0 0 0 1 -1 -1

E 0 0 0 1 0 0 1 ;

21

Interprete AMPLInterprete AMPL

ampl: reset;// cancelliamo i modelli e/o i dati precedentemente caricati

// (obbligatorio se abbiamo già caricato un problema)

ampl: model MCF.mod;// carichiamo prima il modello del problema

ampl: data MCF.dat;// carichiamo successivamente i dati del problema

22

Soluzione del problema Soluzione del problema (MCF)(MCF)

ampl: option solver cplex;// scegliamo il solutore di Programmazione Matematica con cui

// risolvere il problema: CPLEX (attualmente vers. 11.2.0)

ampl: solve; // risolviamo il problema caricato

// output ottenuto:CPLEX 11.2.0: optimal solution; objective 330 dual simplex iterations (0 in phase I)

soluzione disponibile

valore ottimo

informazionisul metodo di

soluzione

23

Soluzione del problema Soluzione del problema (MCF)(MCF)

ampl: display x;// chiediamo i valori della soluzione ottenuta (componenti di x)

// output ottenuto:x [*] :=AB 5AC 0BC 0BE 0CD 5DB 1DE 4;

−IM

MTotalmenteTotalmenteunimodulareunimodulare

soluzione a componenti

intere

24

A

C

B

E

D

Abbiamo determinato il flusso x* ottimo di (G, c, d)

(5, 6)

-5

6

-5 0

4

Soluzione del problema (MCF)Soluzione del problema (MCF)

(0, 4)

(0, 2)

(5, 8)

(1, 4)

(4, 5)

(0, 7)

costo(x*) = 2 x 5 + 1 x 5 + 2 x 1 + 4 x 4 = 33valore ottimo

x* soddisfa sia i vincoli di capacità che i vincoli di domanda: M x* = d0|A| ≤ x* ≤ c.

25

A.A. 2009-2010

Cammino di costo minimo (CM)Esercitazione AMPL

26

Siano s = A e t = E due nodi speciali del grafo G(N,A).

Sia w il vettore di costi definito sull’insieme A degli archi del grafo G(N,A)

w = { 2, 3, 1, 5, 1, 2, 4 }

A = {AB, AC, BC, BE, CD, DB, DE}

Problema Problema –– CamminoCammino didi costocosto minimominimo

s

C

B

t

D3 1 4

2

21

5

Vogliamo risolvere il problema di cammino di costo minimo (CM)(CM) da sa t sul grafo orientato G(N,A) rispetto al vettore w di costi.

27

Consideriamo il vettore c di capacità infinite definito sull’insieme A degli archi del grafo G(N,A)

c = { ∞, ∞, ∞, ∞, ∞, ∞, ∞ }

A = {AB, AC, BC, BE, CD, DB, DE}

A

C

B

E

D

Sia dato il vettore d di domande definito sull’insieme N dei nodi del grafo G(N,A)

d = {-1, 0, 0, 0, 1}

N = {A, B, C, D, E}

∞∞ ∞

∞∞

-1

0

0 0

1

Problema Problema –– CamminoCammino didi costocosto minimominimo

28

Il problema di cammino di costo minimo (CM)(CM) da s a t sul grafo orientato G(N,A) rispetto al vettore w di costi è un caso particolare di problema (MCF)

(CM)(CM)min wTx

M x = d0|A| ≤ x ≤ c

Problema Problema –– CamminoCammino didi costocosto minimominimo

A

C

B

E

D

Vogliamo determinare un cammino x di (G, c, d) di costo minimocosto minimo

(xAB,∞)

-1

0

0 0

1

(xAC, ∞)

(xBC, ∞)

(xCD, ∞)

(xDB, ∞)

(xDE, ∞)

(xBE, ∞)

costo(x) = wTx = 2 xAB + 3 xAC + xBC + 5 xBE + xCD + 2 xDB + 4 xCD

Modelliamo il problema tramite

AMPL

29

Modellazione con AMPLModellazione con AMPL

Modelliamo il problema tramite AMPL creando due file:

- file .mod contenente:

- la dichiarazione dei parametri: insiemi N, A; vettori w, d, c e M;

- la dichiarazione delle variabili: vettore x;

- la struttura e la definizione della funzione obiettivo: wTx;

- la struttura e la descrizione dei vincoli: M x = d, 0|A| ≤ x ≤ c.

- file .dat contenente i valori numerici dei parametri

- N = { A, B, C, D, E}

- A = {AB, AC, BC, BE, CD, DB, DE}

- w = { 2, 3, 1, 5, 1, 2, 4 }

- d = {-1, 0, 0, 0, 1}

- c = {∞, ∞, ∞, ∞, ∞, ∞, ∞ }

(CM)(CM)min wTx

M x = d0|A| ≤ x ≤ c

10010001110000001011001011010000011– –

––M =

30

File modello e datiFile modello e datiFile modello CM.mod = MCF.mod

File dati CM.dat

- definizione dei parametri come per il file MCF.dat tranne i vettori a

una dimensione (d, c):

definiamo i vettori a una dimensione (w, d, c):

param domanda := A -1 B 0 C 0 D 0 E 1 ;

param: capacita costo :=

AB Infinity 2

AC Infinity 3

BC Infinity 1

BE Infinity 5

CD Infinity 1

DB Infinity 2

DE Infinity 4 ;

31

Interprete AMPLInterprete AMPL

ampl: reset;// cancelliamo i modelli e/o i dati precedentemente caricati

// (obbligatorio se abbiamo già caricato un problema)

ampl: model MCF.mod;// carichiamo prima il modello del problema

ampl: data CM.dat;// carichiamo successivamente i dati del problema

Stesso file .mod di (MCF)

32

Soluzione del problemaSoluzione del problema

ampl: option solver cplex;// scegliamo il solutore di Programmazione Matematica con cui

// risolvere il problema: CPLEX (attualmente vers. 11.2.0)

ampl: solve; // risolviamo il problema caricato

// output ottenuto:CPLEX 11.2.0: optimal solution; objective 70 dual simplex iterations (0 in phase I)

soluzione disponibile

valore ottimo

informazionisul metodo di

soluzione

33

Soluzione del problemaSoluzione del problema

ampl: display x;// chiediamo i valori della soluzione ottenuta (componenti di x)

// output ottenuto:x [*] :=AB 1AC 0BC 0BE 1CD 0DB 0DE 0;

−IM

MTotalmenteTotalmenteunimodulareunimodulare

soluzione a componenti

intere

34

A

C

B

E

D

Abbiamo determinato il cammino x* ottimo di (G, c, d)

(1, ∞)

-1

0

0 0

1

Soluzione del problema (CM)Soluzione del problema (CM)

(0, ∞)

(0, ∞)

(0, ∞)

(0, ∞)

(0, ∞)

(1, ∞)

costo(x*) = 2 x 1 + 5 x 1 = 7valore ottimo

x* soddisfa sia i vincoli di capacità che i vincoli di domanda: M x* = d0|A| ≤ x* ≤ c.

35

A.A. 2009-2010

Flusso massimo (MF)Esercitazione AMPL

36

Siano s = A e t = E due nodi speciali del grafo G(N,A).

Problema Problema –– Massimo Massimo flussoflusso

Vogliamo risolvere il problema di massimo flusso (MF)(MF) da s a t sul grafo orientato G(N,A) rispetto al vettore c di capacità.

Sia dato il vettore c di capacità definito sull’insieme A degli archi del grafo G(N,A)

c = { 6, 4, 2, 7, 8, 4, 5 }

A = {AB, AC, BC, BE, CD, DB, DE}

s

C

B

t

D4 8 5

6

42

7

37

Aggiungiamo l’arco ts (e quindi una colonna alla matrice M) di capacitàinfinita.

c = { 6, 4, 2, 7, 8, 4, 5, ∞ }

A ={AB, AC, BC, BE, CD, DB, DE, EA}

A

C

B

E

D

Problema Problema –– Massimo Massimo flussoflusso

4 8 5

6

42

7

10001

10010001110000

001011001011010000011– –

––M=

––

38

A

C

B

E

D

Sia dato il vettore d di domande definito sull’insieme N dei nodi del grafo G(N,A)

d = {0, 0, 0, 0, 0}

N = {A, B, C, D, E}

0

0

0 0

0

Problema Problema –– Massimo Massimo flussoflusso

4 8 5

6

42

7

Sia w il vettore di costi definito sull’insieme A degli archi del grafo G(N,A)

w = { 0, 0, 0, 0, 0, 0, 0 , 1 }

A = {AB, AC, BC, BE, CD, DB, DE, EA}

39

Il problema di massimo flusso (MF)(MF) da s a t sul grafo orientato G(N,A)rispetto al vettore c di capacità è un caso particolare di problema (MCF)

(MF)(MF)max wTx

M x = d0|A| ≤ x ≤ c

A

C

B

E

D

Vogliamo determinare un flusso x di (G, c, d) di valore massimovalore massimo

(xAB,6)

0

0

0 0

0(xAC, 4)

(xBC, 2)

(xCD, 8)

(xDB, 4)

(xDE, 5)

(xBE, 7)

Modelliamo il problema tramite

AMPL

Problema Problema –– Massimo Massimo flussoflusso

(xEA, ∞)

40

Modellazione con AMPLModellazione con AMPL

Modelliamo il problema tramite AMPL creando due file:

- file .mod contenente:

- la dichiarazione dei parametri: insiemi N, A; vettori w, d, c e M;

- la dichiarazione delle variabili: vettore x;

- la struttura e la definizione della funzione obiettivo: wTx;

- la struttura e la descrizione dei vincoli: M x = d, 0|A| ≤ x ≤ c.

- file .dat contenente i valori numerici dei parametri

- N = { A, B, C, D, E}

- A = {AB, AC, BC, BE, CD, DB, DE,EA}

- w = { 0, 0, 0, 0, 0, 0, 0, 1}

- d = {0, 0, 0, 0, 0}

- c = {6, 4, 2, 7, 8, 4, 5, ∞ }

(MF)(MF)max wTx

M x = d0|A| ≤ x ≤ c

10001

10010001110000

001011001011010000011– –

––M=

––

41

File modello File modello –– I possibilitI possibilitààFile modello MF.mod

Trasformiamo il problema di minimizzazione in uno di massimizzazione

maximize Costo_Totale: sum {j in ARCHI} costo[j] * x[j];

Scriviamo esplicitamente i vincoli di capacità

subject to Capacita {j in ARCHI}:

x[j] <= capacita[j];

eliminandoli dalla dichiarazione delle variabili x

var x {j in ARCHI} >= 0;

42

File dati File dati –– I possibilitI possibilitààFile dati MF.dat

- definizione dei parametri come per il file MCF.dat tranne:

l’insieme degli archi A e i vettori a una dimensione (w, d, c):

set ARCHI := AB AC BC BE CD DB DE EA;

param domanda := A 0 B 0 C 0 D 0 E 0 ;

param: capacita costo :=

AB 6 0

AC 4 0

BC 2 0

BE 7 0

CD 8 0

DB 4 0

DE 5 0

EA Infinity 1 ;

43

File dati File dati –– I possibilitI possibilitààFile dati MF.dat

- definizione dei parametri:

definiamo i vettori a due dimensioni (M):

param M :

AB AC BC BE CD DB DE EA :=

A -1 -1 0 0 0 0 0 1

B 1 0 -1 -1 0 1 0 0

C 0 1 1 0 -1 0 0 0

D 0 0 0 0 1 -1 -1 0

E 0 0 0 1 0 0 1 -1;

44

Interprete AMPL Interprete AMPL –– I possibilitI possibilitàà

ampl: reset;// cancelliamo i modelli e/o i dati precedentemente caricati

// (obbligatorio se abbiamo già caricato un problema)

ampl: model MF.mod;// carichiamo prima il modello del problema

ampl: data MF.dat;// carichiamo successivamente i dati del problema

45

Soluzione del problema Soluzione del problema –– I possibilitI possibilitàà

ampl: option solver cplex;// scegliamo il solutore di Programmazione Matematica con cui

// risolvere il problema: CPLEX (attualmente vers. 11.2.0)

ampl: solve; // risolviamo il problema caricato

// output ottenuto:CPLEX 11.2.0: optimal solution; objective 101 dual simplex iterations (0 in phase I)

soluzione disponibile

valore ottimo

informazionisul metodo di

soluzione

46

Soluzione del problema Soluzione del problema –– I possibilitI possibilitàà

ampl: display x;// chiediamo i valori della soluzione ottenuta (componenti di x)

// output ottenuto:x [*] :=AB 6AC 4BC 0BE 7CD 4DB 1DE 3EA 10;

−IM

MTotalmenteTotalmenteunimodulareunimodulare

soluzione a componenti

intere

47

Abbiamo determinato il flusso x* ottimo di (G, c, d)

Soluzione del problema (MF)Soluzione del problema (MF)

costo(x*) = 1 x 10 = 10valore ottimo

x* soddisfa sia i vincoli di capacità che i vincoli di domanda: M x* = d0|A| ≤ x* ≤ c.

A

C

B

E

D

(6,6)

0

0

0 0

0(4, 4)

(0, 2)

(4, 8)

(1, 4)

(3, 5)

(7, 7)

(10, ∞)

48

Duale del Massimo FlussoDuale del Massimo Flusso

yc min T

(MF)(MF)

0x ;0xcxI

0bxMx

ts|A|

|A|

|N|ts

≥≥

=−

(DMF)(DMF)

tsx max

( z( z∈∈ RR|N| |N| ))

( y( y∈∈ RR|A||A|))

|A|

st

|A||A|T

0y1zz

0yIzM

≥≤−

≥+

DUALE del Massimo Flusso

≡≡

|A|

st

uvvu

0y1zz

Auv 0yzz

≥≥−

∈∀≥+−yc min T(DMF)(DMF)

( x( x∈∈ RR|A| |A| ))

( ( xxtsts ))

A

C

B

E

D∞

0

0

0 0

0

4 8 5

6

42

7

49

Soluzione duale Soluzione duale –– I possibilitI possibilitàà

ampl: display Incidenza;// chiediamo i valori della soluzione duale ottenuta (componenti di zdi (DMF)(DMF))

// output ottenuto:Incidenza [*] :=A 1B 0C 0D 0E 0;

50

Soluzione duale Soluzione duale –– I possibilitI possibilitàà

ampl: display Capacita;// chiediamo i valori della soluzione duale ottenuta (componenti di ydi (DMF)(DMF))

// output ottenuto:Capacita [*] :=AB 1AC 1BC 0BE 0CD 0DB 0DE 0EA 0;

ammette una soluzionesoluzione ottimaottima { } |A||N|1,0yz +∈

TEOREMA F5: Il duale del massimo flusso

51

Abbiamo determinato

- il flusso x* ottimo di (G, c, d)

- il taglio s-t δδ++(X)(X) di ((GG,,cc)) di capacità minima

Soluzione duale del problema (MF)Soluzione duale del problema (MF)

A

C

B

E

D

(6,6)

0

0

0 0

0(4, 4)

(0, 2)

(4, 8)

(1, 4)

(3, 5)

(7, 7)

(10, ∞)

TAGLIO TAGLIO ss--tt di (G,c)- Taglio che ““separasepara”” ss da t t - zz vettore di incidenza di XX

- yy vettore di incidenza di δδ++(X)(X)X X = {A}= {A}

δδ++(X) (X) = {AB,AC}= {AB,AC}

capacità cTy = 6 + 4 = 10

valore massimo

flusso

52

File modello e dati File modello e dati –– II possibilitII possibilitààFile modello MF.mod = MCF.modFile dati MF.min.dat

- definizione dei parametri come per il file MCF.dat tranne:

l’insieme degli archi A e i vettori a una dimensione (w, d, c):

set ARCHI := AB AC BC BE CD DB DE EA;

param domanda := A 0 B 0 C 0 D 0 E 0 ;

param: capacita costo :=

AB 6 0

AC 4 0

BC 2 0

BE 7 0

CD 8 0

DB 4 0

DE 5 0

EA Infinity -1 ;

max wTx = -min (-w)Tx

53

File dati File dati –– II possibilitII possibilitààFile dati MF.min.dat

- definizione dei parametri:

definiamo i vettori a due dimensioni (M):

param M :

AB AC BC BE CD DB DE EA :=

A -1 -1 0 0 0 0 0 1

B 1 0 -1 -1 0 1 0 0

C 0 1 1 0 -1 0 0 0

D 0 0 0 0 1 -1 -1 0

E 0 0 0 1 0 0 1 -1;

54

Interprete AMPL Interprete AMPL –– II possibilitII possibilitàà

ampl: reset;// cancelliamo i modelli e/o i dati precedentemente caricati

// (obbligatorio se abbiamo già caricato un problema)

ampl: model MCF.mod;// carichiamo prima il modello del problema

ampl: data MF.min.dat;// carichiamo successivamente i dati del problema

Stesso file .mod di (MCF)

55

Soluzione del problema Soluzione del problema –– II possibilitII possibilitàà

ampl: option solver cplex;// scegliamo il solutore di Programmazione Matematica con cui

// risolvere il problema: CPLEX (attualmente vers. 11.2.0)

ampl: solve; // risolviamo il problema caricato

// output ottenuto:CPLEX 11.2.0: optimal solution; objective -101 dual simplex iterations (0 in phase I)

soluzione disponibile

valore ottimo

informazionisul metodo di

soluzione

56

Soluzione del problema Soluzione del problema –– II possibilitII possibilitàà

ampl: display x;// chiediamo i valori della soluzione ottenuta (componenti di x)

// output ottenuto:x [*] :=AB 6AC 4BC 0BE 7CD 4DB 1DE 3EA 10;

−IM

MTotalmenteTotalmenteunimodulareunimodulare

soluzione a componenti

intere