Skip to content
Open
Show file tree
Hide file tree
Changes from 6 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
1 change: 1 addition & 0 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819"
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
Expand Down
16 changes: 16 additions & 0 deletions src/ADNLPProblems/ackley.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
export ackley
using Random
Comment thread
arnavk23 marked this conversation as resolved.
Outdated

function ackley(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
rng = get(kwargs, :rng, Random.MersenneTwister(0))
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
function f(x)
n = length(x)
sum1 = sum(x[i]^2 for i = 1:n)
sum2 = sum(cos(2 * T(π) * x[i]) for i = 1:n)
return -20 * exp(-T(0.2) * sqrt(sum1 / n)) - exp(sum2 / n) + 20 + T(ℯ)
end
x0 = T[-32 + 64 * rand(rng, T) for _ = 1:n]
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
lvar = fill(T(-32.768), n)
uvar = fill(T(32.768), n)
return ADNLPModels.ADNLPModel(f, x0; lvar = lvar, uvar = uvar, name = "ackley", kwargs...)
end
12 changes: 12 additions & 0 deletions src/ADNLPProblems/griewank.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export griewank

function griewank(; n::Int = default_nvar, type::Type{T} = Float64, x0::Union{Nothing, AbstractVector{T}} = nothing, kwargs...) where {T}
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
function f(x)
n = length(x)
sum_term = sum(x[i]^2 for i = 1:n) / 4000
prod_term = prod(cos(x[i] / sqrt(T(i))) for i = 1:n)
return sum_term - prod_term + 1
end
x0_local = isnothing(x0) ? zeros(T, n) : x0
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
return ADNLPModels.ADNLPModel(f, x0_local, name = "griewank"; kwargs...)
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
end
12 changes: 12 additions & 0 deletions src/ADNLPProblems/rastrigin.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export rastrigin

function rastrigin(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
function f(x)
n = length(x)
return 10 * n + sum(x[i]^2 - 10 * cos(2 * T(π) * x[i]) for i = 1:n)
end
x0 = zeros(T, n)
lvar = T[-5.12 for _ = 1:n]
uvar = T[5.12 for _ = 1:n]
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
return ADNLPModels.ADNLPModel(f, x0, lvar = lvar, uvar = uvar, name = "rastrigin"; kwargs...)
end
11 changes: 11 additions & 0 deletions src/ADNLPProblems/sphere.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export sphere

function sphere(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
function f(x)
return sum(x[i]^2 for i = 1:length(x))
end
x0 = zeros(T, n)
lvar = fill(T(-5.12), n)
uvar = fill(T(5.12), n)
return ADNLPModels.ADNLPModel(f, x0; lvar = lvar, uvar = uvar, name = "sphere", kwargs...)
end
25 changes: 25 additions & 0 deletions src/Meta/ackley.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
ackley_meta = Dict(
:nvar => 100,
:variable_nvar => true,
:ncon => 0,
:variable_ncon => false,
:minimize => true,
:name => "ackley",
:has_equalities_only => false,
:has_inequalities_only => false,
:has_bounds => true,
:has_fixed_variables => false,
:objtype => :other,
:contype => :unconstrained,
:best_known_lower_bound => 0.0,
:best_known_upper_bound => 0.0,
:is_feasible => true,
:defined_everywhere => missing,
:origin => :unknown,
)
get_ackley_nvar(; n::Integer = default_nvar, kwargs...) = n
get_ackley_ncon(; n::Integer = default_nvar, kwargs...) = 0
get_ackley_nlin(; n::Integer = default_nvar, kwargs...) = 0
get_ackley_nnln(; n::Integer = default_nvar, kwargs...) = 0
get_ackley_nequ(; n::Integer = default_nvar, kwargs...) = 0
get_ackley_nineq(; n::Integer = default_nvar, kwargs...) = 0
25 changes: 25 additions & 0 deletions src/Meta/griewank.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
griewank_meta = Dict(
:nvar => 100,
:variable_nvar => true,
:ncon => 0,
:variable_ncon => false,
:minimize => true,
:name => "griewank",
:has_equalities_only => false,
:has_inequalities_only => false,
:has_bounds => true,
:has_fixed_variables => false,
:objtype => :other,
:contype => :unconstrained,
:best_known_lower_bound => 0.0,
:best_known_upper_bound => 0.0,
:is_feasible => true,
:defined_everywhere => missing,
:origin => :unknown,
)
get_griewank_nvar(; n::Integer = default_nvar, kwargs...) = n
get_griewank_ncon(; n::Integer = default_nvar, kwargs...) = 0
get_griewank_nlin(; n::Integer = default_nvar, kwargs...) = 0
get_griewank_nnln(; n::Integer = default_nvar, kwargs...) = 0
get_griewank_nequ(; n::Integer = default_nvar, kwargs...) = 0
get_griewank_nineq(; n::Integer = default_nvar, kwargs...) = 0
25 changes: 25 additions & 0 deletions src/Meta/rastrigin.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
rastrigin_meta = Dict(
:nvar => 100,
:variable_nvar => true,
:ncon => 0,
:variable_ncon => false,
:minimize => true,
:name => "rastrigin",
:has_equalities_only => false,
:has_inequalities_only => false,
:has_bounds => true,
:has_fixed_variables => false,
Comment thread
arnavk23 marked this conversation as resolved.
:objtype => :other,
:contype => :unconstrained,
:best_known_lower_bound => 0.0,
:best_known_upper_bound => 0.0,
:is_feasible => true,
:defined_everywhere => missing,
:origin => :unknown,
)
get_rastrigin_nvar(; n::Integer = default_nvar, kwargs...) = n
get_rastrigin_ncon(; n::Integer = default_nvar, kwargs...) = 0
get_rastrigin_nlin(; n::Integer = default_nvar, kwargs...) = 0
get_rastrigin_nnln(; n::Integer = default_nvar, kwargs...) = 0
get_rastrigin_nequ(; n::Integer = default_nvar, kwargs...) = 0
get_rastrigin_nineq(; n::Integer = default_nvar, kwargs...) = 0
25 changes: 25 additions & 0 deletions src/Meta/sphere.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
sphere_meta = Dict(
:nvar => 100,
:variable_nvar => true,
:ncon => 0,
:variable_ncon => false,
:minimize => true,
:name => "sphere",
:has_equalities_only => false,
:has_inequalities_only => false,
:has_bounds => true,
:has_fixed_variables => false,
:objtype => :other,
:contype => :unconstrained,
:best_known_lower_bound => 0.0,
:best_known_upper_bound => 0.0,
:is_feasible => true,
:defined_everywhere => missing,
:origin => :unknown,
)
get_sphere_nvar(; n::Integer = default_nvar, kwargs...) = n
get_sphere_ncon(; n::Integer = default_nvar, kwargs...) = 0
get_sphere_nlin(; n::Integer = default_nvar, kwargs...) = 0
get_sphere_nnln(; n::Integer = default_nvar, kwargs...) = 0
get_sphere_nequ(; n::Integer = default_nvar, kwargs...) = 0
get_sphere_nineq(; n::Integer = default_nvar, kwargs...) = 0
38 changes: 38 additions & 0 deletions src/PureJuMP/ackley.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Ackley test function
#
# A multivariate multimodal optimization problem from the
# AMPGO test set.
#
# Problem Ackley in
# http://infinity77.net/global_optimization/test_functions_nd_A.html
# Andrea Gavana
#
# f(x) = -20*exp(-0.2*sqrt(sum(x_i^2)/n)) - exp(sum(cos(2*pi*x_i))/n) + 20 + e
#
# Global minimum: f(0,...,0) = 0
# Bounds: x_i in [-32, 32] for all i

export ackley

"Ackley multimodal minimization problem"
function ackley(args...; n::Int = default_nvar, kwargs...)
n < 1 && @warn("ackley: number of variables must be ≥ 1")
n = max(1, n)

nlp = Model()

x0 = [-32 + 64 * rand() for i = 1:n]
@variable(nlp, -32 <= x[i = 1:n] <= 32, start = x0[i])
nlp.ext[:has_bounds] = true

@objective(
nlp,
Min,
-20 * exp(-0.2 * sqrt(sum(x[i]^2 for i = 1:n) / n)) -
exp(sum(cos(2 * π * x[i]) for i = 1:n) / n) +
20 +
exp(1)
)

return nlp
end
38 changes: 38 additions & 0 deletions src/PureJuMP/griewank.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Griewank test function
#
# A multivariate multimodal optimization problem from the
# AMPGO test set.
#
# Problem Griewank in
# http://infinity77.net/global_optimization/test_functions_nd_G.html
# Andrea Gavana
#
# f(x) = sum(x_i^2)/4000 - prod(cos(x_i/sqrt(i))) + 1
#
# Global minimum: f(0,...,0) = 0
# Bounds: x_i in [-600, 600] for all i

export griewank

"Griewank multimodal minimization problem"
function griewank(args...; n::Int = default_nvar, x0::Union{Nothing,AbstractVector} = nothing, kwargs...)
n < 1 && @warn("griewank: number of variables must be ≥ 1")
n = max(1, n)

nlp = Model()

if x0 === nothing
x0 = zeros(n)
elseif length(x0) != n
throw(ArgumentError("griewank: length(x0) = $(length(x0)) must equal n = $n"))
end
@variable(nlp, -600 <= x[i = 1:n] <= 600, start = x0[i])

@objective(
nlp,
Min,
sum(x[i]^2 for i = 1:n) / 4000 - prod(cos(x[i] / sqrt(i)) for i = 1:n) + 1
)

return nlp
end
30 changes: 30 additions & 0 deletions src/PureJuMP/rastrigin.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Rastrigin test function
#
# A multivariate highly multimodal optimization problem from the
# AMPGO test set.
#
# Problem Rastrigin in
# http://infinity77.net/global_optimization/test_functions_nd_R.html
# Andrea Gavana
#
# f(x) = 10*n + sum(x_i^2 - 10*cos(2*pi*x_i))
#
# Global minimum: f(0,...,0) = 0
# Bounds: x_i in [-5.12, 5.12] for all i

export rastrigin

"Rastrigin multimodal minimization problem"
function rastrigin(args...; n::Int = default_nvar, kwargs...)
n < 1 && @warn("rastrigin: number of variables must be ≥ 1")
n = max(1, n)

nlp = Model()

x0 = [0.0 for i = 1:n]
@variable(nlp, x[i = 1:n], lower_bound = -5.12, upper_bound = 5.12, start = x0[i])

@objective(nlp, Min, 10 * n + sum(x[i]^2 - 10 * cos(2 * π * x[i]) for i = 1:n))

return nlp
end
30 changes: 30 additions & 0 deletions src/PureJuMP/sphere.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Sphere test function
#
# A simple multivariate convex optimization problem from the
# AMPGO test set.
#
# Problem Sphere in
# http://infinity77.net/global_optimization/test_functions_nd_S.html
# Andrea Gavana
#
# f(x) = sum(x_i^2)
#
# Global minimum: f(0,...,0) = 0
# Bounds: x_i in [-1, 1] for all i

export sphere

"Sphere convex minimization problem"
function sphere(args...; n::Int = default_nvar, kwargs...)
n < 1 && @warn("sphere: number of variables must be ≥ 1")
n = max(1, n)

nlp = Model()

x0 = zeros(n)
@variable(nlp, -1 <= x[i = 1:n] <= 1, start = x0[i])

@objective(nlp, Min, sum(x[i]^2 for i = 1:n))

return nlp
end