Skip to content

Commit f286ff0

Browse files
arnavk23tmigot
andauthored
Add problems 5-13 except 9,10 (#375)
* Add Problems 5-13 and metadata --------- Co-authored-by: Tangi Migot <[email protected]>
1 parent 5fa096d commit f286ff0

30 files changed

+839
-9
lines changed

src/ADNLPProblems/auglag.jl

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
export auglag
2+
3+
function auglag(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
4+
λ₁ = T(-0.002008)
5+
λ₂ = T(-0.001900)
6+
λ₃ = T(-0.000261)
7+
8+
function f(x; n = length(x))
9+
s = zero(T)
10+
for i = 1:n
11+
if mod(i, 5) == 0
12+
prod_term = one(T)
13+
sum_sq = zero(T)
14+
for j = 1:5
15+
idx = i + 1 - j
16+
if 1 <= idx <= n
17+
prod_term *= x[idx]
18+
sum_sq += x[idx]^2
19+
end
20+
end
21+
s += exp(prod_term) + 10 * (sum_sq - 10 - λ₁)^2
22+
23+
if i >= 4
24+
s += 10 * (x[i - 3] * x[i - 2] - 5 * x[i - 1] * x[i] - λ₂)^2
25+
end
26+
27+
if i >= 4
28+
s += 10 * (x[i - 4]^3 + x[i - 3]^3 + 1 - λ₃)^2
29+
end
30+
end
31+
end
32+
return s
33+
end
34+
35+
x0 = zeros(T, n)
36+
for i = 1:n
37+
m = mod(i, 5)
38+
if m == 1
39+
x0[i] = i <= 2 ? -2 : -1
40+
elseif m == 2
41+
x0[i] = i <= 2 ? 2 : -1
42+
elseif m == 3
43+
x0[i] = 2
44+
elseif m == 4
45+
x0[i] = -1
46+
else
47+
x0[i] = -1
48+
end
49+
end
50+
51+
return ADNLPModels.ADNLPModel(f, x0, name = "auglag"; kwargs...)
52+
end

src/ADNLPProblems/browngen1.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export browngen1
2+
3+
function browngen1(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
4+
n = max(2, n)
5+
function f(x; n = length(x))
6+
s = zero(T)
7+
@inbounds for i = 2:n
8+
s += (x[i - 1] - 3)^2 + (x[i - 1] - x[i])^2 + exp(20 * (x[i - 1] - x[i]))
9+
end
10+
return s
11+
end
12+
x0 = [isodd(i) ? zero(T) : -one(T) for i = 1:n]
13+
return ADNLPModels.ADNLPModel(f, x0, name = "browngen1"; kwargs...)
14+
end

src/ADNLPProblems/browngen2.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export browngen2
2+
3+
function browngen2(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
4+
n = max(2, n)
5+
function f(x; n = length(x))
6+
s = zero(T)
7+
@inbounds for i = 2:n
8+
s += (x[i - 1]^2)^(x[i]^2 + 1) + (x[i]^2)^(x[i - 1]^2 + 1)
9+
end
10+
return s
11+
end
12+
x0 = [isodd(i) ? -one(T) : one(T) for i = 1:n]
13+
return ADNLPModels.ADNLPModel(f, x0, name = "browngen2"; kwargs...)
14+
end

src/ADNLPProblems/broyden7d.jl

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
export broyden7d
2+
3+
function broyden7d(; use_nls::Bool = false, kwargs...)
4+
model = use_nls ? :nls : :nlp
5+
return broyden7d(Val(model); kwargs...)
6+
end
7+
8+
function broyden7d(::Val{:nlp}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
9+
p = 7 // 3
10+
function f(x; n = length(x), p = p)
11+
x0 = zero(T)
12+
xn1 = zero(T)
13+
s = zero(T)
14+
s += abs((3 - 2 * x[1]) * x[1] - x0 - x[2] + 1)^p
15+
for i = 2:(n - 1)
16+
s += abs((3 - 2 * x[i]) * x[i] - x[i - 1] - x[i + 1] + 1)^p
17+
end
18+
s += abs((3 - 2 * x[n]) * x[n] - x[n - 1] - xn1 + 1)^p
19+
nh = div(n, 2)
20+
for i = 1:nh
21+
s += abs(x[i] + x[i + nh])^p
22+
end
23+
return s
24+
end
25+
x0 = fill(-one(T), n)
26+
return ADNLPModels.ADNLPModel(f, x0, name = "broyden7d"; kwargs...)
27+
end
28+
29+
function broyden7d(::Val{:nls}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
30+
x0 = fill(-one(T), n)
31+
function F!(r, x; n = length(x))
32+
p = 7 // 6
33+
nh = div(n, 2)
34+
@inbounds begin
35+
r[1] = abs((3 - 2 * x[1]) * x[1] - zero(T) - x[2] + one(T))^p
36+
for i = 2:(n - 1)
37+
r[i] = abs((3 - 2 * x[i]) * x[i] - x[i - 1] - x[i + 1] + one(T))^p
38+
end
39+
r[n] = abs((3 - 2 * x[n]) * x[n] - x[n - 1] - zero(T) + one(T))^p
40+
for i = 1:nh
41+
r[n + i] = abs(x[i] + x[i + nh])^p
42+
end
43+
end
44+
return r
45+
end
46+
nequ = n + div(n, 2)
47+
return ADNLPModels.ADNLSModel!(F!, x0, nequ, name = "broyden7d-nls"; kwargs...)
48+
end

src/ADNLPProblems/chainwoo.jl

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
export chainwoo
22

3-
function chainwoo(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
3+
function chainwoo(; use_nls::Bool = false, kwargs...)
4+
model = use_nls ? :nls : :nlp
5+
return chainwoo(Val(model); kwargs...)
6+
end
7+
8+
function chainwoo(::Val{:nlp}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
49
(n % 4 == 0) || @warn("chainwoo: number of variables adjusted to be a multiple of 4")
510
n = 4 * max(1, div(n, 4))
611
function f(x; n = length(x))
@@ -16,3 +21,26 @@ function chainwoo(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) w
1621
x0 = vcat([-3, -1, -3, -1], -2 * ones(T, n - 4))
1722
return ADNLPModels.ADNLPModel(f, x0, name = "chainwoo"; kwargs...)
1823
end
24+
25+
function chainwoo(::Val{:nls}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
26+
(n % 4 == 0) || @warn("chainwoo: number of variables adjusted to be a multiple of 4")
27+
n = 4 * max(1, div(n, 4))
28+
function F!(r, x; n = length(x))
29+
nb = div(n, 2) - 1
30+
r[1] = 1
31+
idx = 2
32+
@inbounds for i = 1:nb
33+
r[idx] = 10 * (x[2 * i] - x[2 * i - 1]^2)
34+
r[idx + 1] = 1 - x[2 * i - 1]
35+
r[idx + 2] = T(sqrt(90)) * (x[2 * i + 2] - x[2 * i + 1]^2)
36+
r[idx + 3] = 1 - x[2 * i + 1]
37+
r[idx + 4] = T(sqrt(10)) * (x[2 * i] + x[2 * i + 2] - 2)
38+
r[idx + 5] = (x[2 * i] - x[2 * i + 2]) / T(sqrt(10))
39+
idx += 6
40+
end
41+
return r
42+
end
43+
nequ = 1 + 6 * (div(n, 2) - 1)
44+
x0 = vcat([-3, -1, -3, -1], -2 * ones(T, n - 4))
45+
return ADNLPModels.ADNLSModel!(F!, x0, nequ, name = "chainwoo-nls"; kwargs...)
46+
end

src/ADNLPProblems/cragglvy2.jl

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
export cragglvy2
22

3-
function cragglvy2(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
3+
function cragglvy2(; use_nls::Bool = false, kwargs...)
4+
model = use_nls ? :nls : :nlp
5+
return cragglvy2(Val(model); kwargs...)
6+
end
7+
8+
function cragglvy2(::Val{:nlp}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
49
n < 2 && @warn("cragglvy2: number of variables must be ≥ 2")
510
n = max(2, n)
611
function f(x; n = length(x))
@@ -15,3 +20,21 @@ function cragglvy2(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...)
1520
x0 = vcat(1, 2 * ones(T, n - 1))
1621
return ADNLPModels.ADNLPModel(f, x0, name = "cragglvy2"; kwargs...)
1722
end
23+
24+
function cragglvy2(::Val{:nls}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
25+
n < 2 && @warn("cragglvy2: number of variables must be ≥ 2")
26+
n = max(2, n)
27+
function F!(r, x; n = length(x))
28+
for i = 1:(div(n, 2) - 1)
29+
r[5 * (i - 1) + 1] = (exp(x[2 * i - 1]) - x[2 * i])^2
30+
r[5 * (i - 1) + 2] = 10 * (x[2 * i] - x[2 * i + 1])^3
31+
r[5 * (i - 1) + 3] = (tan(x[2 * i + 1] - x[2 * i + 2]))^2
32+
r[5 * (i - 1) + 4] = x[2 * i - 1]^4
33+
r[5 * (i - 1) + 5] = x[2 * i + 2] - 1
34+
end
35+
return r
36+
end
37+
nequ = 5 * (div(n, 2) - 1)
38+
x0 = vcat(T(1), T(2) * ones(T, n - 1))
39+
return ADNLPModels.ADNLSModel!(F!, x0, nequ, name = "cragglvy2-nls"; kwargs...)
40+
end

src/ADNLPProblems/genbroydenb.jl

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
export genbroydenb
2+
3+
function genbroydenb(; use_nls::Bool = false, kwargs...)
4+
model = use_nls ? :nls : :nlp
5+
return genbroydenb(Val(model); kwargs...)
6+
end
7+
8+
function genbroydenb(::Val{:nlp}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
9+
p = 7 // 3
10+
function f(x; n = length(x))
11+
s = zero(T)
12+
for i = 1:n
13+
diag = (2 + 5 * x[i]^2) * x[i] + 1
14+
neigh = zero(T)
15+
@inbounds for j = max(1, i - 5):min(n, i + 1)
16+
if j != i
17+
neigh += x[j] * (1 + x[j])
18+
end
19+
end
20+
s += abs(diag + neigh)^p
21+
end
22+
return s
23+
end
24+
x0 = fill(-one(T), n)
25+
return ADNLPModels.ADNLPModel(f, x0, name = "genbroydenb", minimize = true; kwargs...)
26+
end
27+
28+
function genbroydenb(::Val{:nls}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
29+
p = 7 // 6
30+
function F!(r, x)
31+
m = length(x)
32+
@inbounds for i = 1:m
33+
diag = (2 + 5 * x[i]^2) * x[i] + 1
34+
neigh = zero(T)
35+
for j = max(1, i - 5):min(m, i + 1)
36+
if j != i
37+
neigh += x[j] * (1 + x[j])
38+
end
39+
end
40+
z = diag + neigh
41+
r[i] = abs(z)^(p)
42+
end
43+
return r
44+
end
45+
x0 = fill(-one(T), n)
46+
return ADNLPModels.ADNLSModel!(F!, x0, n, name = "genbroydenb-nls"; kwargs...)
47+
end

src/ADNLPProblems/genbroydentri.jl

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
export genbroydentri
2+
3+
function genbroydentri(; use_nls::Bool = false, kwargs...)
4+
model = use_nls ? :nls : :nlp
5+
return genbroydentri(Val(model); kwargs...)
6+
end
7+
8+
function genbroydentri(
9+
::Val{:nlp};
10+
n::Int = default_nvar,
11+
type::Type{T} = Float64,
12+
kwargs...,
13+
) where {T}
14+
p = 7 // 3
15+
function f(x; n = length(x))
16+
x0 = zero(T)
17+
xn1 = zero(T)
18+
s = abs((3 - 2 * x[1]) * x[1] - x0 - x[2] + 1)^p
19+
for i = 2:(n - 1)
20+
s += abs((3 - 2 * x[i]) * x[i] - x[i - 1] - x[i + 1] + 1)^p
21+
end
22+
s += abs((3 - 2 * x[n]) * x[n] - x[n - 1] - xn1 + 1)^p
23+
return s
24+
end
25+
x0 = fill(-one(T), n)
26+
return ADNLPModels.ADNLPModel(f, x0, name = "genbroydentri"; kwargs...)
27+
end
28+
29+
function genbroydentri(
30+
::Val{:nls};
31+
n::Int = default_nvar,
32+
type::Type{T} = Float64,
33+
kwargs...,
34+
) where {T}
35+
p = 7 // 6
36+
x0 = fill(-one(T), n)
37+
function F!(r, x)
38+
x0_val = zero(T)
39+
xn1_val = zero(T)
40+
@inbounds begin
41+
r[1] = abs((3 - 2 * x[1]) * x[1] - x0_val - x[2] + 1)^p
42+
for i = 2:(n - 1)
43+
r[i] = abs((3 - 2 * x[i]) * x[i] - x[i - 1] - x[i + 1] + 1)^p
44+
end
45+
r[n] = abs((3 - 2 * x[n]) * x[n] - x[n - 1] - xn1_val + 1)^p
46+
end
47+
return r
48+
end
49+
return ADNLPModels.ADNLSModel!(F!, x0, n, name = "genbroydentri-nls"; kwargs...)
50+
end

src/ADNLPProblems/genrose.jl

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
export genrose, rosenbrock
22

3-
function genrose(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
3+
function genrose(; use_nls::Bool = false, kwargs...)
4+
model = use_nls ? :nls : :nlp
5+
return genrose(Val(model); kwargs...)
6+
end
7+
8+
function genrose(::Val{:nlp}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
49
n < 2 && @warn("genrose: number of variables must be ≥ 2")
510
n = max(2, n)
611
function f(x; n = length(x))
@@ -12,5 +17,22 @@ function genrose(; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) wh
1217
return ADNLPModels.ADNLPModel(f, x0, name = "genrose"; kwargs...)
1318
end
1419

20+
function genrose(::Val{:nls}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
21+
n = max(2, n)
22+
nequ = 2 * (n - 1) + 1
23+
function F!(r, x; n = length(x))
24+
@inbounds begin
25+
r[1] = 1
26+
for i = 1:(n - 1)
27+
r[i + 1] = 10 * (x[i + 1] - x[i]^2)
28+
r[i + n] = x[i] - 1
29+
end
30+
end
31+
return r
32+
end
33+
x0 = T.([i / (n + 1) for i = 1:n])
34+
return ADNLPModels.ADNLSModel!(F!, x0, nequ, name = "genrose-nls"; kwargs...)
35+
end
36+
1537
rosenbrock(args...; kwargs...) =
1638
genrose(args..., n = 2, name = "rosenbrock"; delete!(Dict(kwargs), :n)...)

0 commit comments

Comments
 (0)