Skip to content

Commit f36e8ac

Browse files
authored
Merge branch 'JuliaSmoothOptimizers:main' into youtube
2 parents a8c1281 + d2dc592 commit f36e8ac

File tree

22 files changed

+158
-86
lines changed

22 files changed

+158
-86
lines changed

.github/workflows/LinkChecker.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
ref: 'gh-pages'
1818

1919
- name: Link Checker
20-
uses: lycheeverse/lychee-action@v1.1.0
20+
uses: lycheeverse/lychee-action@v2.0.2
2121
with:
2222
args: --verbose --no-progress **/*.html --exclude=".+gstatic.+" --exclude="https://doi.org.+" --exclude="https://github.com/JuliaSmoothOptimizers/PACKAGE.jl"
2323
env:

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ LinearOperators = "5c8ed15e-5a4c-59e4-a42b-c7e8811fb125"
99
NodeJS = "2bd173c7-0d6d-553b-b6af-13a54713934c"
1010

1111
[compat]
12-
Bibliography = "0.2"
12+
Bibliography = "0.3"
1313
Franklin = "0.10"
1414
JSON = "1"
1515
LinearOperators = "2"
16-
NodeJS = "1"
16+
NodeJS = "2"

_data/bibtex/articles2019.bib

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ @article{estrin-orban-saunders-2019c
77
number = {3},
88
pages = {1102--1124},
99
grant = {NSERC 299010-04},
10-
preprint = {https://dx.doi.org/10.13140/RG.2.2.34725.81123},
10+
preprint = {https://doi.org/10.13140/RG.2.2.34725.81123},
1111
gerad = {G-2018-40},
1212
doi = {10.1137/18M1194948}
1313
}
@@ -21,7 +21,7 @@ @article{buttari-orban-ruiz-titley-peloquin-2019
2121
number = {5},
2222
pages = {S409--S432},
2323
grant = {NSERC 299010-04},
24-
preprint = {https://www.gerad.ca/en/papers/G-2018-42/view},
24+
preprint = {https://www.gerad.ca/en/papers/G-2018-42.pdf},
2525
gerad = {G-2018-42},
2626
doi = {10.1137/18M1194900}
2727
}
@@ -35,7 +35,7 @@ @article{dahito-orban-2019
3535
year = {2019},
3636
pages = {1988--2025},
3737
grant = {NSERC 299010-04},
38-
preprint = {https://www.gerad.ca/en/papers/G-2018-50/view},
38+
preprint = {https://www.gerad.ca/en/papers/G-2018-50.pdf},
3939
gerad = {G-2018-50},
4040
doi = {10.1137/18M1204255}
4141
}
@@ -49,7 +49,7 @@ @article{estrin-orban-saunders-2019b
4949
number = {1},
5050
pages = {254--275},
5151
grant = {NSERC 299010-04},
52-
preprint = {https://goo.gl/uyPRk5},
52+
preprint = {https://web.stanford.edu/group/SOL/software/lslq/lslq.pdf},
5353
gerad = {G-2017-05},
5454
doi = {10.1137/17M1113552}
5555
}

_data/bibtex/articles2020.bib

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ @article{orban-siqueira-2020
2020
volume = {76},
2121
number = {},
2222
pages = {961--989},
23-
preprint = {https://www.gerad.ca/en/papers/G-2019-17/view},
23+
preprint = {https://link.springer.com/article/10.1007/s10589-020-00201-2},
2424
doi = {10.1007/s10589-020-00201-2}
2525
}
2626

_data/bibtex/articles2023.bib

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ @article{MontoisonOrban2023
3030

3131
@article{Montoison2023,
3232
doi = {10.1137/21M1459265},
33-
url = {https://epubs.siam.org/doi/abs/10.1137/21M1459265},
33+
url = {https://doi.org/10.1137/21M1459265},
3434
year = {2023},
3535
volume = {1},
3636
number = {44},

_data/bibtex/articles2024.bib

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ @article{Migot2024
1414
@article{Cibulka2024,
1515
title = {Towards optimal spatio‐temporal decomposition of control‐related sum‐of‐squares programs},
1616
ISSN = {1099-1239},
17-
url = {http://dx.doi.org/10.1002/rnc.7596},
17+
url = {https://doi.org/10.1002/rnc.7596},
1818
DOI = {10.1002/rnc.7596},
1919
journal = {International Journal of Robust and Nonlinear Control},
2020
publisher = {Wiley},

_data/references.json

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
"author": "Abel S. Siqueira",
55
"date": "2017-12-01",
66
"where": "Seminários de Análise Convexa e Otimização. UFSC, Florianópolis/SC, Brasil",
7-
"link": "http://abelsiqueira.github.io/assets/2017-12-01-ufsc.pdf",
7+
"link": "https://www.youtube.com/watch?v=VhAxV9I1xHs",
88
"type": "talk"
99
},
1010
{
1111
"title": "A Workflow for Designing Optimization Methods in the Julia Language",
1212
"author": "Abel S. Siqueira and Dominique Orban",
1313
"date": "2016-05-04",
1414
"where": "2016 Optimization Days. Montréal, Canada",
15-
"link": "http://abelsiqueira.github.io/assets/jopt-2016.pdf",
15+
"link": "https://abelsiqueira.com/blog/jopt-2016.pdf",
1616
"type": "talk"
1717
},
1818
{
@@ -35,7 +35,7 @@
3535
"author": "Abel S. Siqueira and Dominique Orban",
3636
"where": "Second Annual JuMP-dev Workshop. Bordeaux, France",
3737
"date": "2018-06-28",
38-
"link": "http://abelsiqueira.github.io/assets/2018-06-28-jump-dev.pdf",
38+
"link": "https://www.juliaopt.org/meetings/bordeaux2018/siqueira.pdf",
3939
"type": "talk"
4040
},
4141
{
@@ -50,7 +50,7 @@
5050
"author": "Abel S. Siqueira and Dominique Orban",
5151
"where": "XII Brazilian Workshop on Continuous Optimization. Iguaçu Falls, Brazil.",
5252
"date": "2018-07-23",
53-
"link": "http://abelsiqueira.github.io/assets/2018-07-23-xiibrazopt.pdf",
53+
"link": "https://abelsiqueira.com/blog/2018-07-23-xiibrazopt.pdf",
5454
"type": "talk"
5555
},
5656
{
@@ -66,15 +66,13 @@
6666
"author": "Abel S. Siqueira",
6767
"date": "2019-02-07",
6868
"where": "Tutorial: Modeling and optimization tools in Julia: An introduction to JuMP and JSO. GERAD. Montreal/QC, Canada",
69-
"link": "http://abelsiqueira.github.io/assets/2019-02-07-GERAD.tar.gz",
7069
"type": "talk"
7170
},
7271
{
7372
"title": "JuliaSmoothOptimizers",
7473
"author": "Abel S. Siqueira",
7574
"date": "2019-05-31",
7675
"where": "Talk at PPGM - UFPR. Curitiba/PR, Brazil.",
77-
"link": "http://abelsiqueira.github.io/assets/2019-05-31-PPGM.ipynb",
7876
"type": "talk"
7977
},
8078
{
@@ -230,7 +228,7 @@
230228
"author": "Alexis Montoison",
231229
"where": "LANS Seminar, Chicago, USA",
232230
"date": "2023-12-13",
233-
"link": "https://github.com/JuliaSmoothOptimizers/JuliaSmoothOptimizers.github.io/files/LANS-Seminar-Argonne.pdf",
231+
"link": "/files/LANS-Seminar-Argonne.pdf",
234232
"type": "talk"
235233
}
236234
]

news-and-blogposts/2023/2023-12-01-jso-juliacon-eindhoven.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ As published [in a previous post](https://jso.dev/news-and-blogposts/2023/2023-0
88

99
[![JuliaCon Local Eindhoven 2023](/assets/julia-packages-in-region.png)](https://juliacon.org/local/eindhoven2023/)
1010

11-
Abel Siqueira's talk, titled [*Nonlinear Optimization with the Julia Smooth Optimizers Packages*](https://eindhoven2023.pydata.org/juliacon/talk/MYXETU/), delved into the rich ecosystem built by the JSO since its inception in 2015. With over 50 registered packages covering a wide range of nonlinear optimization and linear algebra topics, JSO has been a driving force in providing researchers with the necessary tools to seamlessly transition from prototyping to publication-ready code.
11+
Abel Siqueira's talk, titled [*Nonlinear Optimization with the Julia Smooth Optimizers Packages*](https://www.youtube.com/watch?v=i1eeD3uHbZ4), delved into the rich ecosystem built by the JSO since its inception in 2015. With over 50 registered packages covering a wide range of nonlinear optimization and linear algebra topics, JSO has been a driving force in providing researchers with the necessary tools to seamlessly transition from prototyping to publication-ready code.
1212

1313
With an extensive package ecosystem and the introduction of JSOSuite, the organization continues to play a pivotal role in bridging the gap between research and practical, user-friendly solutions. As we look forward to the future, events like JuliaCon Local Eindhoven contribute significantly to the collaborative and innovative spirit of the Julia community.
1414

@@ -17,4 +17,4 @@ Abstract:
1717

1818
You can check the full talk at [The Julia Programming Language Youtube](https://www.youtube.com/watch?v=i1eeD3uHbZ4).
1919

20-
[![Some tweets about the event](/assets/abel-juliacon-local-24.png)](https://twitter.com/eScienceCenter/status/1731659629287862537)
20+
[![Some tweets about the event](/assets/abel-juliacon-local-24.png)](https://x.com/eScienceCenter/status/1731659629287862537)
76.1 KB
Loading

tutorials/advanced-jsosolvers/index.md

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
\preamble{Tangi Migot}
66

77

8-
[![OptimizationProblems 0.7.3](https://img.shields.io/badge/OptimizationProblems-0.7.3-8b0000?style=flat-square&labelColor=cb3c33)](https://jso.dev/OptimizationProblems.jl/stable/)
9-
[![SolverBenchmark 0.6.0](https://img.shields.io/badge/SolverBenchmark-0.6.0-006400?style=flat-square&labelColor=389826)](https://jso.dev/SolverBenchmark.jl/stable/)
10-
![Plots 1.39.0](https://img.shields.io/badge/Plots-1.39.0-000?style=flat-square&labelColor=999)
11-
[![ADNLPModels 0.7.0](https://img.shields.io/badge/ADNLPModels-0.7.0-8b0000?style=flat-square&labelColor=cb3c33)](https://jso.dev/ADNLPModels.jl/stable/)
12-
[![Krylov 0.9.5](https://img.shields.io/badge/Krylov-0.9.5-4b0082?style=flat-square&labelColor=9558b2)](https://jso.dev/Krylov.jl/stable/)
13-
[![JSOSolvers 0.11.0](https://img.shields.io/badge/JSOSolvers-0.11.0-006400?style=flat-square&labelColor=389826)](https://jso.dev/JSOSolvers.jl/stable/)
8+
[![OptimizationProblems 0.7.4](https://img.shields.io/badge/OptimizationProblems-0.7.4-8b0000?style=flat-square&labelColor=cb3c33)](https://jso.dev/OptimizationProblems.jl/stable/)
9+
[![SolverBenchmark 0.6.2](https://img.shields.io/badge/SolverBenchmark-0.6.2-006400?style=flat-square&labelColor=389826)](https://jso.dev/SolverBenchmark.jl/stable/)
10+
![Plots 1.41.1](https://img.shields.io/badge/Plots-1.41.1-000?style=flat-square&labelColor=999)
11+
[![ADNLPModels 0.7.2](https://img.shields.io/badge/ADNLPModels-0.7.2-8b0000?style=flat-square&labelColor=cb3c33)](https://jso.dev/ADNLPModels.jl/stable/)
12+
[![Krylov 0.10.2](https://img.shields.io/badge/Krylov-0.10.2-4b0082?style=flat-square&labelColor=9558b2)](https://jso.dev/Krylov.jl/stable/)
13+
[![JSOSolvers 0.14.3](https://img.shields.io/badge/JSOSolvers-0.14.3-006400?style=flat-square&labelColor=389826)](https://jso.dev/JSOSolvers.jl/stable/)
1414

1515

1616

17-
# Comparing subsolvers for nonlinear least squares JSOSolvers solvers
17+
# Comparing subsolvers for nonlinear least squares in JSOSolvers
1818

1919
This tutorial showcases some advanced features of solvers in JSOSolvers.
2020

@@ -25,20 +25,20 @@ using JSOSolvers
2525

2626

2727

28-
We benchmark different subsolvers used in the solvers TRUNK for unconstrained nonlinear least squares problems.
28+
We benchmark different subsolvers used in the solver TRUNK for unconstrained nonlinear least squares problems.
2929
The first step is to select a set of problems that are nonlinear least squares.
3030

3131
```julia
3232
using ADNLPModels
3333
using OptimizationProblems
3434
using OptimizationProblems.ADNLPProblems
3535
df = OptimizationProblems.meta
36-
names = df[(df.objtype .== :least_squares) .& (df.contype .== :unconstrained), :name]
37-
ad_problems = (eval(Meta.parse(problem))(use_nls = true) for problem names)
36+
problem_names = df[(df.objtype .== :least_squares) .& (df.contype .== :unconstrained), :name]
37+
ad_problems = (eval(Meta.parse(problem))(use_nls = true) for problem problem_names)
3838
```
3939

4040
```plaintext
41-
Base.Generator{Vector{String}, Main.var"##WeaveSandBox#292".var"#1#2"}(Main.var"##WeaveSandBox#292".var"#1#2"(), ["arglina", "arglinb", "bard", "bdqrtic", "beale", "bennett5", "boxbod", "brownal", "br
41+
Base.Generator{Vector{String}, Main.var"##WeaveSandBox#277".var"#2#3"}(Main.var"##WeaveSandBox#277".var"#2#3"(), ["arglina", "arglinb", "bard", "bdqrtic", "beale", "bennett5", "boxbod", "brownal", "br
4242
ownbs", "brownden" … "power", "rat42", "rat43", "rozman1", "sbrybnd", "spmsrtls", "thurber", "tquartic", "vibrbeam", "watson"])
4343
```
4444

@@ -69,62 +69,78 @@ JSOSolvers.trunkls_allowed_subsolvers
6969
```
7070

7171
```plaintext
72-
4-element Vector{UnionAll}:
73-
Krylov.CglsSolver
74-
Krylov.CrlsSolver
75-
Krylov.LsqrSolver
76-
Krylov.LsmrSolver
72+
(:cgls, :crls, :lsqr, :lsmr)
7773
```
7874

7975

8076

8177

8278

83-
This benchmark could also be followed for the solver TRON where the following subsolver are available.
79+
This benchmark could also be followed for the solver TRON where the following subsolvers are available.
8480

8581
```julia
8682
JSOSolvers.tronls_allowed_subsolvers
8783
```
8884

8985
```plaintext
90-
4-element Vector{UnionAll}:
91-
Krylov.CglsSolver
92-
Krylov.CrlsSolver
93-
Krylov.LsqrSolver
94-
Krylov.LsmrSolver
86+
(:cgls, :crls, :lsqr, :lsmr)
9587
```
9688

9789

9890

9991

10092

10193
These linear least squares solvers are implemented in the package [Krylov.jl](https://github.com/JuliaSmoothOptimizers/Krylov.jl).
94+
For detailed descriptions of each subsolver's algorithm and when to use it, see the [Krylov.jl documentation](https://jso.dev/Krylov.jl/stable/).
95+
96+
We define a dictionary of the different solvers that will be benchmarked.
97+
We consider here four variants of TRUNK using the different subsolvers.
98+
99+
For example, to call TRUNK with an explicit subsolver:
102100

103101
```julia
104-
using Krylov
102+
stats = trunk(nls, subsolver = :cgls)
105103
```
106104

105+
```plaintext
106+
"Execution stats: first-order stationary"
107+
```
107108

108109

109110

110-
We define a dictionary of the different solvers that will be benchmarked.
111-
We consider here four variants of TRUNK using the different subsolvers.
111+
112+
113+
The same subsolver selection pattern applies to TRON's least-squares specialization:
114+
115+
```julia
116+
stats_tron = tron(nls, subsolver = :lsmr)
117+
```
118+
119+
```plaintext
120+
"Execution stats: first-order stationary"
121+
```
122+
123+
124+
125+
126+
127+
Now we define the solver dictionary for benchmarking:
112128

113129
```julia
114130
solvers = Dict(
115-
:trunk_cgls => model -> trunk(model, subsolver_type = CglsSolver),
116-
:trunk_crls => model -> trunk(model, subsolver_type = CrlsSolver),
117-
:trunk_lsqr => model -> trunk(model, subsolver_type = LsqrSolver),
118-
:trunk_lsmr => model -> trunk(model, subsolver_type = LsmrSolver)
131+
:trunk_cgls => model -> trunk(model, subsolver = :cgls),
132+
:trunk_crls => model -> trunk(model, subsolver = :crls),
133+
:trunk_lsqr => model -> trunk(model, subsolver = :lsqr),
134+
:trunk_lsmr => model -> trunk(model, subsolver = :lsmr)
119135
)
120136
```
121137

122138
```plaintext
123139
Dict{Symbol, Function} with 4 entries:
124-
:trunk_lsqr => #5
125-
:trunk_cgls => #3
126-
:trunk_crls => #4
127-
:trunk_lsmr => #6
140+
:trunk_lsqr => #12
141+
:trunk_cgls => #8
142+
:trunk_crls => #10
143+
:trunk_lsmr => #14
128144
```
129145

130146

@@ -140,10 +156,10 @@ stats = bmark_solvers(solvers, ad_problems)
140156

141157
```plaintext
142158
Dict{Symbol, DataFrames.DataFrame} with 4 entries:
143-
:trunk_lsqr => 66×39 DataFrame…
144-
:trunk_cgls => 66×39 DataFrame…
145-
:trunk_crls => 66×39 DataFrame…
146-
:trunk_lsmr => 66×39 DataFrame…
159+
:trunk_lsqr => 66×40 DataFrame…
160+
:trunk_cgls => 66×40 DataFrame…
161+
:trunk_crls => 66×40 DataFrame…
162+
:trunk_lsmr => 66×40 DataFrame…
147163
```
148164

149165

@@ -162,8 +178,8 @@ costs = [df -> .!solved(df) .* Inf .+ df.elapsed_time]
162178
```
163179

164180
```plaintext
165-
1-element Vector{Main.var"##WeaveSandBox#292".var"#11#12"}:
166-
#11 (generic function with 1 method)
181+
1-element Vector{Main.var"##WeaveSandBox#277".var"#17#18"}:
182+
#17 (generic function with 1 method)
167183
```
168184

169185

@@ -180,10 +196,10 @@ gr()
180196
profile_solvers(stats, costs, costnames)
181197
```
182198

183-
![](figures/index_10_1.png)
199+
![](figures/index_11_1.png)
184200

185201

186202

187203
The CRLS and CGLS variants are the ones solving more problems, and even though the difference is rather small the CGLS variant is consistently faster which seems to indicate that it is the most appropriate subsolver for TRUNK.
188-
The size of the problems were rather small here, so this should be confirmed on larger instance.
204+
The size of the problems was rather small here, so this should be confirmed on larger instances.
189205
Moreover, the results may vary depending on the origin of the test problems.

0 commit comments

Comments
 (0)