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

function toint(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
function f(x; n = length(x))
s = zero(T)
for i ∈ 1:n
ci = 1 + (i // 10)
js = max(1, i-2):min(n, i+2)
if iseven(n)
js = sort(collect(union(collect(js), [j for j in (i + n ÷ 2, i - n ÷ 2) if 1 <= j <= n])))
end

for j ∈ js
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
return s / n
end

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

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

js = max(1, i - 2):min(n, i + 2)
if iseven(n)
js = sort(collect(union(collect(js), [j for j in (i + n ÷ 2, i - n ÷ 2) if 1 <= j <= n])))
end
for j in js
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) // 10
s += aij * sin(x[j]) + bij * cos(x[j])
end
end
return s / n
end

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

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

x0 = fill(one(T), n)
return ADNLPModels.ADNLPModel(f, x0, name = "trigb"; kwargs...)
end
26 changes: 26 additions & 0 deletions src/Meta/toint.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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
26 changes: 26 additions & 0 deletions src/Meta/trig.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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
26 changes: 26 additions & 0 deletions src/Meta/trigb.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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
39 changes: 39 additions & 0 deletions src/PureJuMP/toint.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# 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)
js = max(1, i - 2):min(n, i + 2)
if iseven(n)
js = sort(collect(union(collect(js), [j for j in (i + n ÷ 2, i - n ÷ 2) if 1 <= j <= n])))
end
for j in js
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
s
end for i = 1:n)
)

return model
end
32 changes: 32 additions & 0 deletions src/PureJuMP/trig.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# 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 in (
iseven(n) ? sort(collect(union(collect(max(1, i - 2):min(n, i + 2)), [j for j in (i + n ÷ 2, i - n ÷ 2) if 1 <= j <= n]))) : max(1, i - 2):min(n, i + 2)
))
) for i = 1:n
)
)

return model
end
29 changes: 29 additions & 0 deletions src/PureJuMP/trigb.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
## 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)

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

return model
end