PySCIPOpt  4.3.0
Python Interface for the SCIP Optimization Suite
even.py
Go to the documentation of this file.
1 
3 
4 
5 
6 
22 
23 from pyscipopt import Model
24 
25 verbose = False
26 sdic = {0:"even",1:"odd"}
27 
28 def parity(number):
29  try:
30  assert number == int(round(number))
31  m = Model()
32  m.hideOutput()
33 
34 
37  x = m.addVar("x", vtype="I", lb=None, ub=None) #ub=None is default
38  n = m.addVar("n", vtype="I", lb=None)
39  s = m.addVar("s", vtype="B")
40 
41 
45  m.addCons(x==number)
46 
47  m.addCons(s == x-2*n)
48  m.setObjective(s)
49  m.optimize()
50 
51  assert m.getStatus() == "optimal"
52  if verbose:
53  for v in m.getVars():
54  print("%s %d" % (v,m.getVal(v)))
55  print("%d%%2 == %d?" % (m.getVal(x), m.getVal(s)))
56  print(m.getVal(s) == m.getVal(x)%2)
57 
58  xval = m.getVal(x)
59  sval = m.getVal(s)
60  sstr = sdic[sval]
61  print("%d is %s" % (xval, sstr))
62  except (AssertionError, TypeError):
63  print("%s is neither even nor odd!" % number.__repr__())
64 
65 if __name__ == "__main__":
66  import sys
67  from ast import literal_eval as leval
68  example_values = [0, 1, 1.5, "hallo welt", 20, 25, -101, -15., -10, -int(2**31), int(2**31-1), int(2**63)-1]
69  try:
70  try:
71  n = leval(sys.argv[1])
72  except ValueError:
73  n = sys.argv[1]
74  parity(n)
75  except IndexError:
76  for n in example_values:
77  parity(n)
even.parity
def parity(number)
Definition: even.py:28