Luc Maisonobe wrote:

> Jörg Schaible a écrit :
>> Hi Luc,
>> 
>> Luc Maisonobe wrote:
>> 
>>> Jörg Schaible a écrit :
>>>> Hi Luc,
>>>>
>>>> Luc Maisonobe wrote:
>>>>
>>>>> Jörg Schaible a écrit :
>>>>>> Hi Luc,
>>>>>>
>>>> [snip]
>>>>
>>>>>> we're definitely on the right track. After changing the loop in
>>>>>> TestProblem3 the tests run through. However, now I have two failing
>>>>>> tests:
>>>>> The two tests are in fact the same test repeated. The first occurrence
>>>>> is in the deprecated package estimation which will be removed at some
>>>>> point in the future and the second test is in the new
>>>>> optimization.general package.
>>>>>
>>>>> Could you change in the MinPackTest.java from either package the
>>>>> checkTheoreticalMinCost method to add a print statement as in the
>>>>> example below and send the result you get when running MinPackTest ?
>>>>>
>>>>>
>>>>> public boolean checkTheoreticalMinCost(double rms) {
>>>>>   double threshold = costAccuracy * (1.0 + theoreticalMinCost);
>>>>>   if (Math.abs(Math.sqrt(m) * rms - theoreticalMinCost) > threshold) {
>>>>>     System.out.println("rms = " + rms +
>>>>>                        ", m = " + m +
>>>>>                        ", sqrt(m)*rms = " +
>>>>>                        Math.abs(Math.sqrt(m) * rms) +
>>>>>                        ", threshold = " + threshold +
>>>>>                        ", delta = " +
>>>>>                        Math.abs(Math.sqrt(m) * rms -
>>>>>                                 theoreticalMinCost));
>>>>>      }
>>>>>      return Math.abs(Math.sqrt(m) * rms - theoreticalMinCost) <=
>>>>>             threshold;
>>>>>     }
>>>>>
>>>>> I guess I simply put too tight thresholds in the tests and that
>>>>> numerical instability or different optimizations in JVMs may change
>>>>> the result and break the test. The previous print statement would
>>>>> allow me to compare the numerical values with what I get here and
>>>>> decide if the results are acceptable and the test threshold must be
>>>>> enlarged or if there is a real problem here.
>>>> rms = 65.50657291427613,
>>>> m = 20,
>>>> sqrt(m)*rms = 292.9543000187359,
>>>> threshold = 2.93954306151134E-6,
>>>> delta = 6.132398084446322E-6
>>> These results are good. The default threshold for cost accuracy is set
>>> to 1.0e-8, which is too tight for this case. I have checked in a
>>> modification in the constructor of the BrownDennisFunction internal
>>> class in both MinPackTest (just added setCostAccuracy(2.5e-8)). Could
>>> you either look if the current code in subversion trunk works for you or
>>> add the call to setCostAccuracy in both constructors ?
>> 
>> I've checked out the trunk now, but no cigar yet:
>> 
>> ========= %< =============
>> junit.framework.AssertionFailedError: null
>>         at junit.framework.Assert.fail(Assert.java:47)
>>         at junit.framework.Assert.assertTrue(Assert.java:20)
>>         at junit.framework.Assert.assertTrue(Assert.java:27)
>>         at
>>
org.apache.commons.math.optimization.general.MinpackTest.minpackTest(MinpackTest.java:505)
>>         at
>>
org.apache.commons.math.optimization.general.MinpackTest.testMinpackBrownDennis(MinpackTest.java:349)
>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>         at
>>
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>         at
>>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>         at java.lang.reflect.Method.invoke(Method.java:585)
>>         at junit.framework.TestCase.runTest(TestCase.java:168)
>>         at junit.framework.TestCase.runBare(TestCase.java:134)
>>         at junit.framework.TestResult$1.protect(TestResult.java:110)
>>         at junit.framework.TestResult.runProtected(TestResult.java:128)
>>         at junit.framework.TestResult.run(TestResult.java:113)
>>         at junit.framework.TestCase.run(TestCase.java:124)
>>         at junit.framework.TestSuite.runTest(TestSuite.java:232)
>>         at junit.framework.TestSuite.run(TestSuite.java:227)
>>         at
>>
org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
>>         at
>>
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
>>         at
>>
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>         at
>>
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
>>         at
>>
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
>>         at
>>
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
>>         at
>>
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
>> ========= %< =============
>> 
>> I tried meanwhile with 1.0e-6, but it fails still. So it seems there's
>> something else not working with JRockit :-/
> 
> Do you have only the case in optimization.general that fails or the one
> in estimation fails also ? They really should behave the same since they
>  really do almost exactly the same computations ?

They fail both in the same way, I simply did not repeat the stack trace.

> Could you try again to add the print and play with the costAccuracy
> setting ? This setting is a multiplicative factor for the printed
> threshold and this threshold is checked against the printed delta which
> should not change when you change the setting.

With 2.08e-8 for the costAccuracy I get the sysout, with 2.09e-8 no longer.

2.08e-8: rms = 65.50657291427613, m = 20, sqrt(m)*rms = 292.9543000187359,
threshold = 6.114249567943588E-6, delta = 6.132398084446322E-6
2.05e-8: rms = 65.50657291427613, m = 20, sqrt(m)*rms = 292.9543000187359,
threshold = 6.026063276098247E-6, delta = 6.132398084446322E-6
2.00e-8: rms = 65.50657291427613, m = 20, sqrt(m)*rms = 292.9543000187359,
threshold = 5.87908612302268E-6, delta = 6.132398084446322E-6
1.50e-8: rms = 65.50657291427613, m = 20, sqrt(m)*rms = 292.9543000187359,
threshold = 4.40931459226701E-6, delta = 6.132398084446322E-6
1.00e-8: rms = 65.50657291427613, m = 20, sqrt(m)*rms = 292.9543000187359,
threshold = 2.93954306151134E-6, delta = 6.132398084446322E-6

- Jörg


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to