3
3
# Use of this source code is governed by an MIT-style license that can be found
4
4
# in the LICENSE.md file or at https://opensource.org/licenses/MIT.
5
5
6
- # results
7
-
8
6
const _TERMINATION_STATUS_MAP = Dict (
9
7
SCIP_STATUS_UNKNOWN => MOI. OTHER_ERROR,
10
8
SCIP_STATUS_USERINTERRUPT => MOI. INTERRUPTED,
@@ -32,40 +30,36 @@ function MOI.get(o::Optimizer, ::MOI.TerminationStatus)
32
30
end
33
31
34
32
function MOI. get (o:: Optimizer , attr:: MOI.PrimalStatus )
35
- return if 1 <= attr. result_index <= MOI. get (o, MOI. ResultCount ())
36
- MOI. FEASIBLE_POINT
37
- else
38
- MOI. NO_SOLUTION
33
+ if 1 <= attr. result_index <= MOI. get (o, MOI. ResultCount ())
34
+ return MOI. FEASIBLE_POINT
39
35
end
40
- end
41
-
42
- function MOI. get (:: Optimizer , :: MOI.DualStatus )
43
36
return MOI. NO_SOLUTION
44
37
end
45
38
39
+ MOI. get (:: Optimizer , :: MOI.DualStatus ) = MOI. NO_SOLUTION
40
+
46
41
function MOI. get (o:: Optimizer , :: MOI.ResultCount ):: Int
47
42
status = SCIPgetStatus (o)
48
- if status in [ SCIP_STATUS_UNBOUNDED, SCIP_STATUS_INFORUNBD]
43
+ if status in ( SCIP_STATUS_UNBOUNDED, SCIP_STATUS_INFORUNBD)
49
44
return 0
50
45
end
51
46
return SCIPgetNSols (o)
52
47
end
53
48
54
- function MOI. get (o:: Optimizer , :: MOI.RawStatusString )
55
- return string (SCIPgetStatus (o))
56
- end
49
+ MOI. get (o:: Optimizer , :: MOI.RawStatusString ) = string (SCIPgetStatus (o))
57
50
58
51
" Make sure that SCIP is currently in one of the allowed stages."
59
52
function assert_stage (o:: Optimizer , stages)
60
53
stage = SCIPgetStage (o)
61
54
if ! (stage in stages)
62
55
error (" SCIP is wrong stage ($stage , need $stages )!" )
63
56
end
57
+ return
64
58
end
65
59
66
60
" Make sure that the problem was solved (SCIP is in SOLVED stage)."
67
61
function assert_solved (o:: Optimizer )
68
- # SCIP's stage is SOLVING when stopped by user limit!
62
+ # SCIP's stage is SCIP_STAGE_SOLVING when stopped by user limit!
69
63
assert_stage (
70
64
o,
71
65
(
@@ -75,18 +69,15 @@ function assert_solved(o::Optimizer)
75
69
SCIP_STAGE_SOLVED,
76
70
),
77
71
)
78
-
79
- # Check for invalid status (when stage is SOLVING).
72
+ # Check for invalid status (when stage is SCIP_STAGE_SOLVING).
80
73
status = SCIPgetStatus (o)
81
74
if status in
82
75
(SCIP_STATUS_UNKNOWN, SCIP_STATUS_USERINTERRUPT, SCIP_STATUS_TERMINATE)
83
76
error (" SCIP's solving was interrupted, but not by a user-given limit!" )
84
77
end
78
+ return
85
79
end
86
80
87
- " Make sure that: TRANSFORMED ≤ stage ≤ SOLVED."
88
- assert_after_prob (o:: Optimizer ) = assert_stage (o, SCIP_Stage .(3 : 10 ))
89
-
90
81
function MOI. get (o:: Optimizer , attr:: MOI.ObjectiveValue )
91
82
assert_solved (o)
92
83
MOI. check_result_index_bounds (o, attr)
@@ -128,14 +119,15 @@ function MOI.get(
128
119
end
129
120
130
121
function MOI. get (o:: Optimizer , :: MOI.ObjectiveBound )
131
- assert_after_prob (o)
122
+ # Make sure that: TRANSFORMED ≤ stage ≤ SOLVED
123
+ assert_stage (o, SCIP_Stage .(3 : 10 ))
132
124
return SCIPgetDualbound (o)
133
125
end
134
126
135
127
function MOI. get (o:: Optimizer , :: MOI.RelativeGap )
136
128
assert_stage (
137
129
o,
138
- [ SCIP_STAGE_PRESOLVING, SCIP_STAGE_SOLVING, SCIP_STAGE_SOLVED] ,
130
+ ( SCIP_STAGE_PRESOLVING, SCIP_STAGE_SOLVING, SCIP_STAGE_SOLVED) ,
139
131
)
140
132
return SCIPgetGap (o)
141
133
end
@@ -144,14 +136,12 @@ function MOI.get(o::Optimizer, ::MOI.SolveTimeSec)
144
136
return SCIPgetSolvingTime (o)
145
137
end
146
138
147
- function MOI. get (o:: Optimizer , :: MOI.SimplexIterations )
139
+ function MOI. get (o:: Optimizer , :: MOI.SimplexIterations ):: Int64
148
140
assert_stage (
149
141
o,
150
- [ SCIP_STAGE_PRESOLVING, SCIP_STAGE_SOLVING, SCIP_STAGE_SOLVED] ,
142
+ ( SCIP_STAGE_PRESOLVING, SCIP_STAGE_SOLVING, SCIP_STAGE_SOLVED) ,
151
143
)
152
144
return SCIPgetNLPIterations (o)
153
145
end
154
146
155
- function MOI. get (o:: Optimizer , :: MOI.NodeCount )
156
- return SCIPgetNNodes (o)
157
- end
147
+ MOI. get (o:: Optimizer , :: MOI.NodeCount ):: Int64 = SCIPgetNNodes (o)
0 commit comments