diff --git a/src/MultiObjectiveAlgorithms.jl b/src/MultiObjectiveAlgorithms.jl index c631bb2..2ea3d42 100644 --- a/src/MultiObjectiveAlgorithms.jl +++ b/src/MultiObjectiveAlgorithms.jl @@ -559,13 +559,16 @@ function MOI.delete(model::Optimizer, ci::MOI.ConstraintIndex) return end -function _compute_ideal_point(model::Optimizer) +function _compute_ideal_point(model::Optimizer, start_time) objectives = MOI.Utilities.eachscalar(model.f) model.ideal_point = fill(NaN, length(objectives)) if !MOI.get(model, ComputeIdealPoint()) return end for (i, f) in enumerate(objectives) + if _time_limit_exceeded(model, start_time) + return + end MOI.set(model.inner, MOI.ObjectiveFunction{typeof(f)}(), f) MOI.optimize!(model.inner) status = MOI.get(model.inner, MOI.TerminationStatus()) @@ -584,7 +587,7 @@ function MOI.optimize!(model::Optimizer) model.termination_status = MOI.INVALID_MODEL return end - _compute_ideal_point(model) + _compute_ideal_point(model, start_time) algorithm = something(model.algorithm, default(Algorithm())) status, solutions = optimize_multiobjective!(algorithm, model) model.termination_status = status diff --git a/src/algorithms/Dichotomy.jl b/src/algorithms/Dichotomy.jl index 6b66054..72e8bb0 100644 --- a/src/algorithms/Dichotomy.jl +++ b/src/algorithms/Dichotomy.jl @@ -81,11 +81,17 @@ function optimize_multiobjective!(algorithm::Dichotomy, model::Optimizer) error("Only scalar or bi-objective problems supported.") end if MOI.output_dimension(model.f) == 1 + if _time_limit_exceeded(model, start_time) + return MOI.TIME_LIMIT, nothing + end status, solution = _solve_weighted_sum(model, algorithm, [1.0]) return status, [solution] end solutions = Dict{Float64,SolutionPoint}() for w in (0.0, 1.0) + if _time_limit_exceeded(model, start_time) + return MOI.TIME_LIMIT, nothing + end status, solution = _solve_weighted_sum(model, algorithm, w) if !_is_scalar_status_optimal(status) return status, nothing diff --git a/test/algorithms/Dichotomy.jl b/test/algorithms/Dichotomy.jl index 471f23d..a77bea7 100644 --- a/test/algorithms/Dichotomy.jl +++ b/test/algorithms/Dichotomy.jl @@ -261,7 +261,7 @@ function test_time_limit() ) MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == MOI.TIME_LIMIT - @test MOI.get(model, MOI.ResultCount()) > 0 + @test MOI.get(model, MOI.ResultCount()) == 0 return end