|
22 | 22 | If you rather have the first problem, the `nls` model already works as an NLPModel of |
23 | 23 | that format. |
24 | 24 | """ |
25 | | -mutable struct FeasibilityFormNLS{M <: AbstractNLSModel} <: AbstractNLSModel |
26 | | - meta::NLPModelMeta |
27 | | - nls_meta::NLSMeta |
| 25 | +mutable struct FeasibilityFormNLS{T, S, M <: AbstractNLSModel{T, S}} <: AbstractNLSModel{T, S} |
| 26 | + meta::NLPModelMeta{T, S} |
| 27 | + nls_meta::NLSMeta{T, S} |
28 | 28 | internal::M |
29 | 29 | counters::NLSCounters |
30 | 30 | end |
|
39 | 39 | Converts a nonlinear least-squares problem with residual `F(x)` to a nonlinear |
40 | 40 | optimization problem with constraints `F(x) = r` and objective `¹/₂‖r‖²`. |
41 | 41 | """ |
42 | | -function FeasibilityFormNLS(nls::AbstractNLSModel; name = "$(nls.meta.name)-ffnls") |
| 42 | +function FeasibilityFormNLS( |
| 43 | + nls::AbstractNLSModel{T, S}; |
| 44 | + name = "$(nls.meta.name)-ffnls", |
| 45 | +) where {T,S} |
43 | 46 | nequ = nls.nls_meta.nequ |
44 | 47 | meta = nls.meta |
45 | 48 | nvar = meta.nvar + nequ |
46 | 49 | ncon = meta.ncon + nequ |
47 | 50 | nnzh = nls.nls_meta.nnzh + nequ + (meta.ncon == 0 ? 0 : meta.nnzh) # Some indexes can be repeated |
48 | | - meta = NLPModelMeta( |
| 51 | + meta = NLPModelMeta{T, S}( |
49 | 52 | nvar, |
50 | | - x0 = [meta.x0; zeros(nequ)], |
51 | | - lvar = [meta.lvar; fill(-Inf, nequ)], |
52 | | - uvar = [meta.uvar; fill(Inf, nequ)], |
| 53 | + x0 = [meta.x0; zeros(T, nequ)], |
| 54 | + lvar = [meta.lvar; fill(T(-Inf), nequ)], |
| 55 | + uvar = [meta.uvar; fill(T(Inf), nequ)], |
53 | 56 | ncon = ncon, |
54 | | - lcon = [zeros(nequ); meta.lcon], |
55 | | - ucon = [zeros(nequ); meta.ucon], |
56 | | - y0 = [zeros(nequ); meta.y0], |
| 57 | + lcon = [zeros(T, nequ); meta.lcon], |
| 58 | + ucon = [zeros(T, nequ); meta.ucon], |
| 59 | + y0 = [zeros(T, nequ); meta.y0], |
57 | 60 | lin = [nls.nls_meta.lin; meta.lin .+ nequ], |
58 | 61 | nln = [nls.nls_meta.nln; meta.nln .+ nequ], |
59 | 62 | nnzj = meta.nnzj + nls.nls_meta.nnzj + nequ, |
60 | 63 | nnzh = nnzh, |
61 | 64 | name = name, |
62 | 65 | ) |
63 | | - nls_meta = NLSMeta( |
| 66 | + nls_meta = NLSMeta{T, S}( |
64 | 67 | nequ, |
65 | 68 | nvar, |
66 | | - x0 = [meta.x0; zeros(nequ)], |
| 69 | + x0 = [meta.x0; zeros(T, nequ)], |
67 | 70 | nnzj = nequ, |
68 | 71 | nnzh = 0, |
69 | 72 | lin = 1:nequ, |
70 | 73 | nln = Int[], |
71 | 74 | ) |
72 | 75 |
|
73 | | - nlp = FeasibilityFormNLS{typeof(nls)}(meta, nls_meta, nls, NLSCounters()) |
| 76 | + nlp = FeasibilityFormNLS{T, S, typeof(nls)}(meta, nls_meta, nls, NLSCounters()) |
74 | 77 | finalizer(nlp -> finalize(nlp.internal), nlp) |
75 | 78 |
|
76 | 79 | return nlp |
|
0 commit comments