PySCIPOpt  4.3.0
Python Interface for the SCIP Optimization Suite
mkp.py
Go to the documentation of this file.
1 
3 """
4 Copyright (c) by Joao Pedro PEDROSO and Mikio KUBO, 2012
5 """
6 from pyscipopt import Model, quicksum, multidict
7 
8 def mkp(I,J,v,a,b):
9  """mkp -- model for solving the multi-constrained knapsack
10  Parameters:
11  - I: set of dimensions
12  - J: set of items
13  - v[j]: value of item j
14  - a[i,j]: weight of item j on dimension i
15  - b[i]: capacity of knapsack on dimension i
16  Returns a model, ready to be solved.
17  """
18  model = Model("mkp")
19 
20  # Create Variables
21  x = {}
22  for j in J:
23  x[j] = model.addVar(vtype="B", name="x(%s)"%j)
24 
25  # Create constraints
26  for i in I:
27  model.addCons(quicksum(a[i,j]*x[j] for j in J) <= b[i], "Capacity(%s)"%i)
28 
29  # Objective
30  model.setObjective(quicksum(v[j]*x[j] for j in J), "maximize")
31  model.data = x
32 
33  return model
34 
35 
36 def example():
37  """creates example data set"""
38  J,v = multidict({1:16, 2:19, 3:23, 4:28})
39  a = {(1,1):2, (1,2):3, (1,3):4, (1,4):5,
40  (2,1):3000, (2,2):3500, (2,3):5100, (2,4):7200,
41  }
42  I,b = multidict({1:7, 2:10000})
43  return I,J,v,a,b
44 
45 
46 if __name__ == "__main__":
47  I,J,v,a,b = example()
48  model = mkp(I,J,v,a,b)
49  x = model.data
50  model.optimize()
51 
52  print("Optimal value:", model.getObjVal())
53 
54  EPS = 1.e-6
55 
56  for i in x:
57  v = x[i]
58  if model.getVal(v) > EPS:
59  print(v.name, "=", model.getVal(v))
pyscipopt.expr.quicksum
def quicksum(termlist)
Definition: expr.pxi:357
mkp
Definition: mkp.py:1
mkp.example
def example()
Definition: mkp.py:36
pyscipopt.Multidict.multidict
def multidict(D)
Definition: Multidict.py:3
mkp.mkp
def mkp(I, J, v, a, b)
Definition: mkp.py:8