-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Native Support from JuMP in Julia #19
Comments
Julia now has a binary build system called Yggdrasil (https://github.com/JuliaPackaging/Yggdrasil), which cross compiles open-source binaries for a wide variety of platforms. I've been attacking MINLP solvers recently, so now you use something like Bonmin as: import Pkg; Pkg.add("Bonmin_jll")
using JuMP, Bonmin_jll, AmplNLWriter
model = Model(() -> AmplNLWriter.Optimizer(Bonmin_jll.amplexe)) This will look at the users computer and download the appropriate cross-compiled library. It'd be nice to have the same for minotaur. I hit a few blockers though:
|
Hi Oscar Building on windows is possible. Some instructions for msys2 here: https://minotaur-solver.github.io/ Minotaur works without Filter and BQPD (both are fortran libraries whose source can not be made open). -f flag of build_third_party will suppress them. Right now we have a rather simple CMAKE file that just checks for presence of lib and header files. There is a way to specify the directories of each third-party lib to CMAKE in place of the default third-party directory. e.g. -DIPOPT_INC_DIR:PATH=/path/to/ipopt/include -DIPOPT_LIB_DIR:PATH=/path/to/ipopt/lib, -DASL_INC_DIR:PATH, -DASL_LIB_DIR:PATH, etc. I can write all the vars if you want. |
Perfect! This will do nicely. So what is the minimal set of dependencies that we would need? Just ASL, Cbc, Ipopt?
I guess I meant cross-compiling for windows from linux :). I'll have a go and see if I run into problems. |
The following seems to work on my computer. You may remove CPPUNIT lines if you do not run tests. I pushed some changes to CMake today. You may want to pull them before trying this. cmake -DCPPUNIT_INC_DIR:PATH=/home/amahajan/minotaur/tp-2/include/ |
Awesome! I'll take a look. How stable is minotaur with Cbc/Ipopt compared to the other solvers? Is it possible to link CPLEX at runtime? Or does it have to be compiled? |
We don't use Cbc. It is there for some experimental code, and not really used in any solver that gets compiled by default. One can leave it out safely. The main workhorse is CLP for solving LPs. Ipopt is used extensively in Nonlinear Branch-and-Bound and also to a significant extent in other algorithms. We do not regularly compare to other solvers, so can not comment much on it. We have been trying to fix as many numerical issues arising from our own routines and also from calls to other solvers, and have made significant improvements in the global solver for QCQPs recently. Feedback is this regard (and also others) is most welcome. Linking with CPLEX is possible. More on this shortly. |
To link to CPLEX, one can use the options -DCPX_INC_DIR= and -DCPX_LIB_DIR= with cmake. For example, we use -DCPX_INC_DIR=/opt/ibm/ILOG/CPLEX_Studio128/cplex/include and CPLEX can be used both for solving LPs and MILPs using Minotaur options --lp_engine Cplex and --milp_engine Cplex, respectively. |
Thanks for this info! I'll try an open-source version for now and leave CPLEX out of it. |
I'm chipping away at this again. My current build script looks like:
But I get errors like
Is it possible to compile without OpenMP? I have |
In Julia we can currently send MINLPs to MINOTAUR via AMPL NL files. However, there can be advantages in accessing MINOTAUR directly as an NLP solver in Julia, for example is using JuMP's auto-diff instead of AMPL's.
You might consider making MINOTAUR available as a JuliaOpt package. This is the channel for solver implementation discussions, https://gitter.im/JuliaOpt/JuMP-dev.
The text was updated successfully, but these errors were encountered: