Introduzione allIntroduzione all’’utilizzo di utilizzo di XpressXpress ((studentstudent editionedition))
PROGETTO E SIMULAZIONE DEI SISTEMI DI PRODUZIONE E
SERVIZIOGiovedì 4 Giugno 2009
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
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.
Traduzione del modello in linguaggio MOSEL (Xpress-MP)
IntestazioneIntestazione del del modellomodello
model “Cellular Manufacturing"uses "mmxprs" ! Use Xpress-Optimizer….end-model
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
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
Esempi di dichiarazioniParametri:c:integerf:realIST=1..nd:array(IST) of integerVariabili:x:array(IST) of mpvars: mpvar
Esempio funzione obiettivo
! Objective: total returnReturn:= sum(s in SHARES) RET(s)*frac(s)
…….
Maximize(Return)
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
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.
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%
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)
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
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
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
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
Traduzione del modello CLSP in linguaggio MOSEL
• Intestazionemodel CapacitatedLotSizingProblemuses "mmxprs","mmsystem"; !gain access to the Xpress-
Optimizer solver……
end-model
parameters
n=25
end-parameters
Traduzione del modello CLSP in linguaggio MOSEL
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
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
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
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
∈∀∈≤
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
∈∀≥≥
• 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
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
Caricamento dati da filedeclarations
n:integer
end-declarations
initializations from “nomefiledati.dat"nend-initializations
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
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
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
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)