forked from scipopt/PySCIPOpt
-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathtest_event.py
More file actions
53 lines (39 loc) · 1.3 KB
/
test_event.py
File metadata and controls
53 lines (39 loc) · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import pytest
from pyscipopt import Model, Eventhdlr, SCIP_RESULT, SCIP_EVENTTYPE, SCIP_PARAMSETTING
calls = []
class MyEvent(Eventhdlr):
def eventinit(self):
calls.append('eventinit')
self.model.catchEvent(SCIP_EVENTTYPE.FIRSTLPSOLVED, self)
def eventexit(self):
calls.append('eventexit')
self.model.dropEvent(SCIP_EVENTTYPE.FIRSTLPSOLVED, self)
def eventexec(self, event):
calls.append('eventexec')
assert event.getType() == SCIP_EVENTTYPE.FIRSTLPSOLVED
assert event.getNode().getNumber() == 1
assert event.getNode().getParent() is None
def test_event():
# create solver instance
s = Model()
s.hideOutput()
s.setPresolve(SCIP_PARAMSETTING.OFF)
eventhdlr = MyEvent()
s.includeEventhdlr(eventhdlr, "TestFirstLPevent", "python event handler to catch FIRSTLPEVENT")
# add some variables
x = s.addVar("x", obj=1.0)
y = s.addVar("y", obj=2.0)
# add some constraint
s.addCons(x + 2*y >= 5)
# solve problem
s.optimize()
# print solution
assert round(s.getVal(x)) == 5.0
assert round(s.getVal(y)) == 0.0
del s
assert 'eventinit' in calls
assert 'eventexit' in calls
assert 'eventexec' in calls
assert len(calls) == 3
if __name__ == "__main__":
test_event()