/**
*
*/
package vroom.common.heuristics.vrp;
import vroom.common.heuristics.Move;
import vroom.common.modeling.dataModel.IVRPSolution;
/**
* <code>StringExchangeMove</code> is a generic representation of a string-exchange move
* <p>
* Creation date: Jul 8, 2010 - 3:31:40 PM
*
* @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 StringExchangeMove<S extends IVRPSolution<?>> extends Move {
public final S mSolution;
/** Index of the first route */
private final int mFirstRoute;
/** Index of the second route */
private final int mSecondRoute;
/** Index of the first node */
private final int mNodeI;
/** Index of the second node */
private final int mNodeJ;
/** Index of the third node */
private final int mNodeK;
/** Index of the fourth node */
private final int mNodeL;
/* (non-Javadoc)
* @see vroom.common.heuristics.Move#setImprovement(double)
*/
@Override
public void setImprovement(double improvement) {
super.setImprovement(improvement);
}
/**
* Getter for <code>solution</code>
*
* @return the solution
*/
public S getSolution() {
return mSolution;
}
/**
* Getter for <code>firstRoute</code>
*
* @return the firstRoute
*/
public int getFirstRoute() {
return mFirstRoute;
}
/**
* Getter for <code>secondRoute</code>
*
* @return the secondRoute
*/
public int getSecondRoute() {
return mSecondRoute;
}
/**
* Getter for <code>nodeI</code>
*
* @return the nodeI
*/
public int getNodeI() {
return mNodeI;
}
/**
* Getter for <code>nodeJ</code>
*
* @return the nodeJ
*/
public int getNodeJ() {
return mNodeJ;
}
/**
* Getter for <code>nodeK</code>
*
* @return the nodeK
*/
public int getNodeK() {
return mNodeK;
}
/**
* Getter for <code>nodeL</code>
*
* @return the nodeL
*/
public int getNodeL() {
return mNodeL;
}
/** <code>true</code> if the first string should be reversed */
private boolean reverseFirst = false;
/** <code>true</code> if the second string should be reversed */
private boolean reverseSecond = false;
/**
* Getter for <code>reverseFirst</code>
*
* @return the reverseFirst
*/
public boolean isReverseFirst() {
return reverseFirst;
}
/**
* Setter for <code>reverseFirst</code>
*
* @param reverseFirst
* the reverseFirst to set
*/
public void setReverseFirst(boolean reverseFirst) {
this.reverseFirst = reverseFirst;
}
/**
* Getter for <code>reverseSecond</code>
*
* @return the reverseSecond
*/
public boolean isReverseSecond() {
return reverseSecond;
}
/**
* Setter for <code>reverseSecond</code>
*
* @param reverseSecond
* the reverseSecond to set
*/
public void setReverseSecond(boolean reverseSecond) {
this.reverseSecond = reverseSecond;
}
/**
* Creates a new <code>StringExchangeMove</code>
*
* @param solution
* @param firstRoute
* @param secondRoute
* @param nodeI
* @param nodeJ
* @param nodeK
* @param nodeL
*/
public StringExchangeMove(S solution, int firstRoute, int secondRoute, int nodeI, int nodeJ, int nodeK, int nodeL) {
super(Double.NEGATIVE_INFINITY);
mSolution = solution;
mFirstRoute = firstRoute;
mSecondRoute = secondRoute;
mNodeI = nodeI;
mNodeJ = nodeJ;
mNodeK = nodeK;
mNodeL = nodeL;
}
/* (non-Javadoc)
* @see vroom.common.heuristics.Move#getMoveName()
*/
@Override
public String getMoveName() {
return "string-exchange";
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return String.format("%s(%s:[%s,%s],%s:[%s,%s],%.3f)", getMoveName(), getFirstRoute(), getNodeI(), getNodeJ(),
getSecondRoute(), getNodeK(), getNodeL(), getImprovement());
}
}