# Help on decision to choose Julia for my convex optimization project

**URL:** <https://discourse.julialang.org/t/help-on-decision-to-choose-julia-for-my-convex-optimization-project/19107>\
**Category:** Optimization (Mathematical)\
**Created:** [December 30, 2018, 5:40am UTC](https://discourse.julialang.org/t/help-on-decision-to-choose-julia-for-my-convex-optimization-project/19107 "2018-12-30T05:40:27Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Toxmi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/toxmi/32/6574_2.png) [@Toxmi](https://discourse.julialang.org/u/Toxmi)\
**Post date:** [December 30, 2018, 5:40am UTC](https://discourse.julialang.org/t/help-on-decision-to-choose-julia-for-my-convex-optimization-project/19107/1 "2018-12-30T05:40:28Z")

</div>

I have 2 weeks for my term project (basically simulation of convex optimization problem based on a paper). I’m quite comfortable with **Matlab** and **Python** and know CVX. However, I wanted to use this chance and dive into Julia. What I don’t know is how mature the language and its package (e.g. support of CVX) is? I want to decide the Julia as my language of choice and use this opportunity to learn the language but in the meantime I have an approaching deadline in 2 weeks and I want to know a comparison in support of CVX or disciplined solver for a convex optimization problem (or JuMP?) For example in Python I just write the problem in cvx and it’s mostly done. Is this the case with Julia as well?

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [December 30, 2018, 7:41am UTC](https://discourse.julialang.org/t/help-on-decision-to-choose-julia-for-my-convex-optimization-project/19107/2 "2018-12-30T07:41:21Z")

</div>

[Convex.jl](https://github.com/JuliaOpt/Convex.jl) is updated and works on julia v1.0 and is fairly straightforward to use. Convex.jl is the julia version of CVX.  
JuMP is more actively developed and can just solve far more kinds of problems, so there might be a point learning JuMP even if your current problems are convex.

Edit: Browsing around in the repos a bit, it seems that Convex.jl has [some nasty bugs](https://github.com/JuliaOpt/Convex.jl/issues/219) that have gone unadressed for a long time, also worth considering.

---

<div class="post-metadata">

**Author:** ![tkoolen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkoolen/32/1603_2.png) [@tkoolen](https://discourse.julialang.org/u/tkoolen)\
**Post date:** [December 30, 2018, 4:29pm UTC](https://discourse.julialang.org/t/help-on-decision-to-choose-julia-for-my-convex-optimization-project/19107/3 "2018-12-30T16:29:32Z")

</div>

I think JuMP should be very well-suited for this kind of project.

> [@Toxmi](#):
>
> For example in Python I just write the problem in cvx and it’s mostly done.

That should be the case with JuMP as well. However, it may be the case that CVXPY does more problem reformulations automatically. For example, CVXPY has a `log_sum_exp` function that is automatically transformed into an exponential cone constraint ([Transforms — CVXPY 1.4 documentation](https://www.cvxpy.org/api_reference/cvxpy.transforms.html), [5 Exponential cone optimization — MOSEK Modeling Cookbook 3.3.0](https://docs.mosek.com/modeling-cookbook/expo.html#log-sum-exp)). JuMP doesn’t recognize `log(sum(exp(...)))` as a convex, exponential-cone-representable expression, so you might have to do more of these transformations manually. In contrast, Convex.jl _does_ do these kinds of transformations (and probably in a nicer way than CVXPY), but is perhaps not as actively maintained.
