Skip to content

Commit e9dd281

Browse files
authored
Merge pull request #293 from gtjusila/event_handler
Small Bug Fix TO Eventhandler
2 parents 3622f0f + b7f2a37 commit e9dd281

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

src/event_handler.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ function include_event_handler(
6969
eventhdlr = pointer_from_objref(event_handler)
7070

7171
if name == ""
72-
name = "__eventhdlr__$(length(eventhdlrs))"
72+
name = "__eventhdlr__$(length(scipd.eventhdlrs))"
7373
end
7474

7575
@SCIP_CALL SCIPincludeEventhdlrBasic(

test/eventhdlr.jl

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,60 @@ end
7979
# free the problem
8080
finalize(inner)
8181
end
82+
83+
@testset "Nameless Event handler" begin
84+
# create an empty problem
85+
optimizer = SCIP.Optimizer()
86+
inner = optimizer.inner
87+
sepa_set_scip_parameters((par, val) -> SCIP.set_parameter(inner, par, val))
88+
89+
# add variables
90+
x, y = MOI.add_variables(optimizer, 2)
91+
MOI.add_constraint(optimizer, x, MOI.ZeroOne())
92+
MOI.add_constraint(optimizer, y, MOI.ZeroOne())
93+
94+
# add constraint: x + y ≤ 1.5
95+
MOI.add_constraint(
96+
optimizer,
97+
MOI.ScalarAffineFunction(
98+
MOI.ScalarAffineTerm.([1.0, 1.0], [x, y]),
99+
0.0,
100+
),
101+
MOI.LessThan(1.5),
102+
)
103+
104+
# minimize -x - y
105+
MOI.set(
106+
optimizer,
107+
MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}}(),
108+
MOI.ScalarAffineFunction(
109+
MOI.ScalarAffineTerm.([-1.0, -1.0], [x, y]),
110+
0.0,
111+
),
112+
)
113+
MOI.set(optimizer, MOI.ObjectiveSense(), MOI.MIN_SENSE)
114+
115+
# add eventhandler
116+
eventhdlr = FirstLPEventTest.FirstLPEvent(inner, 10)
117+
SCIP.include_event_handler(
118+
inner,
119+
eventhdlr;
120+
name="firstlp",
121+
desc="Store the objective value of the first LP solve at the root node",
122+
)
123+
124+
# transform the problem into SCIP
125+
SCIP.@SCIP_CALL SCIP.SCIPtransformProb(inner)
126+
127+
# catch the event. Again this can only be done after the problem is transformed
128+
SCIP.catch_event(inner, SCIP.SCIP_EVENTTYPE_FIRSTLPSOLVED, eventhdlr)
129+
130+
# solve the problem
131+
SCIP.@SCIP_CALL SCIP.SCIPsolve(inner.scip[])
132+
133+
# test if the event handler worked
134+
@test eventhdlr.firstlpobj != 10
135+
136+
# free the problem
137+
finalize(inner)
138+
end

0 commit comments

Comments
 (0)