Skip to content

Commit 8da44c8

Browse files
committed
wip
1 parent 549af0e commit 8da44c8

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

src/moi_nlp_model.jl

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ function NLPModels.jac_nln_structure!(
162162
if nlp.quadcon.nquad > 0
163163
index = 0
164164
for i = 1:(nlp.quadcon.nquad)
165+
# qcon.g is the sparsity pattern of the gradient of the quadratic constraint qcon
165166
qcon = nlp.quadcon.constraints[i]
166167
ind_quad = (index + 1):(index + qcon.nnzg)
167168
view(rows, ind_quad) .= i
@@ -190,6 +191,7 @@ function NLPModels.jac_structure!(
190191
if nlp.quadcon.nquad > 0
191192
index = 0
192193
for i = 1:(nlp.quadcon.nquad)
194+
# qcon.g is the sparsity pattern of the gradient of the quadratic constraint qcon
193195
qcon = nlp.quadcon.constraints[i]
194196
ind_quad = (nlp.lincon.nnzj + index + 1):(nlp.lincon.nnzj + index + qcon.nnzg)
195197
view(rows, ind_quad) .= nlp.meta.nlin .+ i
@@ -288,6 +290,7 @@ function NLPModels.jprod_lin!(
288290
v::AbstractVector,
289291
Jv::AbstractVector,
290292
)
293+
increment!(nlp, :neval_jprod_lin)
291294
jprod_lin!(
292295
nlp,
293296
nlp.lincon.jacobian.rows,
@@ -332,10 +335,10 @@ function NLPModels.jprod!(
332335
end
333336
if nlp.meta.nnln > 0
334337
if nlp.quadcon.nquad > 0
335-
for i = (nlp.meta.nlin + 1):(nlp.meta.nlin + nlp.quadcon.nquad)
338+
for i = 1:(nlp.quadcon.nquad)
336339
# Jv[i] = (Aᵢ * x + bᵢ)ᵀ * v
337340
qcon = nlp.quadcon.constraints[i]
338-
Jv[i] = coo_sym_dot(qcon.A.rows, qcon.A.cols, qcon.A.vals, x, v) + dot(qcon.b, v)
341+
Jv[nlp.meta.nlin + i] = coo_sym_dot(qcon.A.rows, qcon.A.cols, qcon.A.vals, x, v) + dot(qcon.b, v)
339342
end
340343
end
341344
if nlp.meta.nnln > nlp.quadcon.nquad
@@ -352,6 +355,7 @@ function NLPModels.jtprod_lin!(
352355
v::AbstractVector,
353356
Jtv::AbstractVector,
354357
)
358+
increment!(nlp, :neval_jtprod_lin)
355359
jtprod_lin!(
356360
nlp,
357361
nlp.lincon.jacobian.rows,
@@ -386,6 +390,32 @@ function NLPModels.jtprod_nln!(
386390
return Jtv
387391
end
388392

393+
function NLPModels.jtprod!(
394+
nlp::MathOptNLPModel,
395+
x::AbstractVector,
396+
v::AbstractVector,
397+
Jtv::AbstractVector,
398+
)
399+
increment!(nlp, :neval_jtprod)
400+
if nlp.meta.nnln > nlp.quadcon.nquad
401+
ind_nnln = (nlp.quadcon.nquad + 1):(nlp.meta.nnln)
402+
MOI.eval_constraint_jacobian_transpose_product(nlp.eval, Jtv, x, view(v, ind_nnln))
403+
end
404+
if nlp.meta.nlin > 0
405+
jtprod_lin!(nlp, nlp.lincon.jacobian.rows, nlp.lincon.jacobian.cols, nlp.lincon.jacobian.vals, v, Jtv)
406+
end
407+
(nlp.meta.nnln == nlp.quadcon.nquad) && (Jtv .= 0.0)
408+
if nlp.quadcon.nquad > 0
409+
for i = 1:(nlp.quadcon.nquad)
410+
# Jtv += v[i] * (Aᵢ * x + bᵢ)
411+
qcon = nlp.quadcon.constraints[i]
412+
coo_sym_add_mul!(qcon.A.rows, qcon.A.cols, qcon.A.vals, x, Jtv, v[i])
413+
Jtv .+= v[i] .* qcon.b
414+
end
415+
end
416+
return Jtv
417+
end
418+
389419
function NLPModels.hess_structure!(
390420
nlp::MathOptNLPModel,
391421
rows::AbstractVector{<:Integer},

0 commit comments

Comments
 (0)