1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

refactor RuinRadial and RuinRandom

This commit is contained in:
oblonski 2013-08-12 00:24:42 +02:00
parent e2ab285d01
commit d9391c6d45
3 changed files with 28 additions and 31 deletions

View file

@ -29,8 +29,6 @@ import util.RandomNumberGeneration;
import util.StopWatch;
import basics.Job;
import basics.VehicleRoutingProblem;
import basics.VehicleRoutingProblemSolution;
import basics.algo.SearchStrategyModule;
import basics.route.VehicleRoute;
@ -49,7 +47,7 @@ final class RuinRadial implements RuinStrategy {
* @return
*/
static RuinRadial newInstance(VehicleRoutingProblem vrp, double fraction, JobDistance jobDistance, JobRemover jobRemover, VehicleRouteUpdater routeUpdater){
return new RuinRadial(vrp, fraction, jobDistance, jobRemover, routeUpdater);
return new RuinRadial(vrp, fraction, jobDistance);
}
@ -92,12 +90,10 @@ final class RuinRadial implements RuinStrategy {
this.random = random;
}
public RuinRadial(VehicleRoutingProblem vrp, double fraction, JobDistance jobDistance, JobRemover jobRemover, VehicleRouteUpdater routeUpdater) {
public RuinRadial(VehicleRoutingProblem vrp, double fraction, JobDistance jobDistance) {
super();
this.vrp = vrp;
this.jobDistance = jobDistance;
this.jobRemover = jobRemover;
this.routeUpdater = routeUpdater;
this.fractionOfAllNodes2beRuined = fraction;
calculateDistancesFromJob2Job();
logger.info("intialise " + this);

View file

@ -37,7 +37,7 @@ import basics.route.VehicleRoute;
final class RuinRandom implements RuinStrategy {
public static RuinRandom newInstance(VehicleRoutingProblem vrp, double fraction, JobRemover jobRemover, VehicleRouteUpdater routeUpdater){
return new RuinRandom(vrp, fraction, jobRemover, routeUpdater);
return new RuinRandom(vrp, fraction);
}
private Logger logger = Logger.getLogger(RuinRandom.class);
@ -48,10 +48,6 @@ final class RuinRandom implements RuinStrategy {
private Random random = RandomNumberGeneration.getRandom();
private JobRemover jobRemover;
private VehicleRouteUpdater vehicleRouteUpdater;
public void setRandom(Random random) {
this.random = random;
}
@ -61,14 +57,10 @@ final class RuinRandom implements RuinStrategy {
*
* @param vrp
* @param fraction which is the fraction of total c
* @param jobRemover
* @param vehicleRouteUpdater
*/
public RuinRandom(VehicleRoutingProblem vrp, double fraction, JobRemover jobRemover, VehicleRouteUpdater vehicleRouteUpdater) {
public RuinRandom(VehicleRoutingProblem vrp, double fraction) {
super();
this.vrp = vrp;
this.jobRemover = jobRemover;
this.vehicleRouteUpdater = vehicleRouteUpdater;
this.fractionOfAllNodes2beRuined = fraction;
logger.info("initialise " + this);
logger.info("done");
@ -81,9 +73,11 @@ final class RuinRandom implements RuinStrategy {
*/
@Override
public Collection<Job> ruin(Collection<VehicleRoute> vehicleRoutes) {
List<Job> unassignedJobs = new ArrayList<Job>();
int nOfJobs2BeRemoved = selectNuOfJobs2BeRemoved();
ruin(vehicleRoutes, nOfJobs2BeRemoved, unassignedJobs);
return unassignedJobs;
}
@ -92,19 +86,22 @@ final class RuinRandom implements RuinStrategy {
*/
@Override
public Collection<Job> ruin(Collection<VehicleRoute> vehicleRoutes, Job targetJob, int nOfJobs2BeRemoved) {
ruinStarts(vehicleRoutes);
List<Job> unassignedJobs = new ArrayList<Job>();
if(targetJob != null){
boolean removed = false;
for (VehicleRoute route : vehicleRoutes) {
removed = jobRemover.removeJobWithoutTourUpdate(targetJob, route);
removed = route.getTourActivities().removeJob(targetJob);
if (removed) {
nOfJobs2BeRemoved--;
unassignedJobs.add(targetJob);
jobRemoved(targetJob,route);
break;
}
}
}
ruin(vehicleRoutes, nOfJobs2BeRemoved, unassignedJobs);
ruinEnds(vehicleRoutes);
return unassignedJobs;
}
@ -120,19 +117,29 @@ final class RuinRandom implements RuinStrategy {
unassignedJobs.add(job);
availableJobs.remove(job);
for (VehicleRoute route : vehicleRoutes) {
boolean removed = jobRemover.removeJobWithoutTourUpdate(job, route);
if (removed) break;
boolean removed = route.getTourActivities().removeJob(job);
if (removed) {
jobRemoved(job,route);
break;
}
}
updateRoutes(vehicleRoutes);
}
private void updateRoutes(Collection<VehicleRoute> vehicleRoutes) {
for(VehicleRoute route : vehicleRoutes){
vehicleRouteUpdater.updateRoute(route);
}
}
private void ruinEnds(Collection<VehicleRoute> vehicleRoutes) {
// TODO Auto-generated method stub
}
private void ruinStarts(Collection<VehicleRoute> vehicleRoutes) {
// TODO Auto-generated method stub
}
private void jobRemoved(Job job, VehicleRoute route) {
// TODO Auto-generated method stub
}
@Override
public String toString() {

View file

@ -76,15 +76,9 @@ public class TourActivities {
}
private final ArrayList<TourActivity> tourActivities = new ArrayList<TourActivity>();
// private final LinkedList<TourActivity> tourActivities = new LinkedList<TourActivity>();
// private final TreeList tourActivities = new TreeList();
private final Set<Job> jobs = new HashSet<Job>();
private int load = 0;
private double cost = 0.0;
private ReverseActivityIterator backward;
private TourActivities(TourActivities tour2copy) {
@ -125,7 +119,7 @@ public class TourActivities {
}
/**
* Removes job AND belonging activity from tour.
* Removes job AND belonging activity from tour and returns true if job has been removed, otherwise false.
*
* @param job
* @return