Anteprima
Vedrai una selezione di 20 pagine su 108
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 1 Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 2
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 6
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 11
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 16
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 21
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 26
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 31
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 36
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 41
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 46
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 51
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 56
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 61
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 66
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 71
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 76
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 81
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 86
Anteprima di 20 pagg. su 108.
Scarica il documento per vederlo tutto.
Appunti Teoria ed esercizi - Laboratorio di Ricerca operativa Pag. 91
1 su 108
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

OPL

Formulazione Problema in FS:

Modello della dieta a costo minimo: 89

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

90

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

91

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Esercitazione 1

//variabili decisionali

int numVariabili =...;

int numVincoli =...;

range Variabili = 1..numVariabili;

range Vincoli = 1..numVincoli;

int C[Variabili] =...;

int B[Vincoli] = ...;

int A[Vincoli][Variabili] = ...;

dvar float+ X[Variabili];

minimize sum(i in Variabili)C[i]*X[i]; //f obiettivo

subject to{

forall(i in Vincoli)

sum(j in Variabili) A[i][j]*X[j] == B[i];

};

File .dat

numVariabili= 6;

numVincoli= 3;

C=[1, 2, 1, 1, 1, 1];

B=[3, 2, 2];

A=[[1 , 2, 3, 1, 0, 0],

[2, -1, -1, 0, 1, 0],

[1,2, -1, 0, 0, 1]]; 92

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Esercitazione 2

int Nmesi=...;

int QN=...;

int QE=...;

int QC=...;

int CN=...;

int CE=...;

float CS=...;

range mesi=1..Nmesi;

float D[mesi]=...;

float S0=...;

dvar float+ X[mesi];

dvar float+ Y[mesi];

dvar float+ Z[mesi];

minimize sum(i in mesi)(CN*X[i] +CE*Y[i]+CS*Z[i]);

subject to{

forall(i in mesi)

produzioneN: X[i]<=QN;

forall(i in mesi)

produzioneE: Y[i]<=QE;

forall(i in mesi)

statoC: Z[i]<=QC;

Z[5]==0;

mese1: X[1]+Y[1]+S0==D[1]+Z[1];

forall(i in mesi: i>=2)

mese_i: X[i]+Y[i]+Z[i-1]==D[i]+Z[i];

}

File .dat

Nmesi= 5;

QN=100;

QE=25;

QC=20;

CN=18;

CE=22;

CS=0.3;

D=[120,110,90,40,130];

S0=10; 93

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Esercitazione 4

int nOggetti=...;

int nScatole=...;

range oggetti = 1..nOggetti;

range scatole = 1..nScatole;

int w[oggetti] = ...;

int B =...;

dvar int x[oggetti][scatole] in 0..1;

dvar int y[scatole] in 0..1;

//minimize sum (i in scatole) y[i];

//subject to{

//forall(i in scatole)

//oggetto_j: sum(j in oggetti)x[i][j];

//}

File .dat

Nmesi= 5;

QN=100;

QE=25;

QC=20;

CN= 18;

CE= 22;

CS= 0.3;

D= [120,110,90,40,130];

S0= 10; 94

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Esercitazione 5

int numN=...;

int numM = ...;

range rangeN = 1..numN;

range rangeM = 1..numM;

int costi[rangeM]=...;

int A[rangeN][rangeM] =...;

dvar int x[rangeM] in 0..1;

minimize sum(j in rangeM)costi[j]*x[j];

subject to{

forall(i in rangeN)

somma_i:sum(j in rangeM)A[i][j]*x[j]>=1;

}

File .dat

numN=8;

numM=9;

costi =

[47,27,45,20,40,45,60,60,22];

A =[[1,0,0,0,1,1,0,1,0],

[1,0,0,1,0,1,1,1,0],

[0,1,1,1,1,0,1,0,0],

[0,0,0,0,0,0,0,0,1],

[0,0,0,0,1,1,0,1,0],

[1,1,0,0,0,0,0,1,0],

[0,1,0,0,1,0,1,0,1],

[1,0,1,0,1,1,0,0,0]]; 95

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Modello dieta

int nAlimenti =...;

int nNutrienti = ...;

range Alimenti = 1..nAlimenti;

range Nutrienti = 1..nNutrienti;

float C[Alimenti] = ...;

int U[Nutrienti] = ...;

int L[Nutrienti] = ...;

float A[Nutrienti][Alimenti] = ...;

dvar float+ X[Alimenti];

minimize sum(i in Alimenti)C[i]*X[i];

subject to{

forall(i in Nutrienti)

sum(j in Alimenti)A[i][j] *X[i]<= U[i];

forall(i in Nutrienti)

sum(j in Alimenti)A[i][j] * X[i]>= L[i];

};

File .dat

nAlimenti = 7;

nNutrienti = 3;

C=[4,4,15,22.5,3,1,15];

U=[35,25,20];

L=[25,15,10];

A=[[11.5, 3.15, 8, 18.5, 2.1, 12, 74],

[72.7, 4.85, 3.8, 0.5, 0, 68, 1],

[1.5, 1.55, 11, 19, 0.1, 6, 9]];

96

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Modello PCentro

int m = ...;

int n = ...;

range clienti = 1..m;

range impianti = 1..n;

int c[clienti][impianti] = ...;

int p = ...;

dvar int x [clienti][impianti] in 0..1;

dvar int y[impianti] in 0..1;

dvar float+ cmax;

minimize cmax;

subject to {

forall(i in clienti)

sum(j in impianti )x[i][j]==1;

forall(i in clienti,j in impianti){

x[i][j]<= y[i];

cmax >= x[i][j] * c[i][j];

}

sum(j in impianti)

y[j] == p;

}

File .dat

m = 5;

n = 6;

c= [[12,8,2,3,8],

[8,4,6,5,7],

[2,6,5,6,5],

[3,5,6,9,10],

[8,4,5,10,8],

[7,3,3,4,4]];

p = 2; 97

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Assegnamento

//task sono origini e cpu sono destinazioni

int origini = ...;

range nOrigine = 1..origini;

int destinazioni = ...;

range nDestinazione = 1..destinazioni;

int costiAss[nOrigine][nDestinazione] = ...; //tempi di calcolo

dvar int+ F[nOrigine][nDestinazione] in 0..1;

minimize sum(i in nOrigine, j in nDestinazione)

costiAss[i][j] * F[i][j];

subject to{

forall(i in nOrigine)

sum(j in nDestinazione) F[i][j] == 1;

forall(j in nDestinazione)

sum(i in nOrigine) F[i][j] == 1;

};

File .dat

origini = 5;

destinazioni = 5;

costiAss=[[7,2,1,9,4],

[9,6,9,5,5],

[3,8,3,1,8],

[7,9,4,2,2],

[8,4,7,4,8]]; 98

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Flusso di Costo Minimo

int nNodi = ...;

range nodi = 1..nNodi;

tuple archi{

int nodoP;

int nodoA;

}

{archi} Archi =...;

int C[Archi] =...;

int D[nodi]= ...;

dvar int+ X[Archi];

minimize sum (<i,j> in Archi) C[<i,j>]*X[<i,j>];

subject to{

forall(i in nodi)

sum(<i,j> in Archi) X[<i,j>] -

sum (<j,i> in Archi) X[<j,i>] == D[i];

}

// Rispettare equazioni di continuità su tutti i nodi =>

divergenza sul nodo i = somma archi entranti su i - somma archi uscenti su i

File .dat

nNodi = 7;

Archi = {<1,3>,<1,6>,<2,1>,<3,5>,<3,6>,<4,1>,

<4,5>,<5,7>,<6,2>,<6,7>,<7,2>};

C = [2,9,4,2,3,1,1,4,4,7,2];

D = [10,-8,0,6,0,0,-8]; 99

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Flusso di Costo Minimo - Versione 2

tuple arco{

int NodoOut;

int NodoIn;

int costo;

}

{arco} Archi= ...;

tuple nodo{

int IndiceNodo;

int divergenza;

}

{nodo} Nodi= ...;

dvar float+ F[Archi];

minimize sum(<i,j,k> in Archi)F[<i,j,k>]*k;

subject to{

forall(<i,d>in Nodi)

sum(<i,j,k> in Archi)F[<i,j,k>] -

sum(<j,i,k> in Archi) F[<j,i,k>] == d;

};

// Rispettare equazioni di continuità su tutti i nodi =>

divergenza sul nodo i = somma archi entranti su i - somma archi uscenti su i

File .dat

Archi = {<1,3,2>,<1,6,9>,<2,1,4>,<3,5,2>,<3,6,3>,

<4,1,1>,<4,5,1>,<5,7,4>,<6,2,4>,<6,7,7>,<7,2,2>};

Nodi = {<1,10>,<2,-8>,<3,0>,<4,6>,<5,0>,<6,0>,<7,-8>};

100

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Trasporto

int pVendita =...;

range nPVendita = 1..pVendita;

int impianti = ...;

range nImpianti = 1..impianti;

int cImpianti[nImpianti] = ...;

int rPVendita[nPVendita] = ...;

int costiTrasp[nImpianti][nPVendita] = ...;

dvar float+ F[nImpianti][nPVendita];

// siccome ciò che distribuisco > di ciò che richiedo,

// avrò bisogno di un impianto fittizio, con costo di trasporto = 0

// 30-27 = 3 = rImpianto fittizio

minimize sum(i in nImpianti, j in nPVendita)

costiTrasp[i][j] * F[i][j];

subject to{

forall(i in nImpianti)

sum(j in nPVendita)F[i][j] == cImpianti[i];

forall(j in nPVendita)

sum(i in nImpianti) F[i][j] == rPVendita[j];

};

File .dat

pVendita = 4;

impianti = 3;

cImpianti = [12,8,10];

rPVendita = [8,10,9,3];

costiTrasp =[[2,5,2,0],[3,4,6,0],[1,5,3,0]];

101

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Bin Packing

int m = ...;

int n = ...;

range M = 1..m;

range N = 1..n;

int B = ...;

int w[N] = ...;

dvar int X[M][N] in 0..1;

dvar int Y[M] in 0..1;

minimize sum (i in M) Y[i];

subject to{

forall(j in N)

sum(i in M) X[i][j] == 1;

forall(i in M)

sum(j in N) w[j] * X[i][j] <= B*Y[i];

};

File .dat

m=10;

n=50;

B=650;

w=[92,91,90,89,85,84,81,80,80,78,78,77,77,76,75,74,73,69,69,68,68,

67,67,65,64,63,63,61,60,56,54,54,51,49,45,43,42,39,39,39,38,36,35,

34,34,33,32,31,30,50]; 102

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Bin Packing Generalizzato

int m = ...;

int n = ...;

range M = 1..m;

range N = 1..n;

int b[M] = ...;

int v[M][N] = ...;

int w[M][N] = ...;

dvar int X[M][N] in 0..1;

maximize sum( i in M , j in N) v[i][j] * X[i][j];

subject to {

forall(j in N)

sum(i in M)X[i][j] == 1;

forall(i in M)

sum(j in N) w[i][j] * X[i][j] <= b[i];

};

File .dat

m = 5;

n = 10;

v = [[110,65,19,89,62,37,89,78,74,88],

[16,69,93,31,17,115,102,96,27,97],

[25,54,45,72,77,87,98,87,99,99],

[78,28,45,83,18,59,74,55,91,99],

[59,71,9,20,39,97,61,77,5,51]];

w =[[95,54,3,72,44,20,72,75,68,69],

[1,53,91,30,1,99,96,82,8,83],

[21,44,43,56,71,87,97,83,87,98],

[66,26,42,72,13,52,73,44,74,88],

[59,60,5,9,27,85,49,59,4,45]];

b =[91,87,109,88,64]; 103

Laboratorio di Ricerca Operativa - M. Carbone, P. De Rosa, M. Osso

Surgelati

int trimestre=...; //un numero intero multiplo di 4 = 1 anno

range Trimestri = 1..trimestre;

int PrezzoAcquisto[Trimestri]=...;

int Domanda[Trimestri]=...;

int PrezzoVendita=...; // €/Quintale

int PrezzoTrasfSurg=...; // €/Quintale

int CostoMag=...; // €/(Quintale*Mese)

int CapProd=...;// Quintali/Mese

int CapMag=...; //Quintali

dvar float+ X[Trimestri];//quantità di bastoncini prodotti al trimestre

dvar float+ Z[Trimestri];//quantità di bastoncini immagazzinati al trimestre

minimize PrezzoVendita*sum(i in Trimestri)X[i]- //Ricavi

PrezzoTrasfSurg*sum(i in Trimestri)X[i]- //Costi di produzione

3*CostoMag*sum(i in Trimestri)Z[i] - //Costi di magazzino

sum(i in Trimestri)PrezzoAcquisto[i]*X[i];

//Costi di acquisto del pesce

subject to{

forall(i in Trimestri){

X[i]<=3*CapProd; //vincoli sulla capacità produttiva

Z[i]<=CapMag; //vincoli sulla capacità del magazzino;

}

X[1] == Domanda[1] + Z[1]; //equazione di bilancio al primo trimestre

forall(i in Trimestri : i>=2){ //equazioni di bilancio ai trimestri successivi

X[i]+Z[i-1] == Domanda[i]+Z[i];}

/************************************************

*Aggiungere questi vincoli per considerare *

*la deperibilità della merce ogni tre trimestri

Dettagli
A.A. 2022-2023
108 pagine
SSD Scienze matematiche e informatiche MAT/09 Ricerca operativa

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher mario.carbone11 di informazioni apprese con la frequenza delle lezioni di Laboratorio di ricerca operativa e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università della Calabria o del prof Miglionico Giovanna.