Skip to content

Commit 174a0bb

Browse files
geoffroylecontetmigot
authored andcommitted
replace cons and jac with linear functions
1 parent c3f689b commit 174a0bb

File tree

3 files changed

+41
-17
lines changed

3 files changed

+41
-17
lines changed

src/presolve/presolve.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ function presolve(
334334
lcon = lcon,
335335
ucon = ucon,
336336
nnzj = nnzj,
337-
lin_nnzj = nnz(psdata.A),
337+
lin_nnzj = nnzj,
338338
nln_nnzj = 0,
339339
nnzh = nnzh,
340340
lin = 1:nconps,

src/presolve/presolve_utils.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function copy_qm(qm::QuadraticModel{T, S}) where {T, S}
2424
nnzj = qm.meta.nnzj,
2525
nnzh = qm.meta.nnzh,
2626
lin = copy(qm.meta.lin),
27-
lin_nnzj = nnz(qm.data.A),
27+
lin_nnzj = qm.meta.lin_nnzj,
2828
nln_nnzj = 0,
2929
islp = qm.meta.islp,
3030
x0 = qm.meta.x0,

src/qpmodel.jl

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ function QuadraticModel(
131131
lcon = lcon,
132132
ucon = ucon,
133133
nnzj = nnzj,
134-
lin_nnzj = length(Arows),
134+
lin_nnzj = nnzj,
135135
nln_nnzj = 0,
136136
nnzh = nnzh,
137137
lin = 1:ncon,
@@ -181,7 +181,7 @@ function QuadraticModel(
181181
lcon = lcon,
182182
ucon = ucon,
183183
nnzj = nnzj,
184-
lin_nnzj = nnz(A),
184+
lin_nnzj = nnzj,
185185
nln_nnzj = 0,
186186
nnzh = nnzh,
187187
lin = 1:ncon,
@@ -364,21 +364,23 @@ NLPModels.hess_coord!(
364364
obj_weight::Real = one(eltype(x)),
365365
) = hess_coord!(qp, x, vals, obj_weight = obj_weight)
366366

367-
function NLPModels.jac_structure!(
367+
function NLPModels.jac_lin_structure!(
368368
qp::QuadraticModel{T, S, M1, M2},
369369
rows::AbstractVector{<:Integer},
370370
cols::AbstractVector{<:Integer},
371371
) where {T, S, M1, M2 <: SparseMatrixCOO}
372+
@lencheck qp.meta.lin_nnzj rows cols
372373
rows .= qp.data.A.rows
373374
cols .= qp.data.A.cols
374375
return rows, cols
375376
end
376377

377-
function NLPModels.jac_structure!(
378+
function NLPModels.jac_lin_structure!(
378379
qp::QuadraticModel{T, S, M1, M2},
379380
rows::AbstractVector{<:Integer},
380381
cols::AbstractVector{<:Integer},
381382
) where {T, S, M1, M2 <: SparseMatrixCSC}
383+
@lencheck qp.meta.lin_nnzj rows cols
382384
fill_structure!(qp.data.A, rows, cols)
383385
return rows, cols
384386
end
@@ -388,6 +390,7 @@ function NLPModels.jac_structure!(
388390
rows::AbstractVector{<:Integer},
389391
cols::AbstractVector{<:Integer},
390392
) where {T, S, M1, M2 <: Matrix}
393+
@lencheck qp.meta.lin_nnzj rows cols
391394
count = 1
392395
for j = 1:(qp.meta.nvar)
393396
for i = 1:(qp.meta.ncon)
@@ -399,32 +402,38 @@ function NLPModels.jac_structure!(
399402
return rows, cols
400403
end
401404

402-
function NLPModels.jac_coord!(
405+
function NLPModels.jac_lin_coord!(
403406
qp::QuadraticModel{T, S, M1, M2},
404407
x::AbstractVector,
405408
vals::AbstractVector,
406409
) where {T, S, M1, M2 <: SparseMatrixCOO}
407-
NLPModels.increment!(qp, :neval_jac)
410+
@lencheck qp.meta.nvar x
411+
@lencheck qp.meta.lin_nnzj vals
412+
NLPModels.increment!(qp, :neval_jac_lin)
408413
vals .= qp.data.A.vals
409414
return vals
410415
end
411416

412-
function NLPModels.jac_coord!(
417+
function NLPModels.jac_lin_coord!(
413418
qp::QuadraticModel{T, S, M1, M2},
414419
x::AbstractVector,
415420
vals::AbstractVector,
416421
) where {T, S, M1, M2 <: SparseMatrixCSC}
417-
NLPModels.increment!(qp, :neval_jac)
422+
@lencheck qp.meta.nvar x
423+
@lencheck qp.meta.lin_nnzj vals
424+
NLPModels.increment!(qp, :neval_jac_lin)
418425
fill_coord!(qp.data.A, vals, one(T))
419426
return vals
420427
end
421428

422-
function NLPModels.jac_coord!(
429+
function NLPModels.jac_lin_coord!(
423430
qp::QuadraticModel{T, S, M1, M2},
424431
x::AbstractVector,
425432
vals::AbstractVector,
426433
) where {T, S, M1, M2 <: Matrix}
427-
NLPModels.increment!(qp, :neval_jac)
434+
@lencheck qp.meta.nvar x
435+
@lencheck qp.meta.lin_nnzj vals
436+
NLPModels.increment!(qp, :neval_jac_lin)
428437
count = 1
429438
for j = 1:(qp.meta.nvar)
430439
for i = 1:(qp.meta.ncon)
@@ -435,8 +444,19 @@ function NLPModels.jac_coord!(
435444
return vals
436445
end
437446

438-
function NLPModels.cons!(qp::AbstractQuadraticModel, x::AbstractVector, c::AbstractVector)
439-
NLPModels.increment!(qp, :neval_cons)
447+
function NLPModels.jac_lin(
448+
qp::QuadraticModel{T, S, M1, M2},
449+
x::AbstractVector,
450+
) where {T, S, M1 <: AbstractLinearOperator, M2 <: AbstractLinearOperator}
451+
@lencheck qp.meta.nvar x
452+
increment!(qp, :neval_jac_lin)
453+
return qp.data.A
454+
end
455+
456+
function NLPModels.cons_lin!(qp::AbstractQuadraticModel, x::AbstractVector, c::AbstractVector)
457+
@lencheck qp.meta.nvar x
458+
@lencheck qp.meta.nlin c
459+
NLPModels.increment!(qp, :neval_cons_lin)
440460
mul!(c, qp.data.A, x)
441461
return c
442462
end
@@ -465,13 +485,15 @@ NLPModels.hprod!(
465485
obj_weight::Real = one(eltype(x)),
466486
) = hprod!(qp, x, v, Hv, obj_weight = obj_weight)
467487

468-
function NLPModels.jprod!(
488+
function NLPModels.jprod_lin!(
469489
qp::AbstractQuadraticModel,
470490
x::AbstractVector,
471491
v::AbstractVector,
472492
Av::AbstractVector,
473493
)
474-
NLPModels.increment!(qp, :neval_jprod)
494+
@lencheck qp.meta.nvar x v
495+
@lencheck qp.meta.nlin Av
496+
NLPModels.increment!(qp, :neval_jprod_lin)
475497
mul!(Av, qp.data.A, v)
476498
return Av
477499
end
@@ -482,7 +504,9 @@ function NLPModels.jtprod!(
482504
v::AbstractVector,
483505
Atv::AbstractVector,
484506
)
485-
NLPModels.increment!(qp, :neval_jtprod)
507+
@lencheck qp.meta.nvar x Atv
508+
@lencheck qp.meta.nlin v
509+
NLPModels.increment!(qp, :neval_jtprod_lin)
486510
mul!(Atv, transpose(qp.data.A), v)
487511
return Atv
488512
end

0 commit comments

Comments
 (0)