PySCIPOpt  4.3.0
Python Interface for the SCIP Optimization Suite
prodmix_soco.py
Go to the documentation of this file.
1 
3 """
4 Copyright (c) by Joao Pedro PEDROSO, Masahiro MURAMATSU and Mikio KUBO, 2012
5 """
6 from pyscipopt import Model, quicksum, multidict
7 
8 def prodmix(I,K,a,p,epsilon,LB):
9  """prodmix: robust production planning using soco
10  Parameters:
11  I - set of materials
12  K - set of components
13  a[i][k] - coef. matrix
14  p[i] - price of material i
15  LB[k] - amount needed for k
16  Returns a model, ready to be solved.
17  """
18 
19  model = Model("robust product mix")
20 
21  x,rhs = {},{}
22  for i in I:
23  x[i] = model.addVar(vtype="C", name="x(%s)"%i)
24  for k in K:
25  rhs[k] = model.addVar(vtype="C", name="rhs(%s)"%k)
26 
27  model.addCons(quicksum(x[i] for i in I) == 1)
28  for k in K:
29  model.addCons(rhs[k] == -LB[k]+ quicksum(a[i,k]*x[i] for i in I) )
30  model.addCons(quicksum(epsilon*epsilon*x[i]*x[i] for i in I) <= rhs[k]*rhs[k])
31 
32  model.setObjective(quicksum(p[i]*x[i] for i in I), "minimize")
33 
34  model.data = x,rhs
35  return model
36 
37 
38 def make_data():
39  """creates example data set"""
40  a = { (1,1):.25, (1,2):.15, (1,3):.2,
41  (2,1):.3, (2,2):.3, (2,3):.1,
42  (3,1):.15, (3,2):.65, (3,3):.05,
43  (4,1):.1, (4,2):.05, (4,3):.8
44  }
45  epsilon = 0.01
46  I,p = multidict({1:5, 2:6, 3:8, 4:20})
47  K,LB = multidict({1:.2, 2:.3, 3:.2})
48  return I,K,a,p,epsilon,LB
49 
50 
51 if __name__ == "__main__":
52  I,K,a,p,epsilon,LB = make_data()
53  model = prodmix(I,K,a,p,epsilon,LB)
54  model.optimize()
55  print("Objective value:",model.getObjVal())
56  x,rhs = model.data
57  for i in I:
58  print(i,": ",model.getVal(x[i]))
pyscipopt.expr.quicksum
def quicksum(termlist)
Definition: expr.pxi:357
prodmix_soco.prodmix
def prodmix(I, K, a, p, epsilon, LB)
Definition: prodmix_soco.py:8
pyscipopt.Multidict.multidict
def multidict(D)
Definition: Multidict.py:3
prodmix_soco.make_data
def make_data()
Definition: prodmix_soco.py:38