From b38fee39a13b26bf7f8d0293eb7693d6815db2cf Mon Sep 17 00:00:00 2001 From: odow Date: Thu, 14 Aug 2025 16:27:38 +1200 Subject: [PATCH] Allow Chalmet to return solutions on error --- src/algorithms/Chalmet.jl | 8 ++++---- test/algorithms/Chalmet.jl | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/algorithms/Chalmet.jl b/src/algorithms/Chalmet.jl index b4e61cf..2e987ce 100644 --- a/src/algorithms/Chalmet.jl +++ b/src/algorithms/Chalmet.jl @@ -57,7 +57,7 @@ function minimize_multiobjective!(algorithm::Chalmet, model::Optimizer) optimize_inner!(model) status = MOI.get(model.inner, MOI.TerminationStatus()) if !_is_scalar_status_optimal(status) - return status, nothing + return status, solutions end _, y1[2] = _compute_point(model, variables, f2) MOI.set(model.inner, MOI.ObjectiveFunction{typeof(f1)}(), f1) @@ -69,7 +69,7 @@ function minimize_multiobjective!(algorithm::Chalmet, model::Optimizer) optimize_inner!(model) status = MOI.get(model.inner, MOI.TerminationStatus()) if !_is_scalar_status_optimal(status) - return status, nothing + return status, solutions end x1, y1[1] = _compute_point(model, variables, f1) MOI.delete(model.inner, y1_constraint) @@ -78,7 +78,7 @@ function minimize_multiobjective!(algorithm::Chalmet, model::Optimizer) optimize_inner!(model) status = MOI.get(model.inner, MOI.TerminationStatus()) if !_is_scalar_status_optimal(status) - return status, nothing + return status, solutions end _, y2[1] = _compute_point(model, variables, f1) if y2[1] ≈ solutions[1].y[1] @@ -93,7 +93,7 @@ function minimize_multiobjective!(algorithm::Chalmet, model::Optimizer) optimize_inner!(model) status = MOI.get(model.inner, MOI.TerminationStatus()) if !_is_scalar_status_optimal(status) - return status, nothing + return status, solutions end x2, y2[2] = _compute_point(model, variables, f2) MOI.delete(model.inner, y2_constraint) diff --git a/test/algorithms/Chalmet.jl b/test/algorithms/Chalmet.jl index 5e91b40..ca2579a 100644 --- a/test/algorithms/Chalmet.jl +++ b/test/algorithms/Chalmet.jl @@ -280,6 +280,7 @@ function test_solve_failures() end MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == MOI.NUMERICAL_ERROR + @test MOI.get(model, MOI.ResultCount()) == (fail_after <= 1 ? 0 : 1) end return end