[Clp] tolerancy levels

William H. Patton pattonwh at comcast.net
Mon Nov 14 14:23:48 EST 2011


Here is a 2007 note related to this.  I do not know where to find it in 
the archives any more.  Willaim

William,

Thank you for your comments.

Looking for floats in Cbc, Clp, CoinUtils and some of Cgl  I could only 
find a float defined in ClpSimplex.?pp.  The use there seems safe but I 
will change in trunk.  The FLT_MAX in CbcfathomDynamicProgramming.cpp is 
DBL_MAX in trunk (I will change to COIN_DBL_MAX as that is preferred). 
  Where else did you find floats?

As for the matter of many constants,  I plead guilty.  I have a tendency 
to pluck a number from the air depending on the direction of the wind. 
  Of more concern is that probably tolerances are not rigorously used 
e.g. value < tolerance is not the negation of value > tolerance. 
  However it would probably take a month or two to clean up the code for 
this and for double constants and it would not be very amusing.

Anyone willing to volunteer?  Somehow I doubt it.

John Forrest


*"William H. Patton" <pattonwh at comcast.net>*
Sent by: coin-lpsolver-bounces at list.coin-or.org

10/14/2007 01:51 PM

Please respond to
pattonwh at comcast.net


	
To
	<coin-lpsolver at list.coin-or.org>
cc
	
Subject
	[Coin-lpsolver] Clp and cbc consttants in code.



	





I am new to cbc. I have just compiled CBC in VS8
Cbc-1.1.0-win32-msvc8.

I am surprised to see the warnings about implicit conversion of
double to float in Cbc-1.1.0-win32-msvc8.  It is clear that floats
are intentionally used. Is the memory used so large as to need
this? If so, I think it would be safer to use a CBC private type
so the assignment overload can pass thru protective code to deal
carefully with the too large exponents.  I think particularly
about the 1.0e+100 apparent infinity of clp constants.
CbcBranchActual.cpp(2141): double bestEstimate = 1.0e100;
CbcBranchActual.cpp(2139): double bestCriterion=-1.0e50;
CbcFathomDynamicProgramming.cpp(262):
CoinFillN(cost_,size_,FLT_MAX);
My compiler definitions show range limits as
#define DBL_MAX         1.7976931348623158e+308 /* max value */
#define FLT_MAX         3.402823466e+38F        /* max value */

The other source maintenance concern I have is the presence of
many constants in the code.  Attached is a list of the nearly 400
instances of doubles that I could find with an easy regex search..
I think good practice calls for these to deserve names so they can
be consistently used.  They could be #defined but better for an
API oriented extensible framework, they should have API get and
set access functions
for user tinkering. I think there are about 30 distinct values in
the 400 lines.

You may have a better search that can find the rest of the not 0
or 1 manifest constants in the code.  I see .5, .005. 0.5 swept
along in the attached search
CbcNode.cpp(2402): double upPenalty =
CoinMin(upCost[i],1.0e110)*(1.0-value);
CbcNode.cpp(2403): double downPenalty =
CoinMin(downCost[i],1.0e110)*value;
CbcNode.cpp(2443): sort[iBestGot]=-1.0e120;
CbcBranchCut.cpp(540): if (djTolerance_<1.0e10) {
CbcCompareActual.cpp(278): if (treeSize_*size>5.0e7)
CbcHeuristic.cpp(719): distance = floor(distance+1.05e-8);
assert (lower[iColumn]>-1.0e20);

I am impressed by the branch and cut performance on the test
problem that brought me to the site. I think the Feasibility Pump
is really quite a neat feature.

William

_______________________________________________
Coin-lpsolver mailing list
Coin-lpsolver at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/coin-lpsolver





On 11/14/2011 1:06 PM, Miles Lubin wrote:
> Hi József,
>
> These values are usually initialized in constructors. You should find 
> these tolerances near the beginning of ClpSimplex.cpp. It might be 
> worthwhile to also search the source code for where they are used in 
> order to make sure that they have the meaning that you think they have.
>
> Miles
>
> On 11/14/11 10:51 AM, József Smidla wrote:
>> Hello!
>>
>> I would like to know, where can I found the values of different
>> tolerance levels, like optimality tolerance, feasibility tolerance,
>> etc. in Clp. I have found a header file which contains declaration of
>> this variables, but I need the concrete values.
>>
>> József Smidla
>>
>> _______________________________________________
>> Clp mailing list
>> Clp at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/clp
>
>
>
>
> _______________________________________________
> Clp mailing list
> Clp at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/clp
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/clp/attachments/20111114/89a28477/attachment.html>


More information about the Clp mailing list