In [1]:
2+2
Out[1]:
4
In [2]:
objects = [1,2,3,4,5,6,7,8,9]
weight = {1:30, 2:35, 3:10, 4:15, 5:35, 6:22, 7:29, 8:18, 9:11}
value = {1:240, 2:300, 3:100, 4:150, 5:360, 6:180, 7:220, 8:140, 9:90}
maxweight = 100
In [3]:
def knapsackModel(objects, weight, value, maxweight):
n = len(weight)
from pyscipopt import Model, quicksum, multidict
model = Model("knapsack")
x = {}
for i in objects:
x[i] = model.addVar(vtype="B", name="x(%s)"%i)
model.addCons(quicksum(weight[i]*x[i] for i in objects) <= maxweight, "weight limit")
model.setObjective(quicksum(value[i]*x[i] for i in objects), "maximize")
model.data = x
return model
In [4]:
def solveKnapsack(objects, weight, value, maxweight):
model = knapsackModel(objects, weight, value, maxweight)
model.optimize()
x = model.data
print("Total Price: ", model.getObjVal())
for i in objects:
print("%s" %i, model.getVal(x[i]))
return model.getObjVal()
In [5]:
solveKnapsack(objects, weight, value, maxweight)
Total Price: 930.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 -0.0
Out[5]:
930.0
Plot¶
In [6]:
M = sum(weight[i] for i in objects)
totalValueList = [solveKnapsack(objects, weight, value, i) for i in range(0, M)]
totalWeightList = [i for i in range(0,M)]
Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 0.0 1 0.0 2 0.0 3 0.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 100.0 1 0.0 2 0.0 3 1.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 100.0 1 0.0 2 0.0 3 1.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 -0.0 Total Price: 100.0 1 0.0 2 0.0 3 1.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 -0.0 Total Price: 100.0 1 0.0 2 0.0 3 1.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 -0.0 Total Price: 100.0 1 0.0 2 0.0 3 1.0 4 0.0 5 0.0 6 0.0 7 0.0 8 0.0 9 -0.0 Total Price: 150.0 1 0.0 2 0.0 3 -0.0 4 1.0 5 0.0 6 0.0 7 0.0 8 0.0 9 -0.0 Total Price: 150.0 1 0.0 2 0.0 3 -0.0 4 1.0 5 0.0 6 0.0 7 0.0 8 0.0 9 -0.0 Total Price: 150.0 1 0.0 2 0.0 3 -0.0 4 1.0 5 0.0 6 0.0 7 0.0 8 0.0 9 -0.0 Total Price: 150.0 1 0.0 2 0.0 3 -0.0 4 1.0 5 0.0 6 0.0 7 0.0 8 -0.0 9 -0.0 Total Price: 150.0 1 0.0 2 0.0 3 0.0 4 1.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 150.0 1 0.0 2 0.0 3 0.0 4 1.0 5 0.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 190.0 1 0.0 2 0.0 3 1.0 4 -0.0 5 0.0 6 0.0 7 0.0 8 -0.0 9 1.0 Total Price: 190.0 1 0.0 2 0.0 3 1.0 4 -0.0 5 0.0 6 -0.0 7 0.0 8 -0.0 9 1.0 Total Price: 190.0 1 0.0 2 0.0 3 1.0 4 -0.0 5 0.0 6 -0.0 7 0.0 8 -0.0 9 1.0 Total Price: 190.0 1 0.0 2 0.0 3 1.0 4 -0.0 5 0.0 6 -0.0 7 0.0 8 -0.0 9 1.0 Total Price: 250.0 1 0.0 2 0.0 3 1.0 4 1.0 5 0.0 6 -0.0 7 0.0 8 0.0 9 0.0 Total Price: 250.0 1 0.0 2 0.0 3 1.0 4 1.0 5 0.0 6 -0.0 7 0.0 8 -0.0 9 -0.0 Total Price: 250.0 1 0.0 2 0.0 3 1.0 4 1.0 5 0.0 6 -0.0 7 0.0 8 -0.0 9 -0.0 Total Price: 250.0 1 0.0 2 0.0 3 1.0 4 1.0 5 0.0 6 0.0 7 0.0 8 -0.0 9 0.0 Total Price: 250.0 1 0.0 2 0.0 3 1.0 4 1.0 5 0.0 6 -0.0 7 0.0 8 -0.0 9 0.0 Total Price: 250.0 1 0.0 2 0.0 3 1.0 4 1.0 5 0.0 6 -0.0 7 -0.0 8 -0.0 9 0.0 Total Price: 250.0 1 0.0 2 0.0 3 1.0 4 1.0 5 0.0 6 -0.0 7 -0.0 8 -0.0 9 0.0 Total Price: 280.0 1 0.0 2 0.0 3 1.0 4 0.0 5 0.0 6 1.0 7 -0.0 8 -0.0 9 0.0 Total Price: 290.0 1 -0.0 2 0.0 3 -0.0 4 1.0 5 0.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 290.0 1 -0.0 2 0.0 3 -0.0 4 1.0 5 0.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 360.0 1 -0.0 2 -0.0 3 -0.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 360.0 1 -0.0 2 -0.0 3 -0.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 360.0 1 -0.0 2 -0.0 3 -0.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 360.0 1 -0.0 2 -0.0 3 -0.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 360.0 1 -0.0 2 -0.0 3 0.0 4 0.0 5 1.0 6 0.0 7 0.0 8 0.0 9 0.0 Total Price: 360.0 1 -0.0 2 -0.0 3 -0.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 360.0 1 -0.0 2 -0.0 3 -0.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 360.0 1 -0.0 2 -0.0 3 -0.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 390.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 -0.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 390.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 -0.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 460.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 460.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 460.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 460.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 460.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 510.0 1 -0.0 2 -0.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 510.0 1 -0.0 2 -0.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 510.0 1 -0.0 2 -0.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 510.0 1 -0.0 2 -0.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 510.0 1 -0.0 2 -0.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 510.0 1 -0.0 2 -0.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 550.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 550.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 550.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 550.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 610.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 610.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 610.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 610.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 610.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 610.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 610.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 640.0 1 -0.0 2 -0.0 3 1.0 4 -0.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 650.0 1 -0.0 2 -0.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 650.0 1 -0.0 2 -0.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 660.0 1 -0.0 2 1.0 3 -0.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 700.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 700.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 700.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 700.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 700.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 700.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 700.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 750.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 750.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 760.0 1 -0.0 2 1.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 760.0 1 -0.0 2 1.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 790.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 790.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 790.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 810.0 1 -0.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 810.0 1 -0.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 810.0 1 -0.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 810.0 1 -0.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 840.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 1.0 Total Price: 850.0 1 1.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 850.0 1 -0.0 2 1.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 850.0 1 -0.0 2 1.0 3 1.0 4 -0.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 880.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 880.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 910.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 910.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 910.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 910.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 910.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 930.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 -0.0 Total Price: 940.0 1 1.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 940.0 1 -0.0 2 1.0 3 1.0 4 -0.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 950.0 1 -0.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 950.0 1 -0.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 950.0 1 -0.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1000.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1000.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1000.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1000.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1000.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1020.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1030.0 1 1.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1050.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1050.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1050.0 1 1.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1050.0 1 1.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1090.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1090.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1090.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1090.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1090.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1100.0 1 -0.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1120.0 1 1.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1140.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 1.0 Total Price: 1150.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1150.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1150.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1180.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1180.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1180.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1180.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1180.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1190.0 1 1.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1190.0 1 1.0 2 1.0 3 -0.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1230.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1240.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1240.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1240.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1240.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1240.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1260.0 1 1.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1270.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 1.0 8 1.0 9 -0.0 Total Price: 1290.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1290.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1290.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1320.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1330.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1330.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1330.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1330.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1330.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 -0.0 Total Price: 1340.0 1 1.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1360.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 1.0 8 1.0 9 1.0 Total Price: 1380.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 1.0 Total Price: 1380.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 1.0 Total Price: 1380.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 -0.0 8 1.0 9 1.0 Total Price: 1400.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1420.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1420.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1420.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1420.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1420.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1420.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 -0.0 9 1.0 Total Price: 1450.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 -0.0 Total Price: 1470.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1470.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1470.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1470.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1470.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 -0.0 Total Price: 1480.0 1 1.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 1.0 Total Price: 1480.0 1 1.0 2 -0.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 1.0 Total Price: 1510.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 1.0 8 1.0 9 -0.0 Total Price: 1510.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 1.0 8 1.0 9 -0.0 Total Price: 1510.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 1.0 8 1.0 9 -0.0 Total Price: 1540.0 1 -0.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 1.0 Total Price: 1560.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1560.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1560.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1560.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1560.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1560.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1560.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 -0.0 8 1.0 9 1.0 Total Price: 1600.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 1.0 8 1.0 9 1.0 Total Price: 1600.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 1.0 8 1.0 9 1.0 Total Price: 1600.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 1.0 8 1.0 9 1.0 Total Price: 1600.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 -0.0 7 1.0 8 1.0 9 1.0 Total Price: 1640.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1640.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1640.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1640.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1640.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1640.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1640.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 -0.0 9 1.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0 Total Price: 1690.0 1 1.0 2 1.0 3 1.0 4 1.0 5 1.0 6 1.0 7 1.0 8 1.0 9 0.0
In [7]:
# !pip install matplotlib
import matplotlib.pyplot as plt
plt.plot(totalWeightList, totalValueList)
plt.xlabel("Weight Limit")
plt.ylabel("Total Price of items")
plt.show()
In [8]:
def unlimitedknapsackModel(objects, weight, value, maxweight):
n = len(weight)
from pyscipopt import Model, quicksum, multidict
model = Model("knapsack")
x = {}
for i in objects:
x[i] = model.addVar(vtype="I", name="x(%s)"%i)
model.addCons(quicksum(weight[i]*x[i] for i in objects) <= maxweight, "weight limit")
model.setObjective(quicksum(value[i]*x[i] for i in objects), "maximize")
model.data = x
return model
In [9]:
def solveKnapsack(objects, weight, value, maxweight):
model = unlimitedknapsackModel(objects, weight, value, maxweight)
model.optimize()
x = model.data
print("Total Price: ", model.getObjVal())
for i in objects:
print("%s" %i, model.getVal(x[i]))
return model.getObjVal()
In [10]:
from pyscipopt import Model, multidict, quicksum
objects, weight, value = multidict({"almonds":[30, 240],
"walnuts":[35, 300],
"cashew":[10,100],
"pistachio":[15,150],
"plum":[35, 360],
"cherry":[22,180],
"mango":[29,220],
"apple":[18, 140],
"banana":[11, 90]})
# objects = [1,2,3,4,5,6,7,8,9]
# weight = {1:30, 2:35, 3:10, 4:15, 5:35, 6:22, 7:29, 8:18, 9:11}
# value = {1:240, 2:300, 3:100, 4:150, 5:360, 6:180, 7:220, 8:140, 9:90}
maxweight = 100
In [11]:
solveKnapsack(objects, weight, value, maxweight)
Total Price: 1020.0 almonds 0.0 walnuts 0.0 cashew 3.0 pistachio 0.0 plum 2.0 cherry 0.0 mango 0.0 apple 0.0 banana -0.0
Out[11]:
1020.0
In [ ]: