2
$\begingroup$

Folks, I am working on a project in which I have to code some C++ algorithms for smooth MINLPs. Such algorithms are Extended Cutting Plane, Extended Supporting Hyperplane, and Outer Approximation. I am planning to use some MILP solver (for solving the master problem) along with its callback functionality (for adding cuts from the slave problems).

Therefore, I am trying to choose the most suitable option for my situation. Below I listed such options in a table. So far I have listed some requirements the MILP solver must have (1st column), and the corresponding functions (remaining columns) in two solvers, the Coin-OR B&C, and the CPLEX.

I placed the "?" character in the cells I do not know the proper information. I am looking for the remaining information necessary to fill this table. I would like to know if someone has worked with MINLP before, and if has some answers for filling this table. Also, any recommendations of others solvers are very welcome.

Requirements CBC-COIN-OR CPLEX Concert
Functions References Functions References
Get inequalities getNumRows() https://www.coin-or.org/Doxygen/CoinAll/class_cbc_model.html#40e058a76208364a573dc109586bd208 IloConstraintArray https://www.ibm.com/docs/en/icos/12.9.0?topic=c-iloconstraintarray-1
Get inequality sense getRowSense() https://www.coin-or.org/Doxygen/CoinAll/class_cbc_model.html#9cf311df9ca4dd9165a925a780f73d59 IloConstraintArray.getImpl() https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilonumexprarg-1#method_getImpl
Get inequality LHS ? ? IloConstraintArray.getImpl() https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilonumexprarg-1#method_getImpl
Get inequality RHS getRightHandSide() https://www.coin-or.org/Doxygen/CoinAll/class_cbc_model.html#10f1678372ac83e3c84ec0173382c49a IloConstraintArray.getImpl() https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilonumexprarg-1#method_getImpl
Get non-linear inequalities ? ? ? ?
Get convex inequalities ? ? ? ?
Get variables getNumCols() https://www.coin-or.org/Doxygen/CoinAll/class_cbc_model.html#5d010c66439040cc41f325e403ac455d IloNumVarArray https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilonumvararray-1
Get integer variables numberIntegers() integerType(int I) isContinuous(int colIndex) isBinary(int colIndex) isInteger(int colIndex) IsIntegerNonBinary(int colIndex) https://www.coin-or.org/Doxygen/CoinAll/class_cbc_model.html#46b35008e5dde744de7861a456597888 ? ?
Get non-integer variables numberIntegers() integerType(int I) isContinuous(int colIndex) isBinary(int colIndex) isInteger(int colIndex) IsIntegerNonBinary(int colIndex) https://www.coin-or.org/Doxygen/CoinAll/class_cbc_model.html#46b35008e5dde744de7861a456597888 ? ?
Get variables UB getColUpper() GetCbcColUpper () https://www.coin-or.org/Doxygen/CoinAll/class_cbc_model.html#e029873f5a7b4aef3df4ad30be929e1f IloRangeArray https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilorangearray-1
Get variables LB GetColLower () GetCbcColLower () https://www.coin-or.org/Doxygen/CoinAll/class_cbc_model.html#cfa9192b32bde2d710e85deb71bce52b IloRangeArray https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilorangearray-1
Read LP file readLp https://www.coin-or.org/Doxygen/CoinAll/class_osi_clp_solver_interface.html#d13f9e98ebaec68ce028d5aec95e6c38 importModel(IloModel & m, const char * filename) https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilocplex-3#method_importModel
Read MPS file readMps https://www.coin-or.org/Doxygen/CoinAll/class_osi_clp_solver_interface.html#edd68d7b3e54507a1afa0df0712f76d1 importModel(IloModel & m, const char * filename) https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilocplex-3#method_importModel

Thank you very much for the attention, best regards.

$\endgroup$
3
  • 1
    $\begingroup$ For things like get inequality sense, get RHS etc., are you looking to fetch those things from the original model (before presolving, adding cuts etc.), at the root node (after doing those things and any other changes), or at arbitrary nodes in the search tree? $\endgroup$
    – prubin
    Commented Apr 2, 2023 at 16:36
  • $\begingroup$ Thanks for the comment @prubin. Given the inequalities defining the search space, in an arbitrary B&B node, I must be able to obtain these inequalities, i.e. L and R-HS, and their senses. To have a better understanding, take a look at bullet (2) of section 3.2 on page 5 from doi.org/10.1007/s11081-018-9411-8. $\endgroup$ Commented Apr 2, 2023 at 16:45
  • 1
    $\begingroup$ I'm not sure direct access to the node LPs is available in the CPLEX C++ API. I know it is not available in Java. My impression is that the only API that lets you inspect node LPs is the C API (but I might be wrong). $\endgroup$
    – prubin
    Commented Apr 2, 2023 at 18:59

1 Answer 1

1
$\begingroup$

First of all, I'd not use terms like slave in the 21st century. For me it's the main problem & sub-problems.
Most modern solvers like Gurobi can approach MINLP using decomposition methods. The following links may be of some help.
Gurobi,
API Details,
C++,
Attributes

$\endgroup$
1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.