# DifferentiableFrankWolfe

Documentation for DifferentiableFrankWolfe.jl.

## Index

`DifferentiableFrankWolfe.DifferentiableFrankWolfe`

`DifferentiableFrankWolfe.ConditionsFW`

`DifferentiableFrankWolfe.DiffFW`

`DifferentiableFrankWolfe.ForwardFW`

`DifferentiableFrankWolfe.simplex_projection`

`DifferentiableFrankWolfe.simplex_projection_and_support`

## API reference

`DifferentiableFrankWolfe.DifferentiableFrankWolfe`

— Module`DifferentiableFrankWolfe`

Differentiable wrapper for FrankWolfe.jl convex optimization routines.

`DifferentiableFrankWolfe.DiffFW`

— Type`DiffFW{F,G,M,A,I}`

Callable parametrized wrapper for the Frank-Wolfe algorithm `θ -> argmin_{x ∈ C} f(x, θ)`

, which can be differentiated implicitly wrt `θ`

.

Reference: https://arxiv.org/abs/2105.15183 (section 2 + end of appendix A).

**Fields**

`f::F`

: function`f(x, θ)`

to minimize wrt`x`

`f_grad1::G`

: gradient`∇ₓf(x, θ)`

of`f`

wrt`x`

`lmo::M`

: linear minimization oracle`θ -> argmin_{x ∈ C} θᵀx`

from [FrankWolfe.jl], implicitly defines the convex set`C`

`alg::A`

: optimization algorithm from FrankWolfe.jl`implicit::I`

: implicit function from ImplicitDifferentiation.jl

`DifferentiableFrankWolfe.simplex_projection`

— Function`simplex_projection(z)`

Compute the Euclidean projection of the vector `z`

onto the probability simplex.

This function is differentiable thanks to a custom chain rule.

Reference: https://arxiv.org/abs/1602.02068.

`DifferentiableFrankWolfe.simplex_projection_and_support`

— Function`simplex_projection_and_support(z)`

Compute the Euclidean projection `p`

of `z`

on the probability simplex as well as the indicators `s`

of its support, which are useful for differentiation.

Reference: https://arxiv.org/abs/1602.02068.

`DifferentiableFrankWolfe.ForwardFW`

— Type`ForwardFW{F,G,M,A}`

Underlying solver for `DiffFW`

, which relies on a variant of Frank-Wolfe.

`DifferentiableFrankWolfe.ConditionsFW`

— Type`ConditionsFW{F,G,M}`

Differentiable optimality conditions for `DiffFW`

, which rely on a custom `simplex_projection`

implementation.