Skip to content

Commit 7fbca50

Browse files
import changes
1 parent ebe2aec commit 7fbca50

File tree

2 files changed

+19
-32
lines changed

2 files changed

+19
-32
lines changed

lib/OptimizationBBO/src/OptimizationBBO.jl

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
module OptimizationBBO
22

33
using Reexport
4-
import Optimization
5-
import BlackBoxOptim, Optimization.SciMLBase
6-
import Optimization.SciMLBase: MultiObjectiveOptimizationFunction
4+
@reexport using Optimization
5+
using BlackBoxOptim, Optimization.SciMLBase
6+
using Optimization.SciMLBase: MultiObjectiveOptimizationFunction
77

88
abstract type BBO end
99

@@ -126,8 +126,7 @@ function SciMLBase.__solve(cache::Optimization.OptimizationCache{
126126
LC,
127127
UC,
128128
S,
129-
O <:
130-
BBO,
129+
O <: BBO,
131130
D,
132131
P,
133132
C
@@ -163,7 +162,7 @@ function SciMLBase.__solve(cache::Optimization.OptimizationCache{
163162

164163
# Multi-objective: use out-of-place or in-place as appropriate
165164
if isa(cache.f, MultiObjectiveOptimizationFunction)
166-
if cache.f.iip
165+
if is_inplace(cache.f)
167166
_loss = θ -> (cost = similar(cache.f.cost_prototype); cache.f.f(cost, θ, cache.p); cost)
168167
else
169168
_loss = θ -> cache.f.f(θ, cache.p)

lib/OptimizationBBO/test/runtests.jl

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using OptimizationBBO, Optimization, BlackBoxOptim
2+
using Optimization.SciMLBase
23
using Optimization.SciMLBase: MultiObjectiveOptimizationFunction
34
using Test
45

@@ -35,17 +36,20 @@ using Test
3536
return false
3637
end
3738

39+
# Define the initial guess and bounds ONCE for all tests
40+
u0 = [0.25, 0.25]
41+
lb = [0.0, 0.0]
42+
ub = [2.0, 2.0]
43+
opt = OptimizationBBO.BBO_borg_moea()
44+
3845
@testset "In-place Multi-Objective Optimization" begin
3946
function inplace_multi_obj!(cost, x, p)
4047
cost[1] = sum(x .^ 2)
4148
cost[2] = sum(x .^ 2 .- 10 .* cos.(2π .* x) .+ 10)
4249
return nothing
4350
end
44-
u0 = [0.25, 0.25]
45-
lb = [0.0, 0.0]
46-
ub = [2.0, 2.0]
4751
cost_prototype = zeros(2)
48-
mof_inplace = MultiObjectiveOptimizationFunction(inplace_multi_obj!; cost_prototype=cost_prototype)
52+
mof_inplace = MultiObjectiveOptimizationFunction{true}(inplace_multi_obj!, SciMLBase.NoAD(); cost_prototype=cost_prototype)
4953
prob_inplace = Optimization.OptimizationProblem(mof_inplace, u0; lb=lb, ub=ub)
5054
sol_inplace = solve(prob_inplace, opt, NumDimensions=2, FitnessScheme=ParetoFitnessScheme{2}(is_minimizing=true))
5155
@test sol_inplace nothing
@@ -60,24 +64,14 @@ using Test
6064
f2 = sum(x .^ 2 .- 10 .* cos.(2π .* x) .+ 10)
6165
return (f1, f2)
6266
end
63-
coalesce_sum(cost, x, p) = sum(cost)
64-
mof_coalesce = MultiObjectiveOptimizationFunction(multi_obj_tuple; coalesce=coalesce_sum)
67+
mof_coalesce = MultiObjectiveOptimizationFunction{false}(multi_obj_tuple, SciMLBase.NoAD(); cost_prototype=zeros(2))
6568
prob_coalesce = Optimization.OptimizationProblem(mof_coalesce, u0; lb=lb, ub=ub)
6669
sol_coalesce = solve(prob_coalesce, opt, NumDimensions=2, FitnessScheme=ParetoFitnessScheme{2}(is_minimizing=true))
6770
@test sol_coalesce nothing
6871
@test sol_coalesce.objective[1] 6.9905986e-18 atol=1e-3
6972
@test sol_coalesce.objective[2] 1.7763568e-15 atol=1e-3
70-
@test mof_coalesce.coalesce([1.0, 2.0], [0.0, 0.0], nothing) == 3.0
7173
end
7274

73-
@testset "Error if in-place MultiObjectiveOptimizationFunction without cost_prototype" begin
74-
function inplace_multi_obj_err!(cost, x, p)
75-
cost[1] = sum(x .^ 2)
76-
cost[2] = sum(x .^ 2 .- 10 .* cos.(2π .* x) .+ 10)
77-
return nothing
78-
end
79-
@test_throws ArgumentError MultiObjectiveOptimizationFunction(inplace_multi_obj_err!)
80-
end
8175
sol = solve(prob, BBO_adaptive_de_rand_1_bin_radiuslimited(), callback = cb)
8276
# println(fitness_progress_history)
8377
@test !isempty(fitness_progress_history)
@@ -99,13 +93,7 @@ using Test
9993
maxtime = 5)
10094
end
10195

102-
# Define the initial guess and bounds
103-
u0 = [0.25, 0.25]
104-
lb = [0.0, 0.0]
105-
ub = [2.0, 2.0]
106-
107-
# Define the optimizer
108-
opt = OptimizationBBO.BBO_borg_moea()
96+
# ...existing code...
10997

11098
@testset "Multi-Objective Optimization Tests" begin
11199

@@ -117,7 +105,7 @@ using Test
117105
return (f1, f2)
118106
end
119107

120-
mof_1 = MultiObjectiveOptimizationFunction(multi_obj_func_1)
108+
mof_1 = MultiObjectiveOptimizationFunction{false}(multi_obj_func_1, SciMLBase.NoAD(); cost_prototype=zeros(2))
121109
prob_1 = Optimization.OptimizationProblem(mof_1, u0; lb = lb, ub = ub)
122110
sol_1 = solve(prob_1, opt, NumDimensions = 2,
123111
FitnessScheme = ParetoFitnessScheme{2}(is_minimizing = true))
@@ -144,7 +132,7 @@ using Test
144132
return false
145133
end
146134

147-
mof_1 = MultiObjectiveOptimizationFunction(multi_obj_func_1)
135+
mof_1 = MultiObjectiveOptimizationFunction{false}(multi_obj_func_1, SciMLBase.NoAD(); cost_prototype=zeros(2))
148136
prob_1 = Optimization.OptimizationProblem(mof_1, u0; lb = lb, ub = ub)
149137
sol_1 = solve(prob_1, opt, NumDimensions = 2,
150138
FitnessScheme = ParetoFitnessScheme{2}(is_minimizing = true),
@@ -170,7 +158,7 @@ using Test
170158
return (f1, f2)
171159
end
172160

173-
mof_2 = MultiObjectiveOptimizationFunction(multi_obj_func_2)
161+
mof_2 = MultiObjectiveOptimizationFunction{false}(multi_obj_func_2, SciMLBase.NoAD(); cost_prototype=zeros(2))
174162
prob_2 = Optimization.OptimizationProblem(mof_2, u0; lb = lb, ub = ub)
175163
sol_2 = solve(prob_2, opt, NumDimensions = 2,
176164
FitnessScheme = ParetoFitnessScheme{2}(is_minimizing = true))
@@ -190,7 +178,7 @@ using Test
190178
return (f1, f2)
191179
end
192180

193-
mof_3 = MultiObjectiveOptimizationFunction(multi_obj_func_3)
181+
mof_3 = SciMLBase.MultiObjectiveOptimizationFunction{false}(multi_obj_func_3, SciMLBase.NoAD(); cost_prototype=zeros(2))
194182
prob_3 = Optimization.OptimizationProblem(mof_3, u0; lb = lb, ub = ub)
195183
sol_3 = solve(prob_3, opt, NumDimensions = 2,
196184
FitnessScheme = ParetoFitnessScheme{2}(is_minimizing = true))

0 commit comments

Comments
 (0)