/* * This file is part of JGAP. * * JGAP offers a dual license model containing the LGPL as well as the MPL. * * For licensing information please see the file license.txt included with JGAP * or have a look at the top of class org.jgap.Chromosome which representatively * includes the JGAP license policy applicable for any file delivered with JGAP. */ package org.jgap.audit; import java.util.*; import org.jgap.*; import org.jgap.eval.*; /** * Monitors the evolution and stops it after a given number of seconds. * * @author Klaus Meffert * @since 3.4.4 */ public class TimedMonitor implements IEvolutionMonitor { /** String containing the CVS revision. Read out via reflection!*/ private final static String CVS_REVISION = "$Revision: 1.5 $"; private long m_startMillis; private int m_seconds; /** * Constructor. * * @param a_seconds number of seconds to let the evolution run * * @author Klaus Meffert * @since 3.4.4 */ public TimedMonitor(int a_seconds) { m_seconds = a_seconds; } /** * Called after another evolution cycle has been executed. * * @param a_pop the currently evolved population * @param a_messages the monitor can append messages here to indicate why * it asks evolution to stop * @return true: continue with the evolution; false: stop evolution * * @author Klaus Meffert * @since 3.4.4 */ public boolean nextCycle(Population a_pop, List<String> a_messages) { long currentMillis = System.currentTimeMillis(); if (currentMillis - m_startMillis >= m_seconds * 1000) { a_messages.add(m_seconds + " seconds maximum runtime were reached."); return false; } else { return true; } } /** * Called just before the evolution starts. * * @param a_config the configuration used * * @author Klaus Meffert * @since 3.4.4 */ public void start(Configuration a_config) { m_startMillis = System.currentTimeMillis(); } /** * Called whenever it's worth monitoring. * * @param a_monitorEvent see constants at top of class IEvolutionMonitor * @param a_evolutionNo the index of the evolution round (1, 2, ...) * @param a_information event-specific information * * @author Klaus Meffert * @since 3.5 */ public void event(String a_monitorEvent, int a_evolutionNo, Object[] a_information) { // Not needed here. // ---------------- } /** * @return null as no data is gathered by this monitor * * @author Klaus Meffert * @since 3.5 */ public PopulationHistoryIndexed getPopulations() { return null; } }