Knapsack problem/Unbounded: Difference between revisions

m (→‎{{header|REXX}}: changed/added comments and whitespace, changed indentations.)
Line 2,982:
3 6 5 11 54500
4 9 0 11 54500
</pre>
 
Use SAS/OR:
<lang sas>
/* create SAS data set */
data mydata;
input Item $1-19 Value weight Volume;
datalines;
panacea (vials of) 3000 0.3 0.025
ichor (ampules of) 1800 0.2 0.015
gold (bars) 2500 2.0 0.002
;
 
/* call OPTMODEL procedure in SAS/OR */
proc optmodel;
/* declare sets and parameters, and read input data */
set <str> ITEMS;
num value {ITEMS};
num weight {ITEMS};
num volume {ITEMS};
read data mydata into ITEMS=[item] value weight volume;
 
/* declare variables, objective, and constraints */
var NumSelected {ITEMS} >= 0 integer;
max TotalValue = sum {i in ITEMS} value[i] * NumSelected[i];
con WeightCon:
sum {i in ITEMS} weight[i] * NumSelected[i] <= 25;
con VolumeCon:
sum {i in ITEMS} volume[i] * NumSelected[i] <= 0.25;
 
/* call mixed integer linear programming (MILP) solver */
solve;
 
/* print optimal solution */
print TotalValue;
print NumSelected;
 
/* to get all optimal solutions, call CLP solver instead */
solve with CLP / findallsolns;
 
/* print all optimal solutions */
print TotalValue;
for {s in 1.._NSOL_} print {i in ITEMS} NumSelected[i].sol[s];
quit;
</lang>
 
MILP solver output:
<pre>
TotalValue
54500
 
[1] NumSelected
gold (bars) 11
ichor (ampules of) 0
panacea (vials of) 9
</pre>
 
CLP solver output:
<pre>
TotalValue
54500
 
[1]
gold (bars) 11
ichor (ampules of) 15
panacea (vials of) 0
 
[1]
gold (bars) 11
ichor (ampules of) 10
panacea (vials of) 3
 
[1]
gold (bars) 11
ichor (ampules of) 5
panacea (vials of) 6
 
[1]
gold (bars) 11
ichor (ampules of) 0
panacea (vials of) 9
</pre>
 
Anonymous user