Marguerite.jl
A minimal, differentiable Frank-Wolfe solver for constrained convex optimization in Julia.
Named in honor of Marguerite Frank (1927–2024), co-inventor of the Frank-Wolfe algorithm (1956).
Quick start
using Marguerite, LinearAlgebra
Q = [4.0 1.0; 1.0 2.0]; c = [-3.0, -1.0]
f(x) = 0.5 * dot(x, Q * x) + dot(c, x)
∇f!(g, x) = (g .= Q * x .+ c)
x, result = solve(f, ProbSimplex(), [0.5, 0.5]; grad=∇f!)Omit grad= for automatic differentiation via ForwardDiff.
Documentation guide
- Tutorial — basic usage, automatic gradients, parameterized solve, custom oracles
- Oracles — built-in constraint sets and the oracle interface
- Parametric Oracles — differentiable constraint sets parameterized by θ
- Examples — sparse recovery benchmark (Frank-Wolfe vs. interior point)
- Convergence — $O(1/t)$ rate, Frank-Wolfe gap, sparsity plots
- Implicit Differentiation — implicit differentiation, rrule, CG tuning
- Bilevel Optimization —
bilevel_solve,bilevel_gradient, manual rrule usage - API Reference — complete docstrings for all exports
Installation
Requires Julia 1.12+. Install directly from the repository:
using Pkg
Pkg.add(url="https://github.com/samtalki/Marguerite.jl")