Skip to content

Commit 4190dde

Browse files
committed
v0.3.1
1 parent bd74137 commit 4190dde

File tree

2 files changed

+12
-14
lines changed

2 files changed

+12
-14
lines changed

src/pygcgopt/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = '0.3.0'
1+
__version__ = '0.3.1'
22

33
# required for Python 3.8 on Windows
44
import os

tests/test_pricing_solver.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,20 @@ def solve(self, pricingprob, probnr, dualsolconv):
2727
if pricingprob.getNBinVars() + pricingprob.getNIntVars() < len(vars):
2828
return {"status": GCG_PRICINGSTATUS.NOTAPPLICABLE}
2929
for var_name in vars:
30-
if pricingprob.isNegative(vars[var_name].getLbLocal()):
30+
if vars[var_name].getLbLocal() < 0:
3131
return {"status": GCG_PRICINGSTATUS.NOTAPPLICABLE}
3232
conss = pricingprob.getConss()
3333
if len(conss) != 1:
3434
return {"status": GCG_PRICINGSTATUS.NOTAPPLICABLE}
3535

3636
cons = conss[0]
3737

38-
conshdlr_name = cons.getConstraintHandlerName()
39-
if conshdlr_name == "linear":
40-
if not pricingprob.isIntegral(pricingprob.getRhs(cons)) or not pricingprob.isInfinity(-pricingprob.getLhs(cons)):
38+
if cons.isLinear():
39+
if not pricingprob.getRhs(cons).is_integer() or not pricingprob.isInfinity(-pricingprob.getLhs(cons)):
4140
return {"status": GCG_PRICINGSTATUS.NOTAPPLICABLE}
4241

4342
consvals = pricingprob.getValsLinear(cons)
44-
if not all(pricingprob.isIntegral(v) for v in consvals.values()):
43+
if not all(v.is_integer() for v in consvals.values()):
4544
return {"status": GCG_PRICINGSTATUS.NOTAPPLICABLE}
4645
consvals = {k: floor(v) for k, v in consvals.items()}
4746

@@ -64,8 +63,6 @@ def solve(self, pricingprob, probnr, dualsolconv):
6463
ubs[var_name] = floor(abs(prelcapacity / consval))
6564
else:
6665
ubs[var_name] = vars[var_name].getUbLocal()
67-
elif conshdlr_name == "knapsack":
68-
raise NotImplementedError("knapsack constraints are not implemented")
6966
else:
7067
return {"status": GCG_PRICINGSTATUS.NOTAPPLICABLE}
7168

@@ -117,12 +114,11 @@ def solve(self, pricingprob, probnr, dualsolconv):
117114
solvals = defaultdict(int)
118115
for idx in range(len(item_var_map)):
119116
var_name = item_var_map[idx]
120-
assert(consvals[var_name] >= 0 or not vars[var_name].isNegated())
121117
if idx in solitems:
122-
if consvals[var_name] >= 0 and not vars[var_name].isNegated():
118+
if consvals[var_name] >= 0:
123119
solvals[var_name] += 1.0
124120
else:
125-
if consvals[var_name] < 0 or vars[var_name].isNegated():
121+
if consvals[var_name] < 0:
126122
solvals[var_name] += 1.0
127123

128124
for var_name, var in vars.items():
@@ -155,7 +151,7 @@ def test_pypricer_fast(lp_file, dec_file):
155151

156152
m.optimize()
157153

158-
assert(m.getStatus() == "optimal")
154+
assert m.getStatus() == "optimal"
159155

160156
gcg_pricer_sol_obj_val = m.getSolObjVal(m.getBestSol())
161157

@@ -169,10 +165,12 @@ def test_pypricer_fast(lp_file, dec_file):
169165
proxyKnapsackSolver = PyKnapsackSolver()
170166
m.includePricingSolver(proxyKnapsackSolver, "pyknapsack", "Python ortools knapsack pricing solver", 300, False, True)
171167

168+
assert "pyknapsack" in m.listPricingSolvers()
169+
172170
m.optimize()
173171

174-
assert(m.getStatus() == "optimal")
172+
assert m.getStatus() == "optimal"
175173

176174
py_pricer_sol_obj_val = m.getSolObjVal(m.getBestSol())
177175

178-
assert(gcg_pricer_sol_obj_val == py_pricer_sol_obj_val)
176+
assert gcg_pricer_sol_obj_val == py_pricer_sol_obj_val

0 commit comments

Comments
 (0)