/**
*
*/
package vroom.trsp.optimization.alns;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import umontreal.iro.lecuyer.rng.RandomPermutation;
import vroom.common.heuristics.alns.IDestroy;
import vroom.common.utilities.optimization.IInstance;
import vroom.common.utilities.optimization.IParameters;
import vroom.trsp.datamodel.TRSPSolution;
/**
* <code>DestroyRandom</code> is an implementation of {@link IDestroy} that randomly removes a given number of requests.
* <p>
* Creation date: May 13, 2011 - 1:35:09 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 DestroyRandom extends DestroyTRSP {
public DestroyRandom() {
super();
}
@Override
public void initialize(IInstance instance) {
// Do nothing
}
@Override
public Set<Integer> doDestroy(TRSPSolution solution, IParameters parameters, List<Integer> removableReq, int numReq) {
RandomPermutation.shuffle(removableReq, parameters.getRandomStream());
HashSet<Integer> remRequests = new HashSet<Integer>(numReq);
int remReq = 0;
int i = 0;
while (remReq < numReq && i < removableReq.size()) {
// Select a request to remove
int req = removableReq.get(i++);
// Remove the request from its tour
if (removeRequest(solution, req) != null) {
remReq++;
remRequests.add(req);
}
}
return remRequests;
}
@Override
public DestroyRandom clone() {
return new DestroyRandom();
}
@Override
public String toString() {
return getName();
}
@Override
public String getName() {
return "rnd";
};
}