




























































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Modelli di Programmazione Matematica
Tipologia: Dispense
1 / 129
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





























































































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
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;
param compos {ELEMENTI, MATERIALI} default 0, >=0, <=100;
param rich_min {ELEMENTI} >= 0 default 0;
param rich_max {el in ELEMENTI} <= 100, >= rich_min[el];
param costo {MATERIALI};
check {mat in MATERIALI}: 0 < sum {el in ELEMENTI} compos[el,mat] <= 100;
var qta {mat in MATERIALI} >= 0, <= dispon[mat];
minimize costo_tot: sum {mat in MATERIALI} costo[mat] * qta[mat];
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];
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
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;
set CARATT := NUTR union CALORIE union GRASSI;
set CIBO; param costo {CIBO} >= 0; param low_bnd {CIBO} >= 0. default 0; param upp_bnd {j in CIBO} >= low_bnd[j], default +Infinity;
param rich_min {NUTR} >= 0, default 0; param rich_max {NUTR} >= 0, default +Infinity;
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.
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.
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) = +∞.
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:
Si noti che nel modello appena introdotto non sono presenti vincoli di diseguaglianza stretta, cioe caratterizzati dalla relazione > o <; 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