Skip to content
Open
Show file tree
Hide file tree
Changes from 4 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
35 changes: 35 additions & 0 deletions src/ADNLPProblems/toint.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
export toint

function toint(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
function f(x; n = length(x))
n_local = n
s = zero(T)
for i = 1:n_local
xi = x[i]
ci = 1 + (i / 10)

jlo = max(1, i - 2)
jhi = min(n_local, i + 2)
for j = jlo:jhi
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) / 10
cj = (1 + j) / 10
s += aij * sin(bij + ci * xi + cj * x[j])
end

if iseven(n_local)
j = i + (n_local ÷ 2)
if 1 <= j <= n_local
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) / 10
cj = (1 + j) / 10
s += aij * sin(bij + ci * xi + cj * x[j])
end
end
end
return s / T(n_local)
end

x0 = fill(1, n)
return ADNLPModels.ADNLPModel(f, x0, name = "toint"; kwargs...)
end
35 changes: 35 additions & 0 deletions src/ADNLPProblems/trig.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
export trig

function trig(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
function f(x; n = length(x))
n_local = n
s = zero(T)
for i = 1:n_local
xi = x[i]
term = i * (1 - cos(xi))

jlo = max(1, i - 2)
jhi = min(n_local, i + 2)
for j = jlo:jhi
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) / 10
term += aij * sin(x[j]) + bij * cos(x[j])
end

if iseven(n_local)
j = i + (n_local ÷ 2)
if 1 <= j <= n_local
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) / 10
term += aij * sin(x[j]) + bij * cos(x[j])
end
end

s += term
end
return s / T(n_local)
end

x0 = fill(1 / n, n)
return ADNLPModels.ADNLPModel(f, x0, name = "trig"; kwargs...)
end
19 changes: 19 additions & 0 deletions src/ADNLPProblems/trigb.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
export trigb

function trigb(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
function f(x; n = length(x))
n_local = n
s = zero(T)
for i = 1:n_local
xi = x[i]
left = (i == 1) ? zero(T) : x[i - 1]
right = (i == n_local) ? zero(T) : x[i + 1]
term = i * (1 - cos(xi) + sin(left) - sin(right))
s += term
end
return s
end

x0 = fill(1, n)
return ADNLPModels.ADNLPModel(f, x0, name = "trigb"; kwargs...)
end
27 changes: 27 additions & 0 deletions src/Meta/toint.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
toint_meta = Dict(
:nvar => 100,
:variable_nvar => true,
:ncon => 0,
:variable_ncon => false,
:minimize => true,
:name => "toint",
:has_equalities_only => false,
:has_inequalities_only => false,
:has_bounds => false,
:has_fixed_variables => false,
:objtype => :other,
:contype => :unconstrained,
:best_known_lower_bound => -Inf,
:best_known_upper_bound => 0.0,
:is_feasible => true,
:defined_everywhere => missing,
:origin => :unknown,
)

get_toint_nvar(; n::Integer = default_nvar, kwargs...) = n
get_toint_ncon(; n::Integer = default_nvar, kwargs...) = 0
get_toint_nlin(; n::Integer = default_nvar, kwargs...) = 0
get_toint_nnln(; n::Integer = default_nvar, kwargs...) = 0
get_toint_nequ(; n::Integer = default_nvar, kwargs...) = 0
get_toint_nineq(; n::Integer = default_nvar, kwargs...) = 0
get_toint_nls_nequ(; n::Integer = default_nvar, kwargs...) = 2 * n
27 changes: 27 additions & 0 deletions src/Meta/trig.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
trig_meta = Dict(
:nvar => 100,
:variable_nvar => true,
:ncon => 0,
:variable_ncon => false,
:minimize => true,
:name => "trig",
:has_equalities_only => false,
:has_inequalities_only => false,
:has_bounds => false,
:has_fixed_variables => false,
:objtype => :other,
:contype => :unconstrained,
:best_known_lower_bound => -Inf,
:best_known_upper_bound => 0.0,
:is_feasible => true,
:defined_everywhere => missing,
:origin => :unknown,
)

get_trig_nvar(; n::Integer = default_nvar, kwargs...) = n
get_trig_ncon(; n::Integer = default_nvar, kwargs...) = 0
get_trig_nlin(; n::Integer = default_nvar, kwargs...) = 0
get_trig_nnln(; n::Integer = default_nvar, kwargs...) = 0
get_trig_nequ(; n::Integer = default_nvar, kwargs...) = 0
get_trig_nineq(; n::Integer = default_nvar, kwargs...) = 0
get_trig_nls_nequ(; n::Integer = default_nvar, kwargs...) = 2 * n
27 changes: 27 additions & 0 deletions src/Meta/trigb.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
trigb_meta = Dict(
:nvar => 100,
:variable_nvar => true,
:ncon => 0,
:variable_ncon => false,
:minimize => true,
:name => "trigb",
:has_equalities_only => false,
:has_inequalities_only => false,
:has_bounds => false,
:has_fixed_variables => false,
:objtype => :other,
:contype => :unconstrained,
:best_known_lower_bound => -Inf,
:best_known_upper_bound => 0.0,
:is_feasible => true,
:defined_everywhere => missing,
:origin => :unknown,
)

get_trigb_nvar(; n::Integer = default_nvar, kwargs...) = n
get_trigb_ncon(; n::Integer = default_nvar, kwargs...) = 0
get_trigb_nlin(; n::Integer = default_nvar, kwargs...) = 0
get_trigb_nnln(; n::Integer = default_nvar, kwargs...) = 0
get_trigb_nequ(; n::Integer = default_nvar, kwargs...) = 0
get_trigb_nineq(; n::Integer = default_nvar, kwargs...) = 0
get_trigb_nls_nequ(; n::Integer = default_nvar, kwargs...) = 2 * n
46 changes: 46 additions & 0 deletions src/PureJuMP/toint.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Toint trigonometric function
#
# Problem 10 in
# L. Luksan, C. Matonoha and J. Vlcek
# Sparse Test Problems for Unconstrained Optimization,
# Technical Report 1064,
# Institute of Computer Science,
# Academy of Science of the Czech Republic
#
# https://www.researchgate.net/publication/325314400_Sparse_Test_Problems_for_Unconstrained_Optimization
#
export toint

function toint(args...; n::Int = default_nvar, kwargs...)
model = Model()
@variable(model, x[i = 1:n], start = 1)

@objective(
model,
Min,
(1 / n) * sum(begin
ci = 1 + i / 10
s = zero(Float64)
jlo = max(1, i - 2)
jhi = min(n, i + 2)
for j = jlo:jhi
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) / 10
cj = 1 + j / 10
s += aij * sin(bij + ci * x[i] + cj * x[j])
end
if iseven(n)
j = i + (n ÷ 2)
if 1 <= j <= n
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) / 10
cj = 1 + j / 10
s += aij * sin(bij + ci * x[i] + cj * x[j])
end
end
s
end for i = 1:n)
)

return model
end
40 changes: 40 additions & 0 deletions src/PureJuMP/trig.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Another trigonometric function
#
# Problem 9 in
# L. Luksan, C. Matonoha and J. Vlcek
# Sparse Test Problems for Unconstrained Optimization,
# Technical Report 1064,
# Institute of Computer Science,
# Academy of Science of the Czech Republic
#
# https://www.researchgate.net/publication/325314400_Sparse_Test_Problems_for_Unconstrained_Optimization
#
export trig

function trig(args...; n::Int = default_nvar, kwargs...)
model = Model()
@variable(model, x[i = 1:n], start = 1 / n)

@objective(
model,
Min,
(1 / n) * sum(
i * (1 - cos(x[i])) +
sum(
5 * (1 + mod(i, 5) + mod(j, 5)) * sin(x[j]) + (i + j) / 10 * cos(x[j]) for
j = max(1, i - 2):min(n, i + 2)
) +
(
iseven(n) ?
(
let j = i + (n ÷ 2);
(1 <= j <= n) ?
(5 * (1 + mod(i, 5) + mod(j, 5)) * sin(x[j]) + (i + j) / 10 * cos(x[j])) : 0
end
) : 0
) for i = 1:n
)
)

return model
end
30 changes: 30 additions & 0 deletions src/PureJuMP/trigb.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
## Banded trigonometric problem
#
# Problem 16 in
# L. Luksan, C. Matonoha and J. Vlcek
# Sparse Test Problems for Unconstrained Optimization,
# Technical Report 1064,
# Institute of Computer Science,
# Academy of Science of the Czech Republic
#
# https://www.researchgate.net/publication/325314400_Sparse_Test_Problems_for_Unconstrained_Optimization
#
export trigb

function trigb(args...; n::Int = default_nvar, kwargs...)
model = Model()
@variable(model, x[i = 1:n], start = 1.0)

@objective(
model,
Min,
sum(
i * (
(1 - cos(x[i])) + ((i == 1) ? sin(0.0) : sin(x[i - 1])) -
((i == n) ? sin(0.0) : sin(x[i + 1]))
) for i = 1:n
)
)

return model
end