Skip to content

Commit 65b565d

Browse files
authored
Add time limits to compute ideal point & dichotomy starting solutions (#99)
1 parent 9a789dd commit 65b565d

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

src/MultiObjectiveAlgorithms.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -559,13 +559,16 @@ function MOI.delete(model::Optimizer, ci::MOI.ConstraintIndex)
559559
return
560560
end
561561

562-
function _compute_ideal_point(model::Optimizer)
562+
function _compute_ideal_point(model::Optimizer, start_time)
563563
objectives = MOI.Utilities.eachscalar(model.f)
564564
model.ideal_point = fill(NaN, length(objectives))
565565
if !MOI.get(model, ComputeIdealPoint())
566566
return
567567
end
568568
for (i, f) in enumerate(objectives)
569+
if _time_limit_exceeded(model, start_time)
570+
return
571+
end
569572
MOI.set(model.inner, MOI.ObjectiveFunction{typeof(f)}(), f)
570573
MOI.optimize!(model.inner)
571574
status = MOI.get(model.inner, MOI.TerminationStatus())
@@ -584,7 +587,7 @@ function MOI.optimize!(model::Optimizer)
584587
model.termination_status = MOI.INVALID_MODEL
585588
return
586589
end
587-
_compute_ideal_point(model)
590+
_compute_ideal_point(model, start_time)
588591
algorithm = something(model.algorithm, default(Algorithm()))
589592
status, solutions = optimize_multiobjective!(algorithm, model)
590593
model.termination_status = status

src/algorithms/Dichotomy.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,17 @@ function optimize_multiobjective!(algorithm::Dichotomy, model::Optimizer)
8181
error("Only scalar or bi-objective problems supported.")
8282
end
8383
if MOI.output_dimension(model.f) == 1
84+
if _time_limit_exceeded(model, start_time)
85+
return MOI.TIME_LIMIT, nothing
86+
end
8487
status, solution = _solve_weighted_sum(model, algorithm, [1.0])
8588
return status, [solution]
8689
end
8790
solutions = Dict{Float64,SolutionPoint}()
8891
for w in (0.0, 1.0)
92+
if _time_limit_exceeded(model, start_time)
93+
return MOI.TIME_LIMIT, nothing
94+
end
8995
status, solution = _solve_weighted_sum(model, algorithm, w)
9096
if !_is_scalar_status_optimal(status)
9197
return status, nothing

test/algorithms/Dichotomy.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ function test_time_limit()
261261
)
262262
MOI.optimize!(model)
263263
@test MOI.get(model, MOI.TerminationStatus()) == MOI.TIME_LIMIT
264-
@test MOI.get(model, MOI.ResultCount()) > 0
264+
@test MOI.get(model, MOI.ResultCount()) == 0
265265
return
266266
end
267267

0 commit comments

Comments
 (0)