Professional Documents
Culture Documents
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.