Return-Path: Delivered-To: apmail-commons-commits-archive@minotaur.apache.org Received: (qmail 14204 invoked from network); 23 Sep 2010 12:12:21 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 23 Sep 2010 12:12:21 -0000 Received: (qmail 32146 invoked by uid 500); 23 Sep 2010 12:12:21 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 31838 invoked by uid 500); 23 Sep 2010 12:12:17 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 31831 invoked by uid 99); 23 Sep 2010 12:12:17 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Sep 2010 12:12:17 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Sep 2010 12:12:16 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 75C5A2388A87; Thu, 23 Sep 2010 12:11:56 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1000422 - in /commons/proper/math/trunk/src: main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java test/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizerTest.java Date: Thu, 23 Sep 2010 12:11:56 -0000 To: commits@commons.apache.org From: erans@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100923121156.75C5A2388A87@eris.apache.org> Author: erans Date: Thu Sep 23 12:11:56 2010 New Revision: 1000422 URL: http://svn.apache.org/viewvc?rev=1000422&view=rev Log: MATH-413 (point 13) Selecting a random start value (instead of interval bounds). Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizerTest.java Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java?rev=1000422&r1=1000421&r2=1000422&view=diff ============================================================================== --- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java (original) +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java Thu Sep 23 12:11:56 2010 @@ -143,18 +143,22 @@ public class MultiStartUnivariateRealOpt final GoalType goal, final double min, final double max) throws FunctionEvaluationException { + return optimize(f, goal, min, max, min + 0.5 * (max - min)); + } + /** {@inheritDoc} */ + public UnivariateRealPointValuePair optimize(final FUNC f, final GoalType goal, + final double min, final double max, + final double startValue) + throws FunctionEvaluationException { optima = new UnivariateRealPointValuePair[starts]; totalEvaluations = 0; // Multi-start loop. for (int i = 0; i < starts; ++i) { try { - final double bound1 = (i == 0) ? min : min + generator.nextDouble() * (max - min); - final double bound2 = (i == 0) ? max : min + generator.nextDouble() * (max - min); - optima[i] = optimizer.optimize(f, goal, - FastMath.min(bound1, bound2), - FastMath.max(bound1, bound2)); + final double s = (i == 0) ? startValue : min + generator.nextDouble() * (max - min); + optima[i] = optimizer.optimize(f, goal, min, max, s); } catch (FunctionEvaluationException fee) { optima[i] = null; } catch (ConvergenceException ce) { @@ -177,16 +181,6 @@ public class MultiStartUnivariateRealOpt return optima[0]; } - /** {@inheritDoc} */ - public UnivariateRealPointValuePair optimize(final FUNC f, final GoalType goalType, - final double min, final double max, - final double startValue) - throws FunctionEvaluationException { - // XXX Main code should be here, using "startValue" for the first start. - // XXX This method should set "startValue" to min + 0.5 * (max - min) - return optimize(f, goalType, min, max); - } - /** * Sort the optima from best to worst, followed by {@code null} elements. * Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizerTest.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizerTest.java?rev=1000422&r1=1000421&r2=1000422&view=diff ============================================================================== --- commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizerTest.java (original) +++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizerTest.java Thu Sep 23 12:11:56 2010 @@ -50,8 +50,8 @@ public class MultiStartUnivariateRealOpt assertEquals(-1.0, f.value(optima[i].getPoint()), 1.0e-10); assertEquals(f.value(optima[i].getPoint()), optima[i].getValue(), 1.0e-10); } - assertTrue(optimizer.getEvaluations() > 150); - assertTrue(optimizer.getEvaluations() < 250); + assertTrue(optimizer.getEvaluations() > 200); + assertTrue(optimizer.getEvaluations() < 300); } @Test @@ -68,14 +68,14 @@ public class MultiStartUnivariateRealOpt UnivariateRealPointValuePair optimum = optimizer.optimize(f, GoalType.MINIMIZE, -0.3, -0.2); - assertEquals(-0.2719561271, optimum.getPoint(), 1e-9); + assertEquals(-0.2719561293, optimum.getPoint(), 1e-9); assertEquals(-0.0443342695, optimum.getValue(), 1e-9); UnivariateRealPointValuePair[] optima = optimizer.getOptima(); for (int i = 0; i < optima.length; ++i) { assertEquals(f.value(optima[i].getPoint()), optima[i].getValue(), 1e-9); } - assertTrue(optimizer.getEvaluations() >= 110); - assertTrue(optimizer.getEvaluations() <= 150); + assertTrue(optimizer.getEvaluations() >= 50); + assertTrue(optimizer.getEvaluations() <= 100); } }