mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
internale experiments with insertionCalc
This commit is contained in:
parent
922f360fe4
commit
f7ff7aeeca
16 changed files with 1541 additions and 6 deletions
|
|
@ -214,7 +214,7 @@ class CalculatorBuilder {
|
|||
}
|
||||
|
||||
private CalculatorPlusListeners createStandardLocal(VehicleRoutingProblem vrp, StateManager activityStates2){
|
||||
MarginalsCalculus defaultCalc = new MarginalsCalculusDefault(vrp.getTransportCosts(), vrp.getActivityCosts(), new HardConstraints.HardTimeWindowConstraint(activityStates2) );
|
||||
MarginalsCalculus defaultCalc = new MarginalsCalculusTriangleInequality(vrp.getTransportCosts(), vrp.getActivityCosts(), new HardConstraints.HardTimeWindowConstraint(activityStates2) );
|
||||
JobInsertionCalculator standardServiceInsertion = new CalculatesServiceInsertion(defaultCalc, new HardConstraints.HardLoadConstraint(activityStates2));
|
||||
|
||||
((CalculatesServiceInsertion) standardServiceInsertion).setNeighborhood(vrp.getNeighborhood());
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@ import basics.costs.VehicleRoutingActivityCosts;
|
|||
import basics.costs.VehicleRoutingTransportCosts;
|
||||
import basics.route.TourActivity;
|
||||
|
||||
class MarginalsCalculusDefault implements MarginalsCalculus{
|
||||
class MarginalsCalculusTriangleInequality implements MarginalsCalculus{
|
||||
|
||||
private HardActivityLevelConstraint hardConstraint;
|
||||
|
||||
private VehicleRoutingTransportCosts routingCosts;
|
||||
private VehicleRoutingActivityCosts activityCosts;
|
||||
|
||||
public MarginalsCalculusDefault(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint) {
|
||||
public MarginalsCalculusTriangleInequality(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint) {
|
||||
super();
|
||||
this.routingCosts = routingCosts;
|
||||
this.activityCosts = actCosts;
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
package algorithms;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import util.RouteUtils;
|
||||
import algorithms.RuinStrategy.RuinListener;
|
||||
import basics.Job;
|
||||
import basics.VehicleRoutingProblemSolution;
|
||||
import basics.algo.InsertionListener;
|
||||
import basics.algo.SearchStrategyModule;
|
||||
import basics.algo.SearchStrategyModuleListener;
|
||||
|
||||
class RuinAndRecreateModule implements SearchStrategyModule{
|
||||
|
||||
private InsertionStrategy insertion;
|
||||
|
||||
private RuinStrategy ruin;
|
||||
|
||||
private String moduleName;
|
||||
|
||||
public RuinAndRecreateModule(String moduleName, InsertionStrategy insertion, RuinStrategy ruin) {
|
||||
super();
|
||||
this.insertion = insertion;
|
||||
this.ruin = ruin;
|
||||
this.moduleName = moduleName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VehicleRoutingProblemSolution runAndGetSolution(VehicleRoutingProblemSolution vrpSolution) {
|
||||
Collection<Job> ruinedJobs = ruin.ruin(vrpSolution.getRoutes());
|
||||
insertion.insertJobs(vrpSolution.getRoutes(), ruinedJobs);
|
||||
double totalCost = RouteUtils.getTotalCost(vrpSolution.getRoutes());
|
||||
vrpSolution.setCost(totalCost);
|
||||
return vrpSolution;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return moduleName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addModuleListener(SearchStrategyModuleListener moduleListener) {
|
||||
if(moduleListener instanceof InsertionListener){
|
||||
InsertionListener iListener = (InsertionListener) moduleListener;
|
||||
if(!insertion.getListeners().contains(iListener)){
|
||||
insertion.addListener(iListener);
|
||||
}
|
||||
}
|
||||
if(moduleListener instanceof RuinListener){
|
||||
RuinListener rListener = (RuinListener) moduleListener;
|
||||
if(!ruin.getListeners().contains(rListener)){
|
||||
ruin.addListener(rListener);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package algorithms;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import algorithms.RuinStrategy.RuinListener;
|
||||
import basics.Job;
|
||||
|
|
@ -30,4 +31,8 @@ class RuinListeners {
|
|||
void removeListener(RuinListener ruinListener){
|
||||
ruinListeners.remove(ruinListener);
|
||||
}
|
||||
|
||||
Collection<RuinListener> getListeners(){
|
||||
return Collections.unmodifiableCollection(ruinListeners);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -177,5 +177,15 @@ final class RuinRadial implements RuinStrategy {
|
|||
ruinListeners.addListener(ruinListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(RuinListener ruinListener) {
|
||||
ruinListeners.removeListener(ruinListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<RuinListener> getListeners() {
|
||||
return ruinListeners.getListeners();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -145,4 +145,14 @@ final class RuinRandom implements RuinStrategy {
|
|||
ruinListeners.addListener(ruinListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(RuinListener ruinListener) {
|
||||
ruinListeners.removeListener(ruinListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<RuinListener> getListeners() {
|
||||
return ruinListeners.getListeners();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,4 +82,8 @@ interface RuinStrategy {
|
|||
*/
|
||||
public void addListener(RuinListener ruinListener);
|
||||
|
||||
public void removeListener(RuinListener ruinListener);
|
||||
|
||||
public Collection<RuinListener> getListeners();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class UdateCostsAtRouteLevel implements JobInsertedListener, InsertionStartsList
|
|||
|
||||
@Override
|
||||
public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) {
|
||||
inRoute.getVehicleRouteCostCalculator().addTransportCost(additionalCosts);
|
||||
// inRoute.getVehicleRouteCostCalculator().addTransportCost(additionalCosts);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -0,0 +1,97 @@
|
|||
package algorithms;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import util.Solutions;
|
||||
|
||||
import algorithms.HardConstraints.HardActivityLevelConstraint;
|
||||
import algorithms.acceptors.AcceptNewIfBetterThanWorst;
|
||||
import algorithms.selectors.SelectBest;
|
||||
import basics.VehicleRoutingAlgorithm;
|
||||
import basics.VehicleRoutingProblem;
|
||||
import basics.VehicleRoutingProblemSolution;
|
||||
import basics.algo.IterationStartsListener;
|
||||
import basics.algo.SearchStrategy;
|
||||
import basics.algo.SearchStrategyManager;
|
||||
import basics.io.VrpXMLReader;
|
||||
import basics.route.TourActivity;
|
||||
|
||||
public class BuildFastCVRPAlgoTest {
|
||||
|
||||
VehicleRoutingProblem vrp;
|
||||
|
||||
VehicleRoutingAlgorithm vra;
|
||||
|
||||
@Before
|
||||
public void setup(){
|
||||
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
|
||||
new VrpXMLReader(builder).read("src/test/resources/vrpnc1-jsprit.xml");
|
||||
vrp = builder.build();
|
||||
|
||||
final StateManagerImpl stateManager = new StateManagerImpl();
|
||||
HardActivityLevelConstraint hardActLevelConstraint = new HardActivityLevelConstraint() {
|
||||
|
||||
@Override
|
||||
public boolean fulfilled(InsertionFacts iFacts, TourActivity act, double arrTime) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
MarginalsCalculus marginalCalculus = new MarginalsCalculusTriangleInequality(vrp.getTransportCosts(), vrp.getActivityCosts(), hardActLevelConstraint);
|
||||
CalculatesServiceInsertion serviceInsertion = new CalculatesServiceInsertion(marginalCalculus, new HardConstraints.HardLoadConstraint(stateManager));
|
||||
|
||||
VehicleFleetManager fleetManager = new InfiniteVehicles(vrp.getVehicles());
|
||||
JobInsertionCalculator finalServiceInsertion = new CalculatesVehTypeDepServiceInsertion(fleetManager, serviceInsertion);
|
||||
|
||||
// UpdateStates stateUpdater = new UpdateStates(stateManager, vrp.getTransportCosts(), vrp.getActivityCosts());
|
||||
|
||||
BestInsertion bestInsertion = new BestInsertion(finalServiceInsertion);
|
||||
|
||||
RuinRadial radial = new RuinRadial(vrp, 0.3, new JobDistanceAvgCosts(vrp.getTransportCosts()));
|
||||
RuinRandom random = new RuinRandom(vrp, 0.5);
|
||||
|
||||
SearchStrategy randomStrategy = new SearchStrategy(new SelectBest(), new AcceptNewIfBetterThanWorst(1));
|
||||
RuinAndRecreateModule randomModule = new RuinAndRecreateModule("randomRuin_bestInsertion", bestInsertion, random);
|
||||
randomStrategy.addModule(randomModule);
|
||||
|
||||
SearchStrategy radialStrategy = new SearchStrategy(new SelectBest(), new AcceptNewIfBetterThanWorst(1));
|
||||
RuinAndRecreateModule radialModule = new RuinAndRecreateModule("radialRuin_bestInsertion", bestInsertion, radial);
|
||||
radialStrategy.addModule(radialModule);
|
||||
|
||||
SearchStrategyManager strategyManager = new SearchStrategyManager();
|
||||
strategyManager.addStrategy(radialStrategy, 0.5);
|
||||
strategyManager.addStrategy(randomStrategy, 0.5);
|
||||
|
||||
vra = new VehicleRoutingAlgorithm(vrp, strategyManager);
|
||||
|
||||
//listeners
|
||||
IterationStartsListener clearStateManager = new IterationStartsListener() {
|
||||
|
||||
@Override
|
||||
public void informIterationStarts(int i, VehicleRoutingProblem problem, Collection<VehicleRoutingProblemSolution> solutions) {
|
||||
stateManager.clear();
|
||||
}
|
||||
};
|
||||
vra.getAlgorithmListeners().addListener(clearStateManager);
|
||||
vra.getSearchStrategyManager().addSearchStrategyModuleListener(new RemoveEmptyVehicles(fleetManager));
|
||||
|
||||
vra.getSearchStrategyManager().addSearchStrategyModuleListener(new UdateCostsAtRouteLevel(stateManager, vrp.getTransportCosts(), vrp.getActivityCosts()));
|
||||
vra.getSearchStrategyManager().addSearchStrategyModuleListener(new UpdateLoadAtRouteLevel(stateManager));
|
||||
|
||||
VehicleRoutingProblemSolution iniSolution = new CreateInitialSolution(bestInsertion).createInitialSolution(vrp);
|
||||
System.out.println("ini: costs="+iniSolution.getCost()+";#routes="+iniSolution.getRoutes().size());
|
||||
vra.addInitialSolution(iniSolution);
|
||||
|
||||
vra.setNuOfIterations(1000);
|
||||
vra.setPrematureBreak(200);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testVRA(){
|
||||
Collection<VehicleRoutingProblemSolution> solutions = vra.searchSolutions();
|
||||
System.out.println("costs="+Solutions.getBest(solutions).getCost()+";#routes="+Solutions.getBest(solutions).getRoutes().size());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -151,7 +151,7 @@ public class GendreauPostOptTest {
|
|||
|
||||
activityCosts = new ExampleActivityCostFunction();
|
||||
|
||||
CalculatesServiceInsertion standardServiceInsertion = new CalculatesServiceInsertion(new MarginalsCalculusDefault(cost, activityCosts, new HardConstraints.HardTimeWindowConstraint(states)), new HardConstraints.HardLoadConstraint(states));
|
||||
CalculatesServiceInsertion standardServiceInsertion = new CalculatesServiceInsertion(new MarginalsCalculusTriangleInequality(cost, activityCosts, new HardConstraints.HardTimeWindowConstraint(states)), new HardConstraints.HardLoadConstraint(states));
|
||||
|
||||
CalculatesServiceInsertionConsideringFixCost withFixCost = new CalculatesServiceInsertionConsideringFixCost(standardServiceInsertion, states);
|
||||
withFixCost.setWeightOfFixCost(1.2);
|
||||
|
|
|
|||
|
|
@ -176,6 +176,18 @@ public class TestAlgorithmReader {
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(RuinListener ruinListener) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<RuinListener> getListeners() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
StrategyModuleKey moduleKey = new StrategyModuleKey(key);
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ public class TestCalculatesServiceInsertion {
|
|||
|
||||
ExampleActivityCostFunction activityCosts = new ExampleActivityCostFunction();
|
||||
|
||||
serviceInsertion = new CalculatesServiceInsertion(new MarginalsCalculusDefault(costs, activityCosts, new HardConstraints.HardTimeWindowConstraint(states)), new HardConstraints.HardLoadConstraint(states));
|
||||
serviceInsertion = new CalculatesServiceInsertion(new MarginalsCalculusTriangleInequality(costs, activityCosts, new HardConstraints.HardTimeWindowConstraint(states)), new HardConstraints.HardLoadConstraint(states));
|
||||
|
||||
stateUpdater = new UpdateStates(states, costs, activityCosts);
|
||||
|
||||
|
|
|
|||
635
jsprit-core/src/test/resources/vrpnc1-jsprit.xml
Normal file
635
jsprit-core/src/test/resources/vrpnc1-jsprit.xml
Normal file
|
|
@ -0,0 +1,635 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<problem xmlns="http://www.w3schools.com"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com vrp_xml_schema.xsd">
|
||||
<problemType>
|
||||
<fleetSize>INFINITE</fleetSize>
|
||||
<fleetComposition>HOMOGENEOUS</fleetComposition>
|
||||
</problemType>
|
||||
<vehicles>
|
||||
<vehicle>
|
||||
<id>christophidesVehicle</id>
|
||||
<typeId>christophidesType</typeId>
|
||||
<location>
|
||||
<id>[x=30.0][y=40.0]</id>
|
||||
<coord x="30.0" y="40.0"/>
|
||||
</location>
|
||||
<timeSchedule>
|
||||
<start>0.0</start>
|
||||
<end>999999.0</end>
|
||||
</timeSchedule>
|
||||
</vehicle>
|
||||
</vehicles>
|
||||
<vehicleTypes>
|
||||
<type>
|
||||
<id>christophidesType</id>
|
||||
<capacity>160</capacity>
|
||||
<costs>
|
||||
<fixed>0.0</fixed>
|
||||
<distance>1.0</distance>
|
||||
<time>0.0</time>
|
||||
</costs>
|
||||
</type>
|
||||
</vehicleTypes>
|
||||
<services>
|
||||
<service id="35" type="service">
|
||||
<locationId>[x=62.0][y=63.0]</locationId>
|
||||
<coord x="62.0" y="63.0"/>
|
||||
<capacity-demand>17</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="36" type="service">
|
||||
<locationId>[x=63.0][y=69.0]</locationId>
|
||||
<coord x="63.0" y="69.0"/>
|
||||
<capacity-demand>6</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="33" type="service">
|
||||
<locationId>[x=46.0][y=10.0]</locationId>
|
||||
<coord x="46.0" y="10.0"/>
|
||||
<capacity-demand>23</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="34" type="service">
|
||||
<locationId>[x=61.0][y=33.0]</locationId>
|
||||
<coord x="61.0" y="33.0"/>
|
||||
<capacity-demand>26</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="39" type="service">
|
||||
<locationId>[x=59.0][y=15.0]</locationId>
|
||||
<coord x="59.0" y="15.0"/>
|
||||
<capacity-demand>14</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="37" type="service">
|
||||
<locationId>[x=32.0][y=22.0]</locationId>
|
||||
<coord x="32.0" y="22.0"/>
|
||||
<capacity-demand>9</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="38" type="service">
|
||||
<locationId>[x=45.0][y=35.0]</locationId>
|
||||
<coord x="45.0" y="35.0"/>
|
||||
<capacity-demand>15</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="43" type="service">
|
||||
<locationId>[x=5.0][y=64.0]</locationId>
|
||||
<coord x="5.0" y="64.0"/>
|
||||
<capacity-demand>11</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="42" type="service">
|
||||
<locationId>[x=21.0][y=10.0]</locationId>
|
||||
<coord x="21.0" y="10.0"/>
|
||||
<capacity-demand>13</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="41" type="service">
|
||||
<locationId>[x=10.0][y=17.0]</locationId>
|
||||
<coord x="10.0" y="17.0"/>
|
||||
<capacity-demand>27</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="40" type="service">
|
||||
<locationId>[x=5.0][y=6.0]</locationId>
|
||||
<coord x="5.0" y="6.0"/>
|
||||
<capacity-demand>7</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="22" type="service">
|
||||
<locationId>[x=42.0][y=57.0]</locationId>
|
||||
<coord x="42.0" y="57.0"/>
|
||||
<capacity-demand>8</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="23" type="service">
|
||||
<locationId>[x=16.0][y=57.0]</locationId>
|
||||
<coord x="16.0" y="57.0"/>
|
||||
<capacity-demand>16</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="24" type="service">
|
||||
<locationId>[x=8.0][y=52.0]</locationId>
|
||||
<coord x="8.0" y="52.0"/>
|
||||
<capacity-demand>10</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="25" type="service">
|
||||
<locationId>[x=7.0][y=38.0]</locationId>
|
||||
<coord x="7.0" y="38.0"/>
|
||||
<capacity-demand>28</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="26" type="service">
|
||||
<locationId>[x=27.0][y=68.0]</locationId>
|
||||
<coord x="27.0" y="68.0"/>
|
||||
<capacity-demand>7</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="27" type="service">
|
||||
<locationId>[x=30.0][y=48.0]</locationId>
|
||||
<coord x="30.0" y="48.0"/>
|
||||
<capacity-demand>15</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="28" type="service">
|
||||
<locationId>[x=43.0][y=67.0]</locationId>
|
||||
<coord x="43.0" y="67.0"/>
|
||||
<capacity-demand>14</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="29" type="service">
|
||||
<locationId>[x=58.0][y=48.0]</locationId>
|
||||
<coord x="58.0" y="48.0"/>
|
||||
<capacity-demand>6</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="3" type="service">
|
||||
<locationId>[x=52.0][y=64.0]</locationId>
|
||||
<coord x="52.0" y="64.0"/>
|
||||
<capacity-demand>16</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="2" type="service">
|
||||
<locationId>[x=49.0][y=49.0]</locationId>
|
||||
<coord x="49.0" y="49.0"/>
|
||||
<capacity-demand>30</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="1" type="service">
|
||||
<locationId>[x=37.0][y=52.0]</locationId>
|
||||
<coord x="37.0" y="52.0"/>
|
||||
<capacity-demand>7</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="7" type="service">
|
||||
<locationId>[x=17.0][y=63.0]</locationId>
|
||||
<coord x="17.0" y="63.0"/>
|
||||
<capacity-demand>19</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="30" type="service">
|
||||
<locationId>[x=58.0][y=27.0]</locationId>
|
||||
<coord x="58.0" y="27.0"/>
|
||||
<capacity-demand>19</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="6" type="service">
|
||||
<locationId>[x=21.0][y=47.0]</locationId>
|
||||
<coord x="21.0" y="47.0"/>
|
||||
<capacity-demand>15</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="5" type="service">
|
||||
<locationId>[x=40.0][y=30.0]</locationId>
|
||||
<coord x="40.0" y="30.0"/>
|
||||
<capacity-demand>21</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="32" type="service">
|
||||
<locationId>[x=38.0][y=46.0]</locationId>
|
||||
<coord x="38.0" y="46.0"/>
|
||||
<capacity-demand>12</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="4" type="service">
|
||||
<locationId>[x=20.0][y=26.0]</locationId>
|
||||
<coord x="20.0" y="26.0"/>
|
||||
<capacity-demand>9</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="31" type="service">
|
||||
<locationId>[x=37.0][y=69.0]</locationId>
|
||||
<coord x="37.0" y="69.0"/>
|
||||
<capacity-demand>11</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="9" type="service">
|
||||
<locationId>[x=52.0][y=33.0]</locationId>
|
||||
<coord x="52.0" y="33.0"/>
|
||||
<capacity-demand>11</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="8" type="service">
|
||||
<locationId>[x=31.0][y=62.0]</locationId>
|
||||
<coord x="31.0" y="62.0"/>
|
||||
<capacity-demand>23</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="19" type="service">
|
||||
<locationId>[x=13.0][y=13.0]</locationId>
|
||||
<coord x="13.0" y="13.0"/>
|
||||
<capacity-demand>9</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="17" type="service">
|
||||
<locationId>[x=27.0][y=23.0]</locationId>
|
||||
<coord x="27.0" y="23.0"/>
|
||||
<capacity-demand>3</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="18" type="service">
|
||||
<locationId>[x=17.0][y=33.0]</locationId>
|
||||
<coord x="17.0" y="33.0"/>
|
||||
<capacity-demand>41</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="15" type="service">
|
||||
<locationId>[x=36.0][y=16.0]</locationId>
|
||||
<coord x="36.0" y="16.0"/>
|
||||
<capacity-demand>10</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="16" type="service">
|
||||
<locationId>[x=52.0][y=41.0]</locationId>
|
||||
<coord x="52.0" y="41.0"/>
|
||||
<capacity-demand>15</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="13" type="service">
|
||||
<locationId>[x=5.0][y=25.0]</locationId>
|
||||
<coord x="5.0" y="25.0"/>
|
||||
<capacity-demand>23</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="14" type="service">
|
||||
<locationId>[x=12.0][y=42.0]</locationId>
|
||||
<coord x="12.0" y="42.0"/>
|
||||
<capacity-demand>21</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="11" type="service">
|
||||
<locationId>[x=42.0][y=41.0]</locationId>
|
||||
<coord x="42.0" y="41.0"/>
|
||||
<capacity-demand>19</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="12" type="service">
|
||||
<locationId>[x=31.0][y=32.0]</locationId>
|
||||
<coord x="31.0" y="32.0"/>
|
||||
<capacity-demand>29</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="21" type="service">
|
||||
<locationId>[x=62.0][y=42.0]</locationId>
|
||||
<coord x="62.0" y="42.0"/>
|
||||
<capacity-demand>8</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="20" type="service">
|
||||
<locationId>[x=57.0][y=58.0]</locationId>
|
||||
<coord x="57.0" y="58.0"/>
|
||||
<capacity-demand>28</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="49" type="service">
|
||||
<locationId>[x=48.0][y=28.0]</locationId>
|
||||
<coord x="48.0" y="28.0"/>
|
||||
<capacity-demand>18</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="48" type="service">
|
||||
<locationId>[x=25.0][y=55.0]</locationId>
|
||||
<coord x="25.0" y="55.0"/>
|
||||
<capacity-demand>17</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="45" type="service">
|
||||
<locationId>[x=39.0][y=10.0]</locationId>
|
||||
<coord x="39.0" y="10.0"/>
|
||||
<capacity-demand>10</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="44" type="service">
|
||||
<locationId>[x=30.0][y=15.0]</locationId>
|
||||
<coord x="30.0" y="15.0"/>
|
||||
<capacity-demand>16</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="47" type="service">
|
||||
<locationId>[x=25.0][y=32.0]</locationId>
|
||||
<coord x="25.0" y="32.0"/>
|
||||
<capacity-demand>25</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="46" type="service">
|
||||
<locationId>[x=32.0][y=39.0]</locationId>
|
||||
<coord x="32.0" y="39.0"/>
|
||||
<capacity-demand>5</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="10" type="service">
|
||||
<locationId>[x=51.0][y=21.0]</locationId>
|
||||
<coord x="51.0" y="21.0"/>
|
||||
<capacity-demand>5</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="50" type="service">
|
||||
<locationId>[x=56.0][y=37.0]</locationId>
|
||||
<coord x="56.0" y="37.0"/>
|
||||
<capacity-demand>10</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
</services>
|
||||
</problem>
|
||||
635
jsprit-examples/input/vrpnc1-jsprit.xml
Normal file
635
jsprit-examples/input/vrpnc1-jsprit.xml
Normal file
|
|
@ -0,0 +1,635 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<problem xmlns="http://www.w3schools.com"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com vrp_xml_schema.xsd">
|
||||
<problemType>
|
||||
<fleetSize>INFINITE</fleetSize>
|
||||
<fleetComposition>HOMOGENEOUS</fleetComposition>
|
||||
</problemType>
|
||||
<vehicles>
|
||||
<vehicle>
|
||||
<id>christophidesVehicle</id>
|
||||
<typeId>christophidesType</typeId>
|
||||
<location>
|
||||
<id>[x=30.0][y=40.0]</id>
|
||||
<coord x="30.0" y="40.0"/>
|
||||
</location>
|
||||
<timeSchedule>
|
||||
<start>0.0</start>
|
||||
<end>999999.0</end>
|
||||
</timeSchedule>
|
||||
</vehicle>
|
||||
</vehicles>
|
||||
<vehicleTypes>
|
||||
<type>
|
||||
<id>christophidesType</id>
|
||||
<capacity>160</capacity>
|
||||
<costs>
|
||||
<fixed>0.0</fixed>
|
||||
<distance>1.0</distance>
|
||||
<time>0.0</time>
|
||||
</costs>
|
||||
</type>
|
||||
</vehicleTypes>
|
||||
<services>
|
||||
<service id="35" type="service">
|
||||
<locationId>[x=62.0][y=63.0]</locationId>
|
||||
<coord x="62.0" y="63.0"/>
|
||||
<capacity-demand>17</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="36" type="service">
|
||||
<locationId>[x=63.0][y=69.0]</locationId>
|
||||
<coord x="63.0" y="69.0"/>
|
||||
<capacity-demand>6</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="33" type="service">
|
||||
<locationId>[x=46.0][y=10.0]</locationId>
|
||||
<coord x="46.0" y="10.0"/>
|
||||
<capacity-demand>23</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="34" type="service">
|
||||
<locationId>[x=61.0][y=33.0]</locationId>
|
||||
<coord x="61.0" y="33.0"/>
|
||||
<capacity-demand>26</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="39" type="service">
|
||||
<locationId>[x=59.0][y=15.0]</locationId>
|
||||
<coord x="59.0" y="15.0"/>
|
||||
<capacity-demand>14</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="37" type="service">
|
||||
<locationId>[x=32.0][y=22.0]</locationId>
|
||||
<coord x="32.0" y="22.0"/>
|
||||
<capacity-demand>9</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="38" type="service">
|
||||
<locationId>[x=45.0][y=35.0]</locationId>
|
||||
<coord x="45.0" y="35.0"/>
|
||||
<capacity-demand>15</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="43" type="service">
|
||||
<locationId>[x=5.0][y=64.0]</locationId>
|
||||
<coord x="5.0" y="64.0"/>
|
||||
<capacity-demand>11</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="42" type="service">
|
||||
<locationId>[x=21.0][y=10.0]</locationId>
|
||||
<coord x="21.0" y="10.0"/>
|
||||
<capacity-demand>13</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="41" type="service">
|
||||
<locationId>[x=10.0][y=17.0]</locationId>
|
||||
<coord x="10.0" y="17.0"/>
|
||||
<capacity-demand>27</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="40" type="service">
|
||||
<locationId>[x=5.0][y=6.0]</locationId>
|
||||
<coord x="5.0" y="6.0"/>
|
||||
<capacity-demand>7</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="22" type="service">
|
||||
<locationId>[x=42.0][y=57.0]</locationId>
|
||||
<coord x="42.0" y="57.0"/>
|
||||
<capacity-demand>8</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="23" type="service">
|
||||
<locationId>[x=16.0][y=57.0]</locationId>
|
||||
<coord x="16.0" y="57.0"/>
|
||||
<capacity-demand>16</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="24" type="service">
|
||||
<locationId>[x=8.0][y=52.0]</locationId>
|
||||
<coord x="8.0" y="52.0"/>
|
||||
<capacity-demand>10</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="25" type="service">
|
||||
<locationId>[x=7.0][y=38.0]</locationId>
|
||||
<coord x="7.0" y="38.0"/>
|
||||
<capacity-demand>28</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="26" type="service">
|
||||
<locationId>[x=27.0][y=68.0]</locationId>
|
||||
<coord x="27.0" y="68.0"/>
|
||||
<capacity-demand>7</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="27" type="service">
|
||||
<locationId>[x=30.0][y=48.0]</locationId>
|
||||
<coord x="30.0" y="48.0"/>
|
||||
<capacity-demand>15</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="28" type="service">
|
||||
<locationId>[x=43.0][y=67.0]</locationId>
|
||||
<coord x="43.0" y="67.0"/>
|
||||
<capacity-demand>14</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="29" type="service">
|
||||
<locationId>[x=58.0][y=48.0]</locationId>
|
||||
<coord x="58.0" y="48.0"/>
|
||||
<capacity-demand>6</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="3" type="service">
|
||||
<locationId>[x=52.0][y=64.0]</locationId>
|
||||
<coord x="52.0" y="64.0"/>
|
||||
<capacity-demand>16</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="2" type="service">
|
||||
<locationId>[x=49.0][y=49.0]</locationId>
|
||||
<coord x="49.0" y="49.0"/>
|
||||
<capacity-demand>30</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="1" type="service">
|
||||
<locationId>[x=37.0][y=52.0]</locationId>
|
||||
<coord x="37.0" y="52.0"/>
|
||||
<capacity-demand>7</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="7" type="service">
|
||||
<locationId>[x=17.0][y=63.0]</locationId>
|
||||
<coord x="17.0" y="63.0"/>
|
||||
<capacity-demand>19</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="30" type="service">
|
||||
<locationId>[x=58.0][y=27.0]</locationId>
|
||||
<coord x="58.0" y="27.0"/>
|
||||
<capacity-demand>19</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="6" type="service">
|
||||
<locationId>[x=21.0][y=47.0]</locationId>
|
||||
<coord x="21.0" y="47.0"/>
|
||||
<capacity-demand>15</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="5" type="service">
|
||||
<locationId>[x=40.0][y=30.0]</locationId>
|
||||
<coord x="40.0" y="30.0"/>
|
||||
<capacity-demand>21</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="32" type="service">
|
||||
<locationId>[x=38.0][y=46.0]</locationId>
|
||||
<coord x="38.0" y="46.0"/>
|
||||
<capacity-demand>12</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="4" type="service">
|
||||
<locationId>[x=20.0][y=26.0]</locationId>
|
||||
<coord x="20.0" y="26.0"/>
|
||||
<capacity-demand>9</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="31" type="service">
|
||||
<locationId>[x=37.0][y=69.0]</locationId>
|
||||
<coord x="37.0" y="69.0"/>
|
||||
<capacity-demand>11</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="9" type="service">
|
||||
<locationId>[x=52.0][y=33.0]</locationId>
|
||||
<coord x="52.0" y="33.0"/>
|
||||
<capacity-demand>11</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="8" type="service">
|
||||
<locationId>[x=31.0][y=62.0]</locationId>
|
||||
<coord x="31.0" y="62.0"/>
|
||||
<capacity-demand>23</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="19" type="service">
|
||||
<locationId>[x=13.0][y=13.0]</locationId>
|
||||
<coord x="13.0" y="13.0"/>
|
||||
<capacity-demand>9</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="17" type="service">
|
||||
<locationId>[x=27.0][y=23.0]</locationId>
|
||||
<coord x="27.0" y="23.0"/>
|
||||
<capacity-demand>3</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="18" type="service">
|
||||
<locationId>[x=17.0][y=33.0]</locationId>
|
||||
<coord x="17.0" y="33.0"/>
|
||||
<capacity-demand>41</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="15" type="service">
|
||||
<locationId>[x=36.0][y=16.0]</locationId>
|
||||
<coord x="36.0" y="16.0"/>
|
||||
<capacity-demand>10</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="16" type="service">
|
||||
<locationId>[x=52.0][y=41.0]</locationId>
|
||||
<coord x="52.0" y="41.0"/>
|
||||
<capacity-demand>15</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="13" type="service">
|
||||
<locationId>[x=5.0][y=25.0]</locationId>
|
||||
<coord x="5.0" y="25.0"/>
|
||||
<capacity-demand>23</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="14" type="service">
|
||||
<locationId>[x=12.0][y=42.0]</locationId>
|
||||
<coord x="12.0" y="42.0"/>
|
||||
<capacity-demand>21</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="11" type="service">
|
||||
<locationId>[x=42.0][y=41.0]</locationId>
|
||||
<coord x="42.0" y="41.0"/>
|
||||
<capacity-demand>19</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="12" type="service">
|
||||
<locationId>[x=31.0][y=32.0]</locationId>
|
||||
<coord x="31.0" y="32.0"/>
|
||||
<capacity-demand>29</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="21" type="service">
|
||||
<locationId>[x=62.0][y=42.0]</locationId>
|
||||
<coord x="62.0" y="42.0"/>
|
||||
<capacity-demand>8</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="20" type="service">
|
||||
<locationId>[x=57.0][y=58.0]</locationId>
|
||||
<coord x="57.0" y="58.0"/>
|
||||
<capacity-demand>28</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="49" type="service">
|
||||
<locationId>[x=48.0][y=28.0]</locationId>
|
||||
<coord x="48.0" y="28.0"/>
|
||||
<capacity-demand>18</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="48" type="service">
|
||||
<locationId>[x=25.0][y=55.0]</locationId>
|
||||
<coord x="25.0" y="55.0"/>
|
||||
<capacity-demand>17</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="45" type="service">
|
||||
<locationId>[x=39.0][y=10.0]</locationId>
|
||||
<coord x="39.0" y="10.0"/>
|
||||
<capacity-demand>10</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="44" type="service">
|
||||
<locationId>[x=30.0][y=15.0]</locationId>
|
||||
<coord x="30.0" y="15.0"/>
|
||||
<capacity-demand>16</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="47" type="service">
|
||||
<locationId>[x=25.0][y=32.0]</locationId>
|
||||
<coord x="25.0" y="32.0"/>
|
||||
<capacity-demand>25</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="46" type="service">
|
||||
<locationId>[x=32.0][y=39.0]</locationId>
|
||||
<coord x="32.0" y="39.0"/>
|
||||
<capacity-demand>5</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="10" type="service">
|
||||
<locationId>[x=51.0][y=21.0]</locationId>
|
||||
<coord x="51.0" y="21.0"/>
|
||||
<capacity-demand>5</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
<service id="50" type="service">
|
||||
<locationId>[x=56.0][y=37.0]</locationId>
|
||||
<coord x="56.0" y="37.0"/>
|
||||
<capacity-demand>10</capacity-demand>
|
||||
<duration>0.0</duration>
|
||||
<timeWindows>
|
||||
<timeWindow>
|
||||
<start>0.0</start>
|
||||
<end>1.7976931348623157E308</end>
|
||||
</timeWindow>
|
||||
</timeWindows>
|
||||
</service>
|
||||
</services>
|
||||
</problem>
|
||||
52
jsprit-examples/input/vrpnc1.txt
Normal file
52
jsprit-examples/input/vrpnc1.txt
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
50 160 999999 0
|
||||
30 40
|
||||
37 52 7
|
||||
49 49 30
|
||||
52 64 16
|
||||
20 26 9
|
||||
40 30 21
|
||||
21 47 15
|
||||
17 63 19
|
||||
31 62 23
|
||||
52 33 11
|
||||
51 21 5
|
||||
42 41 19
|
||||
31 32 29
|
||||
5 25 23
|
||||
12 42 21
|
||||
36 16 10
|
||||
52 41 15
|
||||
27 23 3
|
||||
17 33 41
|
||||
13 13 9
|
||||
57 58 28
|
||||
62 42 8
|
||||
42 57 8
|
||||
16 57 16
|
||||
8 52 10
|
||||
7 38 28
|
||||
27 68 7
|
||||
30 48 15
|
||||
43 67 14
|
||||
58 48 6
|
||||
58 27 19
|
||||
37 69 11
|
||||
38 46 12
|
||||
46 10 23
|
||||
61 33 26
|
||||
62 63 17
|
||||
63 69 6
|
||||
32 22 9
|
||||
45 35 15
|
||||
59 15 14
|
||||
5 6 7
|
||||
10 17 27
|
||||
21 10 13
|
||||
5 64 11
|
||||
30 15 16
|
||||
39 10 10
|
||||
32 39 5
|
||||
25 32 25
|
||||
25 55 17
|
||||
48 28 18
|
||||
56 37 10
|
||||
16
jsprit-examples/src/main/java/examples/CVRPExample.java
Normal file
16
jsprit-examples/src/main/java/examples/CVRPExample.java
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
package examples;
|
||||
|
||||
import readers.ChristofidesReader;
|
||||
import basics.VehicleRoutingProblem;
|
||||
import basics.io.VrpXMLWriter;
|
||||
|
||||
public class CVRPExample {
|
||||
|
||||
public static void main(String[] args) {
|
||||
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
|
||||
new ChristofidesReader(builder).read("input/vrpnc1.txt");
|
||||
VehicleRoutingProblem vrp = builder.build();
|
||||
new VrpXMLWriter(vrp).write("input/vrpnc1-jsprit.xml");
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue