Sei sulla pagina 1di 30

Introduzione allutilizzo di Xpress (student edition)

PROGETTO E SIMULAZIONE DEI SISTEMI DI PRODUZIONE E SERVIZIO Gioved 4 Giugno 2009

Traduzione del modello in linguaggio MOSEL (Xpress-MP)


Struttura dei modelli in Xpress-MP (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 del modello scelto dall'utente. Il programma Mosel termina con la parola chiave endmodel.

Traduzione del modello in linguaggio MOSEL (Xpress-MP)


Intestazione del modello
model Cellular Manufacturing" uses "mmxprs" ! Use Xpress-Optimizer .

end-model

Definizioni dei parametri


Pu essere utile definire alcuni parametri (costanti) da utilizzare allinterno del modello. Esempio: parameters DATAFILE= "folio.dat" ! File with problem data OUTFILE= "result.dat ! Output file MAXRISK = 1/3 ! Max. investment into high-risk values MAXVAL = 0. ! Max. investment per share MINAM = 0.5 ! Min. investment into N.-American values end-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 dichiarazioni
Parametri: c:integer f:real IST=1..n d:array(IST) of integer Variabili: x:array(IST) of mpvar s: mpvar

Esempio funzione obiettivo


! Objective: total return Return:= 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)do y(k) is_binary s(k)<=y(k)*Q end-do

Esecuzione del modello (run)


Occorre utilizzare il pulsante:

sullinterfaccia IVE. A meno di messaggi di errore di compilazione (sintassi) o durante lesecuzione, si ottiene il valore delle variabili, della funzione obiettivo, e si pu stampare loutput a video o su un file dati.

Stampa a video dei risultati


! Solution printing writeln("Total return: ", getobjval) forall(s in SHARES) writeln(s, ": ", getsol(frac(s))*100, "%")
Total return: 14.0667 bank: 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)do
writeln("y(",g,") : ",getsol(y(g))) writeln("s(",g,") : ",getsol(s(g))) ....... y(21) : 0 s(21) : 0 y(22) : 1 s(22) : 32 y(23) : 0 s(23) : 0 y(24) : 0 s(24) : 0 y(25) : 0 s(25) : 0 funzione obiettivo: 861 End running model (1.201 sec)

end-do writeln("funzione obiettivo: ",getsol(ret1)+ getsol(ret2)) writeln("End running model") writeln("(", gettime-starttime, " sec)") fclose(F_OUTPUT)

Esempio di modello: lot sizing problem


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: lot sizing problem


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

Esempio di modello: lot sizing problem


xk Modello discreto utilizzato per la risoluzione di problemi di gestione delle scorte (inventory management) dk Domanda
1 Scorte di prodotto presenti allistante k

yk

k-1

xk
k

la variabile decisionale binaria che se pari ad uno, rappresenta lattivazione della produzione di sk unit di prodotto al tempo k

sk Output xk+1

fk
costi fissi di set-up

k+1

ck
Costi di mantenimento per unit di prodotto

Il modello matematico del CLSP


min (ck xk + f k yk )
k =1 n

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

s.t. xk +1 = xk d k + sk 0 = xn d n + s k x1 = 0 sk y k Ck xk 0, sk 0, yk {0,1} k {1,.., n}

k { 1 ,..,

n 1}

k { 1 ,..,

n}

Traduzione del modello CLSP in linguaggio MOSEL


Intestazione
model CapacitatedLotSizingProblem uses "mmxprs","mmsystem"; !gain access to the XpressOptimizer solver

end-model

Traduzione del modello CLSP in linguaggio MOSEL


parameters n=25 end-parameters

Traduzione del modello CLSP in linguaggio MOSEL


declarations
IST = 1..25 x:array(IST) of mpvar !quantit immagazzinate y:array(IST) of mpvar !attivazione della produzione s:array(IST) of mpvar !quantit prodotta d:array(IST) of integer f:array(IST) of integer c:array(IST) of integer C: array(IST) of integer !domanda !costi fissi di produzione !costi di immagazzinamento !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,1 00,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,5 0,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


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

xk +1 = xk d k + sk 0 = xn d n + s k x1 = 0

k { ,..,n1 1 }

Traduzione del modello CLSP in linguaggio MOSEL


Attivazione della produzione e capacit forall(k in IST)do y(k) is_binary s(k)<=y(k)*C(k) end-do s y C
k k k

y k { 0 ,1} k {1 ,.., n }

Traduzione del modello CLSP in linguaggio MOSEL


Fisica realizzabilit delle variabili:

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

xk 0, sk 0 k {1,.., n}

Traduzione del modello CLSP in linguaggio MOSEL


Funzione obiettivo Stock:=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


Output
forall(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")

Caricamento dati da file


declarations n:integer end-declarations

initializations from nomefiledati.dat" n end-initializations

Caricamento dati da file


declarations IST=1..n c: array(IST) of integer f: array(IST) of integer C: array(IST) of integer d:array(IST) of integer end-declarations

Caricamento dati da file


initializations from "DATI_LS.dat" dcfQ end-initializations declarations x:array(IST) of mpvar y:array(IST) of mpvar s:array(IST) of mpvar end-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 dati


fopen("RESULT_LS.dat",F_OUTPUT) forall(k in IST)do writeln("y(",k,") : ",getsol(y(k))) writeln("s(",k,") : ",getsol(s(k))) end-do writeln("funzione obiettivo: ",getsol(Stock)+ getsol(Fixedcharge)) writeln("End running model")

fclose(F_OUTPUT)