Sei sulla pagina 1di 29

Introduzione alluso di FICO Xpress

Metodi di Ottimizzazione per la Logistica e la Produzione


1
Alcuni risolutori per la
Programmazione Matematica

2
Indice
Sono a disposizione numerosi risolutori di
Programmazione Matematica, soprattutto rivolti alla
Programmazione Lineare e Lineare Intera:
Microsoft Solver per Excel
Gurobi
Cplex
Xpress
Lindo

Lista esaustiva su Wikipedia alla voce Linear
Programming
3
CPLEX
http://www-01.ibm.com/software/commerce/optimization/cplex-optimizer/index.html
4
Gurobi
http://www.gurobi.com/
5
Lindo
http://www.lindo.com/
6
AMPL
http://www.ampl.com/
7
XPRESS
http://www.fico.com/en/Products/DMTools/Pages/FICO-Xpress-Optimization-Suite.aspx
8
Il software XPRESS

9
Caratteristiche Generali
Interfaccia user-friendly
Linguaggio di programmazione molto semplice
Implementazione di modelli matematici
Implementazione di semplici algoritmi euristici
Possibili di chiamata da C/C++
Student edition gratuita
Numerose estensioni
Schermate grafiche
Programmazione matematica non lineare

10
XPRESS Optimization Suite
http://www.fico.com/en/Products/DMTools/xpress-overview/Pages/Xpress-Optimizer.aspx
11
XPRESS Linguaggio MOSEL
http://www.fico.com/en/Products/DMTools/xpress-overview/Pages/Xpress-Mosel.aspx
12
Versione gratuita per studenti
http://optimization.fico.com/student-version-of-fico-xpress.html
13
Manuale e altro materiale per lutilizzo
http://www.fico.com/en/Products/DMTools/xpress-overview/Pages/Xpress-Documentation.aspx
14
Uso dellinterfaccia grafica

15
Interfaccia grafica
16
Esempio 1
17
model esempio1
uses "mmxprs"

declarations
x1, x2: mpvar
end-declarations

z:= x1 + 2*x2
3*x1 + 2*x2 <= 400
x1 + 3*x2 <= 200

maximize(z)

writeln("z = ", getobjval )
writeln("x1 = ",getsol(x1) )
writeln("x2 = ",getsol(x2) )

end-model
Nome modello e direttive
Dichiarazioni variabili e
parametri di input
Modello con funzione obiettivo e
vincoli
Esecuzione del modello
Scrittura output
Esempio 1
18
z = 171.429
x1 = 114.286
x2 = 28.
Esecuzione :
Esempio 2: Knapsack Problem
Maximize MaxVal =

8
1

i
i i
X Value
s. t. MaxWeight =
WTMAX X Weight
i
i i

8
1

Binary X
i
:
Dati: WTMAX = 102 e:
Item 1 2 3 4 5 6 7 8
Value 15 100 90 60 40 15 10 1
Weight 2 20 20 30 40 30 60 10
Elementi necessari allimplementazione
Dichiarazione di
array di numeri reali Weight (i) e Value(i)
Dichiarazione di un array di variabili decisionali X(i)
range di definizione degli array come items=1..8
valore costante capacit
Dati di input per Weight (i) e Value(i);
Definizione delle sommatorie
Uso di loop
Variabili binarie
20
Implementazione
model knapsack
uses "mmxprs
declarations
items = 1..8
profitti: array(items) of integer
pesi: array(items) of integer
x: array(items) of mpvar
cap: integer
end-declarations
profitti:: [15, 100, 90, 60, 40, 15, 10, 1 ]
pesi:: [ 2, 20, 20, 30, 40, 30, 60, 10 ]
cap:= 102
z:= sum(i in items) profitti(i)*x(i)
v1:= sum(i in items) pesi(i)*x(i) <= cap
forall(i in items) x(i) is_binary
maximize(z)
writeln("z = ", getobjval)
forall(i in items) do
writeln("x[",i,"]= ",getsol( x(i) ) )
end-do
end-model
21
Output:
z = 280
x[1]= 1
x[2]= 1
x[3]= 1
x[4]= 1
x[5]= 0
x[6]= 1
x[7]= 0
x[8]= 0
Alcuni elementi utili alluso del
linguaggio MOSEL
22
Memoria dinamica
23
E necessario in questo caso inizializzare in modo opportuno i dati:
E preferibile usare lallocazione dinamica della memoria
Stringhe
24
E necessario anche in questo
caso inizializzare in modo
opportuno i dati:
E possibile utilizzare delle stringhe alfanumeriche per indicizzare i dati:
Variabili associate a vincoli
25
E possibile associare variabili alla f.o. ed ai vincoli:
che possono essere opportunatamente interrogate:
if-then
26
Mosel permette di controllare lordine di esecuzione di un programma per
mezzo di due tipi di controlli: selezione e loop.

Listruzione di selezione pi semplice listruzione if-then:
Esistono anche le istruzioni if-then-else ed if-then-elif-then-else.
Loop: forall
27
Listruzione di loop pi semplice listruzione forall:
Altri loop sono:
while (do .... end-do)
repeat .... until
Loop: repat - until
28
Unaltra istruzione di loop il repeat-until:
Loop: condizioni logiche
29
E possibile costruire condizioni logiche per mezzo degli
operatori >=, <=, =, and, or, not.