# Fastest open-licensed solver for integer problems

**URL:** <https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440>\
**Category:** Optimization (Mathematical)\
**Created:** [November 12, 2018, 4:48pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440 "2018-11-12T16:48:30Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![vtjeng](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vtjeng/32/3787_2.png) [@vtjeng](https://discourse.julialang.org/u/vtjeng)\
**Post date:** [November 12, 2018, 4:48pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440/1 "2018-11-12T16:48:30Z")

</div>

I’m trying to compare solve times for a large mixed-integer linear problem on 1) Gurobi, 2) a fast open-licensed solver. I’m currently using `Cbc.jl`, but I’d like to know if there is another alternative that is significantly faster. What has your personal experience been in applying open-licensed solves to MILPs?

(It’d be a bonus if the installation process was not too involved!)

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [November 12, 2018, 7:26pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440/2 "2018-11-12T19:26:37Z")

</div>

I’d be happy to hear about alternatives but I’ve only found Cbc.jl and GLPK.jl, with Cbc vastly outperforming GLPK on my problems. Those problems have only binary variables, usually with 10k-100k variables and 3k-30k constraints.

---

<div class="post-metadata">

**Author:** ![ccoffrin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ccoffrin/32/400_2.png) [@ccoffrin](https://discourse.julialang.org/u/ccoffrin)\
**Post date:** [November 12, 2018, 7:44pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440/3 "2018-11-12T19:44:45Z")

</div>

[SCIP](https://scip.zib.de/) is quite good for [MIP](http://plato.asu.edu/ftp/milpc.html). The license is halfway between a typical free and commercial options.

---

<div class="post-metadata">

**Author:** ![vtjeng](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vtjeng/32/3787_2.png) [@vtjeng](https://discourse.julialang.org/u/vtjeng)\
**Post date:** [November 12, 2018, 8:34pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440/4 "2018-11-12T20:34:55Z")

</div>

Gunnar, I’m just curious — if you only use binary variables, why don’t you use a SAT solver instead?

---

<div class="post-metadata">

**Author:** ![vtjeng](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vtjeng/32/3787_2.png) [@vtjeng](https://discourse.julialang.org/u/vtjeng)\
**Post date:** [November 12, 2018, 8:37pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440/5 "2018-11-12T20:37:15Z")

</div>

How does the license for SCIP differ from that for Gurobi? It looks like both are commercial products that have a free academic license.

---

<div class="post-metadata">

**Author:** ![ccoffrin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ccoffrin/32/400_2.png) [@ccoffrin](https://discourse.julialang.org/u/ccoffrin)\
**Post date:** [November 12, 2018, 8:48pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440/6 "2018-11-12T20:48:57Z")

</div>

For SCIP the source is available and there is no license server. It’s basically an honors system not to use it for commercial purposes. I have never purchased SCIP but I would guess it is cheaper than other commercial offerings.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [November 12, 2018, 9:09pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440/7 "2018-11-12T21:09:33Z")

</div>

> [@vtjeng](#):
>
> Gunnar, I’m just curious — if you only use binary variables, why don’t you use a SAT solver instead?

Possibly ignorance. If a SAT solver lets me maximize the sum of my binary variables subject to linear constraints with integer coefficients, I’d be happy to give it a try. But losing upper bounds from LP relaxation would be a big drawback.

---

<div class="post-metadata">

**Author:** ![ccoffrin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ccoffrin/32/400_2.png) [@ccoffrin](https://discourse.julialang.org/u/ccoffrin)\
**Post date:** [November 12, 2018, 9:24pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440/8 "2018-11-12T21:24:00Z")

</div>

> [@GunnarFarneback](#):
>
> If a SAT solver lets me maximize the sum of my binary variables subject to linear constraints with integer coefficients, I’d be happy to give it a try.

You may find this method interesting, [The IntSat Method for Integer Linear Programming | SpringerLink](https://link.springer.com/chapter/10.1007/978-3-319-10428-7_42)

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [December 16, 2018, 8:42pm UTC](https://discourse.julialang.org/t/fastest-open-licensed-solver-for-integer-problems/17440/9 "2018-12-16T20:42:21Z")

</div>

Definitely interesting but too far from my areas of knowledge to have any reasonable chance of applying the theory. If someone who masters SAT solving could adapt the code in [GitHub - GunnarFarneback/LongestPaths.jl: Julia package for finding the longest simple path in a graph.](https://github.com/GunnarFarneback/LongestPaths.jl) to call a SAT solver instead of Cbc to solve the linear program with binary variables, then I’d be even more interested. 🙂
