You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tn...@apache.org on 2012/04/01 18:46:01 UTC
svn commit: r1308151 - in /commons/proper/math/trunk/src: changes/changes.xml
main/java/org/apache/commons/math3/genetics/FixedElapsedTime.java
test/java/org/apache/commons/math3/genetics/FixedElapsedTimeTest.java
Author: tn
Date: Sun Apr 1 16:46:01 2012
New Revision: 1308151
URL: http://svn.apache.org/viewvc?rev=1308151&view=rev
Log:
Added FixedElapsedTime stopping condition.
JIRA: MATH-773 contributed by Reid Hochstedler
Added:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/genetics/FixedElapsedTime.java (with props)
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/genetics/FixedElapsedTimeTest.java (with props)
Modified:
commons/proper/math/trunk/src/changes/changes.xml
Modified: commons/proper/math/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/changes/changes.xml?rev=1308151&r1=1308150&r2=1308151&view=diff
==============================================================================
--- commons/proper/math/trunk/src/changes/changes.xml (original)
+++ commons/proper/math/trunk/src/changes/changes.xml Sun Apr 1 16:46:01 2012
@@ -52,6 +52,9 @@ If the output is not quite correct, chec
<body>
<release version="3.1" date="TBD" description="
">
+ <action dev="tn" type="add" issue="MATH-773" due-to="Reid Hochstedler">
+ Added class FixedElapsedTime (new StoppingCondition for evolution of generations) to genetics package.
+ </action>
<action dev="celestin" type="add" issue="MATH-756">
Added classes Decimal64 and Decimal64Field, which are wrapper classes around primitive doubles. These classes implement FieldElement and Field, respectively.
</action>
Added: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/genetics/FixedElapsedTime.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/genetics/FixedElapsedTime.java?rev=1308151&view=auto
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/genetics/FixedElapsedTime.java (added)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/genetics/FixedElapsedTime.java Sun Apr 1 16:46:01 2012
@@ -0,0 +1,81 @@
+/*
+ * 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.math3.genetics;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
+
+/**
+ * Stops after a fixed amount of time has elapsed.
+ *
+ * <p>
+ * The first time {@link #isSatisfied(Population)} is invoked, the end time of
+ * the evolution is determined based on the provided <code>maxTime</code> value.
+ * Once the elapsed time reaches the configured <code>maxTime</code> value,
+ * {@link #isSatisfied(Population)} returns true.
+ * </p>
+ *
+ * @version $Id$
+ * @since 3.1
+ */
+public class FixedElapsedTime implements StoppingCondition {
+ /** Maximum allowed time period (in nanoseconds). */
+ private final long maxTimePeriod;
+
+ /** The predetermined termination time (stopping condition). */
+ private long endTime = -1;
+
+ /**
+ * Create a new {@link FixedElapsedTime} instance.
+ *
+ * @param maxTime maximum number of seconds generations are allowed to evolve
+ * @throws NumberIsTooSmallException if the provided time is < 0
+ */
+ public FixedElapsedTime(final long maxTime) {
+ this(maxTime, TimeUnit.SECONDS);
+ }
+
+ /**
+ * Create a new {@link FixedElapsedTime} instance.
+ *
+ * @param maxTime maximum time generations are allowed to evolve
+ * @param unit {@link TimeUnit} of the maxTime argument
+ * @throws NumberIsTooSmallException if the provided time is < 0
+ */
+ public FixedElapsedTime(final long maxTime, final TimeUnit unit) {
+ if (maxTime < 0) {
+ throw new NumberIsTooSmallException(maxTime, 0, true);
+ }
+ maxTimePeriod = unit.toNanos(maxTime);
+ }
+
+ /**
+ * Determine whether or not the maximum allowed time has passed.
+ * The termination time is determined after the first generation.
+ *
+ * @param population ignored (no impact on result)
+ * @return <code>true</code> IFF the maximum allowed time period has elapsed
+ */
+ public boolean isSatisfied(final Population population) {
+ if (endTime < 0) {
+ endTime = System.nanoTime() + maxTimePeriod;
+ }
+
+ return System.nanoTime() >= endTime;
+ }
+}
Propchange: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/genetics/FixedElapsedTime.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/genetics/FixedElapsedTime.java
------------------------------------------------------------------------------
svn:keywords = Id Revision HeadURL
Propchange: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/genetics/FixedElapsedTime.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/genetics/FixedElapsedTimeTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/genetics/FixedElapsedTimeTest.java?rev=1308151&view=auto
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/genetics/FixedElapsedTimeTest.java (added)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/genetics/FixedElapsedTimeTest.java Sun Apr 1 16:46:01 2012
@@ -0,0 +1,74 @@
+/*
+ * 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.math3.genetics;
+
+import java.util.Iterator;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.math3.util.FastMath;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class FixedElapsedTimeTest {
+
+ @Test
+ public void testIsSatisfied() {
+ final Population pop = new Population() {
+ public void addChromosome(final Chromosome chromosome) {
+ // unimportant
+ }
+ public Chromosome getFittestChromosome() {
+ // unimportant
+ return null;
+ }
+ public int getPopulationLimit() {
+ // unimportant
+ return 0;
+ }
+ public int getPopulationSize() {
+ // unimportant
+ return 0;
+ }
+ public Population nextGeneration() {
+ // unimportant
+ return null;
+ }
+ public Iterator<Chromosome> iterator() {
+ // unimportant
+ return null;
+ }
+ };
+
+ final long start = System.nanoTime();
+ final long duration = 3;
+ final FixedElapsedTime tec = new FixedElapsedTime(duration, TimeUnit.SECONDS);
+
+ while (!tec.isSatisfied(pop)) {
+ try {
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ }
+
+ final long end = System.nanoTime();
+ final long elapsedTime = end - start;
+ final long diff = FastMath.abs(elapsedTime - TimeUnit.SECONDS.toNanos(duration));
+
+ Assert.assertTrue(diff < TimeUnit.MILLISECONDS.toNanos(100));
+ }
+}
Propchange: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/genetics/FixedElapsedTimeTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/genetics/FixedElapsedTimeTest.java
------------------------------------------------------------------------------
svn:keywords = Id Revision HeadURL
Propchange: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/genetics/FixedElapsedTimeTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain