Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/MOO.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ import MathOptInterface

const MOI = MathOptInterface

struct ParetoSolution
struct SolutionPoint
x::Dict{MOI.VariableIndex,Float64}
y::Vector{Float64}
end

function Base.isapprox(a::ParetoSolution, b::ParetoSolution; kwargs...)
function Base.isapprox(a::SolutionPoint, b::SolutionPoint; kwargs...)
return isapprox(a.y, b.y; kwargs...)
end

Expand Down Expand Up @@ -46,7 +46,7 @@ mutable struct Optimizer <: MOI.AbstractOptimizer
inner::MOI.AbstractOptimizer
algorithm::Union{Nothing,AbstractAlgorithm}
f::Union{Nothing,MOI.AbstractVectorFunction}
solutions::Union{Nothing,Vector{ParetoSolution}}
solutions::Union{Nothing,Vector{SolutionPoint}}
termination_status::MOI.TerminationStatusCode

function Optimizer(optimizer_factory)
Expand Down
4 changes: 2 additions & 2 deletions src/algorithms/EpsilonConstraint.jl
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ function optimize_multiobjective!(
# Compute the epsilon that we will be incrementing by each iteration
n_points = MOI.get(algorithm, SolutionLimit())
ε = abs(right - left) / (n_points - 1)
solutions = ParetoSolution[]
solutions = SolutionPoint[]
f1, f2 = MOI.Utilities.eachscalar(model.f)
MOI.set(model.inner, MOI.ObjectiveFunction{typeof(f2)}(), f2)
# Add epsilon constraint
Expand All @@ -81,7 +81,7 @@ function optimize_multiobjective!(
)
Y = MOI.Utilities.eval_variables(x -> X[x], model.f)
if isempty(solutions) || !(Y ≈ solutions[end].y)
push!(solutions, ParetoSolution(X, Y))
push!(solutions, SolutionPoint(X, Y))
end
end
MOI.delete(model, ci)
Expand Down
2 changes: 1 addition & 1 deletion src/algorithms/Hierarchical.jl
Original file line number Diff line number Diff line change
Expand Up @@ -131,5 +131,5 @@ function optimize_multiobjective!(algorithm::Hierarchical, model::Optimizer)
for c in constraints
MOI.delete(model, c)
end
return MOI.OPTIMAL, [ParetoSolution(X, Y)]
return MOI.OPTIMAL, [SolutionPoint(X, Y)]
end
2 changes: 1 addition & 1 deletion src/algorithms/Lexicographic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,5 @@ function optimize_multiobjective!(algorithm::Lexicographic, model::Optimizer)
for c in constraints
MOI.delete(model, c)
end
return MOI.OPTIMAL, [ParetoSolution(X, Y)]
return MOI.OPTIMAL, [SolutionPoint(X, Y)]
end
4 changes: 2 additions & 2 deletions src/algorithms/NISE.jl
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ function _solve_weighted_sum(model::Optimizer, ::NISE, weights::Vector{Float64})
x in MOI.get(model.inner, MOI.ListOfVariableIndices())
)
Y = MOI.Utilities.eval_variables(x -> X[x], model.f)
return status, ParetoSolution(X, Y)
return status, SolutionPoint(X, Y)
end

function optimize_multiobjective!(algorithm::NISE, model::Optimizer)
Expand All @@ -58,7 +58,7 @@ function optimize_multiobjective!(algorithm::NISE, model::Optimizer)
status, solution = _solve_weighted_sum(model, algorithm, [1.0])
return status, [solution]
end
solutions = Dict{Float64,ParetoSolution}()
solutions = Dict{Float64,SolutionPoint}()
for w in (0.0, 1.0)
status, solution = _solve_weighted_sum(model, algorithm, w)
if status != MOI.OPTIMAL
Expand Down