Skip to content

Commit fa420ee

Browse files
tmigotprobot-auto-merge[bot]
authored andcommitted
preallocate meta vectors
1 parent 8365fac commit fa420ee

3 files changed

Lines changed: 50 additions & 15 deletions

File tree

src/feasibility-form-nls.jl

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,33 @@ function FeasibilityFormNLS(
4848
nvar = meta.nvar + nequ
4949
ncon = meta.ncon + nequ
5050
nnzh = nls.nls_meta.nnzh + nequ + (meta.ncon == 0 ? 0 : meta.nnzh) # Some indexes can be repeated
51+
x0 = similar(meta.x0, nvar)
52+
x0[1 : meta.nvar] .= meta.x0
53+
x0[meta.nvar + 1 : end] .= zero(T)
54+
lvar = similar(meta.x0, nvar)
55+
lvar[1 : meta.nvar] .= meta.lvar
56+
lvar[meta.nvar + 1 : end] .= T(-Inf)
57+
uvar = similar(meta.x0, nvar)
58+
uvar[1 : meta.nvar] .= meta.uvar
59+
uvar[meta.nvar + 1 : end] .= T(Inf)
60+
lcon = similar(meta.y0, ncon)
61+
lcon[1 : nequ] .= zero(T)
62+
lcon[nequ + 1 : end] .= meta.lcon
63+
ucon = similar(meta.y0, ncon)
64+
ucon[1 : nequ] .= zero(T)
65+
ucon[nequ + 1 : end] .= meta.ucon
66+
y0 = similar(meta.y0, ncon)
67+
y0[1 : nequ] .= zero(T)
68+
y0[nequ + 1 : end] .= meta.y0
5169
meta = NLPModelMeta{T, S}(
5270
nvar,
53-
x0 = [meta.x0; zeros(T, nequ)],
54-
lvar = [meta.lvar; fill(T(-Inf), nequ)],
55-
uvar = [meta.uvar; fill(T(Inf), nequ)],
71+
x0 = x0,
72+
lvar = lvar,
73+
uvar = uvar,
5674
ncon = ncon,
57-
lcon = [zeros(T, nequ); meta.lcon],
58-
ucon = [zeros(T, nequ); meta.ucon],
59-
y0 = [zeros(T, nequ); meta.y0],
75+
lcon = lcon,
76+
ucon = ucon,
77+
y0 = y0,
6078
lin = [nls.nls_meta.lin; meta.lin .+ nequ],
6179
nln = [nls.nls_meta.nln; meta.nln .+ nequ],
6280
nnzj = meta.nnzj + nls.nls_meta.nnzj + nequ,
@@ -66,7 +84,7 @@ function FeasibilityFormNLS(
6684
nls_meta = NLSMeta{T, S}(
6785
nequ,
6886
nvar,
69-
x0 = [meta.x0; zeros(T, nequ)],
87+
x0 = x0,
7088
nnzj = nequ,
7189
nnzh = 0,
7290
lin = 1:nequ,

src/model-interaction.jl

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,20 @@ function FeasibilityFormNLS(
88
ncon = meta.ncon
99
nnzj = meta.nnzj + nequ
1010
nnzh = meta.nnzh + nequ
11+
x0 = similar(meta.x0, nvar)
12+
x0[1 : meta.nvar] .= meta.x0
13+
x0[meta.nvar : end] .= zero(T)
14+
lvar = similar(meta.x0, nvar)
15+
lvar[1 : meta.nvar] .= meta.lvar
16+
lvar[meta.nvar + 1 : end] .= T(-Inf)
17+
uvar = similar(meta.x0, nvar)
18+
uvar[1 : meta.nvar] .= meta.uvar
19+
uvar[meta.nvar + 1 : end] .= T(Inf)
1120
meta = NLPModelMeta{T, S}(
1221
nvar,
13-
x0 = [meta.x0; zeros(T, nequ)],
14-
lvar = [meta.lvar; fill(T(-Inf), nequ)],
15-
uvar = [meta.uvar; fill(T(Inf), nequ)],
22+
x0 = x0,
23+
lvar = lvar,
24+
uvar = uvar,
1625
ncon = ncon,
1726
lcon = meta.lcon,
1827
ucon = meta.ucon,
@@ -23,7 +32,7 @@ function FeasibilityFormNLS(
2332
nnzh = nnzh,
2433
name = name,
2534
)
26-
nls_meta = NLSMeta{T, S}(nequ, nvar, x0 = [meta.x0; zeros(T, nequ)], nnzj = nequ, nnzh = 0)
35+
nls_meta = NLSMeta{T, S}(nequ, nvar, x0 = x0, nnzj = nequ, nnzh = 0)
2736

2837
nlp = FeasibilityFormNLS{T, S, FeasibilityResidual{T, S}}(meta, nls_meta, nls, NLSCounters())
2938
finalizer(nlp -> finalize(nlp.internal), nlp)

src/slack-model.jl

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,19 @@ function slack_meta(meta::NLPModelMeta{T, S}; name = meta.name * "-slack") where
8484
# Don't introduce slacks for equality constraints!
8585
lvar = [meta.lvar; meta.lcon[[jlow; jupp; jrng]]] # l ≤ x and cₗ ≤ s
8686
uvar = [meta.uvar; meta.ucon[[jlow; jupp; jrng]]] # x ≤ u and s ≤ cᵤ
87-
lcon = zeros(T, meta.ncon)
87+
lcon = similar(meta.x0, meta.ncon)
88+
lcon[setdiff(1:meta.ncon, meta.jfix)] .= zero(T)
8889
lcon[meta.jfix] = meta.lcon[meta.jfix]
89-
ucon = zeros(T, meta.ncon)
90+
ucon = similar(meta.x0, meta.ncon)
91+
ucon[setdiff(1:meta.ncon, meta.jfix)] .= zero(T)
9092
ucon[meta.jfix] = meta.ucon[meta.jfix]
9193

94+
x0 = similar(meta.x0, meta.nvar + ns)
95+
x0[1 : meta.nvar] .= meta.x0
96+
x0[meta.nvar : end] .= zero(T)
9297
return NLPModelMeta(
9398
meta.nvar + ns,
94-
x0 = [meta.x0; zeros(T, ns)],
99+
x0 = x0,
95100
lvar = lvar,
96101
uvar = uvar,
97102
ncon = meta.ncon,
@@ -126,10 +131,13 @@ function SlackNLSModel(
126131
ns == 0 && return model
127132

128133
meta = slack_meta(model.meta, name = name)
134+
x0 = similar(model.meta.x0, model.meta.nvar + ns)
135+
x0[model.meta.nvar : end] .= zero(T)
136+
x0[1 : model.meta.nvar] .= model.meta.x0
129137
nls_meta = NLSMeta{T, S}(
130138
model.nls_meta.nequ,
131139
model.meta.nvar + ns,
132-
x0 = [model.meta.x0; zeros(eltype(model.meta.x0), ns)],
140+
x0 = x0,
133141
nnzj = model.nls_meta.nnzj,
134142
nnzh = model.nls_meta.nnzh,
135143
lin = model.nls_meta.lin,

0 commit comments

Comments
 (0)