Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Ottimizzazione Lineare: Esercizi e Soluzioni - Prof. Schoen, Dispense di Modelli Di Programmazione Matematica

Modelli di Programmazione Matematica

Tipologia: Dispense

2014/2015

Caricato il 03/10/2015

Gianluca.Palazzo
Gianluca.Palazzo 🇮🇹

4

(6)

4 documenti

1 / 129

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Modelli di Programmazione Matematica
A.A. 2002/2003
Fabio Schoen Dipartimento di Sistemi e Informatica
web: alanine.dsi.unifi.it/users/schoen
PL versione 1.01 - 13.1.2003
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Anteprima parziale del testo

Scarica Ottimizzazione Lineare: Esercizi e Soluzioni - Prof. Schoen e più Dispense in PDF di Modelli Di Programmazione Matematica solo su Docsity!

Modelli di Programmazione Matematica

A.A. 2002/

Fabio Schoen Dipartimento di Sistemi e Informatica

e-mail: [email protected]

web: alanine.dsi.unifi.it/users/schoen

PL – versione 1.01 - 13.1.

Parte I

Programmazione lineare

disponibili, e sempre possibile acquistare, in quantita teoricamente illimitate, ma ad un prezzo sensibilmente piu alto, elementi chimici puri. Il problema diventa quindi quello di stabilire le quantita di rottami e di materiali puri da impiegare in una miscela che rispetti i vincoli imposti sulla qualita e che risulti di costo minimo. Nella tabella seguente viene riportato il file dati, preparato secondo la sintassi di AMPL, per un ipotetico problema di miscelazione di alluminio da rottami. L’obiettivoe quello di ottenere una miscela secondo specifiche qualitative prefissate e note nell’ambiente della produzione di alluminio con il codice “6063”.

file: Al6063.dat

problema di miscelazione ottimale

set MATERIALI := Scarti_ALMC Scarti_KAC Rottami Al Si Mg; set ELEMENTI := Si Mg Fe Cu Mn Zn Cr Ti Al Altri; param qta_rich := 4.5; # tonnellate param: rich_min rich_max := Si 0.2 0. Mg 0.45 0. Fe. 0. Cu. 0. Mn. 0. Zn. 0. Cr. 0. Ti. 0. Al 96.9 100. Altri. 0. ; param compos: Scarti_ALMC Scarti_KAC Rottami Al Si Mg:= Si 0.50 0.50 0.30. 100. Mg 0.75 0.70 0.50.. 100 Fe 0.20 0.20 0.... Cu 0.01 0.01 0.... Mn 0.02 0.02 0.... Zn 0.02 0.02 0.... Cr 0.02 0.02 0.... Ti 0.02 0.02 0.... Al 97.00 97.00 90.00 100.. Altri 0.06 0.06 0.... ; param: dispon costo := # costo in Euro per tonnellata Scarti_ALMC 0.50 1230 Scarti_KAC 1.20 1230 Rottami 2.20 1230 Al. 2140

Si. 1300 Mg. 2442;

La prima parte del file dati contiene la definizione dei nomi dei materia- li disponibili e degli elementi chimici di interesse. Segue la specifica della quantita totale di materiale da produrre (in tonnellate) e, per ciascun ele- mento chimico, il valore della percentuale minima e massima richiesta, in base alle specifiche di definizione della miscela “6063” (il valore di default per la richiesta minimae pari a 0). Come si vede dal listato, viene richiesta una miscela di alluminio contenente almeno una piccola frazione di Silicio e Manganese. Successivamente, nel file dati vengono riportate le composizioni chimiche dei vari materiali ed infine, per ciascun materiale, il quantitativo massimo disponibile ed il costo in Euro per tonnellata. Per la formalizzazione del problema occorre individuare le variabili di de- cisione, i vincoli, l’obiettivo. Per le variabili di decisione e naturale associare una incognita matj a ciascun materiale j; il vincolo relativo alla quantita totale da produrre si pu`o esprimere mediante l’equazione

j∈MATERIALI

matj = qta rich.

Per il bilancio chimico, se si indica con composi,j la percentuale di elemen- to chimico i presente nel materiale j, la quantita percentuale dell’elemento chimico i presente nella miscela sara data da

j∈MATERIALI

composi,j ·

matj qta rich

e, pertanto, i vincoli che esprimono le richieste minime e massime di elementi chimici presenti nella miscela assumono la forma

rich mini ≤

j∈MATERIALI

composi,j ·

matj qta rich

≤ rich maxi.

Infine, per ciascun materiale j, dovra essere imposta la non negativita e, per i materiali disponibili in quantit`a limitata, un limite superiore:

0 ≤ matj ≤ disponj.

param qta_rich >=0 ; # qta’ richiesta param dispon{MATERIALI}, default Infinity;

disponibilita’ dei materiali

param compos {ELEMENTI, MATERIALI} default 0, >=0, <=100;

composizione chimica dei materiali

param rich_min {ELEMENTI} >= 0 default 0;

richieste minime in percentuale

param rich_max {el in ELEMENTI} <= 100, >= rich_min[el];

richieste massime

param costo {MATERIALI};

----------------------------------------------------------------#

controllo

----------------------------------------------------------------#

check {mat in MATERIALI}: 0 < sum {el in ELEMENTI} compos[el,mat] <= 100;

----------------------------------------------------------------#

dichiarazione variabili e limiti inferiori e superiori

----------------------------------------------------------------#

var qta {mat in MATERIALI} >= 0, <= dispon[mat];

----------------------------------------------------------------#

definizione obiettivo

----------------------------------------------------------------#

minimize costo_tot: sum {mat in MATERIALI} costo[mat] * qta[mat];

----------------------------------------------------------------#

definizione vincoli

----------------------------------------------------------------#

subject to totale: sum {mat in MATERIALI} qta[mat] = qta_rich; subject to def_qualita {el in ELEMENTI}: rich_min[el] <= sum {mat in MATERIALI} (qta[mat]/qta_rich) * compos[el,mat] <=rich_max[el];

la qta e’ assoluta ==> divisa per qta_rich fornisce qta percentuale;

Con i dati del file sopra riportati, utilizzando un opportuno risolutore, si

ottiene la seguente soluzione di costo minimo:

Al 2. 04176 Mg 0. 00438 Si 0. 00970 Rottami 0. 74416 Scarti ALMC 0. 5 Scarti KAC 1. 2

ed il costo, in Euro, risulta pari a 7398.988. Per quanto riguarda la qualita della miscela ottenuta, si puo far riferimento alla tabella seguente:

rich min miscela rich max Al 96. 9 96. 9 100 Cr 0 0. 0158 0. 1 Cu 0 0. 0120 0. 1 Fe 0 0. 1334 0. 35 Mg 0. 45 0. 45 0. 9 Mn 0 0. 0158 0. 1 Si 0. 2 0. 45420. 6 Ti 0 0. 0158 0. 1 Zn 0 0. 0158 0. 1 Altri 0 0. 15 0. 15

1.1.2 Il modello della dieta

Il modello della dieta puo essere visto come una variante del modello di mi- scelazione; il modello classico prevede la determinazione della dieta, o della miscela di cibi, di costo minimo soggetta a vincoli sul contenuto nutritivo. Tali vincoli, come nel modello di miscelazione, possono prevedere soglie mi- nime (per gli elementi nutritivi vantaggiosi) e/o soglie massime (per quelli nocivi). L’unica differenza sostanziale tra il modello elementare di miscela- zione e quello di dieta consiste nel fatto che in quest’ultimo non ha in genere senso imporre vincoli sulla quantita totale; un’altra differenza e il fatto che nei problemi di dieta i contenuti nutritivi non sono espressi generalmente in percentuale, ma in unita di misura differenti, quali grammi, ad esempio per le proteine, i grassi ed i carboidrati, o calorie, nel caso del valore energeti- co. Spesso le etichette sulle confezioni di cibo riportano il valore riferito a 100g di prodotto, oppure il valore riferito ad una porzione tipica: in questi

file: dieta-1.dat set NUTR := Proteine Vitamina-A Vitamina-C VitaminaB1 VitaminaB Niacina Calcio Ferro Sodio ; set GRASSI := Grassi ; set CALORIE := Calorie ; set CIBO := Hamburger McLean BigMac PatateFritte PolloFritto Miele ChefSalad InsalataVerde UovoMcMuffin Wheaties Vaniglia Latte SuccoArancia SuccoPompelmo SuccoMela;

param: costo upp_bnd := Hamburger 0.. McLean 1.. BigMac 1.. PatateFritte 0.. PolloFritto 1.. Miele 0.. ChefSalad 2.. InsalataVerde 1.. UovoMcMuffin 1.. Wheaties 1.. Vaniglia 0.. Latte 0.. SuccoArancia 0.. SuccoPompelmo 0.. SuccoMela 0.68 .;

param: rich_min rich_max := Proteine 55. Sodio 0 3000 Vitamina-A 100. Vitamina-C 100. VitaminaB1 100. VitaminaB2 100. Niacina 100. Calcio 100. Ferro 100. ;

param compos (tr): Calorie Proteine Grassi Sodio Vitamina-A Vitamina-C VitaminaB1 := Hamburger 255 12 9 490 4 4 20 McLean 320 22 10 670 10 10 25 BigMac 500 25 26 890 6 2 30 PatateFritte 220 3 12 110 0 15 10 PolloFritto 270 20 15 580 0 0 8 Miele 45 0 0 0 0 0 0 ChefSalad 170 17 9 400 100 35 20 InsalataVerde 50 4 2 70 90 35 6 UovoMcMuffin 280 18 11 710 10 0 30 Wheaties 90 2 1 220 20 20 20 Vaniglia 105 4 1 80 2 0 2 Latte 110 9 2 130 10 4 8 SuccoArancia 80 1 0 0 0 120 10

SuccoPompelmo 80 1 0 0 0 100 4 SuccoMela 90 0 0 5 0 2 2 : # continuazione tabella VitaminaB2 Niacina Calcio Ferro := Hamburger 10 20 10 15 McLean 20 35 15 20 BigMac 25 35 25 20 PatateFritte 0 10 0 2 PolloFritto 8 40 0 6 Miele 0 0 0 0 ChefSalad 15 20 15 8 InsalataVerde 6 2 4 8 UovoMcMuffin 20 20 25 15 Wheaties 20 20 2 20 Vaniglia 10 2 10 0 Latte 30 0 30 0 SuccoArancia 0 0 0 0 SuccoPompelmo 2 2 0 0 SuccoMela 0 0 0 4 ;

Un modello che rappresenta il problema della dieta sopra descritto `e il seguente:

file: dieta-1.mod set NUTR; # elementi nutritivi set CALORIE; set GRASSI;

calorie e grassi sono considerati a parte per poter formare vincoli piu’

complessi o obiettivi diversi dalla minimizzazione del costo.

set CARATT := NUTR union CALORIE union GRASSI;

l’insieme di tutte le caratteristiche nutrizionali.

set CIBO; param costo {CIBO} >= 0; param low_bnd {CIBO} >= 0. default 0; param upp_bnd {j in CIBO} >= low_bnd[j], default +Infinity;

quantita’ minime e massime di ciascun cibo nella dieta - default 0 e

infinito rispettivamente

param rich_min {NUTR} >= 0, default 0; param rich_max {NUTR} >= 0, default +Infinity;

richieste minime e massime per i singoli elementi nutritivi

param compos {CARATT,CIBO} >= 0; var Qta {j in CIBO} >= low_bnd[j], <= upp_bnd[j]; minimize costo_totale: sum {j in CIBO} costo[j] * Qta[j];

cibo qt`a Hamburger 2 InsalataVerde 0. 265823 Latte 0. 949367 SuccoPompelmo 0. 388987 UovoMcMuffin 1. 85823 Wheaties 2

con un costo pari a 7. 204 e - come si puo facilmente intuire, l’aumento di vincoli comporta un aumento di prezzo. Si nota anche come l’inserimento del vincolo relativo al numero massimo di porzioni ha portato ad una variazione non solo nelle quantita dei cibi, ma anche nella composizione della dieta ottimale. Aggiungendo il vincolo di interezza sulle variabili, si ottiene la soluzione cibo qt`a BigMac 1 Hamburger 2 Insalata Verde 1 Latte 2 Patate Fritte 1 Wheaties 2

di costo 8. 77 e. Si noti come la soluzione intera non sia un arrotondamento della soluzione decimale – compaiono cibi nuovi ed alcuni (Latte) assumono valori molto diversi da quelli ottenuti precedentemente. Naturalmente il modello qui presentato e talmente elementare da rivelarsi di poca o nessuna utilita pratica; tuttavia esso puo costituire la base per la costruzione di un modello piu realistico. Ad esempio, uno dei vincoli che gli esperti di nutrizione inseriscono spesso e una limitazione sulla quantita di alcuni tipi di grassi, sia in assoluto, sia in rapporto ad altri grassi. Spesso, in una dieta equilibrata, si richiede che le calorie provenienti dai grassi non superino il 30% delle calorie totali. Avendo a disposizioni i dati sulla quantit`a di calorie provenienti dai grassi e quelle totali per ogni cibo, il vincolo si esprime facilmente come disequazione lineare:

j∈CIBI

CalorieDalGrassoj qtaj ≤

j∈CIBI

Caloriej qtaj.

Molti altri requisiti nutrizionali possono essere espressi in modo simile a que- sto. Altri richiedono invece una modellazione piu complessa e, spesso, pos- sono essere formulati utilizzando le variabili binarie indicatrici come si vedra nella parte dedicata ai modelli di programmazione lineare intera. Vincoli di questo genere sono spesso posti sotto forma di vincoli logici del tipo: “Se la dieta prevede hamburger, allora devono esserci anche le patatine” oppu- re “Nella dieta devono essere presenti o gli hamburger o i BigMac, ma non entrambi”, ecc. Anche nella sua versione elementare, pero, il modello risulta utile, in par- ticolare in campi quali quello della preparazione dei mangimi per animali o dei fertilizzanti per terreni, dove non entrano in gioco vincoli particolari sul gusto o sulla varieta della dieta. Infine, come si vedra nella parte dedicata ai modelli, l’esempio qui descritto puo essere generalizzato su un orizzonte temporale di piu di una giornata: in questo caso le variabili dovranno avere un secondo indice relativo alla giornata e si potranno prevedere vincoli nutri- zionali relativi a periodi piu lunghi, tipicamente una settimana od un mese. In questi casi il problema si avvicina a quello della pianificazione dei menu per una mensa.

1.1.3 Il modello dell’abbinamento

Un modello piuttosto lontano dai due precedentemente esposti e il seguente: si consideri la situazione in cui un certo numero n di progetti (ad esempio, lo sviluppo di moduli di un progetto software) devono essere affidati ad un ugual numero n di progettisti o di sviluppatori. Ogni progettista deve svol- gere esattamente un progetto – si tratta quindi di mettere in corrispondenza biunivoca i progetti ed i progettisti (esistono varianti del modello nelle quali non tutti i progetti devono essere svolti o altre nelle quali qualche progettista puo svolgere piu di un progetto). Per addestrare il progettista i a realizzare il progetto j occorre un periodo di addestramento il cui costoe stimato pari a cij. Il problema di abbinamento consiste nel determinare l’accoppiamento progetto/progettista che rende minimo il costo totale di addestramento. Per questo modello `e comodo utilizzare delle variabili decisionali di tipo binario, δij , con la convenzione che δij = 1 sta ad indicare che il progettista i svolge il progetto j e 0 altrimenti. Con questa convenzione il costo totale

un esperto nella formulazione di problemi di decisione, dalla fase di specifi- ca dei dati di un esempio particolare (quella che con un orribile neologismo viene detta “istanziazione”), operazione che puo essere effettuata da qual- cuno non particolarmente esperto nella formulazione di modelli. Un terzo componente, separato sia dal modello che dai dati,e il risolutore, un algo- ritmo in grado di determinare una soluzione ad un problema di decisione rappresentato formalmente mediante modello e dati.

Capitolo 2

Problemi di ottimizzazione

2.1 Introduzione e definizioni principali

Un generico problema di ottimizzazione P `e dato da una terna

〈Opt, X, f 〉

e si indica con P : Optx∈X f (x) (

Opt puo indicare l’operatore min oppure l’operatore max, X ⊆ Rn^e detto in- sieme ammissibile ed e un sottoinsieme dello spazio euclideo n–dimensionale, con n ∈ N, mentre fe una funzione reale f : X → R detta funzione obiettivo.

Definizione 1 Il problema di ottimizzazione P si dice non ammissibile o inammissibile se X = ∅.

Definizione 2 Un vettore x ∈ Rn^ si dice soluzione ammissibile per il pro- blema P se x ∈ X.

Definizione 3 Un problema di ottimizzazione P di minimo si dice illimi- tato (inferiormente) se esiste almeno una successione {xk}∞ k=1 di soluzioni ammissibili tale che lim k→∞

f (xk) = −∞.

Un problema di ottimizzazione P di massimo si dice illimitato (superior- mente) se esiste almeno una successione {xk}∞ k=1 di soluzioni ammissibili tale che lim k→∞ f (xk) = +∞.

Capitolo 3

Introduzione alla

programmazione lineare

3.1 Problemi di programmazione lineare - im-

portanza della linearit`a

Gran parte dei modelli che verranno studiati in questo volume rientra nella categoria dei cosiddetti “modelli lineari”. E’ opportuno ricordare che una funzione lineare definita in Rn^ pu`o sempre essere espressa nella forma

f (x 1 ,... , xn) = a 1 x 1 + · · · + anxn =

∑^ n

i=

aixi = aT^ x

dove con a si `e indicato il vettore colonna

a =

a 1 .. . an

e con a 1 ,... , an si sono indicate n costanti reali. I problemi di programmazione lineare sono caratterizzati da una funzione obiettivo lineare e da un insieme ammissibile rappresentabile esplicitamente mediante un numero finito di equazioni e/o disequazioni lineari. Un gene- rico problema di programmazione lineare potrebbe pertanto avere la forma seguente:

Opt

∑^ n

j=

cj xj (3.1)

∑^ n

j=

aij xj = bi i = 1,... , ml (3.2)

∑^ n

j=

aij xj ≤ bi i = ml + 1,... , mh (3.3)

∑^ n

j=

aij xj ≥ bi i = mh + 1,... , mk (3.4)

In questo problema il simbolo Opt rappresenta l’operatore min o l’opera- tore max; sono presenti ml ≥ 0 equazioni lineari e (mk −ml) ≥ 0 disequazioni lineari, alcune delle quali rappresentate in forma di ≤, altre di ≥. Nel problema sopra rappresentato sono presenti i principali elementi dei generici problemi di programmazione lineare e, in particolare:

  1. un insieme di variabili di decisione o incognite x 1 ,x 2 ,... , xn;
  2. una funzione obiettivo o costo da minimizzare o massimizzare;
  3. alcune (in certi casi anche nessuna) equazioni lineari o vincoli di egua- glianza ;
  4. alcune (a volte nessuna) disequazioni lineari o vincoli di diseguaglianza;
  5. alcuni vincoli di segno o di non negativit`a sulle variabili; questi vin- coli non sono altro che semplici disequazioni lineari, ma in genere si preferisce mantenerli separati dagli altri vincoli del problema.

Si noti che nel modello appena introdotto non sono presenti vincoli di diseguaglianza stretta, cioe caratterizzati dalla relazione &gt; o &lt;; n´e sono presenti vincoli di diseguaglianza, caratterizzati dalla relazione =. In un modello lineare, la funzione obiettivo, cioe la funzione da minimiz- zare o massimizzare, e lineare, cosı come i vincoli sono espressi da equazioni e/o disequazioni lineari. La funzione obiettivo potrebbe anche essere “affine”, cio`e avere la forma aT^ x+c, con c ∈ R, anche se dal punto di vista algoritmico