[Cbc] Cbc changes solver pointer after solving a problem [c++ API]

Wendel Melo wendelalexandre at gmail.com
Mon Jan 7 00:10:49 EST 2019


El dom., 6 ene. 2019 a las 13:27, John Forrest (<john.forrest at fastercoin.com>)
escribió:

> If you update Cbc stable and add
>
>  -DKEEP_ORIGINAL_SOLVER
>
> to CXXDEFS in configure then solver will stay same.
>
> Remember that the bounds on integer variables will have been changed to
> give an integer solution.
>
> John Forrest
>

Thank you John! You were really fast to take care of my question. But I
think this solution is not the ideal to me, since before use Muriqui
Optimizer, users would have to install CBC by themselves, and probably they
will not use -DKEEP_ORIGINAL_SOLVER.

>From my point of view, it would be better if there were a parameter in
CbcModel to be set. For example, if I would set a hypothetical parameter
CbcKeepOriginalSolver to 1, the original solver is kept. Or maybe a method
in CbcClass to set this behavior, like this:

void keepOriginalSolver (bool value);

Thanks for your attention.

Wendel Melo



> On 05/01/2019 23:12, Wendel Melo wrote:
>
> Dear friends
>
> I am giving my first steps with CBC to Mixed Integer Linear Programming
> (MILP) by means of the C++ API. My current goal is to turn Cbc one of the
> MILP solvers supported in Muriqui Optimizer, a free MINLP solver (
> www.wendelmelo.net/software
> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.wendelmelo.net_software&d=DwMDaQ&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=AEWIZiNSSlppb_jyQKA8GtHkg2N4WiI7Ya5btonYBgA&m=vF3oHShdseEsl9rfkG3oDqswH4nxi3dKxBlIUpKfP9I&s=Xab9Z8MBD4MYd7iPauJrXypCU1gGdGvKVvcivCdX9OM&e=>
> ).
>
> Due to design questions, I have been constructing an object of the
> CbcModel class using an empty OsiSolverInterface object:
>
> OsiClpSolverInterface   clp ;
> CbcModel   *model = new (std::nothrow) CbcModel(clp);
>
> After that, I have been set the coefficients of my MILP problem by means
> of the pointer returned by the method CbcModel::solver, for example:
>
> OsiSolverInterface *solver = model->solver()
>
> solver->addCol(0, NULL, NULL,   0.0,  1000.0,   1.0);
>
> I am performing in this way to avoid delay copping the OsiSolverInterface
> object in the CbcModel constructor since I need to solve a sequence where
> the same MILP problem has to be solved several times just changing some
> parameters.
>
> But I have been getting some problems. After calling method
> CbcModel::branchAndBound by the second time, the pointer returned by
> CbcModel::solver is getting a different value of the previous call, for
> example:
>
> std::cout << "before BB solver pointer: " <<  model->solver() << std::endl;
> model->branchAndBound()
> std::cout << "after BB solver pointer: " <<  model->solver() << std::endl;
>
> The code above prints:
>
> before BB solver pointer:  0x1455a628
> after BB solver pointer:  0x14887f88
>
> So, we can see the solver pointer in CbcModel object was changed. Why is
> it happening? I believe creating new solver objects is bad because increase
> the computations. Is there a way to avoid the changing of solver object
> pointer? Are there other methods in CbcModel that can provoke the changing
> of the solver pointer?
>
> Thanks in advanced
>
> Best regards
>
>
> Wendel Melo
> www.wendeldelo.net
> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.wendeldelo.net&d=DwMDaQ&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=AEWIZiNSSlppb_jyQKA8GtHkg2N4WiI7Ya5btonYBgA&m=vF3oHShdseEsl9rfkG3oDqswH4nxi3dKxBlIUpKfP9I&s=bS4fzYTpGhS1fjOrU5uvoQyqlePAhVZ612Mm_CJ_rZA&e=>
>
> _______________________________________________
> Cbc mailing listCbc at list.coin-or.orghttps://list.coin-or.org/mailman/listinfo/cbc <https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_cbc&d=DwMDaQ&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=AEWIZiNSSlppb_jyQKA8GtHkg2N4WiI7Ya5btonYBgA&m=vF3oHShdseEsl9rfkG3oDqswH4nxi3dKxBlIUpKfP9I&s=quCvwOIaRK375syP7lDh6Lr3th1N40SaGOiNE2b6XZo&e=>
>
>
> _______________________________________________
> Cbc mailing list
> Cbc at list.coin-or.org
>
> https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_cbc&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=AEWIZiNSSlppb_jyQKA8GtHkg2N4WiI7Ya5btonYBgA&m=vF3oHShdseEsl9rfkG3oDqswH4nxi3dKxBlIUpKfP9I&s=quCvwOIaRK375syP7lDh6Lr3th1N40SaGOiNE2b6XZo&e=
>


-- 
Wendel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/cbc/attachments/20190107/de09db93/attachment.html>


More information about the Cbc mailing list