Skip to content

Commit d30a609

Browse files
remove direct calls of SemOptimizerOptim and add optimizer to SemFit
1 parent c2c4ab2 commit d30a609

11 files changed

Lines changed: 27 additions & 27 deletions

File tree

docs/src/performance/simulation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ For example,
6767
6868
new_observed = SemObservedData(;data = data_2, specification = partable)
6969
70-
my_optimizer = SemOptimizerOptim()
70+
my_optimizer = SemOptimizer()
7171
7272
new_optimizer = update_observed(my_optimizer, new_observed)
7373
```

docs/src/tutorials/construction/build_by_parts.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ ml = SemML(observed = observed)
5959
loss_ml = SemLoss(ml)
6060
6161
# optimizer ----------------------------------------------------------------------------
62-
optimizer = SemOptimizerOptim()
62+
optimizer = SemOptimizer()
6363
6464
# model --------------------------------------------------------------------------------
6565

docs/src/tutorials/construction/outer_constructor.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ model = Sem(
4141
data = data,
4242
implied = RAMSymbolic,
4343
loss = SemWLS,
44-
optimizer = SemOptimizerOptim
44+
optimizer = SemOptimizer
4545
)
4646
```
4747

docs/src/tutorials/fitting/fitting.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ Structural Equation Model
1717
- Fields
1818
observed: SemObservedData
1919
implied: RAM
20-
optimizer: SemOptimizerOptim
2120

2221
------------- Optimization result -------------
2322

@@ -60,7 +59,7 @@ The available keyword arguments are listed in the sections [Using Optim.jl](@ref
6059
Alternative, you can also explicitely define a `SemOptimizer` and pass it as the first argument to `fit`:
6160

6261
```julia
63-
my_optimizer = SemOptimizerOptim(algorithm = BFGS())
62+
my_optimizer = SemOptimizer(algorithm = BFGS())
6463

6564
fit(my_optimizer, model)
6665
```

ext/SEMNLOptExt/NLopt.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ end
1919

2020
"""
2121
Uses *NLopt.jl* as the optimization engine. For more information on the available algorithms
22-
and options, see the [*NLopt.jl*](https://github.com/JuliaOpt/NLopt.jl) package and the [NLopt docs](https://nlopt.readthedocs.io/en/latest/).
22+
and options, see the [*NLopt.jl*](https://github.com/JuliaOpt/NLopt.jl) package and the
23+
[NLopt docs](https://nlopt.readthedocs.io/en/latest/).
2324
2425
# Constructor
2526
@@ -138,12 +139,13 @@ SEM.n_iterations(res::NLoptResult) = res.problem.numevals
138139
SEM.convergence(res::NLoptResult) = res.result[3]
139140

140141
# construct SemFit from fitted NLopt object
141-
function SemFit_NLopt(optimization_result, model::AbstractSem, start_val, opt)
142+
function SemFit_NLopt(optimization_result, model::AbstractSem, start_val, optim, opt)
142143
return SemFit(
143144
optimization_result[1],
144145
optimization_result[2],
145146
start_val,
146147
model,
148+
optim,
147149
NLoptResult(optimization_result, opt),
148150
)
149151
end
@@ -180,7 +182,7 @@ function SEM.fit(
180182
# fit
181183
result = NLopt.optimize(opt, start_params)
182184

183-
return SemFit_NLopt(result, model, start_params, opt)
185+
return SemFit_NLopt(result, model, start_params, optim, opt)
184186
end
185187

186188
############################################################################################

ext/SEMProximalOptExt/ProximalAlgorithms.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ function SEM.fit(
104104
solution,
105105
start_params,
106106
model,
107+
optim,
107108
ProximalResult(optimization_result),
108109
)
109110
end

src/frontend/fit/SemFit.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ Fitted structural equation model.
1717
- `n_iterations(::SemFit)` -> number of iterations
1818
- `convergence(::SemFit)` -> convergence properties
1919
"""
20-
mutable struct SemFit{Mi, So, St, Mo, O}
20+
mutable struct SemFit{Mi, So, St, Mo, Op, O}
2121
minimum::Mi
2222
solution::So
2323
start_val::St
2424
model::Mo
25+
optimizer::Op
2526
optimization_result::O
2627
end
2728

@@ -39,6 +40,10 @@ function Base.show(io::IO, semfit::SemFit)
3940
#print(io, "Objective value: $(round(semfit.minimum, digits = 4)) \n")
4041
print(io, "------------- Optimization result ------------- \n")
4142
print(io, "\n")
43+
print(io, "engine: ")
44+
print(io, engine(semfit))
45+
print(io, "\n")
46+
print(io, "\n")
4247
print(io, semfit.optimization_result)
4348
end
4449

@@ -58,6 +63,7 @@ model(sem_fit::SemFit) = sem_fit.model
5863
optimization_result(sem_fit::SemFit) = sem_fit.optimization_result
5964

6065
# optimizer properties
66+
engine(sem_fit::SemFit) = engine(sem_fit.optimizer)
6167
optimizer(sem_fit::SemFit) = optimizer(optimization_result(sem_fit))
6268
n_iterations(sem_fit::SemFit) = n_iterations(optimization_result(sem_fit))
6369
convergence(sem_fit::SemFit) = convergence(optimization_result(sem_fit))

src/optimizer/abstract.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
engine(::Type{<:SemOptimizer{E}}) where {E} = E
2-
engine(optimizer::SemOptimizer) = engine(typeof(optimizer))
2+
engine(::SemOptimizer{E}) where {E} = E
33

44
"""
55
SemOptimizer(args...; engine::Symbol = :Optim, kwargs...)

src/optimizer/optim.jl

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,6 @@ update_observed(optimizer::SemOptimizerOptim, observed::SemObserved; kwargs...)
7676
algorithm(optimizer::SemOptimizerOptim) = optimizer.algorithm
7777
options(optimizer::SemOptimizerOptim) = optimizer.options
7878

79-
function SemFit(
80-
optimization_result::Optim.MultivariateOptimizationResults,
81-
model::AbstractSem,
82-
start_val,
83-
)
84-
return SemFit(
85-
optimization_result.minimum,
86-
optimization_result.minimizer,
87-
start_val,
88-
model,
89-
optimization_result,
90-
)
91-
end
92-
9379
optimizer(res::Optim.MultivariateOptimizationResults) = Optim.summary(res)
9480
n_iterations(res::Optim.MultivariateOptimizationResults) = Optim.iterations(res)
9581
convergence(res::Optim.MultivariateOptimizationResults) = Optim.converged(res)
@@ -139,5 +125,11 @@ function fit(
139125
optim.options,
140126
)
141127
end
142-
return SemFit(result, model, start_params)
128+
return SemFit(
129+
result.minimum,
130+
result.minimizer,
131+
start_params,
132+
model,
133+
optim,
134+
result)
143135
end

test/examples/multigroup/multigroup.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ start_test = [
8686
fill(0.05, 3)
8787
fill(0.01, 3)
8888
]
89-
semoptimizer = SemOptimizerOptim()
89+
semoptimizer = SemOptimizer()
9090

9191
@testset "RAMMatrices | constructor | Optim" begin
9292
include("build_models.jl")

0 commit comments

Comments
 (0)