4 from pyscipopt
import Model
5 from pyscipopt
import quicksum
11 Tutorial example on how to use AND/OR/XOR constraints.
13 N.B.: standard SCIP XOR constraint works differently from AND/OR by design.
14 The constraint is set with a boolean rhs instead of an integer resultant.
15 cf. http://listserv.zib.de/pipermail/scip/2018-May/003392.html
16 A workaround to get the resultant as variable is here proposed.
22 print(
"* %s *" % name)
23 objSet = bool(m.getObjective().terms.keys())
24 print(
"* Is objective set? %s" % objSet)
26 print(
"* Sense: %s" % m.getObjectiveSense())
29 print(
"%s: %d" % (v, round(m.getVal(v))))
35 x = model.addVar(
"x",
"B")
36 y = model.addVar(
"y",
"B")
37 z = model.addVar(
"z",
"B")
38 r = model.addVar(
"r",
"B")
39 model.addConsAnd([x,y,z],r)
41 model.setObjective(r,sense=
"minimize")
48 x = model.addVar(
"x",
"B")
49 y = model.addVar(
"y",
"B")
50 z = model.addVar(
"z",
"B")
51 r = model.addVar(
"r",
"B")
52 model.addConsOr([x,y,z],r)
54 model.setObjective(r,sense=
"maximize")
61 x = model.addVar(
"x",
"B")
62 y = model.addVar(
"y",
"B")
63 z = model.addVar(
"z",
"B")
65 model.addConsXor([x,y,z],r)
68 printFunc(
"Standard XOR (as boolean)",model)
73 x = model.addVar(
"x",
"B")
74 y = model.addVar(
"y",
"B")
75 z = model.addVar(
"z",
"B")
76 r = model.addVar(
"r",
"B")
77 n = model.addVar(
"n",
"I")
78 model.addCons(r+
quicksum([x,y,z]) == 2*n)
80 model.setObjective(r,sense=
"maximize")
82 printFunc(
"Custom XOR (as variable)",model)