Skip to content

Commit 52cb645

Browse files
geoffroyleconteabelsiqueira
authored andcommitted
parametric model
1 parent ba98666 commit 52cb645

File tree

3 files changed

+30
-29
lines changed

3 files changed

+30
-29
lines changed

Project.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ authors = ["Dominique Orban <[email protected]>"]
44
version = "0.3.0"
55

66
[deps]
7+
ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a"
78
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
89
LinearOperators = "5c8ed15e-5a4c-59e4-a42b-c7e8811fb125"
910
NLPModels = "a4795742-8479-5a88-8948-cc11e1c8c1a6"
@@ -13,8 +14,8 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1314

1415
[compat]
1516
LinearOperators = "0.7.0, 1"
16-
NLPModels = "0.14"
17-
NLPModelsModifiers = "0.1"
17+
NLPModels = "0.15"
18+
NLPModelsModifiers = "0.2"
1819
Requires = "0.3, 0.4, 0.5, 1.0"
1920
julia = "^1.0.0"
2021

src/qpmodel.jl

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
export jac_structure!, hess_structure!, jac_coord!, hess_coord!, SlackModel!
22

3-
mutable struct QPData{T}
3+
mutable struct QPData{T, S}
44
c0::T # constant term in objective
5-
c::Vector{T} # linear term
5+
c::S # linear term
66
Hrows::Vector{Int} # quadratic term
77
Hcols::Vector{Int}
8-
Hvals::Vector{T}
8+
Hvals::S
99
Arows::Vector{Int} # constraints matrix
1010
Acols::Vector{Int}
11-
Avals::Vector{T}
11+
Avals::S
1212
end
1313

14-
abstract type AbstractQuadraticModel <: AbstractNLPModel end
14+
abstract type AbstractQuadraticModel{T, S} <: AbstractNLPModel{T, S} end
1515

1616
"""
1717
qp = QuadraticModel(c, Hrows, Hcols, Hvals; Arows = Arows, Acols = Acols, Avals = Avals,
@@ -29,10 +29,10 @@ create a Quadratic model from a QPS file:
2929
qps = readqps("QAFIRO.SIF")
3030
qp = QuadraticModel(qps)
3131
"""
32-
mutable struct QuadraticModel <: AbstractQuadraticModel
33-
meta::NLPModelMeta
32+
mutable struct QuadraticModel{T, S} <: AbstractQuadraticModel{T, S}
33+
meta::NLPModelMeta{T, S}
3434
counters::Counters
35-
data::QPData
35+
data::QPData{T, S}
3636
end
3737

3838
function QuadraticModel(
@@ -42,11 +42,11 @@ function QuadraticModel(
4242
Hvals::AbstractVector;
4343
Arows::AbstractVector{<:Integer} = Int[],
4444
Acols::AbstractVector{<:Integer} = Int[],
45-
Avals::AbstractVector = T[],
46-
lcon::AbstractVector = T[],
47-
ucon::AbstractVector = T[],
48-
lvar::AbstractVector = fill(T(-Inf), length(c)),
49-
uvar::AbstractVector = fill(T(Inf), length(c)),
45+
Avals::AbstractVector = similar(c, 0),
46+
lcon::AbstractVector = similar(c, 0),
47+
ucon::AbstractVector = similar(c, 0),
48+
lvar::AbstractVector = fill!(similar(c, length(c)), T(-Inf)),
49+
uvar::AbstractVector = fill!(similar(c, length(c)), T(Inf)),
5050
c0::T = zero(T),
5151
kwargs...,
5252
) where {T}
@@ -89,19 +89,19 @@ end
8989
function QuadraticModel(
9090
c::AbstractVector{T},
9191
H::SparseMatrixCSC{T, Int};
92-
A::AbstractMatrix = zeros(T, 0, length(c)),
93-
lcon::AbstractVector = zeros(T, 0),
94-
ucon::AbstractVector = zeros(T, 0),
95-
lvar::AbstractVector = fill(T(-Inf), length(c)),
96-
uvar::AbstractVector = fill(T(Inf), length(c)),
92+
A::AbstractMatrix = similar(c, 0, length(c)),
93+
lcon::AbstractVector = similar(c, 0),
94+
ucon::AbstractVector = similar(c, 0),
95+
lvar::AbstractVector = fill!(similar(c, length(c)), T(-Inf)),
96+
uvar::AbstractVector = fill!(similar(c, length(c)), T(Inf)),
9797
c0::T = zero(T),
9898
kwargs...,
9999
) where {T}
100100
ncon, nvar = size(A)
101101
tril!(H)
102102
nnzh, Hrows, Hcols, Hvals = nnz(H), findnz(H)...
103103
nnzj, Arows, Acols, Avals = if ncon == 0
104-
0, Int[], Int[], T[]
104+
0, Int[], Int[], similar(c, 0)
105105
elseif issparse(A)
106106
nnz(A), findnz(A)...
107107
else
@@ -136,7 +136,7 @@ QuadraticModel(c::AbstractVector{T}, H::AbstractMatrix; args...) where {T} =
136136
137137
Creates a quadratic Taylor model of `nlp` around `x`.
138138
"""
139-
function QuadraticModel(model::AbstractNLPModel, x::AbstractVector; kwargs...)
139+
function QuadraticModel(model::AbstractNLPModel{T, S}, x::AbstractVector; kwargs...) where {T, S}
140140
nvar = model.meta.nvar
141141
ncon = model.meta.ncon
142142
c0 = obj(model, x)
@@ -160,7 +160,7 @@ function QuadraticModel(model::AbstractNLPModel, x::AbstractVector; kwargs...)
160160
ucon = model.meta.ucon .- c,
161161
lvar = model.meta.lvar .- x,
162162
uvar = model.meta.uvar .- x,
163-
x0 = zeros(model.meta.nvar),
163+
x0 = fill!(S(undef, model.meta.nvar), zero(T)),
164164
)
165165
else
166166
QuadraticModel(
@@ -171,7 +171,7 @@ function QuadraticModel(model::AbstractNLPModel, x::AbstractVector; kwargs...)
171171
c0 = c0,
172172
lvar = model.meta.lvar .- x,
173173
uvar = model.meta.uvar .- x,
174-
x0 = zeros(model.meta.nvar),
174+
x0 = fill!(S(undef, model.meta.nvar), zero(T)),
175175
)
176176
end
177177
end
@@ -187,9 +187,9 @@ function NLPModels.objgrad!(qp::AbstractQuadraticModel, x::AbstractVector, g::Ab
187187
return f, g
188188
end
189189

190-
function NLPModels.obj(qp::AbstractQuadraticModel, x::AbstractVector)
190+
function NLPModels.obj(qp::AbstractQuadraticModel{T, S}, x::AbstractVector) where {T, S}
191191
NLPModels.increment!(qp, :neval_obj)
192-
Hx = zeros(qp.meta.nvar)
192+
Hx = fill!(S(undef, qp.meta.nvar), zero(T))
193193
coo_sym_prod!(qp.data.Hrows, qp.data.Hcols, qp.data.Hvals, x, Hx)
194194
return qp.data.c0 + dot(qp.data.c, x) + dot(Hx, x) / 2
195195
end
@@ -325,13 +325,13 @@ function NLPModelsModifiers.SlackModel(qp::AbstractQuadraticModel, name = qp.met
325325

326326
data = QPData(
327327
copy(qp.data.c0),
328-
[qp.data.c; zeros(T, ns)],
328+
[qp.data.c; fill!(similar(qp.data.c, ns), zero(T))],
329329
copy(qp.data.Hrows),
330330
copy(qp.data.Hcols),
331331
copy(qp.data.Hvals),
332332
[qp.data.Arows; qp.meta.jlow; qp.meta.jupp; qp.meta.jrng],
333333
[qp.data.Acols; (qp.meta.nvar + 1):(qp.meta.nvar + ns)],
334-
[qp.data.Avals; .-ones(T, ns)],
334+
[qp.data.Avals; fill!(similar(qp.data.c, ns), -one(T))],
335335
)
336336
meta = NLPModelsModifiers.slack_meta(qp.meta, name = qp.meta.name)
337337

test/runtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ end
5858
c,
5959
H,
6060
A = A,
61-
lcon = [-3; -4],
61+
lcon = [-3.; -4.],
6262
ucon = [-2.0; Inf],
6363
lvar = l,
6464
uvar = u,

0 commit comments

Comments
 (0)