mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
refactor ruin share
This commit is contained in:
parent
44d0efdd54
commit
fd62578890
4 changed files with 60 additions and 29 deletions
|
|
@ -41,6 +41,16 @@ public abstract class AbstractRuinStrategy implements RuinStrategy{
|
|||
ruinListeners = new RuinListeners();
|
||||
}
|
||||
|
||||
protected RuinShareFactory ruinShareFactory;
|
||||
|
||||
public void setRuinShareFactory(RuinShareFactory ruinShareFactory){
|
||||
this.ruinShareFactory = ruinShareFactory;
|
||||
}
|
||||
|
||||
public RuinShareFactory getRuinShareFactory(){
|
||||
return ruinShareFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Job> ruin(Collection<VehicleRoute> vehicleRoutes){
|
||||
ruinListeners.ruinStarts(vehicleRoutes);
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ import java.util.*;
|
|||
* @author stefan
|
||||
*
|
||||
*/
|
||||
final class RuinRadial extends AbstractRuinStrategy {
|
||||
public final class RuinRadial extends AbstractRuinStrategy {
|
||||
|
||||
static interface JobNeighborhoods {
|
||||
|
||||
|
|
@ -254,6 +254,7 @@ final class RuinRadial extends AbstractRuinStrategy {
|
|||
|
||||
private JobNeighborhoods jobNeighborhoods;
|
||||
|
||||
private final int noJobsToMemorize;
|
||||
|
||||
/**
|
||||
* Constructs RuinRadial.
|
||||
|
|
@ -266,16 +267,43 @@ final class RuinRadial extends AbstractRuinStrategy {
|
|||
super();
|
||||
this.vrp = vrp;
|
||||
this.fractionOfAllNodes2beRuined = fraction2beRemoved;
|
||||
int nJobsToMemorize = (int) Math.ceil(vrp.getJobs().values().size()*fraction2beRemoved);
|
||||
JobNeighborhoodsImplWithCapRestriction jobNeighborhoodsImpl = new JobNeighborhoodsImplWithCapRestriction(vrp, jobDistance, nJobsToMemorize);
|
||||
noJobsToMemorize = (int) Math.ceil(vrp.getJobs().values().size()*fraction2beRemoved);
|
||||
ruinShareFactory = new RuinShareFactory() {
|
||||
|
||||
@Override
|
||||
public int createNumberToBeRemoved() {
|
||||
return noJobsToMemorize;
|
||||
}
|
||||
|
||||
};
|
||||
JobNeighborhoodsImplWithCapRestriction jobNeighborhoodsImpl = new JobNeighborhoodsImplWithCapRestriction(vrp, jobDistance, noJobsToMemorize);
|
||||
jobNeighborhoodsImpl.initialise();
|
||||
jobNeighborhoods = jobNeighborhoodsImpl;
|
||||
logger.info("intialise " + this);
|
||||
logger.info("initialise " + this);
|
||||
}
|
||||
|
||||
public RuinRadial(VehicleRoutingProblem vrp, int noJobs2beRemoved, JobDistance jobDistance) {
|
||||
super();
|
||||
this.vrp = vrp;
|
||||
// this.fractionOfAllNodes2beRuined = fraction2beRemoved;
|
||||
noJobsToMemorize = noJobs2beRemoved;
|
||||
ruinShareFactory = new RuinShareFactory() {
|
||||
|
||||
@Override
|
||||
public int createNumberToBeRemoved() {
|
||||
return noJobsToMemorize;
|
||||
}
|
||||
|
||||
};
|
||||
JobNeighborhoodsImplWithCapRestriction jobNeighborhoodsImpl = new JobNeighborhoodsImplWithCapRestriction(vrp, jobDistance, noJobsToMemorize);
|
||||
jobNeighborhoodsImpl.initialise();
|
||||
jobNeighborhoods = jobNeighborhoodsImpl;
|
||||
logger.info("initialise " + this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "[name=radialRuin][fraction="+fractionOfAllNodes2beRuined+"]";
|
||||
return "[name=radialRuin][noJobsToBeRemoved="+noJobsToMemorize+"]";
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -287,7 +315,7 @@ final class RuinRadial extends AbstractRuinStrategy {
|
|||
if(vehicleRoutes.isEmpty()){
|
||||
return Collections.emptyList();
|
||||
}
|
||||
int nOfJobs2BeRemoved = getNuOfJobs2BeRemoved();
|
||||
int nOfJobs2BeRemoved = Math.min(ruinShareFactory.createNumberToBeRemoved(), noJobsToMemorize);
|
||||
if (nOfJobs2BeRemoved == 0) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
|
@ -320,10 +348,4 @@ final class RuinRadial extends AbstractRuinStrategy {
|
|||
return new ArrayList<Job>(vrp.getJobs().values()).get(randomIndex);
|
||||
}
|
||||
|
||||
private int getNuOfJobs2BeRemoved() {
|
||||
return (int) Math.ceil(vrp.getJobs().values().size()
|
||||
* fractionOfAllNodes2beRuined);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ import java.util.List;
|
|||
*
|
||||
*/
|
||||
|
||||
final class RuinRandom extends AbstractRuinStrategy {
|
||||
public final class RuinRandom extends AbstractRuinStrategy {
|
||||
|
||||
private Logger logger = LogManager.getLogger(RuinRandom.class);
|
||||
|
||||
|
|
@ -54,6 +54,12 @@ final class RuinRandom extends AbstractRuinStrategy {
|
|||
super();
|
||||
this.vrp = vrp;
|
||||
this.fractionOfAllNodes2beRuined = fraction;
|
||||
setRuinShareFactory(new RuinShareFactory() {
|
||||
@Override
|
||||
public int createNumberToBeRemoved() {
|
||||
return selectNuOfJobs2BeRemoved();
|
||||
}
|
||||
});
|
||||
logger.info("initialise " + this);
|
||||
logger.info("done");
|
||||
}
|
||||
|
|
@ -66,7 +72,7 @@ final class RuinRandom extends AbstractRuinStrategy {
|
|||
@Override
|
||||
public Collection<Job> ruinRoutes(Collection<VehicleRoute> vehicleRoutes) {
|
||||
List<Job> unassignedJobs = new ArrayList<Job>();
|
||||
int nOfJobs2BeRemoved = selectNuOfJobs2BeRemoved();
|
||||
int nOfJobs2BeRemoved = getRuinShareFactory().createNumberToBeRemoved();
|
||||
ruin(vehicleRoutes, nOfJobs2BeRemoved, unassignedJobs);
|
||||
return unassignedJobs;
|
||||
}
|
||||
|
|
@ -77,20 +83,6 @@ final class RuinRandom extends AbstractRuinStrategy {
|
|||
@Override
|
||||
public Collection<Job> ruinRoutes(Collection<VehicleRoute> vehicleRoutes, Job targetJob, int nOfJobs2BeRemoved) {
|
||||
throw new IllegalStateException("not supported");
|
||||
// List<Job> unassignedJobs = new ArrayList<Job>();
|
||||
// if(targetJob != null){
|
||||
// boolean removed = false;
|
||||
// for (VehicleRoute route : vehicleRoutes) {
|
||||
// removed = removeJob(targetJob,route);
|
||||
// if (removed) {
|
||||
// nOfJobs2BeRemoved--;
|
||||
// unassignedJobs.add(targetJob);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// ruin(vehicleRoutes, nOfJobs2BeRemoved, unassignedJobs);
|
||||
// return unassignedJobs;
|
||||
}
|
||||
|
||||
public void setRuinFraction(double fractionOfAllNodes2beRuined) {
|
||||
|
|
@ -111,7 +103,7 @@ final class RuinRandom extends AbstractRuinStrategy {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "[name=randomRuin][fraction="+fractionOfAllNodes2beRuined+"]";
|
||||
return "[name=randomRuin][noJobsToBeRemoved="+selectNuOfJobs2BeRemoved()+"]";
|
||||
}
|
||||
|
||||
private Job pickRandomJob(LinkedList<Job> availableJobs) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
package jsprit.core.algorithm.ruin;
|
||||
|
||||
public interface RuinShareFactory {
|
||||
|
||||
public int createNumberToBeRemoved();
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue