/* Copyright 2009-2016 David Hadka
*
* This file is part of the MOEA Framework.
*
* The MOEA Framework is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* The MOEA Framework is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the MOEA Framework. If not, see <http://www.gnu.org/licenses/>.
*/
package org.moeaframework.util.progress;
import java.io.Serializable;
import org.moeaframework.Executor;
/**
* A progress report, including the percent complete, elapsed time, and
* remaining time. These reports are generated by {@link ProgressHelper}.
*/
public class ProgressEvent implements Serializable {
private static final long serialVersionUID = -1133068166971961110L;
/**
* The executor from which these progress reports originate.
*/
private final Executor executor;
/**
* The current seed being evaluated, starting at 1.
*/
private final int currentSeed;
/**
* The total number of seeds to be evaluated.
*/
private final int totalSeeds;
/**
* {@code true} if this event was created in response to a seed finishing;
* {@code false} otherwise. This indicates that new results are available
* in the executor.
*/
private final boolean isSeedFinished;
/**
* The current number of objective function evaluations for the current
* seed.
*/
private final int currentNFE;
/**
* The maximum number of objective function evaluations per seed.
*/
private final int maxNFE;
/**
* The percent complete as a fraction between {@code 0} and {@code 1}.
*/
private final double percentComplete;
/**
* The elapsed time in seconds.
*/
private final double elapsedTime;
/**
* The estimated remaining time in seconds.
*/
private final double remainingTime;
/**
* Constructs a new progress report with the given values.
*
* @param executor the executor from which these progress reports originate
* @param currentSeed the current seed being evaluated, starting at 1
* @param totalSeeds the total number of seeds to be evaluated
* @param isSeedFinished {@code true} if this event was created in response
* to a seed finishing; {@code false} otherwise
* @param currentNFE the current number of objective function evaluations
* for the current seed.
* @param maxNFE the maximum number of objective function evaluations per
* seed
* @param percentComplete the percent complete as a fraction between
* {@code 0} and {@code 1}
* @param elapsedTime the elapsed time in seconds
* @param remainingTime the estimated remaining time in seconds
*/
public ProgressEvent(Executor executor, int currentSeed, int totalSeeds,
boolean isSeedFinished, int currentNFE, int maxNFE,
double percentComplete, double elapsedTime, double remainingTime) {
super();
this.executor = executor;
this.currentSeed = currentSeed;
this.totalSeeds = totalSeeds;
this.isSeedFinished = isSeedFinished;
this.currentNFE = currentNFE;
this.maxNFE = maxNFE;
this.percentComplete = percentComplete;
this.elapsedTime = elapsedTime;
this.remainingTime = remainingTime;
}
/**
* Returns the executor from which these progress reports originate.
*
* @return the executor from which these progress reports originate
*/
public Executor getExecutor() {
return executor;
}
/**
* Returns the current seed being evaluated, starting at 1.
*
* @return the current seed being evaluated, starting at 1
*/
public int getCurrentSeed() {
return currentSeed;
}
/**
* Returns the total number of seeds to be evaluated.
*
* @return the total number of seeds to be evaluated
*/
public int getTotalSeeds() {
return totalSeeds;
}
/**
* Returns {@code true} if this event was created in response to a seed
* finishing; {@code false} otherwise. This indicates that new results are
* available in the executor.
*
* @return {@code true} if this event was created in response to a seed
* finishing; {@code false} otherwise
*/
public boolean isSeedFinished() {
return isSeedFinished;
}
/**
* Returns the current number of objective function evaluations for the
* current seed.
*
* @return the current number of objective function evaluations for the
* current seed
*/
public int getCurrentNFE() {
return currentNFE;
}
/**
* Returns the maximum number of objective function evaluations per seed.
*
* @return the maximum number of objective function evaluations per seed
*/
public int getMaxNFE() {
return maxNFE;
}
/**
* Returns the percent complete as a fraction between {@code 0} and
* {@code 1}.
*
* @return the percent complete as a fraction between {@code 0} and
* {@code 1}
*/
public double getPercentComplete() {
return percentComplete;
}
/**
* Returns the elapsed time in seconds.
*
* @return the elapsed time in seconds
*/
public double getElapsedTime() {
return elapsedTime;
}
/**
* Returns the estimated remaining time in seconds.
*
* @return the estimated remaining time in seconds
*/
public double getRemainingTime() {
return remainingTime;
}
}