Skip to content

Commit 5ebde24

Browse files
authored
Fix MOI.ObjectiveBound and MOI.RelativeGap (#198)
1 parent 939fff4 commit 5ebde24

1 file changed

Lines changed: 7 additions & 10 deletions

File tree

src/attributes.jl

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,18 @@ function MOI.get(m::Optimizer, attr::MOI.DualObjectiveValue)
1414
end
1515

1616
function MOI.get(m::Optimizer, ::MOI.ObjectiveBound)
17-
if Mosek.solutiondef(m.task, Mosek.MSK_SOL_ITG)
17+
if Mosek.getintinf(m.task, Mosek.MSK_IINF_MIO_OBJ_BOUND_DEFINED) > 0
1818
return Mosek.getdouinf(m.task, Mosek.MSK_DINF_MIO_OBJ_BOUND)
19-
elseif Mosek.solutiondef(m.task, Mosek.MSK_SOL_ITR)
20-
return Mosek.getprimalobj(m.task, Mosek.MSK_SOL_ITR)
21-
elseif Mosek.solutiondef(m.task, Mosek.MSK_SOL_BAS)
22-
return Mosek.getprimalobj(m.task, Mosek.MSK_SOL_BAS)
19+
elseif MOI.get(m, MOI.DualStatus(1)) == MOI.FEASIBLE_POINT
20+
return MOI.get(m, MOI.DualObjectiveValue(1))
2321
end
24-
return 0.0 # TODO(odow): NaN?
22+
return NaN
2523
end
2624

2725
function MOI.get(m::Optimizer, ::MOI.RelativeGap)
28-
if Mosek.solutiondef(m.task, Mosek.MSK_SOL_ITG)
29-
return Mosek.getdouinf(m.task, Mosek.MSK_DINF_MIO_OBJ_REL_GAP)
30-
end
31-
return 0.0 # TODO(odow): NaN?
26+
val = MOI.get(m, MOI.ObjectiveValue(1))
27+
bound = MOI.get(m, MOI.ObjectiveBound())
28+
return abs(val - bound) / max(1e-10, abs(val))
3229
end
3330

3431
function MOI.get(m::Optimizer, ::MOI.SolveTimeSec)

0 commit comments

Comments
 (0)