@@ -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