1
- # override some NLPModels functions
2
1
export jac_structure!, hess_structure!, jac_coord!, hess_coord!
3
2
4
3
mutable struct QPData
@@ -36,46 +35,41 @@ mutable struct QuadraticModel <: AbstractQuadraticModel
36
35
end
37
36
end
38
37
39
- function QuadraticModel (model :: AbstractNLPModel )
38
+ function QuadraticModel (model :: AbstractNLPModel , x :: AbstractVector = model . meta . x0, args ... ; kwargs ... )
40
39
nvar = model. meta. nvar
41
40
ncon = model. meta. ncon
42
- z = zeros (nvar )
43
- c = grad (model, z )
44
- H = hess (model, model . meta . x0 )
45
- A = jac (model, z )
46
- QuadraticModel (c , H, opHermitian (H), A,
47
- model. meta. lcon, model. meta. ucon,
48
- model. meta. lvar, model. meta. uvar)
41
+ g = grad (model, x )
42
+ H = hess (model, x, args ... ; kwargs ... )
43
+ c = cons (model, x )
44
+ A = jac (model, x )
45
+ QuadraticModel (g , H, opHermitian (H), A,
46
+ model. meta. lcon .- c , model. meta. ucon .- c ,
47
+ model. meta. lvar .- x , model. meta. uvar .- x )
49
48
end
50
49
51
50
linobj (qp:: AbstractQuadraticModel , args... ) = qp. data. c
52
51
53
- function objgrad (qp :: AbstractQuadraticModel , x :: AbstractVector )
54
- g = Vector {eltype(x)} (length (x))
52
+ function NLPModels . objgrad (qp :: AbstractQuadraticModel , x :: AbstractVector )
53
+ g = Vector {eltype(x)} (undef, length (x))
55
54
objgrad! (qp, x, g)
56
55
end
57
56
58
- function objgrad! (qp :: AbstractQuadraticModel , x :: AbstractVector , g :: AbstractVector )
57
+ function NLPModels . objgrad! (qp :: AbstractQuadraticModel , x :: AbstractVector , g :: AbstractVector )
59
58
v = qp. data. opH * x
60
59
@. g = qp. data. c + v
61
- f = qp. data. c0 + dot (qp. data. c, x) + 0.5 * dot (v, x)
60
+ f = qp. data. c0 + dot (qp. data. c, x) + dot (v, x) / 2
62
61
qp. counters. neval_hprod += 1
63
62
(f, g)
64
63
end
65
64
66
- function obj (qp :: AbstractQuadraticModel , x :: AbstractVector )
65
+ function NLPModels . obj (qp :: AbstractQuadraticModel , x :: AbstractVector )
67
66
v = qp. data. opH * x
68
- f = qp. data. c0 + dot (qp. data. c, x) + 0.5 * dot (v, x)
67
+ f = qp. data. c0 + dot (qp. data. c, x) + dot (v, x) / 2
69
68
qp. counters. neval_hprod += 1
70
69
f
71
70
end
72
71
73
- function grad (qp :: AbstractQuadraticModel , x :: AbstractVector )
74
- g = Vector {eltype(x)} (undef, qp. meta. nvar)
75
- grad! (qp, x, g)
76
- end
77
-
78
- function grad! (qp :: AbstractQuadraticModel , x :: AbstractVector , g :: AbstractVector )
72
+ function NLPModels. grad! (qp :: AbstractQuadraticModel , x :: AbstractVector , g :: AbstractVector )
79
73
v = qp. data. opH * x
80
74
@. g = qp. data. c + v
81
75
qp. counters. neval_hprod += 1
@@ -86,12 +80,10 @@ hess(qp :: AbstractQuadraticModel, ::AbstractVector; kwargs...) = qp.data.H
86
80
87
81
hess_op (qp :: AbstractQuadraticModel , :: AbstractVector ; kwargs... ) = qp. data. opH
88
82
89
- hess_coord (qp :: AbstractQuadraticModel , :: AbstractVector ; kwargs... ) = findnz (qp. data. H)
90
-
91
83
"""
92
84
Return the structure of the Lagrangian Hessian in sparse coordinate format in place.
93
85
"""
94
- function NLPModels. hess_structure! (qp :: QuadraticModel , rows :: Vector{<: Integer} , cols :: Vector{<: Integer} ; kwargs ... )
86
+ function NLPModels. hess_structure! (qp :: QuadraticModel , rows :: Vector{<: Integer} , cols :: Vector{<: Integer} )
95
87
rows .= qp. data. H. rowval
96
88
cols .= findnz (qp. data. H)[2 ]
97
89
end
@@ -104,16 +96,16 @@ function NLPModels.hess_coord!(qp :: QuadraticModel, :: AbstractVector, rows ::
104
96
vals .= findnz (qp. data. H)[3 ]
105
97
end
106
98
107
- jac (qp :: AbstractQuadraticModel , :: AbstractVector ; kwargs ... ) = qp. data. A
99
+ jac (qp :: AbstractQuadraticModel , :: AbstractVector ) = qp. data. A
108
100
109
- jac_op (qp :: AbstractQuadraticModel , :: AbstractVector ; kwargs ... ) = LinearOperator (qp. data. A)
101
+ jac_op (qp :: AbstractQuadraticModel , :: AbstractVector ) = LinearOperator (qp. data. A)
110
102
111
- jac_coord (qp :: AbstractQuadraticModel , :: AbstractVector ; kwargs ... ) = findnz (qp. data. A)
103
+ jac_coord (qp :: AbstractQuadraticModel , :: AbstractVector ) = findnz (qp. data. A)
112
104
113
105
"""
114
106
Return the structure of the constraints Jacobian in sparse coordinate format in place.
115
107
"""
116
- function NLPModels. jac_structure! (qp :: QuadraticModel , rows :: Vector{<: Integer} , cols :: Vector{<: Integer} ; kwargs ... )
108
+ function NLPModels. jac_structure! (qp :: QuadraticModel , rows :: Vector{<: Integer} , cols :: Vector{<: Integer} )
117
109
rows .= qp. data. A. rowval
118
110
cols .= findnz (qp. data. A)[2 ]
119
111
end
@@ -122,38 +114,30 @@ end
122
114
Return the structure of the constraints Jacobian in sparse coordinate format in place.
123
115
"""
124
116
function NLPModels. jac_coord! (qp :: QuadraticModel , x :: AbstractVector , rows :: Vector{<: Integer} ,
125
- cols :: Vector{<: Integer} , vals :: Vector{<: AbstractFloat} ; kwargs ... )
117
+ cols :: Vector{<: Integer} , vals :: Vector{<: AbstractFloat} )
126
118
vals .= findnz (qp. data. A)[3 ]
127
119
end
128
120
129
- function cons (qp:: AbstractQuadraticModel , x :: AbstractVector )
130
- c = Vector {eltype(x)} (undef, qp. meta. ncon)
131
- cons! (qp, x, c)
132
- end
133
-
134
- function cons! (qp :: AbstractQuadraticModel , x :: AbstractVector , c :: AbstractVector )
121
+ function NLPModels. cons! (qp :: AbstractQuadraticModel , x :: AbstractVector , c :: AbstractVector )
135
122
mul! (c, qp. data. A, x)
136
123
qp. counters. neval_jprod += 1
137
124
c
138
125
end
139
126
140
- function hprod (qp :: AbstractQuadraticModel , :: AbstractVector ; kwargs... )
141
- @closure v -> begin
142
- qp. counters. neval_hprod += 1
143
- qp. data. opH * v
144
- end
127
+ function NLPModels. hprod! (qp :: AbstractQuadraticModel , x :: AbstractVector , v :: AbstractVector , Av :: AbstractVector )
128
+ qp. counters. neval_hprod += 1
129
+ Av .= qp. data. opH * v
130
+ return Av
145
131
end
146
132
147
- function jprod (qp :: AbstractQuadraticModel , :: AbstractVector ; kwargs... )
148
- @closure v -> begin
149
- qp. counters. neval_jprod += 1
150
- qp. data. A * v
151
- end
133
+ function NLPModels. jprod! (qp :: AbstractQuadraticModel , x :: AbstractVector , v :: AbstractVector , Av :: AbstractVector )
134
+ qp. counters. neval_jprod += 1
135
+ mul! (Av, qp. data. A, v)
136
+ return Av
152
137
end
153
138
154
- function jtprod (qp :: AbstractQuadraticModel , :: AbstractVector ; kwargs... )
155
- @closure v -> begin
156
- qp. counters. neval_jtprod += 1
157
- qp. data. A' * v
158
- end
139
+ function NLPModels. jtprod! (qp :: AbstractQuadraticModel , x :: AbstractVector , v :: AbstractVector , Atv :: AbstractVector )
140
+ qp. counters. neval_jtprod += 1
141
+ mul! (Atv, qp. data. A' , v)
142
+ return Atv
159
143
end
0 commit comments