I'm quite fond of the Julia programming language, here are some of my projects.
We consider the problem
where is nonsmooth: at point , one can compute and .
NonSmoothSolvers.jl implements the following algorithms:
NonSmoothProblems.jl implements some classical problems:
the maximum of smooth functions: ,
the maximum eigenvalue problem , where is a symmetric real matrix, that depends smoothly on .
RandomizedProgressiveHedging.jl: a julia package for solving multistage stochastic problems by randomized versions of the progressive hedging algorithm.
QuadProgSimplex.jl: an active set algorithm to minimize certain quadratic functions on the simplex, in arbitrary precision.[4][5]
QuadProgSpectraplex.jl: an active set algorithm to minimize smooth functions on the spectraplex, in arbitrary precision.
Implements the algorithm proposed in: B, Iutzeler, Malick (2022) Newton Acceleration on Manifolds Identified by Proximal Gradient Methods, Mathematical Programming.
where is smooth and is nonsmooth but "prox-easy".
CompositeProblems.jl – additive learning problems (lasso, logistic ).
StructuredProximalOperators.jl – some proximal operators and structure manifolds.
StructuredSolvers.jl – proximal gradient variants and its Riemannian acceleration.
B, Iutzeler, Malick (2022) Newton Acceleration on Manifolds Identified by Proximal Gradient Methods, Mathematical Programming.
where is a smooth map and is nonsmooth but "prox-easy".
LocalCompositeNewton.jl – algorithm and numerical experiments of the paper.
B, Iutzeler, Malick (2022) Harnessing Structure in Composite Nonsmooth Minimization.
PlotsOptim.jl provides convenience helpers to build PGF/Tikz plots from julia. Tailored for suboptimality type curves, or 2d plots of iterates.
ConjugateGradient.jl: pure julia implementation of the Conjugate Gradient algorithm, with detection of quasi-negative curvature directions.
EigenDerivatives.jl: implementation of first and second-order derivatives of eigenvalues of parametrized matrices, handling points where some eigenvalues coalesce. Works for any representation of reals (e.g. julia's Float64
, BigFloat
types).
SDCO.jl: implementation of a self-dual conic interior point supporting real and complex variables.
References:
[1] | Mifflin, Sagastizábal (2005) A VU-algorithm for Convex Minimization, Mathematical Programming. |
[2] | Lewis, Overton (2013) Nonsmooth Optimization via Quasi-Newton Methods, Mathematical Programming. |
[3] | Burke, Curtis, Lewis, Overton, Simões (2018) Gradient Sampling Methods for Nonsmooth Optimization, Numerical Nonsmooth Optimization. |
[4] | Kiwiel (1986) A Method for Solving Certain Quadratic Programming Problems Arising in Nonsmooth Optimization, IMA Journal of Numerical Analysis. |
[5] | Wolfe (1976) Finding the Nearest Point in A Polytope, Mathematical Programming. |