# ci serve un Solver che gestisca i vincoli di interezza: option solver cplex; # cplex gestisce anche i vincoli di interezza. # infatti, se sperimentiamo il seguente, otteniamo soluzioni frazionarie # option solver minos; # solo PL, non gestisce la PLI # lanciamo il Solver: solve; # Stampa della soluzione: # option omit_zero_rows 1; # non voglio vengano visualizzate variabili a zero display metto; printf "VALORE TOTALE = "; display sum{(i,j) in CELL} VALORE[i,j] * metto[i,j]; print "Regine che metto:"; printf "Riga\tColonna\t\tValore\t\tValore Cum.\n"; param valoreCumulato default 0; for {(i,j) in CELL: metto[i,j] > 0} { let valoreCumulato := valoreCumulato + VALORE[i,j]; printf "%0s\t%0s\t\t%3d\t\t%3d\n", i, j, VALORE[i,j], valoreCumulato; }; printf "\n"; # se siete su Windows probabilmente le seguenti righe vi funzionano: #table scacchieraEXCEL OUT "ODCB" "regine.xls": # {r in Rows} -> [Row], # {c in Cols} < metto[r,c] ~ ('Col' & c) >; #write table scacchieraEXCEL; table scacchieraASCII OUT "regine.tab": {r in Rows} -> [Row], {c in Cols} < metto[r,c] ~ ('Col' & c) >; write table scacchieraASCII; quit;