@@ -14,21 +14,18 @@ function MOI.get(m::Optimizer, attr::MOI.DualObjectiveValue)
1414end
1515
1616function 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
2523end
2624
2725function 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))
3229end
3330
3431function MOI. get (m:: Optimizer , :: MOI.SolveTimeSec )
0 commit comments