@@ -109,6 +109,7 @@ mutable struct Optimizer <: MOI.AbstractOptimizer
109
109
solutions:: Vector{SolutionPoint}
110
110
termination_status:: MOI.TerminationStatusCode
111
111
time_limit_sec:: Union{Nothing,Float64}
112
+ solve_time:: Float64
112
113
113
114
function Optimizer (optimizer_factory)
114
115
return new (
@@ -118,6 +119,7 @@ mutable struct Optimizer <: MOI.AbstractOptimizer
118
119
SolutionPoint[],
119
120
MOI. OPTIMIZE_NOT_CALLED,
120
121
nothing ,
122
+ NaN ,
121
123
)
122
124
end
123
125
end
@@ -127,14 +129,16 @@ function MOI.empty!(model::Optimizer)
127
129
model. f = nothing
128
130
model. solutions = SolutionPoint[]
129
131
model. termination_status = MOI. OPTIMIZE_NOT_CALLED
132
+ model. solve_time = NaN
130
133
return
131
134
end
132
135
133
136
function MOI. is_empty (model:: Optimizer )
134
137
return MOI. is_empty (model. inner) &&
135
138
model. f === nothing &&
136
139
isempty (model. solutions) &&
137
- model. termination_status == MOI. OPTIMIZE_NOT_CALLED
140
+ model. termination_status == MOI. OPTIMIZE_NOT_CALLED &&
141
+ isnan (model. solve_time)
138
142
end
139
143
140
144
MOI. supports_incremental_interface (:: Optimizer ) = true
@@ -176,6 +180,12 @@ function _time_limit_exceeded(model::Optimizer, start_time::Float64)
176
180
return false
177
181
end
178
182
183
+ # ## SolveTimeSec
184
+
185
+ function MOI. get (model:: Optimizer , :: MOI.SolveTimeSec )
186
+ return model. solve_time
187
+ end
188
+
179
189
# ## ObjectiveFunction
180
190
181
191
function MOI. supports (
@@ -493,6 +503,7 @@ function MOI.delete(model::Optimizer, ci::MOI.ConstraintIndex)
493
503
end
494
504
495
505
function MOI. optimize! (model:: Optimizer )
506
+ start_time = time ()
496
507
empty! (model. solutions)
497
508
model. termination_status = MOI. OPTIMIZE_NOT_CALLED
498
509
if model. f === nothing
@@ -508,6 +519,7 @@ function MOI.optimize!(model::Optimizer)
508
519
if MOI. supports (model. inner, MOI. TimeLimitSec ())
509
520
MOI. set (model. inner, MOI. TimeLimitSec (), nothing )
510
521
end
522
+ model. solve_time = time () - start_time
511
523
return
512
524
end
513
525
0 commit comments