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

Wendel Melo wendelalexandre at gmail.com
Mon Jan 7 00:15:35 EST 2019


El dom., 6 ene. 2019 a las 21:00, Haroldo Gambini Santos (<
haroldo at ufop.edu.br>) escribió:

> On 06/01/2019 13:18, John Forrest wrote:
> > 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.
>
> Wouldn't be better to save original bounds and restore these bounds
> after the branch-&-bound  ? Storing two vectors of double would be more
> convenient than cloning the entire problem (if I understood correctly
> this is why it is advisable to clone the problem today).
>
>
I agree. Because it is really strange you call method branch-and-bound
twice in a sequence and the behaviours be different. I think users suppose
solver object must be kept exactly as it was before optimziation starts.



> >
> > John Forrest
> >
> > 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=pLOfVNEEHf-xhIqn1-uzYcZ6Q7UefG6Bg6rXCKTMiAA&m=Ud8-hd8c2MRU6-pxt0hBz7Js4YPHFHD8UF7q7reBa5g&s=jyyW2EsmmjheIShvnbQ-4TgZLO4iAOzOqRTTGOqvELg&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=pLOfVNEEHf-xhIqn1-uzYcZ6Q7UefG6Bg6rXCKTMiAA&m=Ud8-hd8c2MRU6-pxt0hBz7Js4YPHFHD8UF7q7reBa5g&s=8d0BNsk_i_Suf0pr9MnIGBMx2Rhr4u-Z92NbTsDdBcQ&e=
> >
> >>
> >> _______________________________________________
> >> Cbc mailing list
> >> Cbc at list.coin-or.org
> >> https://list.coin-or.org/mailman/listinfo/cbc
> >
> >
> >
> > _______________________________________________
> > 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=pLOfVNEEHf-xhIqn1-uzYcZ6Q7UefG6Bg6rXCKTMiAA&m=Ud8-hd8c2MRU6-pxt0hBz7Js4YPHFHD8UF7q7reBa5g&s=EV7yTTN8bNFQFrK2-RePTD2j8dVUKPp-w2jWuQW6qwY&e=
>
> --
> =============================================================
> Haroldo Gambini Santos
> Computing Department
> Universidade Federal de Ouro Preto - UFOP
> email: haroldo at ufop.edu.br
> home/research page: www.decom.ufop.br/haroldo
>
>
> It has long been an axiom of mine that the little things are infinitely
> the most important.
> -- Sir Arthur Conan Doyle, "A Case of Identity"
>
> _______________________________________________
> Cbc mailing list
> Cbc at list.coin-or.org
> https://list.coin-or.org/mailman/listinfo/cbc
>


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


More information about the Cbc mailing list