Skip to content
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
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
40 changes: 40 additions & 0 deletions src/ADNLPProblems/toint.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
export toint

function toint(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
Comment thread
tmigot marked this conversation as resolved.
function f(x; n = length(x))
s = zero(T)
for i ∈ 1:n
ci = 1 + (i // 10)
jmin = max(1, i - 2)
jmax = min(n, i + 2)
for j ∈ jmin:jmax
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) // 10
cj = (1 + j) // 10
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
s += aij * sin(bij + ci * x[i] + cj * x[j])
end

if iseven(n)
half = n ÷ 2
j1 = i + half
if 1 <= j1 <= n && (j1 < jmin || j1 > jmax)
aij = 5 * (1 + mod(i, 5) + mod(j1, 5))
bij = (i + j1) // 10
cj = (1 + j1) // 10
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
s += aij * sin(bij + ci * x[i] + cj * x[j1])
end
j2 = i - half
if 1 <= j2 <= n && j2 != j1 && (j2 < jmin || j2 > jmax)
aij = 5 * (1 + mod(i, 5) + mod(j2, 5))
bij = (i + j2) // 10
cj = (1 + j2) // 10
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
s += aij * sin(bij + ci * x[i] + cj * x[j2])
end
end
end
return s / n
end

x0 = fill(one(T), n)
return ADNLPModels.ADNLPModel(f, x0, name = "toint"; kwargs...)
Comment thread
arnavk23 marked this conversation as resolved.
end
38 changes: 38 additions & 0 deletions src/ADNLPProblems/trig.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
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]))

jmin = max(1, i - 2)
jmax = min(n, i + 2)
for j in jmin:jmax
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) // 10
s += aij * sin(x[j]) + bij * cos(x[j])
end

if iseven(n)
half = n ÷ 2
j1 = i + half
if 1 <= j1 <= n && (j1 < jmin || j1 > jmax)
aij = 5 * (1 + mod(i, 5) + mod(j1, 5))
bij = (i + j1) // 10
s += aij * sin(x[j1]) + bij * cos(x[j1])
end
j2 = i - half
if 1 <= j2 <= n && j2 != j1 && (j2 < jmin || j2 > jmax)
aij = 5 * (1 + mod(i, 5) + mod(j2, 5))
bij = (i + j2) // 10
s += aij * sin(x[j2]) + bij * cos(x[j2])
end
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,
Comment thread
tmigot marked this conversation as resolved.
Outdated
: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,
Comment thread
tmigot marked this conversation as resolved.
Outdated
: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,
Comment thread
tmigot marked this conversation as resolved.
Outdated
: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
56 changes: 56 additions & 0 deletions src/PureJuMP/toint.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# 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)

jmin = max(1, i - 2)
jmax = min(n, i + 2)
for j in jmin:jmax
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) // 10
cj = (1 + j) // 10
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
s += aij * sin(bij + ci * x[i] + cj * x[j])
end

if iseven(n)
half = n ÷ 2
j1 = i + half
if 1 <= j1 <= n && (j1 < jmin || j1 > jmax)
aij = 5 * (1 + mod(i, 5) + mod(j1, 5))
bij = (i + j1) // 10
cj = (1 + j1) // 10
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
s += aij * sin(bij + ci * x[i] + cj * x[j1])
end
j2 = i - half
if 1 <= j2 <= n && j2 != j1 && (j2 < jmin || j2 > jmax)
aij = 5 * (1 + mod(i, 5) + mod(j2, 5))
bij = (i + j2) // 10
cj = (1 + j2) // 10
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
s += aij * sin(bij + ci * x[i] + cj * x[j2])
end
end
s
end for i = 1:n)
)

return model
end
55 changes: 55 additions & 0 deletions src/PureJuMP/trig.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# 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])) +
(
begin
jmin = max(1, i - 2)
jmax = min(n, i + 2)
s = zero(Float64)
for j in jmin:jmax
aij = 5 * (1 + mod(i, 5) + mod(j, 5))
bij = (i + j) / 10
s += aij * sin(x[j]) + bij * cos(x[j])
end
if iseven(n)
half = n ÷ 2
j1 = i + half
if 1 <= j1 <= n && (j1 < jmin || j1 > jmax)
aij = 5 * (1 + mod(i, 5) + mod(j1, 5))
bij = (i + j1) / 10
s += aij * sin(x[j1]) + bij * cos(x[j1])
end
j2 = i - half
if 1 <= j2 <= n && j2 != j1 && (j2 < jmin || j2 > jmax)
aij = 5 * (1 + mod(i, 5) + mod(j2, 5))
bij = (i + j2) / 10
s += aij * sin(x[j2]) + bij * cos(x[j2])
end
end
s
end
) 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])))
Comment thread
arnavk23 marked this conversation as resolved.
Outdated
for i = 1:n
)
)

return model
end