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

improve GendreauAlgo

This commit is contained in:
Stefan Schroeder 2013-08-05 18:38:54 +02:00
parent f25c9079dc
commit 07f6af9e56
5 changed files with 20 additions and 18 deletions

View file

@ -41,9 +41,9 @@ import basics.route.TourActivity.JobActivity;
import util.RandomNumberGeneration; import util.RandomNumberGeneration;
final class GendreauPostOpt implements SearchStrategyModule{ final class Gendreau implements SearchStrategyModule{
private final static Logger log = Logger.getLogger(GendreauPostOpt.class); private final static Logger log = Logger.getLogger(Gendreau.class);
private final static String NAME = "gendreauPostOpt"; private final static String NAME = "gendreauPostOpt";
@ -67,7 +67,7 @@ final class GendreauPostOpt implements SearchStrategyModule{
this.shareOfJobsToRuin = shareOfJobsToRuin; this.shareOfJobsToRuin = shareOfJobsToRuin;
} }
public GendreauPostOpt(VehicleRoutingProblem vrp, RuinStrategy ruin, AbstractInsertionStrategy insertionStrategy) { public Gendreau(VehicleRoutingProblem vrp, RuinStrategy ruin, AbstractInsertionStrategy insertionStrategy) {
super(); super();
this.routeAlgorithm = insertionStrategy.getRouteAlgorithm(); this.routeAlgorithm = insertionStrategy.getRouteAlgorithm();
this.ruin = ruin; this.ruin = ruin;
@ -77,7 +77,7 @@ final class GendreauPostOpt implements SearchStrategyModule{
@Override @Override
public String toString() { public String toString() {
return "[name=gendreauPostOpt][iterations="+nOfIterations+"][share2ruin="+shareOfJobsToRuin+"]"; return "[name=gendreau][iterations="+nOfIterations+"][share2ruin="+shareOfJobsToRuin+"]";
} }
public void setRandom(Random random) { public void setRandom(Random random) {

View file

@ -746,11 +746,11 @@ public class VehicleRoutingAlgorithms {
return module; return module;
} }
if(moduleName.equals("gendreauPostOpt")){ if(moduleName.equals("gendreau")){
int iterations = moduleConfig.getInt("iterations"); int iterations = moduleConfig.getInt("iterations");
double share = moduleConfig.getDouble("share"); double share = moduleConfig.getDouble("share");
String ruinName = moduleConfig.getString("ruin[@name]"); String ruinName = moduleConfig.getString("ruin[@name]");
if(ruinName == null) throw new IllegalStateException("gendreauPostOpt.ruin[@name] is missing. set it to \"radialRuin\" or \"randomRuin\""); if(ruinName == null) throw new IllegalStateException("gendreau.ruin[@name] is missing. set it to \"radialRuin\" or \"randomRuin\"");
String ruinId = moduleConfig.getString("ruin[@id]"); String ruinId = moduleConfig.getString("ruin[@id]");
if(ruinId == null) ruinId = "noId"; if(ruinId == null) ruinId = "noId";
ModKey ruinKey = makeKey(ruinName,ruinId); ModKey ruinKey = makeKey(ruinName,ruinId);
@ -762,7 +762,7 @@ public class VehicleRoutingAlgorithms {
} }
String insertionName = moduleConfig.getString("insertion[@name]"); String insertionName = moduleConfig.getString("insertion[@name]");
if(insertionName == null) throw new IllegalStateException("gendreauPostOpt.insertion[@name] is missing. set it to \"regretInsertion\" or \"bestInsertion\""); if(insertionName == null) throw new IllegalStateException("gendreau.insertion[@name] is missing. set it to \"regretInsertion\" or \"bestInsertion\"");
String insertionId = moduleConfig.getString("insertion[@id]"); String insertionId = moduleConfig.getString("insertion[@id]");
if(insertionId == null) insertionId = "noId"; if(insertionId == null) insertionId = "noId";
ModKey insertionKey = makeKey(insertionName,insertionId); ModKey insertionKey = makeKey(insertionName,insertionId);
@ -775,12 +775,12 @@ public class VehicleRoutingAlgorithms {
insertion = createInsertionStrategy(insertionConfigs.get(0), vrp, vehicleFleetManager, activityStates, prioListeners, executorService, nuOfThreads); insertion = createInsertionStrategy(insertionConfigs.get(0), vrp, vehicleFleetManager, activityStates, prioListeners, executorService, nuOfThreads);
algorithmListeners.addAll(prioListeners); algorithmListeners.addAll(prioListeners);
} }
GendreauPostOpt postOpt = new GendreauPostOpt(vrp, ruin, insertion); Gendreau gendreau = new Gendreau(vrp, ruin, insertion);
postOpt.setShareOfJobsToRuin(share); gendreau.setShareOfJobsToRuin(share);
postOpt.setNuOfIterations(iterations); gendreau.setNuOfIterations(iterations);
postOpt.setFleetManager(vehicleFleetManager); gendreau.setFleetManager(vehicleFleetManager);
definedClasses.put(strategyModuleKey, postOpt); definedClasses.put(strategyModuleKey, gendreau);
return postOpt; return gendreau;
} }
throw new NullPointerException("no module found with moduleName=" + moduleName + throw new NullPointerException("no module found with moduleName=" + moduleName +
"\n\tcheck config whether the correct names are used" + "\n\tcheck config whether the correct names are used" +

View file

@ -274,7 +274,7 @@ public class VrpXMLReader{
if(distC != null) typeBuilder.setCostPerDistance(distC); if(distC != null) typeBuilder.setCostPerDistance(distC);
// if(start != null && end != null) typeBuilder.setTimeSchedule(new TimeSchedule(start, end)); // if(start != null && end != null) typeBuilder.setTimeSchedule(new TimeSchedule(start, end));
VehicleTypeImpl type = typeBuilder.build(); VehicleTypeImpl type = typeBuilder.build();
types.put(type.typeId, type); types.put(type.getTypeId(), type);
vrpBuilder.addVehicleType(type); vrpBuilder.addVehicleType(type);
} }

View file

@ -166,14 +166,16 @@
<xs:group name="gendreau_group"> <xs:group name="gendreau_group">
<xs:sequence> <xs:sequence>
<xs:element name="itertions" type="xs:integer"/> <xs:element name="iterations" type="xs:integer"/>
<xs:element name="share" type="xs:double"/> <xs:element name="share" type="xs:double"/>
<xs:element name="ruin" type="ruinType"/>
<xs:element name="insertion" type="insertionType"/>
</xs:sequence> </xs:sequence>
</xs:group> </xs:group>
<xs:complexType name="ruinType"> <xs:complexType name="ruinType">
<xs:sequence> <xs:sequence>
<xs:element name="share" minOccurs="1" maxOccurs="1"> <xs:element name="share" minOccurs="0" maxOccurs="1">
<xs:simpleType> <xs:simpleType>
<xs:restriction base="xs:double"> <xs:restriction base="xs:double">
<xs:minInclusive value="0.0"/> <xs:minInclusive value="0.0"/>

View file

@ -204,7 +204,7 @@ public class GendreauPostOptTest {
RuinRadial radialRuin = RuinRadial.newInstance(vrp, 0.2, new JobDistanceAvgCosts(vrp.getTransportCosts()), new JobRemoverImpl(), updater); RuinRadial radialRuin = RuinRadial.newInstance(vrp, 0.2, new JobDistanceAvgCosts(vrp.getTransportCosts()), new JobRemoverImpl(), updater);
AbstractInsertionStrategy insertionStrategy = new BestInsertion(routeAlgorithm); AbstractInsertionStrategy insertionStrategy = new BestInsertion(routeAlgorithm);
GendreauPostOpt postOpt = new GendreauPostOpt(vrp, radialRuin, insertionStrategy); Gendreau postOpt = new Gendreau(vrp, radialRuin, insertionStrategy);
postOpt.setFleetManager(fleetManager); postOpt.setFleetManager(fleetManager);
VehicleRoutingProblemSolution newSolution = postOpt.runAndGetSolution(sol); VehicleRoutingProblemSolution newSolution = postOpt.runAndGetSolution(sol);
@ -245,7 +245,7 @@ public class GendreauPostOptTest {
RuinRadial radialRuin = RuinRadial.newInstance(vrp, 0.2, new JobDistanceAvgCosts(vrp.getTransportCosts()), new JobRemoverImpl(), updater); RuinRadial radialRuin = RuinRadial.newInstance(vrp, 0.2, new JobDistanceAvgCosts(vrp.getTransportCosts()), new JobRemoverImpl(), updater);
AbstractInsertionStrategy insertionStrategy = new BestInsertion(routeAlgorithm); AbstractInsertionStrategy insertionStrategy = new BestInsertion(routeAlgorithm);
GendreauPostOpt postOpt = new GendreauPostOpt(vrp, radialRuin, insertionStrategy); Gendreau postOpt = new Gendreau(vrp, radialRuin, insertionStrategy);
postOpt.setShareOfJobsToRuin(1.0); postOpt.setShareOfJobsToRuin(1.0);
postOpt.setNuOfIterations(1); postOpt.setNuOfIterations(1);
postOpt.setFleetManager(fleetManager); postOpt.setFleetManager(fleetManager);