Skip to content

Commit e1c79dc

Browse files
authored
Over-estimate nadir point in algorithms to fix cycling (#73)
1 parent 5cf770f commit e1c79dc

File tree

5 files changed

+40
-40
lines changed

5 files changed

+40
-40
lines changed

src/algorithms/DominguezRios.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ function optimize_multiobjective!(algorithm::DominguezRios, model::Optimizer)
182182
return status, nothing
183183
end
184184
_, Y = _compute_point(model, variables, f_i)
185-
yN[i] = Y
185+
yN[i] = Y + 1
186186
end
187187
MOI.set(model.inner, MOI.ObjectiveSense(), sense)
188188
ϵ = 1 / (2 * n * (maximum(yN - yI) - 1))

src/algorithms/KirlikSayin.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ function optimize_multiobjective!(algorithm::KirlikSayin, model::Optimizer)
110110
return status, nothing
111111
end
112112
_, Y = _compute_point(model, variables, f_i)
113-
yI[i] = Y
113+
yI[i] = Y + 1
114114
MOI.set(
115115
model.inner,
116116
MOI.ObjectiveSense(),

src/algorithms/TambyVanderpooten.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ function optimize_multiobjective!(
113113
return status, nothing
114114
end
115115
_, Y = _compute_point(model, variables, f_i)
116-
yI[i] = Y
116+
yI[i] = Y + 1
117117
MOI.set(model.inner, MOI.ObjectiveSense(), MOI.MAX_SENSE)
118118
MOI.optimize!(model.inner)
119119
status = MOI.get(model.inner, MOI.TerminationStatus())

test/algorithms/DominguezRios.jl

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ function test_knapsack_min_p3()
7979
]
8080
N = MOI.get(model, MOI.ResultCount())
8181
x_sol = hcat([MOI.get(model, MOI.VariablePrimal(i), x) for i in 1:N]...)
82-
@test isapprox(x_sol, X_E'; atol = 1e-6)
83-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
84-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
82+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
83+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
84+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
8585
return
8686
end
8787

@@ -138,9 +138,9 @@ function test_knapsack_max_p3()
138138
]
139139
N = MOI.get(model, MOI.ResultCount())
140140
x_sol = hcat([MOI.get(model, MOI.VariablePrimal(i), x) for i in 1:N]...)
141-
@test isapprox(x_sol, X_E'; atol = 1e-6)
142-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
143-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
141+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
142+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
143+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
144144
return
145145
end
146146

@@ -204,9 +204,9 @@ function test_knapsack_min_p4()
204204
]
205205
N = MOI.get(model, MOI.ResultCount())
206206
x_sol = hcat([MOI.get(model, MOI.VariablePrimal(i), x) for i in 1:N]...)
207-
@test isapprox(x_sol, X_E'; atol = 1e-6)
208-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
209-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
207+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
208+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
209+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
210210
return
211211
end
212212

@@ -270,9 +270,9 @@ function test_knapsack_max_p4()
270270
]
271271
N = MOI.get(model, MOI.ResultCount())
272272
x_sol = hcat([MOI.get(model, MOI.VariablePrimal(i), x) for i in 1:N]...)
273-
@test isapprox(x_sol, X_E'; atol = 1e-6)
274-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
275-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
273+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
274+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
275+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
276276
return
277277
end
278278

@@ -380,9 +380,9 @@ function test_assignment_min_p3()
380380
N = MOI.get(model, MOI.ResultCount())
381381
x_sol =
382382
hcat([MOI.get(model, MOI.VariablePrimal(i), vec(x)) for i in 1:N]...)
383-
@test isapprox(x_sol, X_E'; atol = 1e-6)
384-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
385-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
383+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
384+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
385+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
386386
return
387387
end
388388

@@ -490,9 +490,9 @@ function test_assignment_max_p3()
490490
N = MOI.get(model, MOI.ResultCount())
491491
x_sol =
492492
hcat([MOI.get(model, MOI.VariablePrimal(i), vec(x)) for i in 1:N]...)
493-
@test isapprox(x_sol, X_E'; atol = 1e-6)
494-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
495-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
493+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
494+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
495+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
496496
return
497497
end
498498

@@ -583,7 +583,7 @@ function test_time_limit()
583583
return
584584
end
585585

586-
function __FAIL__test_vector_of_variables_objective()
586+
function test_vector_of_variables_objective()
587587
model = MOI.instantiate(; with_bridge_type = Float64) do
588588
return MOA.Optimizer(HiGHS.Optimizer)
589589
end

test/algorithms/KirlikSayin.jl

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ function test_knapsack_min_p3()
7676
]
7777
N = MOI.get(model, MOI.ResultCount())
7878
x_sol = hcat([MOI.get(model, MOI.VariablePrimal(i), x) for i in 1:N]...)
79-
@test isapprox(x_sol, X_E'; atol = 1e-6)
80-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
81-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
79+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
80+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
81+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
8282
return
8383
end
8484

@@ -135,9 +135,9 @@ function test_knapsack_max_p3()
135135
]
136136
N = MOI.get(model, MOI.ResultCount())
137137
x_sol = hcat([MOI.get(model, MOI.VariablePrimal(i), x) for i in 1:N]...)
138-
@test isapprox(x_sol, X_E'; atol = 1e-6)
139-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
140-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
138+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
139+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
140+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
141141
return
142142
end
143143

@@ -201,9 +201,9 @@ function test_knapsack_min_p4()
201201
]
202202
N = MOI.get(model, MOI.ResultCount())
203203
x_sol = hcat([MOI.get(model, MOI.VariablePrimal(i), x) for i in 1:N]...)
204-
@test isapprox(x_sol, X_E'; atol = 1e-6)
205-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
206-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
204+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
205+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
206+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
207207
return
208208
end
209209

@@ -267,9 +267,9 @@ function test_knapsack_max_p4()
267267
]
268268
N = MOI.get(model, MOI.ResultCount())
269269
x_sol = hcat([MOI.get(model, MOI.VariablePrimal(i), x) for i in 1:N]...)
270-
@test isapprox(x_sol, X_E'; atol = 1e-6)
271-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
272-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
270+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
271+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
272+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
273273
return
274274
end
275275

@@ -380,9 +380,9 @@ function test_assignment_min_p3()
380380
N = MOI.get(model, MOI.ResultCount())
381381
x_sol =
382382
hcat([MOI.get(model, MOI.VariablePrimal(i), vec(x)) for i in 1:N]...)
383-
@test isapprox(x_sol, X_E'; atol = 1e-6)
384-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
385-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
383+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
384+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
385+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
386386
return
387387
end
388388

@@ -493,9 +493,9 @@ function test_assignment_max_p3()
493493
N = MOI.get(model, MOI.ResultCount())
494494
x_sol =
495495
hcat([MOI.get(model, MOI.VariablePrimal(i), vec(x)) for i in 1:N]...)
496-
@test isapprox(x_sol, X_E'; atol = 1e-6)
497-
y_sol = hcat([MOI.get(model, MOI.ObjectiveValue(i)) for i in 1:N]...)
498-
@test isapprox(y_sol, Y_N'; atol = 1e-6)
496+
@test isapprox(sort(x_sol; dims = 1), sort(X_E'; dims = 1); atol = 1e-6)
497+
y_sol = vcat([MOI.get(model, MOI.ObjectiveValue(i))' for i in 1:N]...)
498+
@test isapprox(sort(y_sol; dims = 1), sort(Y_N; dims = 1); atol = 1e-6)
499499
return
500500
end
501501

0 commit comments

Comments
 (0)