From 681942bdcebab8a16d809d7153a58c91b7b8b888 Mon Sep 17 00:00:00 2001 From: odow Date: Tue, 18 Mar 2025 12:11:05 +1300 Subject: [PATCH] Fix iteraction between ComputeIdealPoint and MOI.empty! --- src/MultiObjectiveAlgorithms.jl | 4 +--- test/test_model.jl | 11 +++++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/MultiObjectiveAlgorithms.jl b/src/MultiObjectiveAlgorithms.jl index 0a04a09..c631bb2 100644 --- a/src/MultiObjectiveAlgorithms.jl +++ b/src/MultiObjectiveAlgorithms.jl @@ -132,7 +132,6 @@ function MOI.empty!(model::Optimizer) model.termination_status = MOI.OPTIMIZE_NOT_CALLED model.solve_time = NaN empty!(model.ideal_point) - model.compute_ideal_point = default(ComputeIdealPoint()) return end @@ -142,8 +141,7 @@ function MOI.is_empty(model::Optimizer) isempty(model.solutions) && model.termination_status == MOI.OPTIMIZE_NOT_CALLED && isnan(model.solve_time) && - isempty(model.ideal_point) && - model.compute_ideal_point == default(ComputeIdealPoint()) + isempty(model.ideal_point) end MOI.supports_incremental_interface(::Optimizer) = true diff --git a/test/test_model.jl b/test/test_model.jl index 33cc01f..5560684 100644 --- a/test/test_model.jl +++ b/test/test_model.jl @@ -176,6 +176,13 @@ end function test_ideal_point() for (flag, result) in (true => [0.0, -9.0], false => [NaN, NaN]) model = MOA.Optimizer(HiGHS.Optimizer) + @test MOI.supports(model, MOA.ComputeIdealPoint()) + @test MOI.get(model, MOA.ComputeIdealPoint()) + @test MOI.set(model, MOA.ComputeIdealPoint(), flag) === nothing + @test MOI.get(model, MOA.ComputeIdealPoint()) == flag + # Test that MOI.empty! does not override ComputeIdealPoint + MOI.empty!(model) + @test MOI.get(model, MOA.ComputeIdealPoint()) == flag MOI.set(model, MOI.Silent(), true) x = MOI.add_variables(model, 2) MOI.add_constraint.(model, x, MOI.GreaterThan(0.0)) @@ -187,10 +194,6 @@ function test_ideal_point() -1.0 * x[1] - 2.0 * x[2], ]) MOI.set(model, MOI.ObjectiveFunction{typeof(f)}(), f) - @test MOI.supports(model, MOA.ComputeIdealPoint()) - @test MOI.get(model, MOA.ComputeIdealPoint()) - @test MOI.set(model, MOA.ComputeIdealPoint(), flag) === nothing - @test MOI.get(model, MOA.ComputeIdealPoint()) == flag MOI.optimize!(model) point = MOI.get(model, MOI.ObjectiveBound()) @test length(point) == 2