Return-Path:
X-Original-To: apmail-commons-commits-archive@minotaur.apache.org
Delivered-To: apmail-commons-commits-archive@minotaur.apache.org
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
by minotaur.apache.org (Postfix) with SMTP id 344A99B54
for ;
Sun, 12 Feb 2012 23:30:18 +0000 (UTC)
Received: (qmail 6365 invoked by uid 500); 12 Feb 2012 23:30:17 -0000
Delivered-To: apmail-commons-commits-archive@commons.apache.org
Received: (qmail 6110 invoked by uid 500); 12 Feb 2012 23:30:16 -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 6103 invoked by uid 99); 12 Feb 2012 23:30:16 -0000
Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230)
by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 12 Feb 2012 23:30:16 +0000
X-ASF-Spam-Status: No, hits=-2000.0 required=5.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; Sun, 12 Feb 2012 23:30:13 +0000
Received: from eris.apache.org (localhost [127.0.0.1])
by eris.apache.org (Postfix) with ESMTP id 4F4C923888E7
for ; Sun, 12 Feb 2012 23:29:52 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: svn commit: r1243365 - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math/optimization/
test/java/org/apache/commons/math/optimization/direct/
Date: Sun, 12 Feb 2012 23:29:52 -0000
To: commits@commons.apache.org
From: erans@apache.org
X-Mailer: svnmailer-1.0.8-patched
Message-Id: <20120212232952.4F4C923888E7@eris.apache.org>
X-Virus-Checked: Checked by ClamAV on apache.org
Author: erans
Date: Sun Feb 12 23:29:51 2012
New Revision: 1243365
URL: http://svn.apache.org/viewvc?rev=1243365&view=rev
Log:
MATH-707
"SimpleRealPointChecker" and "SimpleVectorialPointChecker" are replaced by
the generic "SimplePointChecker" (instantiated using "PointValuePair" and
"PointVectorValuePair", respectively).
Added:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/SimplePointChecker.java (with props)
Removed:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/SimpleRealPointChecker.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/SimpleVectorialPointChecker.java
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/ConvergenceChecker.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/VectorialConvergenceChecker.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/MultivariateFunctionPenaltyAdapterTest.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/ConvergenceChecker.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/ConvergenceChecker.java?rev=1243365&r1=1243364&r2=1243365&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/ConvergenceChecker.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/ConvergenceChecker.java Sun Feb 12 23:29:51 2012
@@ -27,7 +27,7 @@ package org.apache.commons.math.optimiza
* @param Type of the (point, objective value) pair.
*
* @see org.apache.commons.math.optimization.SimpleScalarValueChecker
- * @see org.apache.commons.math.optimization.SimpleRealPointChecker
+ * @see org.apache.commons.math.optimization.SimplePointChecker
*
* @version $Id$
* @since 3.0
Added: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/SimplePointChecker.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/SimplePointChecker.java?rev=1243365&view=auto
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/SimplePointChecker.java (added)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/SimplePointChecker.java Sun Feb 12 23:29:51 2012
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.math.optimization;
+
+import org.apache.commons.math.util.FastMath;
+import org.apache.commons.math.util.Pair;
+
+/**
+ * Simple implementation of the {@link ConvergenceChecker} interface using
+ * only point coordinates.
+ *
+ * Convergence is considered to have been reached if either the relative
+ * difference between each point coordinate are smaller than a threshold
+ * or if either the absolute difference between the point coordinates are
+ * smaller than another threshold.
+ *
+ * @param Type of the (point, value) pair.
+ * @param Type of the "value" part of the pair (not used by this class).
+ *
+ * @version $Id$
+ * @since 3.0
+ */
+public class SimplePointChecker>
+ extends AbstractConvergenceChecker {
+ /**
+ * Build an instance with default threshold.
+ */
+ public SimplePointChecker() {}
+
+ /**
+ * Build an instance with specified thresholds.
+ * In order to perform only relative checks, the absolute tolerance
+ * must be set to a negative value. In order to perform only absolute
+ * checks, the relative tolerance must be set to a negative value.
+ *
+ * @param relativeThreshold relative tolerance threshold
+ * @param absoluteThreshold absolute tolerance threshold
+ */
+ public SimplePointChecker(final double relativeThreshold,
+ final double absoluteThreshold) {
+ super(relativeThreshold, absoluteThreshold);
+ }
+
+ /**
+ * Check if the optimization algorithm has converged considering the
+ * last two points.
+ * This method may be called several time from the same algorithm
+ * iteration with different points. This can be detected by checking the
+ * iteration number at each call if needed. Each time this method is
+ * called, the previous and current point correspond to points with the
+ * same role at each iteration, so they can be compared. As an example,
+ * simplex-based algorithms call this method for all points of the simplex,
+ * not only for the best or worst ones.
+ *
+ * @param iteration Index of current iteration
+ * @param previous Best point in the previous iteration.
+ * @param current Best point in the current iteration.
+ * @return {@code true} if the algorithm has converged.
+ */
+ @Override
+ public boolean converged(final int iteration,
+ final PAIR previous,
+ final PAIR current) {
+ final double[] p = previous.getKey();
+ final double[] c = current.getKey();
+ for (int i = 0; i < p.length; ++i) {
+ final double pi = p[i];
+ final double ci = c[i];
+ final double difference = FastMath.abs(pi - ci);
+ final double size = FastMath.max(FastMath.abs(pi), FastMath.abs(ci));
+ if (difference > size * getRelativeThreshold() &&
+ difference > getAbsoluteThreshold()) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
Propchange: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/SimplePointChecker.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/VectorialConvergenceChecker.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/VectorialConvergenceChecker.java?rev=1243365&r1=1243364&r2=1243365&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/VectorialConvergenceChecker.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/VectorialConvergenceChecker.java Sun Feb 12 23:29:51 2012
@@ -24,7 +24,7 @@ package org.apache.commons.math.optimiza
* user should provide a class implementing this interface to allow the optimization
* algorithm to stop its search according to the problem at hand.
* For convenience, two implementations that fit simple needs are already provided:
- * {@link SimpleVectorialValueChecker} and {@link SimpleVectorialPointChecker}. The first
+ * {@link SimpleVectorialValueChecker} and {@link SimplePointChecker}. The first
* one considers convergence is reached when the objective function value does not
* change much anymore, it does not use the point set at all. The second one
* considers convergence is reached when the input point set does not change
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/MultivariateFunctionPenaltyAdapterTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/MultivariateFunctionPenaltyAdapterTest.java?rev=1243365&r1=1243364&r2=1243365&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/MultivariateFunctionPenaltyAdapterTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/MultivariateFunctionPenaltyAdapterTest.java Sun Feb 12 23:29:51 2012
@@ -21,7 +21,7 @@ package org.apache.commons.math.optimiza
import org.apache.commons.math.analysis.MultivariateFunction;
import org.apache.commons.math.optimization.GoalType;
import org.apache.commons.math.optimization.PointValuePair;
-import org.apache.commons.math.optimization.SimpleRealPointChecker;
+import org.apache.commons.math.optimization.SimplePointChecker;
import org.junit.Assert;
import org.junit.Test;
@@ -79,7 +79,7 @@ public class MultivariateFunctionPenalty
biQuadratic.getUpper(),
1000.0, new double[] { 100.0, 100.0 });
- SimplexOptimizer optimizer = new SimplexOptimizer(new SimpleRealPointChecker(1.0e-11, 1.0e-20));
+ SimplexOptimizer optimizer = new SimplexOptimizer(new SimplePointChecker(1.0e-11, 1.0e-20));
optimizer.setSimplex(new NelderMeadSimplex(new double[] { 1.0, 0.5 }));
final PointValuePair optimum
@@ -125,7 +125,7 @@ public class MultivariateFunctionPenalty
biQuadratic.getUpper(),
1000.0, new double[] { 100.0, 100.0 });
- SimplexOptimizer optimizer = new SimplexOptimizer(new SimpleRealPointChecker(1.0e-10, 1.0e-20));
+ SimplexOptimizer optimizer = new SimplexOptimizer(new SimplePointChecker(1.0e-10, 1.0e-20));
optimizer.setSimplex(new NelderMeadSimplex(new double[] { 1.0, 0.5 }));
final PointValuePair optimum