30
Introduzione all Introduzione all utilizzo di utilizzo di Xpress Xpress ( ( student student edition edition ) ) PROGETTO E SIMULAZIONE DEI SISTEMI DI PRODUZIONE E SERVIZIO Giovedì 4 Giugno 2009

Manual Xpress

Embed Size (px)

Citation preview

Page 1: Manual Xpress

Introduzione allIntroduzione all’’utilizzo di utilizzo di XpressXpress ((studentstudent editionedition))

PROGETTO E SIMULAZIONE DEI SISTEMI DI PRODUZIONE E

SERVIZIOGiovedì 4 Giugno 2009

Page 2: Manual Xpress

Traduzione del modello in linguaggio MOSEL (Xpress-MP)

StrutturaStruttura deidei modellimodelli in in XpressXpress--MPMP (Mosel)(Mosel)• Intestazione• Parametri• Dichiarazioni• Costruzione del modello

• Funzione obiettivo• Vincoli

• Soluzione del modello• Visualizzazione dei risultati a video• Esportazione dei risultati su file dati

Page 3: Manual Xpress

Intestazioni del modello

• Ogni programma Mosel inizia con la parola chiave model, seguita dal nome delmodello scelto dall'utente. Il programma Mosel termina con la parola chiave end-model.

Page 4: Manual Xpress

Traduzione del modello in linguaggio MOSEL (Xpress-MP)

IntestazioneIntestazione del del modellomodello

model “Cellular Manufacturing"uses "mmxprs" ! Use Xpress-Optimizer….end-model

Page 5: Manual Xpress

Definizioni dei parametri• Può essere utile definire alcuni parametri (costanti) da

utilizzare all’interno del modello.

Esempio: parametersDATAFILE= "folio.dat" ! File with problem dataOUTFILE= "result.dat“ ! Output file MAXRISK = 1/3 ! Max. investment into high-risk valuesMAXVAL = 0. ! Max. investment per shareMINAM = 0.5 ! Min. investment into N.-American valuesend-parameters

Page 6: Manual Xpress

Dichiarazione oggetti (declarations)

• Si utilizza per introdurre gli insiemi, le variabili, i vettori di parametri.

• Si possono inserire diverse sezioni nel modello, ciascuna indicata con:

declarations……..end-declarations

Page 7: Manual Xpress

Esempi di dichiarazioniParametri:c:integerf:realIST=1..nd:array(IST) of integerVariabili:x:array(IST) of mpvars: mpvar

Page 8: Manual Xpress

Esempio funzione obiettivo

! Objective: total returnReturn:= sum(s in SHARES) RET(s)*frac(s)

…….

Maximize(Return)

Page 9: Manual Xpress

Esempio espressione di insiemi di vincoli

• x(1)=0

• forall(k in IST) x(k)>=0

• sum(s in SHARES) frac(s) = 1

• forall(k in IST)doy(k) is_binarys(k)<=y(k)*Q

end-do

Page 10: Manual Xpress

Esecuzione del modello (run)Occorre utilizzare il pulsante:

sull’interfaccia IVE. A meno di messaggi di errore di compilazione (sintassi) o durante l’esecuzione, si ottiene il valore delle variabili, della funzione obiettivo, e si può stampare l’output a video o su un file dati.

Page 11: Manual Xpress

Stampa a video dei risultatiStampa a video dei risultati

! Solution printingwriteln("Total return: ", getobjval)forall(s in SHARES) writeln(s, ": ", getsol(frac(s))*100, "%")

Total return: 14.0667bank: 0%brewery: 6.66667%cars: 0%electronics: 0%hardware: 0%highways: 30%software: 13.3333%telecom: 0%theater: 20%treasury: 30%

Page 12: Manual Xpress

Esportazione su file dati dei risultati

fopen("RESULT_LS.dat",F_OUTPUT)

forall(g in IST)dowriteln("y(",g,") : ",getsol(y(g)))writeln("s(",g,") : ",getsol(s(g)))

end-dowriteln("funzione obiettivo:

",getsol(ret1)+ getsol(ret2))writeln("End running model")

writeln("(", gettime-starttime, " sec)")

fclose(F_OUTPUT)

.......y(21) : 0s(21) : 0y(22) : 1s(22) : 32y(23) : 0s(23) : 0y(24) : 0s(24) : 0y(25) : 0s(25) : 0funzione obiettivo: 861End running model(1.201 sec)

Page 13: Manual Xpress

Esempio di modello: lotlot sizingsizing problemproblem

• Modello per il dimensionamento ottimo della produzione su un orizzonte temporale discretizzato

• Minimizzazione dei costi complessivi di produzione nel rispetto della domanda assegnata ad ogni instante e di altri vincoli operativi

Page 14: Manual Xpress

Esempio di modello: lotlot sizingsizingproblemproblem

Tipologie di costi considerati• Costi fissi di produzione• Costi di immagazzinamento

Vincoli operativi• Bilanciamento dei flussi• Capacità produttiva

Parametri• Domanda• Capacità installata nei diversi periodi temporali

Page 15: Manual Xpress

Modello discreto utilizzato per la risoluzione di

problemi di gestione delle scorte (inventory

management)

1

k-1

k

k+1

xk

xk+1

sk Output

dkDomanda

n

ckCosti di mantenimento per unità di prodotto

xkScorte di prodotto

presenti all’istante k ykè la variabile decisionale

binaria che se pari ad uno, rappresenta l’attivazione della

produzione di sk unità di prodotto al tempo k

Esempio di modello: lotlot sizingsizing problemproblem

fkcosti fissi di set-up

Page 16: Manual Xpress

Il modello matematico del CLSP

},..,1{}1,0{,0,0

00

..

)(min

1

1

1

nkysx

Cys

xsdx

sdxx

ts

yfxc

kkk

kkk

knn

kkkk

kk

n

kkk

∈∀∈≥≥

=+−=+−=

+

+

=∑

}1,..,1{ −∈∀ nk

},..,1{ nk ∈∀

In caso di capacità non fisse nel tempo (C=C(k))il problema è NP-Hard

Page 17: Manual Xpress

Traduzione del modello CLSP in linguaggio MOSEL

• Intestazionemodel CapacitatedLotSizingProblemuses "mmxprs","mmsystem"; !gain access to the Xpress-

Optimizer solver……

end-model

Page 18: Manual Xpress

parameters

n=25

end-parameters

Traduzione del modello CLSP in linguaggio MOSEL

Page 19: Manual Xpress

declarationsIST = 1..25

x:array(IST) of mpvar !quantità immagazzinatey:array(IST) of mpvar !attivazione della produziones:array(IST) of mpvar !quantità prodotta

d:array(IST) of integer !domandaf:array(IST) of integer !costi fissi di produzionec:array(IST) of integer !costi di immagazzinamentoC: array(IST) of integer !capacità produttiva

end-declarations

Traduzione del modello CLSP in linguaggio MOSEL

Page 20: Manual Xpress

Inizializzazioni dei vettori di parametri

f::[100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100]

d::[1,0,2,3,0,0,0,0,0,17,0,0,0,11,5,25,0,0,0,5,3,24,0,0,0]

C::[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]

c::[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]

Traduzione del modello CLSP in linguaggio MOSEL

Page 21: Manual Xpress

Traduzione del modello CLSP in linguaggio MOSEL

Vincoli di conservazione del flusso produttivoforall(k in 1..n-1)x(k+1)=x(k)-d(k)+s(k)0=x(n)-d(n)+s(n)x(1)=0

00

1

1

=+−=+−=+

xsdx

sdxx

knn

kkkk }1,..,1{ −∈∀ nk

Page 22: Manual Xpress

Traduzione del modello CLSP in linguaggio MOSEL

Attivazione della produzione e capacitàforall(k in IST)do

y(k) is_binarys(k)<=y(k)*C(k)

end-do

},..,1{}1,0{

nky

Cys

k

kkk

∈∀∈≤

Page 23: Manual Xpress

Traduzione del modello CLSP in linguaggio MOSEL

Fisica realizzabilità delle variabili:forall(k in IST)x(k)>=0forall(k in IST)s(k)>=0

},..,1{0,0

nksx kk

∈∀≥≥

Page 24: Manual Xpress

• Funzione obiettivoStock:=sum(k in IST)c(k)*x(k)FixedCharge:=sum(k in IST)f(k)*y(k)

minimize(Stock+FixedCharge)

Traduzione del modello CLSP in linguaggio MOSEL

Page 25: Manual Xpress

Outputforall(k in IST)do

writeln("y(",k,") : ",getsol(y(k)))writeln("s(",k,") : ",getsol(s(k))) writeln("x(",k,") : ",getsol(x(k))) end-do

writeln("funzione obiettivo: ",getsol(Fixedcharge)+ getsol(Stock))

writeln("End running model")

Traduzione del modello CLSP in linguaggio MOSEL

Page 26: Manual Xpress

Caricamento dati da filedeclarations

n:integer

end-declarations

initializations from “nomefiledati.dat"nend-initializations

Page 27: Manual Xpress

declarationsIST=1..nc: array(IST) of integerf: array(IST) of integerC: array(IST) of integerd:array(IST) of integer

end-declarations

Caricamento dati da file

Page 28: Manual Xpress

Caricamento dati da fileinitializations from "DATI_LS.dat"d c f Q end-initializations

declarationsx:array(IST) of mpvary:array(IST) of mpvars:array(IST) of mpvarend-declarations

Page 29: Manual Xpress

Descrizione del file dati

f:[100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100]

d:[1,0,2,3,0,0,0,0,0,17,0,0,0,11,5,25,0,0,0,5,3,24,0,0,0]

C:[50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]

c:[5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]n: 25

Page 30: Manual Xpress

Esportazione output su file datifopen("RESULT_LS.dat",F_OUTPUT)

forall(k in IST)dowriteln("y(",k,") : ",getsol(y(k)))

writeln("s(",k,") : ",getsol(s(k))) end-dowriteln("funzione obiettivo: ",getsol(Stock)+

getsol(Fixedcharge))writeln("End running model")

fclose(F_OUTPUT)