@@ -42,7 +42,6 @@ class MyConshdlr(Conshdlr):
42
42
def __init__ (self , shouldtrans , shouldcopy ):
43
43
self .shouldtrans = shouldtrans
44
44
self .shouldcopy = shouldcopy
45
- self .first_time = True
46
45
47
46
def createData (self , constraint , nvars , othername ):
48
47
print ("Creating data for my constraint: %s" % constraint .name )
@@ -69,34 +68,29 @@ def conslock(self, constraint, locktype, nlockspos, nlocksneg):
69
68
calls .add ("conslock" )
70
69
assert id (constraint ) in ids
71
70
72
- if self .first_time :
73
- self .first_time = False
71
+ try :
74
72
var = self .model .getVars ()[0 ]
75
- n_locks_up = var .getNLocksUp ()
76
- n_locks_down = var .getNLocksDown ()
77
- n_locks_up_model = var .getNLocksUpType (SCIP_LOCKTYPE .MODEL )
78
- n_locks_up_conflict = var .getNLocksUpType (SCIP_LOCKTYPE .CONFLICT )
79
- n_locks_down_model = var .getNLocksDownType (SCIP_LOCKTYPE .MODEL )
80
- n_locks_down_conflict = var .getNLocksDownType (SCIP_LOCKTYPE .CONFLICT )
81
- assert n_locks_down == 2
82
- assert n_locks_up == 2
83
- assert n_locks_up_model == 2
84
- assert n_locks_up_conflict == 0
85
- assert n_locks_down_model == 2
86
- assert n_locks_down_conflict == 0
87
-
88
- self .model .addVarLocksType (var , SCIP_LOCKTYPE .CONFLICT , nlockspos , nlocksneg )
73
+ except ReferenceError :
74
+ return
75
+
76
+ n_locks_up = var .getNLocksUp ()
77
+ n_locks_down = var .getNLocksDown ()
78
+ n_locks_up_model = var .getNLocksUpType (SCIP_LOCKTYPE .MODEL )
79
+ n_locks_up_conflict = var .getNLocksUpType (SCIP_LOCKTYPE .CONFLICT )
80
+ n_locks_down_model = var .getNLocksDownType (SCIP_LOCKTYPE .MODEL )
81
+ n_locks_down_conflict = var .getNLocksDownType (SCIP_LOCKTYPE .CONFLICT )
82
+
83
+ self .model .addVarLocksType (var , locktype , nlockspos , nlocksneg )
84
+ if locktype == SCIP_LOCKTYPE .CONFLICT :
89
85
assert var .getNLocksUpType (SCIP_LOCKTYPE .CONFLICT ) != n_locks_up_conflict or var .getNLocksDownType (SCIP_LOCKTYPE .CONFLICT ) != n_locks_down_conflict
90
- assert var .getNLocksUpType (SCIP_LOCKTYPE .MODEL ) == n_locks_up_conflict and var .getNLocksDownType (SCIP_LOCKTYPE .MODEL ) == n_locks_down_conflict
86
+ assert var .getNLocksUpType (SCIP_LOCKTYPE .MODEL ) == n_locks_up_model and var .getNLocksDownType (SCIP_LOCKTYPE .MODEL ) == n_locks_down_model
87
+ elif locktype == SCIP_LOCKTYPE .MODEL :
88
+ assert var .getNLocksUpType (SCIP_LOCKTYPE .CONFLICT ) == n_locks_up_conflict and var .getNLocksDownType (SCIP_LOCKTYPE .CONFLICT ) == n_locks_down_conflict
89
+ assert var .getNLocksUpType (SCIP_LOCKTYPE .MODEL ) != n_locks_up_model or var .getNLocksDownType (SCIP_LOCKTYPE .MODEL ) != n_locks_down_model
90
+ else :
91
+ raise ValueError ("Unknown locktype" )
91
92
92
- if locktype == SCIP_LOCKTYPE .MODEL :
93
- self .model .addVarLocks (var , nlockspos , nlocksneg )
94
- assert var .getNLocksUpType (SCIP_LOCKTYPE .MODEL ) != n_locks_up_model or var .getNLocksDownType (SCIP_LOCKTYPE .MODEL ) != n_locks_down_model
95
- elif locktype == SCIP_LOCKTYPE .CONFLICT :
96
- self .model .addVarLocks (var , nlockspos , nlocksneg )
97
- assert var .getNLocksUpType (SCIP_LOCKTYPE .CONFLICT ) != n_locks_up_conflict or var .getNLocksDownType (SCIP_LOCKTYPE .CONFLICT ) != n_locks_down_conflict
98
-
99
- assert var .getNLocksDown () != n_locks_down or var .getNLocksUp () != n_locks_up
93
+ assert var .getNLocksDown () != n_locks_down or var .getNLocksUp () != n_locks_up
100
94
101
95
## callbacks ##
102
96
def consfree (self ):
@@ -217,43 +211,43 @@ def consgetnvars(self, constraint):
217
211
def test_conshdlr ():
218
212
def create_model ():
219
213
# create solver instance
220
- s = Model ()
214
+ model = Model ()
221
215
222
216
# add some variables
223
- x = s .addVar ("x" , obj = - 1.0 , vtype = "I" , lb = - 10 )
224
- y = s .addVar ("y" , obj = 1.0 , vtype = "I" , lb = - 1000 )
225
- z = s .addVar ("z" , obj = 1.0 , vtype = "I" , lb = - 1000 )
217
+ x = model .addVar ("x" , obj = - 1.0 , vtype = "I" , lb = - 10 )
218
+ y = model .addVar ("y" , obj = 1.0 , vtype = "I" , lb = - 1000 )
219
+ z = model .addVar ("z" , obj = 1.0 , vtype = "I" , lb = - 1000 )
226
220
227
221
# add some constraint
228
- s .addCons (314 * x + 867 * y + 860 * z == 363 )
229
- s .addCons (87 * x + 875 * y - 695 * z == 423 )
222
+ model .addCons (314 * x + 867 * y + 860 * z == 363 )
223
+ model .addCons (87 * x + 875 * y - 695 * z == 423 )
230
224
231
225
# create conshdlr and include it to SCIP
232
226
conshdlr = MyConshdlr (shouldtrans = True , shouldcopy = False )
233
- s .includeConshdlr (conshdlr , "PyCons" , "custom constraint handler implemented in python" ,
227
+ model .includeConshdlr (conshdlr , "PyCons" , "custom constraint handler implemented in python" ,
234
228
sepapriority = 1 , enfopriority = 1 , chckpriority = 1 , sepafreq = 10 , propfreq = 50 ,
235
229
eagerfreq = 1 , maxprerounds = - 1 , delaysepa = False , delayprop = False , needscons = True ,
236
230
presoltiming = SCIP_PRESOLTIMING .FAST , proptiming = SCIP_PROPTIMING .BEFORELP )
237
231
238
- cons1 = s .createCons (conshdlr , "cons1name" )
232
+ cons1 = model .createCons (conshdlr , "cons1name" )
239
233
ids .append (id (cons1 ))
240
- cons2 = s .createCons (conshdlr , "cons2name" )
234
+ cons2 = model .createCons (conshdlr , "cons2name" )
241
235
ids .append (id (cons2 ))
242
236
conshdlr .createData (cons1 , 10 , "cons1_anothername" )
243
237
conshdlr .createData (cons2 , 12 , "cons2_anothername" )
244
238
245
239
# add these constraints
246
- s .addPyCons (cons1 )
247
- s .addPyCons (cons2 )
248
- return s
240
+ model .addPyCons (cons1 )
241
+ model .addPyCons (cons2 )
242
+ return model
249
243
250
- s = create_model ()
244
+ model = create_model ()
251
245
252
246
# solve problem
253
- s .optimize ()
247
+ model .optimize ()
254
248
255
249
# so that consfree gets called
256
- del s
250
+ del model
257
251
258
252
# check callbacks got called
259
253
assert "consenfolp" in calls
@@ -279,4 +273,6 @@ def create_model():
279
273
assert "consdisable" in calls
280
274
#assert "consdelvars" in calls
281
275
#assert "consprint" in calls
282
- assert "consgetnvars" in calls
276
+ assert "consgetnvars" in calls
277
+
278
+ test_conshdlr ()
0 commit comments