Skip to content

Commit b724771

Browse files
streamline optimization result methods
1 parent c7c6566 commit b724771

6 files changed

Lines changed: 13 additions & 10 deletions

File tree

docs/src/developer/optimizer.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ update_observed(optimizer::SemOptimizerName, observed::SemObserved; kwargs...) =
3030
### additional methods
3131
############################################################################################
3232

33-
algorithm(optimizer::SemOptimizerName) = optimizer.algorithm
3433
options(optimizer::SemOptimizerName) = optimizer.options
3534
```
3635

@@ -68,7 +67,7 @@ The method has to return a `SemFit` object that consists of the minimum of the o
6867
In addition, you might want to provide methods to access properties of your optimization result:
6968

7069
```julia
71-
optimizer(res::MyOptimizationResult) = ...
70+
algorithm_name(res::MyOptimizationResult) = ...
7271
n_iterations(res::MyOptimizationResult) = ...
7372
convergence(res::MyOptimizationResult) = ...
7473
```

ext/SEMNLOptExt/NLopt.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ SEM.update_observed(optimizer::SemOptimizerNLopt, observed::SemObserved; kwargs.
122122
### additional methods
123123
############################################################################################
124124

125-
SEM.algorithm(optimizer::SemOptimizerNLopt) = optimizer.algorithm
126125
local_algorithm(optimizer::SemOptimizerNLopt) = optimizer.local_algorithm
127126
SEM.options(optimizer::SemOptimizerNLopt) = optimizer.options
128127
local_options(optimizer::SemOptimizerNLopt) = optimizer.local_options
@@ -134,7 +133,7 @@ struct NLoptResult
134133
problem::Any
135134
end
136135

137-
SEM.optimizer(res::NLoptResult) = res.problem.algorithm
136+
SEM.algorithm_name(res::NLoptResult) = res.problem.algorithm
138137
SEM.n_iterations(res::NLoptResult) = res.problem.numevals
139138
SEM.convergence(res::NLoptResult) = res.result[3]
140139

ext/SEMProximalOptExt/ProximalAlgorithms.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ SEM.update_observed(optimizer::SemOptimizerProximal, observed::SemObserved; kwar
4747
### additional methods
4848
############################################################################################
4949

50-
SEM.algorithm(optimizer::SemOptimizerProximal) = optimizer.algorithm
50+
SEM.algorithm_name(res::ProximalResult) = SEM.algorithm_name(res.result[:algorithm])
51+
SEM.algorithm_name(::ProximalAlgorithms.IterativeAlgorithm{I,H,S,D,K}) where
52+
{I, H, S, D, K} = nameof(I)
53+
54+
SEM.convergence(::ProximalResult) = "No standard convergence criteria for proximal \n algorithms available."
55+
SEM.n_iterations(res::ProximalResult) = res.result[:iterations]
5156

5257
############################################################################
5358
### Pretty Printing

src/frontend/fit/SemFit.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Fitted structural equation model.
1313
- `model(::SemFit)`
1414
- `optimization_result(::SemFit)`
1515
16-
- `optimizer(::SemFit)` -> optimization algorithm
16+
- `algorithm_name(::SemFit)` -> optimization algorithm
1717
- `n_iterations(::SemFit)` -> number of iterations
1818
- `convergence(::SemFit)` -> convergence properties
1919
"""
@@ -63,7 +63,7 @@ model(sem_fit::SemFit) = sem_fit.model
6363
optimization_result(sem_fit::SemFit) = sem_fit.optimization_result
6464

6565
# optimizer properties
66+
algorithm_name(sem_fit::SemFit) = algorithm_name(sem_fit.optimization_result)
6667
optimizer_engine(sem_fit::SemFit) = optimizer_engine(sem_fit.optimizer)
67-
optimizer(sem_fit::SemFit) = optimizer(optimization_result(sem_fit))
6868
n_iterations(sem_fit::SemFit) = n_iterations(optimization_result(sem_fit))
6969
convergence(sem_fit::SemFit) = convergence(optimization_result(sem_fit))

src/frontend/fit/summary.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ function details(sem_fit::SemFit; show_fitmeasures = false, color = :light_cyan,
77
color = color,
88
)
99
print("\n")
10-
println("Optimization algorithm: $(optimizer(sem_fit))")
10+
println("Optimization engine: $(optimizer_engine(sem_fit))")
11+
println("Optimization algorithm: $(algorithm_name(sem_fit))")
1112
println("Convergence: $(convergence(sem_fit))")
1213
println("No. iterations/evaluations: $(n_iterations(sem_fit))")
1314
print("\n")

src/optimizer/optim.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,9 @@ update_observed(optimizer::SemOptimizerOptim, observed::SemObserved; kwargs...)
7373
### additional methods
7474
############################################################################################
7575

76-
algorithm(optimizer::SemOptimizerOptim) = optimizer.algorithm
7776
options(optimizer::SemOptimizerOptim) = optimizer.options
7877

79-
optimizer(res::Optim.MultivariateOptimizationResults) = Optim.summary(res)
78+
algorithm_name(res::Optim.MultivariateOptimizationResults) = Optim.summary(res)
8079
n_iterations(res::Optim.MultivariateOptimizationResults) = Optim.iterations(res)
8180
convergence(res::Optim.MultivariateOptimizationResults) = Optim.converged(res)
8281

0 commit comments

Comments
 (0)