-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathspmsrtls.jl
More file actions
112 lines (107 loc) · 3.91 KB
/
spmsrtls.jl
File metadata and controls
112 lines (107 loc) · 3.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
export spmsrtls
function spmsrtls(; use_nls::Bool = false, kwargs...)
model = use_nls ? :nls : :nlp
return spmsrtls(Val(model); kwargs...)
end
function spmsrtls(::Val{:nlp}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
n_orig = n
m = max(Int(round((n + 2) / 3)), 34)
n = m * 3 - 2
@adjust_nvar_warn("spmsrtls", n_orig, n)
p = [sin(i^2) for i = 1:n]
x0 = T[p[i] / 5 for i = 1:n]
function f(x; p = p)
p = eltype(x).(p)
return 1 // 2 * sum(
(
x[(3 * (i - 1) + 1) - 4] * x[(3 * (i - 1) + 1) - 1] -
p[(3 * (i - 1) + 1) - 4] * p[(3 * (i - 1) + 1) - 1]
)^2 for i = 3:m
) +
1 // 2 * sum(
(
x[(3 * (i - 1) + 1) - 3] * x[(3 * (i - 1) + 1) - 1] +
x[(3 * (i - 1) + 1) - 1] * x[(3 * (i - 1) + 1)] -
p[(3 * (i - 1) + 1) - 3] * p[(3 * (i - 1) + 1) - 1] -
p[(3 * (i - 1) + 1) - 1] * p[(3 * (i - 1) + 1)]
)^2 for i = 2:m
) +
1 // 2 * sum((x[(3 * (i - 1) + 1)]^2 - p[(3 * (i - 1) + 1)]^2)^2 for i = 1:m) +
1 // 2 * sum(
(
x[(3 * (i - 1) + 1) - 2] * x[(3 * (i - 1) + 1) - 1] -
p[(3 * (i - 1) + 1) - 2] * p[(3 * (i - 1) + 1) - 1]
)^2 for i = 2:m
) +
1 // 2 * sum(
(
x[(3 * (i - 1) + 1) + 2] * x[(3 * (i - 1) + 1) + 1] -
p[(3 * (i - 1) + 1) + 2] * p[(3 * (i - 1) + 1) + 1]
)^2 for i = 1:(m - 1)
) +
1 // 2 * sum(
(
x[(3 * (i - 1) + 1) + 3] * x[(3 * (i - 1) + 1) + 1] +
x[(3 * (i - 1) + 1) + 1] * x[(3 * (i - 1) + 1)] -
p[(3 * (i - 1) + 1) + 3] * p[(3 * (i - 1) + 1) + 1] -
p[(3 * (i - 1) + 1) + 1] * p[(3 * (i - 1) + 1)]
)^2 for i = 1:(m - 1)
) +
1 // 2 * sum(
(
x[(3 * (i - 1) + 1) + 4] * x[(3 * (i - 1) + 1) + 1] -
p[(3 * (i - 1) + 1) + 4] * p[(3 * (i - 1) + 1) + 1]
)^2 for i = 1:(m - 2)
)
end
return ADNLPModels.ADNLPModel(f, x0, name = "spmsrtls"; kwargs...)
end
function spmsrtls(::Val{:nls}; n::Int = default_nvar, type::Type{T} = Float64, kwargs...) where {T}
n_orig = n
m = max(Int(round((n + 2) / 3)), 34)
n = m * 3 - 2
@adjust_nvar_warn("spmsrtls", n_orig, n)
p = [sin(i^2) for i = 1:n]
x0 = T[p[i] / 5 for i = 1:n]
function F!(r, x; p = p)
for i = 3:m
r[i - 2] =
x[(3 * (i - 1) + 1) - 4] * x[(3 * (i - 1) + 1) - 1] -
p[(3 * (i - 1) + 1) - 4] * p[(3 * (i - 1) + 1) - 1]
end
for i = 2:m
r[i + m - 3] =
x[(3 * (i - 1) + 1) - 3] * x[(3 * (i - 1) + 1) - 1] +
x[(3 * (i - 1) + 1) - 1] * x[(3 * (i - 1) + 1)] -
p[(3 * (i - 1) + 1) - 3] * p[(3 * (i - 1) + 1) - 1] -
p[(3 * (i - 1) + 1) - 1] * p[(3 * (i - 1) + 1)]
end
for i = 1:m
r[i + 2 * m - 3] = x[(3 * (i - 1) + 1)]^2 - p[(3 * (i - 1) + 1)]^2
end
for i = 2:m
r[i + 3 * m - 4] =
x[(3 * (i - 1) + 1) - 2] * x[(3 * (i - 1) + 1) - 1] -
p[(3 * (i - 1) + 1) - 2] * p[(3 * (i - 1) + 1) - 1]
end
for i = 1:(m - 1)
r[i + 4 * m - 4] =
x[(3 * (i - 1) + 1) + 2] * x[(3 * (i - 1) + 1) + 1] -
p[(3 * (i - 1) + 1) + 2] * p[(3 * (i - 1) + 1) + 1]
end
for i = 1:(m - 1)
r[i + 5 * m - 5] =
x[(3 * (i - 1) + 1) + 3] * x[(3 * (i - 1) + 1) + 1] +
x[(3 * (i - 1) + 1) + 1] * x[(3 * (i - 1) + 1)] -
p[(3 * (i - 1) + 1) + 3] * p[(3 * (i - 1) + 1) + 1] -
p[(3 * (i - 1) + 1) + 1] * p[(3 * (i - 1) + 1)]
end
for i = 1:(m - 2)
r[i + 6 * m - 6] =
x[(3 * (i - 1) + 1) + 4] * x[(3 * (i - 1) + 1) + 1] -
p[(3 * (i - 1) + 1) + 4] * p[(3 * (i - 1) + 1) + 1]
end
return r
end
return ADNLPModels.ADNLSModel!(F!, x0, 7 * m - 8, name = "spmsrtls-nls"; kwargs...)
end