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

Haroldo Gambini Santos haroldo at ufop.edu.br
Sun Jan 6 17:56:56 EST 2019


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).


>
> 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"



More information about the Cbc mailing list