# FrankWolfe.jl: convex-constrained non-linear optimization at scale

**URL:** <https://discourse.julialang.org/t/frankwolfe-jl-convex-constrained-non-linear-optimization-at-scale/59472>\
**Category:** Package Announcements\
**Tags:** package, announcement, jump, optimization\
**Created:** [April 17, 2021, 11:03am UTC](https://discourse.julialang.org/t/frankwolfe-jl-convex-constrained-non-linear-optimization-at-scale/59472 "2021-04-17T11:03:41Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![mbesancon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbesancon/32/6528_2.png) [@mbesancon](https://discourse.julialang.org/u/mbesancon)\
**Post date:** [April 17, 2021, 11:03am UTC](https://discourse.julialang.org/t/frankwolfe-jl-convex-constrained-non-linear-optimization-at-scale/59472/1 "2021-04-17T11:03:41Z")

</div>

We are glad to have released [FrankWolfe.jl](https://github.com/ZIB-IOL/FrankWolfe.jl), a package implementing several variants of the Frank-Wolfe / Conditional Gradient algorithm.

The method allows the optimization of arbitrary objective functions with first-order information over convex sets. We implement key convex sets that people are familiar with like L{1, 2, inf}-norm balls or funky ones like the Birkhoff polytopes. Furthermore, arbitrary constrained sets can be defined through the MathOptInterface.jl, using JuMP or Convex.jl.

Go check out our [preprint](https://arxiv.org/abs/2104.06675) for a more detailed tour!

Our research group will continue to work on it, integrating our and other people’s recent developments and improvements on conditional gradients, applying it to exciting problems in optimization and ML. Feel free to contribute, add issues or give us feedback!

Edit: really cool to see the work being started and done in optimization, I saw [Nonconvex.jl](https://discourse.julialang.org/t/ann-nonconvex-jl-a-toolbox-for-ad-based-constrained-non-convex-optimization/59362) being announced this week too!

---

<div class="post-metadata">

**Author:** ![evanfields](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/evanfields/32/1744_2.png) [@evanfields](https://discourse.julialang.org/u/evanfields)\
**Post date:** [April 17, 2021, 11:10am UTC](https://discourse.julialang.org/t/frankwolfe-jl-convex-constrained-non-linear-optimization-at-scale/59472/2 "2021-04-17T11:10:46Z")

</div>

This looks really cool! My my main question is whether this method would work well where the convex set is a polytope defined by arbitrary linear inequalities. I guess this line from the docs means something similar?

> - you can use an LP oracle defined via an LP solver (e.g., `glop` , `scip` , `soplex` ) with `MathOptInferface`

It could be nice to have a bit more detail/doc on this – or should it be self-evident how to define a LP oracle with MOI for use with FrankWolfe?

---

<div class="post-metadata">

**Author:** ![mbesancon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbesancon/32/6528_2.png) [@mbesancon](https://discourse.julialang.org/u/mbesancon)\
**Post date:** [April 17, 2021, 11:14am UTC](https://discourse.julialang.org/t/frankwolfe-jl-convex-constrained-non-linear-optimization-at-scale/59472/3 "2021-04-17T11:14:31Z")

</div>

> [@evanfields](#):
>
> This looks really cool! My my main question is whether this method would work well where the convex set is a polytope defined by arbitrary linear inequalities. I guess this line from the docs means something similar?

Yes we can define an arbitrary set (polytope or convex set) from MOI. The best way to look at it now is through the example [here](https://github.com/ZIB-IOL/FrankWolfe.jl/blob/master/examples/moi_optimizer.jl) and which is also reproduced in the paper.

We plan to add proper documentation pages too yes 🙂
