[CoinMp] New Patch for 1.4.0 CoinMP
Stuart Mitchell
s.mitchell at auckland.ac.nz
Thu Oct 29 19:00:09 EDT 2009
Thanks for your quick response (see below for comments)
Bjarni Kristjansson wrote:
> Hi Stuart,
>
> I have some questions on the other 4 items or need to review them further:
>
> 2) changes some solver options for better performance
>
> COIN_INT_SCALING set to 5 was 3
> COIN_INT_PERTURBATION set to 50 was 100
> COIN_INT_PRIMALPIVOTALG set to 4 was 1
> COIN_INT_DUALPIVOTALG set to 3 was 1
>
> Were these option changes based on different defaults in the CLP code
> or rather based on testing different options that are giving better
> performance on average? Typically default values in CoinMP should
> match the default values that John Forrest uses in his testing code
> and only changed from those if there is a really good reason to.
I would have thought that to but this patch was from this email to the
mailing list (sorry I can't track it down). I'm not too attached to them
unless someone on the list can speak up?
> 3) adds branch priorities
>
> Need to review this bit further, but can probably go in soon.
Thanks
>
> 5) puts in an option for MaxSeconds
>
> The existing COIN_REAL_MAXSECONDS option seems to be missing a
> corresponding call in the CoinMP. Could not see any new code for
> MaxSeconds in the patch file. Should be relatively easy to figure
> out.
I have only used it for COIN_REAL_MIPMAXSECONDS sorry if that was
already in there I just remembered fiddling with it at the same time as
MIPFRACGAP
>
> 7) outputs better status messages from cbc
>
> Need also to review this bit further.
Yes this was the best I could come up with given that I could not find
status messages for cbc. I think I got the numbers from CPLEX.
>
> There were also number of additions in the patch file to unitTest.cpp,
> which I have not looked at yet.
Adds tests to check the added functionality.
Importantly also checks the status variables for infeasible problems
Vinaka
Stu
>
> Best regards and thanks for keeping track of all these requests.
>
> Bjarni
>
>
>
> On Wed, Oct 28, 2009 at 9:50 PM, Stuart Mitchell
> <s.mitchell at auckland.ac.nz> wrote:
>> It has taken me all morning but I have the patch file for this now
>>
>> This Patch takes contributions from Larry Taylor, Ron Frowd and Myself and
>> 1) corrects the setting of some parameters that are real not ints
>> 2) changes some solver options for better performance
>> 3) adds branch priorities
>> 4) fixes a bug with the msgcallback
>> 5) puts in an option for MaxSeconds
>> 6) puts in an option for FractionGap
>> 7) outputs better status messages from cbc
>> 8) is able to write MPS files for integer problems
>>
>> Can we PLEASE have this integrated with the code as I need it for pulp-or
>> which is dependent on this solver.
>>
>> Stu
>>
>>
>> Stuart Mitchell wrote:
>>> hey there is a version 1.4.0 that fixes this problem
>>>
>>> Finally!!!
>>>
>>> There are still the other issues that we identified.
>>>
>>> So I am building a patch for this as we speak
>>>
>>> Stu
>>>
>>>
>>> Rod Frowd wrote:
>>>> Ming:
>>>>
>>>> I posted this several years ago:
>>>>
>>>> "I have been running the CBC MIP repetitively from CoinMP.dll and it
>>>> seems to be leaking memory and growing in size.
>>>>
>>>> I have added a delete of the cbc object into CoinMP.cpp as follows. It
>>>> looks like this will also delete the cut generator objects created as its
>>>> destructor includes deletion of the cut generators.
>>>>
>>>> SOLVAPI int CoinUnloadProblem(HPROB hProb)
>>>> {
>>>> PCOIN pCoin = (PCOIN)hProb;
>>>> if (pCoin) {
>>>> delete pCoin->clp;
>>>> if (pCoin->RowLower) free(pCoin->RowLower);
>>>> if (pCoin->RowUpper) free(pCoin->RowUpper);
>>>> if (pCoin->IsInt) free(pCoin->IsInt);
>>>> delete pCoin->cbc;
>>>> pCoin->cbc = NULL;
>>>> }
>>>> free(pCoin);
>>>> pCoin = NULL;
>>>> return SOLV_SUCCESS;
>>>> }
>>>>
>>>> "
>>>>
>>>> And I think Stuart Mitchell from NZ also raised a ticket about this.
>>>>
>>>> Rod
>>>>
>>>> ming lu wrote:
>>>>>> Hi All,
>>>>>>
>>>>>> It looks that CoinUnloadProblem doesn't release resource correctly.
>>>>>> The cbc was not released, this causes a huge memory leak problem. Also
>>>>>> following members are not explicitly released:
>>>>>>
>>>>>> ClpSolve *clp_presolve;
>>>>>> OsiClpSolverInterface *osi;
>>>>>> CBMessageHandler *msghandler;
>>>>>> CBIterHandler *iterhandler;
>>>>>> CBNodeHandler *nodehandler;
>>>>>>
>>>>>> CglProbing *probing;
>>>>>> CglGomory *gomory;
>>>>>> CglKnapsackCover *knapsack;
>>>>>> CglOddHole *oddhole;
>>>>>> CglClique *clique;
>>>>>> CglLiftAndProject *liftpro;
>>>>>> CglSimpleRounding *rounding;
>>>>>>
>>>>>> Could someone take a look?
>>>>>>
>>>>>> Thanks,
>>>>>> Ming
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> CoinMp mailing list
>>>>> CoinMp at list.coin-or.org
>>>>> http://list.coin-or.org/mailman/listinfo/coinmp
>>>>>
>>>>>
>>>> _______________________________________________
>>>> CoinMp mailing list
>>>> CoinMp at list.coin-or.org
>>>> http://list.coin-or.org/mailman/listinfo/coinmp
>> --
>> ___________________________________
>> Dr Stuart Mitchell
>> Research Fellow
>> Light Metals Research Centre (LMRC)
>> University of Auckland
>> Private Bag 92019
>> Auckland
>> New Zealand
>>
>> Ph (wk) +64 9 3737599 ext 84867
>> (ddi) +64 9 9234867
>> (fax) +64 9 3737925
>> (mb) +64 21 441331
>> ___________________________________
>>
>>
>>
>> ---------- Forwarded message ----------
>> From: "Larry A. Taylor" <ltaylor at seas.ucla.edu>
>> To: Rod Frowd <rod at frowd.net>, coinmp at list.coin-or.org
>> Date: Mon, 18 Feb 2008 16:39:46 -0800
>> Subject: Re: [CoinMp] CoinMP.dll errors
>> See Ticket #1 for this project:
>> https://projects.coin-or.org/CoinMP/ticket/1
>>
>> LAT
>>
>> At 01:33 AM 2/18/2008, Rod Frowd wrote:
>>> I found that the CoinMP.dll did not work when built from source, though
>>> the downloaded binary dll did. It was giving primal infeasible
>>> errors, when the problem was feasible,
>>>
>>> Upon looking at the source code I found the problem below, some of the
>>> real tolerances were being set to zero as the CoinGetIntOption was being
>>> called instead of the CoinGetRealOption? The built from source dll works
>>> after this change.
>>>
>>> Index: CoinMP.cpp
>>> ===================================================================
>>> --- CoinMP.cpp (revision 53)
>>> +++ CoinMP.cpp (working copy)
>>> @@ -646,10 +646,10 @@
>>>
>>> pCoin->clp->setMaximumIterations(CoinGetIntOption(hProb,
>>> COIN_INT_MAXITER));
>>>
>>> - pCoin->clp->setPrimalObjectiveLimit(CoinGetIntOption(hProb,
>>> COIN_REAL_PRIMALOBJLIM));
>>> - pCoin->clp->setDualObjectiveLimit(CoinGetIntOption(hProb,
>>> COIN_REAL_DUALOBJLIM));
>>> - pCoin->clp->setPrimalTolerance(CoinGetIntOption(hProb,
>>> COIN_REAL_PRIMALOBJTOL));
>>> - pCoin->clp->setDualTolerance(CoinGetIntOption(hProb,
>>> COIN_REAL_DUALOBJTOL));
>>> + pCoin->clp->setPrimalObjectiveLimit(CoinGetRealOption(hProb,
>>> COIN_REAL_PRIMALOBJLIM));
>>> + pCoin->clp->setDualObjectiveLimit(CoinGetRealOption(hProb,
>>> COIN_REAL_DUALOBJLIM));
>>> + pCoin->clp->setPrimalTolerance(CoinGetRealOption(hProb,
>>> COIN_REAL_PRIMALOBJTOL));
>>> + pCoin->clp->setDualTolerance(CoinGetRealOption(hProb,
>>> COIN_REAL_DUALOBJTOL));
>>>
>>> /* check if it has been changed, leave alone otherwise */
>>> ClpPrimalColumnSteepest primalSteepest(CoinGetIntOption(hProb,
>>> COIN_INT_PRIMALPIVOTALG));
>>> @@ -659,7 +659,7 @@
>>> pCoin->clp->setDualRowPivotAlgorithm(dualSteepest);
>>>
>>> if (CoinGetIntOption(hProb, COIN_INT_CRASHIND)) {
>>> - pCoin->clp->crash(CoinGetIntOption(hProb, COIN_REAL_CRASHGAP),
>>> + pCoin->clp->crash(CoinGetRealOption(hProb, COIN_REAL_CRASHGAP),
>>> CoinGetIntOption(hProb,
>>> COIN_INT_CRASHPIVOT));
>>> }
>>> switch (CoinGetIntOption(hProb,COIN_INT_SOLVEMETHOD)) {
>>>
>>>
>>>
>>> Another issue I found is that the default options were not set the same
>>> as in the CLP executable, making CoinMP.dll a lot slower. I was able to
>>> speed it up by a factor of 3 with the following parameter changes:
>>>
>>> COIN_INT_SCALING set to 5 was 3
>>> COIN_INT_PERTURBATION set to 50 was 100
>>> COIN_INT_PRIMALPIVOTALG set to 4 was 1
>>> COIN_INT_DUALPIVOTALG set to 3 was 1
>>>
>>>
>>> Rod Frowd
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> CoinMp mailing list
>>> CoinMp at list.coin-or.org
>>> http://list.coin-or.org/mailman/listinfo/coinmp
>> _______________________________________________
>> CoinMp mailing list
>> CoinMp at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/coinmp
>>
>>
>> ---------- Forwarded message ----------
>> From: Rod Frowd <rod at frowd.net>
>> To: coinmp at list.coin-or.org
>> Date: Mon, 18 Feb 2008 19:33:51 +1000
>> Subject: [CoinMp] CoinMP.dll errors
>> I found that the CoinMP.dll did not work when built from source, though
>> the downloaded binary dll did. It was giving primal infeasible errors, when
>> the problem was feasible,
>>
>> Upon looking at the source code I found the problem below, some of the
>> real tolerances were being set to zero as the CoinGetIntOption was being
>> called instead of the CoinGetRealOption? The built from source dll works
>> after this change.
>>
>> Index: CoinMP.cpp
>> ===================================================================
>> --- CoinMP.cpp (revision 53)
>> +++ CoinMP.cpp (working copy)
>> @@ -646,10 +646,10 @@
>>
>> pCoin->clp->setMaximumIterations(CoinGetIntOption(hProb,
>> COIN_INT_MAXITER));
>>
>> - pCoin->clp->setPrimalObjectiveLimit(CoinGetIntOption(hProb,
>> COIN_REAL_PRIMALOBJLIM));
>> - pCoin->clp->setDualObjectiveLimit(CoinGetIntOption(hProb,
>> COIN_REAL_DUALOBJLIM));
>> - pCoin->clp->setPrimalTolerance(CoinGetIntOption(hProb,
>> COIN_REAL_PRIMALOBJTOL));
>> - pCoin->clp->setDualTolerance(CoinGetIntOption(hProb,
>> COIN_REAL_DUALOBJTOL));
>> + pCoin->clp->setPrimalObjectiveLimit(CoinGetRealOption(hProb,
>> COIN_REAL_PRIMALOBJLIM));
>> + pCoin->clp->setDualObjectiveLimit(CoinGetRealOption(hProb,
>> COIN_REAL_DUALOBJLIM));
>> + pCoin->clp->setPrimalTolerance(CoinGetRealOption(hProb,
>> COIN_REAL_PRIMALOBJTOL));
>> + pCoin->clp->setDualTolerance(CoinGetRealOption(hProb,
>> COIN_REAL_DUALOBJTOL));
>>
>> /* check if it has been changed, leave alone otherwise */
>> ClpPrimalColumnSteepest primalSteepest(CoinGetIntOption(hProb,
>> COIN_INT_PRIMALPIVOTALG));
>> @@ -659,7 +659,7 @@
>> pCoin->clp->setDualRowPivotAlgorithm(dualSteepest);
>>
>> if (CoinGetIntOption(hProb, COIN_INT_CRASHIND)) {
>> - pCoin->clp->crash(CoinGetIntOption(hProb, COIN_REAL_CRASHGAP),
>> + pCoin->clp->crash(CoinGetRealOption(hProb, COIN_REAL_CRASHGAP),
>> CoinGetIntOption(hProb,
>> COIN_INT_CRASHPIVOT));
>> }
>> switch (CoinGetIntOption(hProb,COIN_INT_SOLVEMETHOD)) {
>>
>>
>>
>> Another issue I found is that the default options were not set the same
>> as in the CLP executable, making CoinMP.dll a lot slower. I was able to
>> speed it up by a factor of 3 with the following parameter changes:
>>
>> COIN_INT_SCALING set to 5 was 3
>> COIN_INT_PERTURBATION set to 50 was 100
>> COIN_INT_PRIMALPIVOTALG set to 4 was 1
>> COIN_INT_DUALPIVOTALG set to 3 was 1
>>
>>
>> Rod Frowd
>>
>>
>> _______________________________________________
>> CoinMp mailing list
>> CoinMp at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/coinmp
>>
>>
--
___________________________________
Dr Stuart Mitchell
Research Fellow
Light Metals Research Centre (LMRC)
University of Auckland
Private Bag 92019
Auckland
New Zealand
Ph (wk) +64 9 3737599 ext 84867
(ddi) +64 9 9234867
(fax) +64 9 3737925
(mb) +64 21 441331
___________________________________
More information about the CoinMp
mailing list