@@ -27,21 +27,20 @@ def solve(self, pricingprob, probnr, dualsolconv):
27
27
if pricingprob .getNBinVars () + pricingprob .getNIntVars () < len (vars ):
28
28
return {"status" : GCG_PRICINGSTATUS .NOTAPPLICABLE }
29
29
for var_name in vars :
30
- if pricingprob . isNegative ( vars [var_name ].getLbLocal ()) :
30
+ if vars [var_name ].getLbLocal () < 0 :
31
31
return {"status" : GCG_PRICINGSTATUS .NOTAPPLICABLE }
32
32
conss = pricingprob .getConss ()
33
33
if len (conss ) != 1 :
34
34
return {"status" : GCG_PRICINGSTATUS .NOTAPPLICABLE }
35
35
36
36
cons = conss [0 ]
37
37
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 )):
41
40
return {"status" : GCG_PRICINGSTATUS .NOTAPPLICABLE }
42
41
43
42
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 ()):
45
44
return {"status" : GCG_PRICINGSTATUS .NOTAPPLICABLE }
46
45
consvals = {k : floor (v ) for k , v in consvals .items ()}
47
46
@@ -64,8 +63,6 @@ def solve(self, pricingprob, probnr, dualsolconv):
64
63
ubs [var_name ] = floor (abs (prelcapacity / consval ))
65
64
else :
66
65
ubs [var_name ] = vars [var_name ].getUbLocal ()
67
- elif conshdlr_name == "knapsack" :
68
- raise NotImplementedError ("knapsack constraints are not implemented" )
69
66
else :
70
67
return {"status" : GCG_PRICINGSTATUS .NOTAPPLICABLE }
71
68
@@ -117,12 +114,11 @@ def solve(self, pricingprob, probnr, dualsolconv):
117
114
solvals = defaultdict (int )
118
115
for idx in range (len (item_var_map )):
119
116
var_name = item_var_map [idx ]
120
- assert (consvals [var_name ] >= 0 or not vars [var_name ].isNegated ())
121
117
if idx in solitems :
122
- if consvals [var_name ] >= 0 and not vars [ var_name ]. isNegated () :
118
+ if consvals [var_name ] >= 0 :
123
119
solvals [var_name ] += 1.0
124
120
else :
125
- if consvals [var_name ] < 0 or vars [ var_name ]. isNegated () :
121
+ if consvals [var_name ] < 0 :
126
122
solvals [var_name ] += 1.0
127
123
128
124
for var_name , var in vars .items ():
@@ -155,7 +151,7 @@ def test_pypricer_fast(lp_file, dec_file):
155
151
156
152
m .optimize ()
157
153
158
- assert ( m .getStatus () == "optimal" )
154
+ assert m .getStatus () == "optimal"
159
155
160
156
gcg_pricer_sol_obj_val = m .getSolObjVal (m .getBestSol ())
161
157
@@ -169,10 +165,12 @@ def test_pypricer_fast(lp_file, dec_file):
169
165
proxyKnapsackSolver = PyKnapsackSolver ()
170
166
m .includePricingSolver (proxyKnapsackSolver , "pyknapsack" , "Python ortools knapsack pricing solver" , 300 , False , True )
171
167
168
+ assert "pyknapsack" in m .listPricingSolvers ()
169
+
172
170
m .optimize ()
173
171
174
- assert ( m .getStatus () == "optimal" )
172
+ assert m .getStatus () == "optimal"
175
173
176
174
py_pricer_sol_obj_val = m .getSolObjVal (m .getBestSol ())
177
175
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