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

added skill reader/writer

This commit is contained in:
oblonski 2014-07-29 20:04:47 +02:00
parent f56d735b83
commit 3786f8e977
18 changed files with 505 additions and 142 deletions

View file

@ -629,7 +629,7 @@ public class VehicleRoutingProblem {
logger.info("initialise " + this); logger.info("initialise " + this);
} }
@Override @Override
public String toString() { public String toString() {
return "[fleetSize="+fleetSize+"][#jobs="+jobs.size()+"][#vehicles="+vehicles.size()+"][#vehicleTypes="+vehicleTypes.size()+"]["+ return "[fleetSize="+fleetSize+"][#jobs="+jobs.size()+"][#vehicles="+vehicles.size()+"][#vehicleTypes="+vehicleTypes.size()+"]["+
"transportCost="+transportCosts+"][activityCosts="+activityCosts+"]"; "transportCost="+transportCosts+"][activityCosts="+activityCosts+"]";

View file

@ -71,45 +71,12 @@ public class VrpXMLReader{
} }
} }
@Deprecated
interface JobConfigReader { interface JobConfigReader {
void readConfig(XMLConfiguration vrpProblem); void readConfig(XMLConfiguration vrpProblem);
} }
static class ServiceConfigReader implements JobConfigReader{
VehicleRoutingProblem.Builder vrpBuilder;
public ServiceConfigReader(jsprit.core.problem.VehicleRoutingProblem.Builder vrpBuilder) {
super();
this.vrpBuilder = vrpBuilder;
}
@Override
public void readConfig(XMLConfiguration config) {
}
}
static class ShipmentConfigReader implements JobConfigReader{
VehicleRoutingProblem.Builder vrpBuilder;
public ShipmentConfigReader(jsprit.core.problem.VehicleRoutingProblem.Builder vrpBuilder) {
super();
this.vrpBuilder = vrpBuilder;
}
@Override
public void readConfig(XMLConfiguration config) {
}
}
private static Logger logger = LogManager.getLogger(VrpXMLReader.class); private static Logger logger = LogManager.getLogger(VrpXMLReader.class);
private VehicleRoutingProblem.Builder vrpBuilder; private VehicleRoutingProblem.Builder vrpBuilder;
@ -130,13 +97,16 @@ public class VrpXMLReader{
private Collection<JobConfigReader> jobConfigReaders = new ArrayList<VrpXMLReader.JobConfigReader>(); private Collection<JobConfigReader> jobConfigReaders = new ArrayList<VrpXMLReader.JobConfigReader>();
@Deprecated
public void addJobConfigReader(JobConfigReader reader){ public void addJobConfigReader(JobConfigReader reader){
jobConfigReaders.add(reader); jobConfigReaders.add(reader);
} }
@Deprecated
public void setTourActivityFactory(TourActivityFactory tourActivityFactory){ public void setTourActivityFactory(TourActivityFactory tourActivityFactory){
} }
@Deprecated
public void setServiceBuilderFactory(ServiceBuilderFactory serviceBuilderFactory){ public void setServiceBuilderFactory(ServiceBuilderFactory serviceBuilderFactory){
this.serviceBuilderFactory=serviceBuilderFactory; this.serviceBuilderFactory=serviceBuilderFactory;
} }
@ -144,7 +114,8 @@ public class VrpXMLReader{
/** /**
* @param schemaValidation the schemaValidation to set * @param schemaValidation the schemaValidation to set
*/ */
public void setSchemaValidation(boolean schemaValidation) { @SuppressWarnings("UnusedDeclaration")
public void setSchemaValidation(boolean schemaValidation) {
this.schemaValidation = schemaValidation; this.schemaValidation = schemaValidation;
} }
@ -403,6 +374,7 @@ public class VrpXMLReader{
builder.setPickupLocation(pickupCoord.toString()); builder.setPickupLocation(pickupCoord.toString());
} }
} }
//pickup-serviceTime //pickup-serviceTime
String pickupServiceTime = shipmentConfig.getString("pickup.duration"); String pickupServiceTime = shipmentConfig.getString("pickup.duration");
if(pickupServiceTime != null) builder.setPickupServiceTime(Double.parseDouble(pickupServiceTime)); if(pickupServiceTime != null) builder.setPickupServiceTime(Double.parseDouble(pickupServiceTime));
@ -415,7 +387,6 @@ public class VrpXMLReader{
builder.setPickupTimeWindow(pickupTW); builder.setPickupTimeWindow(pickupTW);
} }
//delivery-locationId //delivery-locationId
String deliveryLocationId = shipmentConfig.getString("delivery.locationId"); String deliveryLocationId = shipmentConfig.getString("delivery.locationId");
if(deliveryLocationId != null){ if(deliveryLocationId != null){
@ -434,6 +405,7 @@ public class VrpXMLReader{
builder.setDeliveryLocation(deliveryCoord.toString()); builder.setDeliveryLocation(deliveryCoord.toString());
} }
} }
//delivery-serviceTime //delivery-serviceTime
String deliveryServiceTime = shipmentConfig.getString("delivery.duration"); String deliveryServiceTime = shipmentConfig.getString("delivery.duration");
if(deliveryServiceTime != null) builder.setDeliveryServiceTime(Double.parseDouble(deliveryServiceTime)); if(deliveryServiceTime != null) builder.setDeliveryServiceTime(Double.parseDouble(deliveryServiceTime));
@ -446,7 +418,15 @@ public class VrpXMLReader{
builder.setDeliveryTimeWindow(delTW); builder.setDeliveryTimeWindow(delTW);
} }
//read skills
String skillString = shipmentConfig.getString("requiredSkills");
if(skillString != null){
String cleaned = skillString.replaceAll("\\s","");
String[] skillTokens = cleaned.split("[,;]");
for(String skill : skillTokens) builder.addRequiredSkill(skill.toLowerCase());
}
//build shipment
Shipment shipment = builder.build(); Shipment shipment = builder.build();
// vrpBuilder.addJob(shipment); // vrpBuilder.addJob(shipment);
shipmentMap.put(shipment.getId(),shipment); shipmentMap.put(shipment.getId(),shipment);
@ -515,6 +495,16 @@ public class VrpXMLReader{
builder.setTimeWindow(TimeWindow.newInstance(twConfig.getDouble("start"), twConfig.getDouble("end"))); builder.setTimeWindow(TimeWindow.newInstance(twConfig.getDouble("start"), twConfig.getDouble("end")));
} }
} }
//read skills
String skillString = serviceConfig.getString("requiredSkills");
if(skillString != null){
String cleaned = skillString.replaceAll("\\s","");
String[] skillTokens = cleaned.split("[,;]");
for(String skill : skillTokens) builder.addRequiredSkill(skill.toLowerCase());
}
//build service
Service service = builder.build(); Service service = builder.build();
serviceMap.put(service.getId(),service); serviceMap.put(service.getId(),service);
// vrpBuilder.addJob(service); // vrpBuilder.addJob(service);
@ -595,7 +585,9 @@ public class VrpXMLReader{
VehicleType type = types.get(typeId); VehicleType type = types.get(typeId);
if(type == null) throw new IllegalStateException("vehicleType with typeId " + typeId + " is missing."); if(type == null) throw new IllegalStateException("vehicleType with typeId " + typeId + " is missing.");
builder.setType(type); builder.setType(type);
String locationId = vehicleConfig.getString("location.id");
//read startlocation
String locationId = vehicleConfig.getString("location.id");
if(locationId == null) { if(locationId == null) {
locationId = vehicleConfig.getString("startLocation.id"); locationId = vehicleConfig.getString("startLocation.id");
} }
@ -619,6 +611,7 @@ public class VrpXMLReader{
} }
//read endlocation
String endLocationId = vehicleConfig.getString("endLocation.id"); String endLocationId = vehicleConfig.getString("endLocation.id");
if(endLocationId != null) builder.setEndLocationId(endLocationId); if(endLocationId != null) builder.setEndLocationId(endLocationId);
String endCoordX = vehicleConfig.getString("endLocation.coord[@x]"); String endCoordX = vehicleConfig.getString("endLocation.coord[@x]");
@ -634,15 +627,27 @@ public class VrpXMLReader{
builder.setEndLocationCoordinate(coordinate); builder.setEndLocationCoordinate(coordinate);
} }
//read timeSchedule
String start = vehicleConfig.getString("timeSchedule.start"); String start = vehicleConfig.getString("timeSchedule.start");
String end = vehicleConfig.getString("timeSchedule.end"); String end = vehicleConfig.getString("timeSchedule.end");
if(start != null) builder.setEarliestStart(Double.parseDouble(start)); if(start != null) builder.setEarliestStart(Double.parseDouble(start));
if(end != null) builder.setLatestArrival(Double.parseDouble(end)); if(end != null) builder.setLatestArrival(Double.parseDouble(end));
String returnToDepot = vehicleConfig.getString("returnToDepot");
//read return2depot
String returnToDepot = vehicleConfig.getString("returnToDepot");
if(returnToDepot != null){ if(returnToDepot != null){
builder.setReturnToDepot(vehicleConfig.getBoolean("returnToDepot")); builder.setReturnToDepot(vehicleConfig.getBoolean("returnToDepot"));
} }
//read skills
String skillString = vehicleConfig.getString("skills");
if(skillString != null){
String cleaned = skillString.replaceAll("\\s", "");
String[] skillTokens = cleaned.split("[,;]");
for(String skill : skillTokens) builder.addSkill(skill.toLowerCase());
}
//build vehicle
VehicleImpl vehicle = builder.build(); VehicleImpl vehicle = builder.build();
vrpBuilder.addVehicle(vehicle); vrpBuilder.addVehicle(vehicle);
vehicleMap.put(vehicleId, vehicle); vehicleMap.put(vehicleId, vehicle);

View file

@ -16,6 +16,7 @@
******************************************************************************/ ******************************************************************************/
package jsprit.core.problem.io; package jsprit.core.problem.io;
import jsprit.core.problem.Skills;
import jsprit.core.problem.VehicleRoutingProblem; import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.job.Job; import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Service; import jsprit.core.problem.job.Service;
@ -55,8 +56,7 @@ public class VrpXMLWriter {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public Document createDoc() throws ConfigurationException{ public Document createDoc() throws ConfigurationException{
Document doc = createDocument(); return createDocument();
return doc;
} }
} }
@ -228,6 +228,10 @@ public class VrpXMLWriter {
xmlConfig.setProperty(shipmentPathString + "("+counter+").timeWindows.timeWindow(0).start", service.getTimeWindow().getStart()); xmlConfig.setProperty(shipmentPathString + "("+counter+").timeWindows.timeWindow(0).start", service.getTimeWindow().getStart());
xmlConfig.setProperty(shipmentPathString + "("+counter+").timeWindows.timeWindow(0).end", service.getTimeWindow().getEnd()); xmlConfig.setProperty(shipmentPathString + "("+counter+").timeWindows.timeWindow(0).end", service.getTimeWindow().getEnd());
//skills
String skillString = getSkillString(service);
xmlConfig.setProperty(shipmentPathString + "("+counter+").requiredSkills", skillString);
counter++; counter++;
} }
} }
@ -265,6 +269,11 @@ public class VrpXMLWriter {
xmlConfig.setProperty(shipmentPathString + "("+counter+").capacity-dimensions.dimension("+i+")[@index]", i); xmlConfig.setProperty(shipmentPathString + "("+counter+").capacity-dimensions.dimension("+i+")[@index]", i);
xmlConfig.setProperty(shipmentPathString + "("+counter+").capacity-dimensions.dimension("+i+")", shipment.getSize().get(i)); xmlConfig.setProperty(shipmentPathString + "("+counter+").capacity-dimensions.dimension("+i+")", shipment.getSize().get(i));
} }
//skills
String skillString = getSkillString(shipment);
xmlConfig.setProperty(shipmentPathString + "("+counter+").requiredSkills", skillString);
counter++; counter++;
} }
} }
@ -276,8 +285,7 @@ public class VrpXMLWriter {
private void writeVehiclesAndTheirTypes(XMLConfiguration xmlConfig) { private void writeVehiclesAndTheirTypes(XMLConfiguration xmlConfig) {
//vehicles //vehicles
String vehiclePathString = new StringBuilder().append(Schema.VEHICLES).append("."). String vehiclePathString = Schema.VEHICLES + "." + Schema.VEHICLE;
append(Schema.VEHICLE).toString();
int counter = 0; int counter = 0;
for(Vehicle vehicle : vrp.getVehicles()){ for(Vehicle vehicle : vrp.getVehicles()){
if(vehicle.getType() instanceof PenaltyVehicleType){ if(vehicle.getType() instanceof PenaltyVehicleType){
@ -299,6 +307,11 @@ public class VrpXMLWriter {
xmlConfig.setProperty(vehiclePathString + "("+counter+").timeSchedule.end", vehicle.getLatestArrival()); xmlConfig.setProperty(vehiclePathString + "("+counter+").timeSchedule.end", vehicle.getLatestArrival());
xmlConfig.setProperty(vehiclePathString + "("+counter+").returnToDepot", vehicle.isReturnToDepot()); xmlConfig.setProperty(vehiclePathString + "("+counter+").returnToDepot", vehicle.isReturnToDepot());
//write skills
String skillString = getSkillString(vehicle);
xmlConfig.setProperty(vehiclePathString + "("+counter+").skills", skillString);
counter++; counter++;
} }
@ -328,4 +341,23 @@ public class VrpXMLWriter {
} }
private String getSkillString(Vehicle vehicle) {
return createSkillString(vehicle.getSkills());
}
private String getSkillString(Job job){
return createSkillString(job.getRequiredSkills());
}
private String createSkillString(Skills skills) {
if(skills.values().size() == 0) return null;
String skillString = null;
for(String skill : skills.values()){
if(skillString == null) skillString = skill;
else skillString += ", " + skill;
}
return skillString;
}
} }

View file

@ -174,7 +174,7 @@ public class Service extends AbstractJob {
return new Service(this); return new Service(this);
} }
public Builder addSkill(String skill) { public Builder addRequiredSkill(String skill) {
skillBuilder.addSkill(skill); skillBuilder.addSkill(skill);
return this; return this;
} }

View file

@ -243,7 +243,7 @@ public class Shipment extends AbstractJob{
} }
public Builder addSkill(String skill) { public Builder addRequiredSkill(String skill) {
skillBuilder.addSkill(skill); skillBuilder.addSkill(skill);
return this; return this;
} }

View file

@ -65,6 +65,7 @@
<xs:element name="typeId" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="typeId" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="timeSchedule" type="timeWindowType"/> <xs:element name="timeSchedule" type="timeWindowType"/>
<xs:element name="returnToDepot" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="returnToDepot" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
<xs:element name="skills" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:all> </xs:all>
<xs:attribute name="type" type="xs:string" use="optional" /> <xs:attribute name="type" type="xs:string" use="optional" />
</xs:complexType> </xs:complexType>
@ -146,8 +147,8 @@
<xs:element name="timeWindow" type="timeWindowType" minOccurs="1" maxOccurs="unbounded"/> <xs:element name="timeWindow" type="timeWindowType" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="requiredSkills" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:all> </xs:all>
<xs:attribute name="id" type="xs:string" use="required" /> <xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="type" type="xs:string"/> <xs:attribute name="type" type="xs:string"/>
@ -211,6 +212,7 @@
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="requiredSkills" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:sequence> </xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" /> <xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType> </xs:complexType>

View file

@ -53,8 +53,8 @@ public class SolomonSkills_IT {
Service.Builder skillServiceBuilder = Service.Builder.newInstance(service.getId()).setServiceTime(service.getServiceDuration()) Service.Builder skillServiceBuilder = Service.Builder.newInstance(service.getId()).setServiceTime(service.getServiceDuration())
.setCoord(service.getCoord()).setLocationId(service.getLocationId()).setTimeWindow(service.getTimeWindow()) .setCoord(service.getCoord()).setLocationId(service.getLocationId()).setTimeWindow(service.getTimeWindow())
.addSizeDimension(0,service.getSize().get(0)); .addSizeDimension(0,service.getSize().get(0));
if(service.getCoord().getY()<50) skillServiceBuilder.addSkill("skill2"); if(service.getCoord().getY()<50) skillServiceBuilder.addRequiredSkill("skill2");
else skillServiceBuilder.addSkill("skill1"); else skillServiceBuilder.addRequiredSkill("skill1");
skillProblemBuilder.addJob(skillServiceBuilder.build()); skillProblemBuilder.addJob(skillServiceBuilder.build());
} }
skillProblemBuilder.addPenaltyVehicles(3.); skillProblemBuilder.addPenaltyVehicles(3.);

View file

@ -29,9 +29,9 @@ public class UpdateRequiredSkillsTest {
public void doBefore(){ public void doBefore(){
VehicleType type = VehicleTypeImpl.Builder.newInstance("t").build(); VehicleType type = VehicleTypeImpl.Builder.newInstance("t").build();
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type).build(); VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type).build();
Service service = Service.Builder.newInstance("s").setLocationId("loc").addSkill("skill1").build(); Service service = Service.Builder.newInstance("s").setLocationId("loc").addRequiredSkill("skill1").build();
Service service2 = Service.Builder.newInstance("s2").setLocationId("loc").addSkill("skill1").addSkill("skill2").addSkill("skill3").build(); Service service2 = Service.Builder.newInstance("s2").setLocationId("loc").addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3").build();
Service service3 = Service.Builder.newInstance("s3").setLocationId("loc").addSkill("skill4").addSkill("skill5").build(); Service service3 = Service.Builder.newInstance("s3").setLocationId("loc").addRequiredSkill("skill4").addRequiredSkill("skill5").build();
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).addJob(service) VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).addJob(service)
.addJob(service2).addJob(service3).build(); .addJob(service2).addJob(service3).build();
route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(vrp.getJobActivityFactory()).addService(service).addService(service2).addService(service3).build(); route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(vrp.getJobActivityFactory()).addService(service).addService(service2).addService(service3).build();

View file

@ -35,11 +35,11 @@ public class SkillConstraintTest {
vehicle = VehicleImpl.Builder.newInstance("v").addSkill("skill1").addSkill("skill2").addSkill("skill3").addSkill("skill4").setStartLocationId("start").setType(type).build(); vehicle = VehicleImpl.Builder.newInstance("v").addSkill("skill1").addSkill("skill2").addSkill("skill3").addSkill("skill4").setStartLocationId("start").setType(type).build();
vehicle2 = VehicleImpl.Builder.newInstance("v").addSkill("skill4").addSkill("skill5").setStartLocationId("start").setType(type).build(); vehicle2 = VehicleImpl.Builder.newInstance("v").addSkill("skill4").addSkill("skill5").setStartLocationId("start").setType(type).build();
Service service = Service.Builder.newInstance("s").setLocationId("loc").addSkill("skill1").build(); Service service = Service.Builder.newInstance("s").setLocationId("loc").addRequiredSkill("skill1").build();
Service service2 = Service.Builder.newInstance("s2").setLocationId("loc").addSkill("skill1").addSkill("skill2").addSkill("skill3").build(); Service service2 = Service.Builder.newInstance("s2").setLocationId("loc").addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3").build();
Service service3 = Service.Builder.newInstance("s3").setLocationId("loc").addSkill("skill4").addSkill("skill5").build(); Service service3 = Service.Builder.newInstance("s3").setLocationId("loc").addRequiredSkill("skill4").addRequiredSkill("skill5").build();
Service service4 = Service.Builder.newInstance("s4").setLocationId("loc").addSkill("skill1").build(); Service service4 = Service.Builder.newInstance("s4").setLocationId("loc").addRequiredSkill("skill1").build();
vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).addVehicle(vehicle2).addJob(service) vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).addVehicle(vehicle2).addJob(service)
.addJob(service2).addJob(service3).addJob(service4).build(); .addJob(service2).addJob(service3).addJob(service4).build();

View file

@ -16,26 +16,22 @@
******************************************************************************/ ******************************************************************************/
package jsprit.core.problem.io; package jsprit.core.problem.io;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import jsprit.core.problem.VehicleRoutingProblem; import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.VehicleRoutingProblem.FleetSize; import jsprit.core.problem.VehicleRoutingProblem.FleetSize;
import jsprit.core.problem.job.Job; import jsprit.core.problem.job.Job;
import jsprit.core.problem.job.Service; import jsprit.core.problem.job.Service;
import jsprit.core.problem.job.Shipment; import jsprit.core.problem.job.Shipment;
import jsprit.core.problem.vehicle.Vehicle; import jsprit.core.problem.vehicle.Vehicle;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static org.junit.Assert.*;
public class VrpXMLReaderTest { public class VrpXMLReaderTest {
@ -78,6 +74,42 @@ public class VrpXMLReaderTest {
assertEquals(1000.0,v1.getLatestArrival(),0.01); assertEquals(1000.0,v1.getLatestArrival(),0.01);
} }
@Test
public void whenReadingVehicles_skill1ShouldBeAssigned(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Vehicle v1 = getVehicle("v1",vrp.getVehicles());
assertTrue(v1.getSkills().containsSkill("skill1"));
}
@Test
public void whenReadingVehicles_skill2ShouldBeAssigned(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Vehicle v1 = getVehicle("v1",vrp.getVehicles());
assertTrue(v1.getSkills().containsSkill("skill2"));
}
@Test
public void whenReadingVehicles_nuSkillsShouldBeCorrect(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Vehicle v1 = getVehicle("v1",vrp.getVehicles());
assertEquals(2, v1.getSkills().values().size());
}
@Test
public void whenReadingVehicles_nuSkillsOfV2ShouldBeCorrect(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Vehicle v = getVehicle("v2",vrp.getVehicles());
assertEquals(0, v.getSkills().values().size());
}
private Vehicle getVehicle(String string, Collection<Vehicle> vehicles) { private Vehicle getVehicle(String string, Collection<Vehicle> vehicles) {
for(Vehicle v : vehicles) if(string.equals(v.getId())) return v; for(Vehicle v : vehicles) if(string.equals(v.getId())) return v;
return null; return null;
@ -127,6 +159,42 @@ public class VrpXMLReaderTest {
assertEquals(2,servCounter); assertEquals(2,servCounter);
} }
@Test
public void whenReadingService1_skill1ShouldBeAssigned(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Service s = (Service) vrp.getJobs().get("1");
assertTrue(s.getRequiredSkills().containsSkill("skill1"));
}
@Test
public void whenReadingService1_skill2ShouldBeAssigned(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Service s = (Service) vrp.getJobs().get("1");
assertTrue(s.getRequiredSkills().containsSkill("skill2"));
}
@Test
public void whenReadingService1_nuSkillsShouldBeCorrect(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Service s = (Service) vrp.getJobs().get("1");
assertEquals(2,s.getRequiredSkills().values().size());
}
@Test
public void whenReadingService2_nuSkillsOfV2ShouldBeCorrect(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Service s = (Service) vrp.getJobs().get("2");
assertEquals(0,s.getRequiredSkills().values().size());
}
@Test @Test
public void whenReadingShipments_itReadsThemCorrectly(){ public void whenReadingShipments_itReadsThemCorrectly(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
@ -139,6 +207,42 @@ public class VrpXMLReaderTest {
assertEquals(2,shipCounter); assertEquals(2,shipCounter);
} }
@Test
public void whenReadingShipment3_skill1ShouldBeAssigned(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Shipment s = (Shipment) vrp.getJobs().get("3");
assertTrue(s.getRequiredSkills().containsSkill("skill1"));
}
@Test
public void whenReadingShipment3_skill2ShouldBeAssigned(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Shipment s = (Shipment) vrp.getJobs().get("3");
assertTrue(s.getRequiredSkills().containsSkill("skill2"));
}
@Test
public void whenReadingShipment3_nuSkillsShouldBeCorrect(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Shipment s = (Shipment) vrp.getJobs().get("3");
assertEquals(2,s.getRequiredSkills().values().size());
}
@Test
public void whenReadingShipment4_nuSkillsOfV2ShouldBeCorrect(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(builder, null).read(inFileName);
VehicleRoutingProblem vrp = builder.build();
Shipment s = (Shipment) vrp.getJobs().get("4");
assertEquals(0,s.getRequiredSkills().values().size());
}
@Test @Test
public void whenReadingServices_capOfService1IsReadCorrectly(){ public void whenReadingServices_capOfService1IsReadCorrectly(){
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
@ -465,4 +569,6 @@ public class VrpXMLReaderTest {
VehicleRoutingProblem vrp = builder.build(); VehicleRoutingProblem vrp = builder.build();
assertEquals(2,vrp.getInitialVehicleRoutes().iterator().next().getActivities().size()); assertEquals(2,vrp.getInitialVehicleRoutes().iterator().next().getActivities().size());
} }
} }

View file

@ -16,11 +16,6 @@
******************************************************************************/ ******************************************************************************/
package jsprit.core.problem.io; package jsprit.core.problem.io;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.util.Collection;
import jsprit.core.problem.VehicleRoutingProblem; import jsprit.core.problem.VehicleRoutingProblem;
import jsprit.core.problem.VehicleRoutingProblem.Builder; import jsprit.core.problem.VehicleRoutingProblem.Builder;
import jsprit.core.problem.VehicleRoutingProblem.FleetSize; import jsprit.core.problem.VehicleRoutingProblem.FleetSize;
@ -31,10 +26,13 @@ import jsprit.core.problem.vehicle.Vehicle;
import jsprit.core.problem.vehicle.VehicleImpl; import jsprit.core.problem.vehicle.VehicleImpl;
import jsprit.core.problem.vehicle.VehicleTypeImpl; import jsprit.core.problem.vehicle.VehicleTypeImpl;
import jsprit.core.util.Coordinate; import jsprit.core.util.Coordinate;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.util.Collection;
import static org.junit.Assert.*;
public class VrpXMLWriterTest { public class VrpXMLWriterTest {
private String infileName; private String infileName;
@ -50,7 +48,7 @@ public class VrpXMLWriterTest {
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
builder.setFleetSize(FleetSize.INFINITE); builder.setFleetSize(FleetSize.INFINITE);
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
Vehicle vehicle = VehicleImpl.Builder.newInstance("myVehicle").setStartLocationId("loc").setType(type).build(); VehicleImpl vehicle = VehicleImpl.Builder.newInstance("myVehicle").setStartLocationId("loc").setType(type).build();
builder.addVehicle(vehicle); builder.addVehicle(vehicle);
VehicleRoutingProblem vrp = builder.build(); VehicleRoutingProblem vrp = builder.build();
new VrpXMLWriter(vrp, null).write(infileName); new VrpXMLWriter(vrp, null).write(infileName);
@ -62,8 +60,8 @@ public class VrpXMLWriterTest {
builder.setFleetSize(FleetSize.FINITE); builder.setFleetSize(FleetSize.FINITE);
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
VehicleRoutingProblem vrp = builder.build(); VehicleRoutingProblem vrp = builder.build();
@ -76,8 +74,8 @@ public class VrpXMLWriterTest {
builder.setFleetSize(FleetSize.FINITE); builder.setFleetSize(FleetSize.FINITE);
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
VehicleRoutingProblem vrp = builder.build(); VehicleRoutingProblem vrp = builder.build();
@ -93,8 +91,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -150,8 +148,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -181,8 +179,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -213,8 +211,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -244,8 +242,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -275,8 +273,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -298,14 +296,183 @@ public class VrpXMLWriterTest {
assertEquals("[x=1.0][y=2.0]",((Shipment)readVrp.getJobs().get("1")).getPickupLocation()); assertEquals("[x=1.0][y=2.0]",((Shipment)readVrp.getJobs().get("1")).getPickupLocation());
} }
@Test @Test
public void whenWritingVehicles_vehShouldHave2Skills(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleImpl v = VehicleImpl.Builder.newInstance("v1").addSkill("SKILL5").addSkill("skill1").addSkill("Skill2").setStartLocationId("loc").setType(type1).build();
builder.addVehicle(v);
VehicleRoutingProblem vrp = builder.build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
Vehicle veh1 = getVehicle("v1",readVrp);
assertEquals(3,veh1.getSkills().values().size());
}
@Test
public void whenWritingVehicles_vehShouldContain_skill5(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleImpl v = VehicleImpl.Builder.newInstance("v1").addSkill("SKILL5").addSkill("skill1").addSkill("Skill2").setStartLocationId("loc").setType(type1).build();
builder.addVehicle(v);
VehicleRoutingProblem vrp = builder.build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
Vehicle veh1 = getVehicle("v1",readVrp);
assertTrue(veh1.getSkills().containsSkill("skill5"));
}
@Test
public void whenWritingVehicles_vehShouldContain_skill1(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleImpl v = VehicleImpl.Builder.newInstance("v1").addSkill("SKILL5").addSkill("skill1").addSkill("Skill2").setStartLocationId("loc").setType(type1).build();
builder.addVehicle(v);
VehicleRoutingProblem vrp = builder.build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
Vehicle veh1 = getVehicle("v1",readVrp);
assertTrue(veh1.getSkills().containsSkill("skill1"));
}
@Test
public void whenWritingVehicles_vehShouldContain_skill2(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleImpl v = VehicleImpl.Builder.newInstance("v1").addSkill("SKILL5").addSkill("skill1").addSkill("Skill2").setStartLocationId("loc").setType(type1).build();
builder.addVehicle(v);
VehicleRoutingProblem vrp = builder.build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
Vehicle veh1 = getVehicle("v1",readVrp);
assertTrue(veh1.getSkills().containsSkill("skill2"));
}
@Test
public void whenWritingVehicles_vehShouldHave0Skills(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleImpl v = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
builder.addVehicle(v);
VehicleRoutingProblem vrp = builder.build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
Vehicle veh = getVehicle("v1",readVrp);
assertEquals(0,veh.getSkills().values().size());
}
private Vehicle getVehicle(String v1, VehicleRoutingProblem readVrp) {
for(Vehicle v : readVrp.getVehicles()){
if(v.getId().equals(v1)) return v;
}
return null;
}
@Test
public void whenWritingShipments_shipmentShouldHaveCorrectNuSkills(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
Shipment s = Shipment.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3")
.addSizeDimension(0, 10).setPickupCoord(Coordinate.newInstance(1, 2)).setDeliveryCoord(Coordinate.newInstance(5, 6)).setDeliveryLocation("delLoc").setPickupTimeWindow(TimeWindow.newInstance(1, 2))
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build();
VehicleRoutingProblem vrp = builder.addJob(s).build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
assertEquals(3,readVrp.getJobs().get("1").getRequiredSkills().values().size());
}
@Test
public void whenWritingShipments_shipmentShouldContain_skill1(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
Shipment s = Shipment.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3")
.addSizeDimension(0, 10).setPickupCoord(Coordinate.newInstance(1, 2)).setDeliveryCoord(Coordinate.newInstance(5, 6)).setDeliveryLocation("delLoc").setPickupTimeWindow(TimeWindow.newInstance(1, 2))
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build();
VehicleRoutingProblem vrp = builder.addJob(s).build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill1"));
}
@Test
public void whenWritingShipments_shipmentShouldContain_skill2(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
Shipment s = Shipment.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("Skill2").addRequiredSkill("skill3")
.addSizeDimension(0, 10).setPickupCoord(Coordinate.newInstance(1, 2)).setDeliveryCoord(Coordinate.newInstance(5, 6)).setDeliveryLocation("delLoc").setPickupTimeWindow(TimeWindow.newInstance(1, 2))
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build();
VehicleRoutingProblem vrp = builder.addJob(s).build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill2"));
}
@Test
public void whenWritingShipments_shipmentShouldContain_skill3(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
Shipment s = Shipment.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("Skill2").addRequiredSkill("skill3")
.addSizeDimension(0, 10).setPickupCoord(Coordinate.newInstance(1, 2)).setDeliveryCoord(Coordinate.newInstance(5, 6)).setDeliveryLocation("delLoc").setPickupTimeWindow(TimeWindow.newInstance(1, 2))
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build();
VehicleRoutingProblem vrp = builder.addJob(s).build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill3"));
}
@Test
public void whenWritingShipments_readingThemAgainMustReturnTheWrittenLocationCoordOfS1(){ public void whenWritingShipments_readingThemAgainMustReturnTheWrittenLocationCoordOfS1(){
Builder builder = VehicleRoutingProblem.Builder.newInstance(); Builder builder = VehicleRoutingProblem.Builder.newInstance();
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -352,13 +519,13 @@ public class VrpXMLWriterTest {
new VrpXMLReader(vrpToReadBuilder, null).read(infileName); new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
assertEquals(3,((Shipment)readVrp.getJobs().get("1")).getSize().getNuOfDimensions()); assertEquals(3,(readVrp.getJobs().get("1")).getSize().getNuOfDimensions());
assertEquals(10,((Shipment)readVrp.getJobs().get("1")).getSize().get(0)); assertEquals(10, (readVrp.getJobs().get("1")).getSize().get(0));
assertEquals(0,((Shipment)readVrp.getJobs().get("1")).getSize().get(1)); assertEquals(0,(readVrp.getJobs().get("1")).getSize().get(1));
assertEquals(100,((Shipment)readVrp.getJobs().get("1")).getSize().get(2)); assertEquals(100,(readVrp.getJobs().get("1")).getSize().get(2));
assertEquals(1,((Shipment)readVrp.getJobs().get("2")).getSize().getNuOfDimensions()); assertEquals(1,(readVrp.getJobs().get("2")).getSize().getNuOfDimensions());
assertEquals(20,((Shipment)readVrp.getJobs().get("2")).getSize().get(0)); assertEquals(20,(readVrp.getJobs().get("2")).getSize().get(0));
} }
@Test @Test
@ -367,8 +534,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -389,14 +556,62 @@ public class VrpXMLWriterTest {
} }
@Test
public void whenWritingService_itShouldHaveTheCorrectNuSkills(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
Service s = Service.Builder.newInstance("1").addRequiredSkill("sKill1").addRequiredSkill("skill2").addSizeDimension(0, 1).setLocationId("loc").setServiceTime(2.0).build();
VehicleRoutingProblem vrp = builder.addJob(s).build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
assertEquals(2,readVrp.getJobs().get("1").getRequiredSkills().values().size());
}
@Test
public void whenWritingService_itShouldContain_skill1(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
Service s = Service.Builder.newInstance("1").addRequiredSkill("sKill1").addRequiredSkill("skill2").addSizeDimension(0, 1).setLocationId("loc").setServiceTime(2.0).build();
VehicleRoutingProblem vrp = builder.addJob(s).build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill1"));
}
@Test
public void whenWritingService_itShouldContain_skill2(){
Builder builder = VehicleRoutingProblem.Builder.newInstance();
Service s = Service.Builder.newInstance("1").addRequiredSkill("sKill1").addRequiredSkill("skill2").addSizeDimension(0, 1).setLocationId("loc").setServiceTime(2.0).build();
VehicleRoutingProblem vrp = builder.addJob(s).build();
new VrpXMLWriter(vrp, null).write(infileName);
VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance();
new VrpXMLReader(vrpToReadBuilder, null).read(infileName);
VehicleRoutingProblem readVrp = vrpToReadBuilder.build();
assertTrue(readVrp.getJobs().get("1").getRequiredSkills().containsSkill("skill2"));
}
@Test @Test
public void whenWritingVehicleV1_itDoesNotReturnToDepotMustBeWrittenCorrectly(){ public void whenWritingVehicleV1_itDoesNotReturnToDepotMustBeWrittenCorrectly(){
Builder builder = VehicleRoutingProblem.Builder.newInstance(); Builder builder = VehicleRoutingProblem.Builder.newInstance();
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -421,8 +636,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -447,8 +662,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build(); VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("loc").setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
builder.addVehicle(v2); builder.addVehicle(v2);
@ -475,8 +690,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2)) VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2))
.setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build(); .setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
@ -503,8 +718,8 @@ public class VrpXMLWriterTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType").addCapacityDimension(0, 20).build();
VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build(); VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2").addCapacityDimension(0, 200).build();
Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build(); VehicleImpl v1 = VehicleImpl.Builder.newInstance("v1").setReturnToDepot(false).setStartLocationId("loc").setType(type1).build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2)) VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2))
.setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build(); .setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build();
builder.addVehicle(v1); builder.addVehicle(v1);
@ -538,7 +753,7 @@ public class VrpXMLWriterTest {
.addCapacityDimension(2, 10000) .addCapacityDimension(2, 10000)
.build(); .build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2)) VehicleImpl v2 = VehicleImpl.Builder.newInstance("v").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2))
.setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build(); .setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build();
builder.addVehicle(v2); builder.addVehicle(v2);
@ -566,7 +781,7 @@ public class VrpXMLWriterTest {
.addCapacityDimension(10, 10000) .addCapacityDimension(10, 10000)
.build(); .build();
Vehicle v2 = VehicleImpl.Builder.newInstance("v").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2)) VehicleImpl v2 = VehicleImpl.Builder.newInstance("v").setStartLocationId("startLoc").setStartLocationCoordinate(Coordinate.newInstance(1, 2))
.setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build(); .setEndLocationId("endLoc").setEndLocationCoordinate(Coordinate.newInstance(4, 5)).setType(type2).build();
builder.addVehicle(v2); builder.addVehicle(v2);

View file

@ -60,7 +60,7 @@ public class DeliveryTest {
@Test @Test
public void whenAddingSkills_theyShouldBeAddedCorrectly(){ public void whenAddingSkills_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc") Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("drill").addSkill("screwdriver").build(); .addRequiredSkill("drill").addRequiredSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver")); assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
} }
@ -68,7 +68,7 @@ public class DeliveryTest {
@Test @Test
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){ public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc") Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("DriLl").addSkill("screwDriver").build(); .addRequiredSkill("DriLl").addRequiredSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drilL")); assertTrue(s.getRequiredSkills().containsSkill("drilL"));
} }
@ -76,7 +76,7 @@ public class DeliveryTest {
@Test @Test
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){ public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc") Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("screwDriver").build(); .addRequiredSkill("screwDriver").build();
assertFalse(s.getRequiredSkills().containsSkill("drill")); assertFalse(s.getRequiredSkills().containsSkill("drill"));
assertFalse(s.getRequiredSkills().containsSkill("drilL")); assertFalse(s.getRequiredSkills().containsSkill("drilL"));
} }

View file

@ -60,7 +60,7 @@ public class PickupTest {
@Test @Test
public void whenAddingSkills_theyShouldBeAddedCorrectly(){ public void whenAddingSkills_theyShouldBeAddedCorrectly(){
Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc") Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc")
.addSkill("drill").addSkill("screwdriver").build(); .addRequiredSkill("drill").addRequiredSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver")); assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
@ -69,7 +69,7 @@ public class PickupTest {
@Test @Test
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){ public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){
Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc") Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc")
.addSkill("DriLl").addSkill("screwDriver").build(); .addRequiredSkill("DriLl").addRequiredSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drilL")); assertTrue(s.getRequiredSkills().containsSkill("drilL"));
} }
@ -77,7 +77,7 @@ public class PickupTest {
@Test @Test
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){ public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){
Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc") Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc")
.addSkill("screwDriver").build(); .addRequiredSkill("screwDriver").build();
assertFalse(s.getRequiredSkills().containsSkill("drill")); assertFalse(s.getRequiredSkills().containsSkill("drill"));
assertFalse(s.getRequiredSkills().containsSkill("drilL")); assertFalse(s.getRequiredSkills().containsSkill("drilL"));
} }

View file

@ -145,7 +145,7 @@ public class ServiceTest {
@Test @Test
public void whenAddingSkills_theyShouldBeAddedCorrectly(){ public void whenAddingSkills_theyShouldBeAddedCorrectly(){
Service s = Service.Builder.newInstance("s").setLocationId("loc") Service s = Service.Builder.newInstance("s").setLocationId("loc")
.addSkill("drill").addSkill("screwdriver").build(); .addRequiredSkill("drill").addRequiredSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver")); assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
@ -154,7 +154,7 @@ public class ServiceTest {
@Test @Test
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){ public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){
Service s = Service.Builder.newInstance("s").setLocationId("loc") Service s = Service.Builder.newInstance("s").setLocationId("loc")
.addSkill("DriLl").addSkill("screwDriver").build(); .addRequiredSkill("DriLl").addRequiredSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drilL")); assertTrue(s.getRequiredSkills().containsSkill("drilL"));
} }
@ -162,7 +162,7 @@ public class ServiceTest {
@Test @Test
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){ public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){
Service s = Service.Builder.newInstance("s").setLocationId("loc") Service s = Service.Builder.newInstance("s").setLocationId("loc")
.addSkill("screwDriver").build(); .addRequiredSkill("screwDriver").build();
assertFalse(s.getRequiredSkills().containsSkill("drill")); assertFalse(s.getRequiredSkills().containsSkill("drill"));
assertFalse(s.getRequiredSkills().containsSkill("drilL")); assertFalse(s.getRequiredSkills().containsSkill("drilL"));
} }

View file

@ -251,7 +251,7 @@ public class ShipmentTest {
@Test @Test
public void whenAddingSkills_theyShouldBeAddedCorrectly(){ public void whenAddingSkills_theyShouldBeAddedCorrectly(){
Shipment s = Shipment.Builder.newInstance("s").setPickupLocation("loc").setDeliveryLocation("delLoc") Shipment s = Shipment.Builder.newInstance("s").setPickupLocation("loc").setDeliveryLocation("delLoc")
.addSkill("drill").addSkill("screwdriver").build(); .addRequiredSkill("drill").addRequiredSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver")); assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
@ -260,7 +260,7 @@ public class ShipmentTest {
@Test @Test
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){ public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc") Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("DriLl").addSkill("screwDriver").build(); .addRequiredSkill("DriLl").addRequiredSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drilL")); assertTrue(s.getRequiredSkills().containsSkill("drilL"));
} }
@ -268,7 +268,7 @@ public class ShipmentTest {
@Test @Test
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){ public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc") Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("screwDriver").build(); .addRequiredSkill("screwDriver").build();
assertFalse(s.getRequiredSkills().containsSkill("drill")); assertFalse(s.getRequiredSkills().containsSkill("drill"));
assertFalse(s.getRequiredSkills().containsSkill("drilL")); assertFalse(s.getRequiredSkills().containsSkill("drilL"));
} }

View file

@ -39,6 +39,7 @@
<start>0.0</start> <start>0.0</start>
<end>1000.0</end> <end>1000.0</end>
</timeSchedule> </timeSchedule>
<skills>skill1; SKill2</skills>
</vehicle> </vehicle>
<vehicle> <vehicle>
<id>v2</id> <id>v2</id>
@ -153,6 +154,7 @@
<end>4000.0</end> <end>4000.0</end>
</timeWindow> </timeWindow>
</timeWindows> </timeWindows>
<requiredSkills>skill1, Skill2</requiredSkills>
</service> </service>
<service id="2" type="service"> <service id="2" type="service">
@ -197,6 +199,7 @@
<capacity-dimensions> <capacity-dimensions>
<dimension index="0">10</dimension> <dimension index="0">10</dimension>
</capacity-dimensions> </capacity-dimensions>
<requiredSkills>skill1, Skill2</requiredSkills>
</shipment> </shipment>
<shipment id="4"> <shipment id="4">

View file

@ -84,7 +84,7 @@ public class SimpleExampleWithSkills {
Service service3 = Service.Builder.newInstance("3").addSizeDimension(WEIGHT_INDEX, 1).setCoord(Coordinate.newInstance(15, 7)).build(); Service service3 = Service.Builder.newInstance("3").addSizeDimension(WEIGHT_INDEX, 1).setCoord(Coordinate.newInstance(15, 7)).build();
Service service4 = Service.Builder.newInstance("4").addSizeDimension(WEIGHT_INDEX, 1).addSkill("drill").setCoord(Coordinate.newInstance(15, 13)).build(); Service service4 = Service.Builder.newInstance("4").addSizeDimension(WEIGHT_INDEX, 1).addRequiredSkill("drill").setCoord(Coordinate.newInstance(15, 13)).build();
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();

View file

@ -49,13 +49,13 @@ public class SolomonWithSkillsExample {
skillServiceBuilder = Service.Builder.newInstance(service.getId()+"_skill2").setServiceTime(service.getServiceDuration()) skillServiceBuilder = Service.Builder.newInstance(service.getId()+"_skill2").setServiceTime(service.getServiceDuration())
.setCoord(service.getCoord()).setLocationId(service.getLocationId()).setTimeWindow(service.getTimeWindow()) .setCoord(service.getCoord()).setLocationId(service.getLocationId()).setTimeWindow(service.getTimeWindow())
.addSizeDimension(0,service.getSize().get(0)); .addSizeDimension(0,service.getSize().get(0));
skillServiceBuilder.addSkill("skill2"); skillServiceBuilder.addRequiredSkill("skill2");
} }
else { else {
skillServiceBuilder = Service.Builder.newInstance(service.getId()+"_skill1").setServiceTime(service.getServiceDuration()) skillServiceBuilder = Service.Builder.newInstance(service.getId()+"_skill1").setServiceTime(service.getServiceDuration())
.setCoord(service.getCoord()).setLocationId(service.getLocationId()).setTimeWindow(service.getTimeWindow()) .setCoord(service.getCoord()).setLocationId(service.getLocationId()).setTimeWindow(service.getTimeWindow())
.addSizeDimension(0,service.getSize().get(0)); .addSizeDimension(0,service.getSize().get(0));
skillServiceBuilder.addSkill("skill1"); skillServiceBuilder.addRequiredSkill("skill1");
} }
skillProblemBuilder.addJob(skillServiceBuilder.build()); skillProblemBuilder.addJob(skillServiceBuilder.build());
} }