/**
*
*/
package vroom.common.utilities.optimization;
/**
* <code>ImprovingAcceptanceCriterion</code> is an implementation of {@link IAcceptanceCriterion} that only accepts
* solution improving the objective function
* <p>
* Creation date: 11 juil. 2010 - 19:54:07
*
* @author Victor Pillac, <a href="http://uniandes.edu.co">Universidad de Los Andes</a>-<a
* href="http://copa.uniandes.edu.co">Copa</a> <a href="http://www.emn.fr">Ecole des Mines de Nantes</a>-<a
* href="http://www.irccyn.ec-nantes.fr/irccyn/d/en/equipes/Slp">SLP</a>
* @version 1.0
*/
public class ImprovingAcceptanceCriterion implements IAcceptanceCriterion {
/** optimization sense **/
private final OptimizationSense mOptimizationSense;
/**
* Getter for optimization sense
*
* @return the optimization sense
*/
public OptimizationSense getOptimizationSense() {
return mOptimizationSense;
}
private boolean mAcceptTie = false;
/**
* Accept solutions with the same objective function (default value is <code>false</code>)
*
* @param acceptTie
*/
public void setAcceptTie(boolean acceptTie) {
mAcceptTie = acceptTie;
}
public ImprovingAcceptanceCriterion(OptimizationSense optimizationSense) {
super();
// if (optimizationSense == null)
// throw new IllegalArgumentException("Argument optimizationSense cannot be null");
mOptimizationSense = optimizationSense;
}
/*
* (non-Javadoc)
* @see
* vroom.common.utilities.optimization.IAcceptanceCriterion#accept(vroom.common.utilities.optimization.ISolution,
* vroom.common.utilities.optimization.ISolution)
*/
@Override
public boolean accept(ISolution oldSolution, ISolution newSolution) {
return mOptimizationSense
.isBetter(oldSolution.getObjectiveValue(), newSolution.getObjectiveValue(), mAcceptTie);
}
@Override
public void initialize() {
}
@Override
public void reset() {
}
@Override
public String toString() {
return this.getClass().getSimpleName();
}
@Override
public boolean accept(ISolution solution, IMove move) {
return accept(solution, null, move);
}
@Override
public boolean accept(ISolution solution, INeighborhood<?, ?> neighborhood, IMove move) {
return move.isImproving();
}
@Override
public double getImprovement(ISolution oldSolution, ISolution newSolution) {
return mOptimizationSense.getImprovement(oldSolution.getObjectiveValue(), newSolution.getObjectiveValue());
}
@Override
public ImprovingAcceptanceCriterion clone() {
ImprovingAcceptanceCriterion clone = new ImprovingAcceptanceCriterion(getOptimizationSense());
clone.setAcceptTie(mAcceptTie);
return clone;
}
}