Skip to content

Commit f5db69d

Browse files
authored
Add MOA.SolveTimeSecInner (#195)
1 parent b5bd81f commit f5db69d

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,10 @@ the solution process.
9393
* `MOA.SolutionLimit()`
9494
* `MOI.TimeLimitSec()`
9595

96-
Query the number of scalar subproblems that were solved using
96+
There are also the following result attributes that can be queried after the
97+
solve:
9798

99+
* `MOA.SolveTimeInner()`
98100
* `MOA.SubproblemCount()`
99101

100102
For example:

src/MultiObjectiveAlgorithms.jl

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ mutable struct Optimizer <: MOI.AbstractOptimizer
224224
Float64[],
225225
_default(ComputeIdealPoint()),
226226
0,
227-
0.0,
227+
NaN,
228228
optimizer_factory,
229229
)
230230
end
@@ -239,6 +239,7 @@ function MOI.empty!(model::Optimizer)
239239
model.start_time = NaN
240240
empty!(model.ideal_point)
241241
model.subproblem_count = 0
242+
model.solve_time_inner = NaN
242243
return
243244
end
244245

@@ -343,9 +344,21 @@ end
343344

344345
### SolveTimeSec
345346

346-
function MOI.get(model::Optimizer, ::MOI.SolveTimeSec)
347-
return model.solve_time
348-
end
347+
MOI.get(model::Optimizer, ::MOI.SolveTimeSec) = model.solve_time
348+
349+
### SolveTimeSecInner
350+
351+
"""
352+
SolveTimeSecInner <: AbstractModelAttribute -> Float64
353+
354+
A result attribute for querying the total solve time of subproblem solves by an
355+
algorithm.
356+
"""
357+
struct SolveTimeSecInner <: MOI.AbstractModelAttribute end
358+
359+
MOI.is_set_by_optimize(::SolveTimeSecInner) = true
360+
361+
MOI.get(model::Optimizer, ::SolveTimeSecInner) = model.solve_time_inner
349362

350363
### ObjectiveFunction
351364

test/test_model.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,16 @@ function test_solve_time()
9494
MOI.set(model, MOI.ObjectiveFunction{typeof(f)}(), f)
9595
MOI.set(model, MOI.ObjectiveSense(), MOI.MAX_SENSE)
9696
@test isnan(MOI.get(model, MOI.SolveTimeSec()))
97+
@test MOI.is_set_by_optimize(MOA.SolveTimeSecInner())
98+
@test isnan(MOI.get(model, MOA.SolveTimeSecInner()))
9799
MOI.optimize!(model)
98100
@test MOI.get(model, MOI.SolveTimeSec()) >= 0
101+
@test MOI.get(model, MOA.SolveTimeSecInner()) >= 0
102+
@test MOI.get(model, MOI.SolveTimeSec()) == model.solve_time
103+
@test MOI.get(model, MOA.SolveTimeSecInner()) == model.solve_time_inner
104+
MOI.empty!(model)
105+
@test isnan(MOI.get(model, MOI.SolveTimeSec()))
106+
@test isnan(MOI.get(model, MOA.SolveTimeSecInner()))
99107
return
100108
end
101109

0 commit comments

Comments
 (0)