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

added skills

This commit is contained in:
oblonski 2014-07-01 23:11:22 +02:00
parent b12b305c71
commit 0392d9106d
9 changed files with 182 additions and 54 deletions

View file

@ -18,6 +18,7 @@ package jsprit.core.problem.vehicle;
import java.util.Set; import java.util.Set;
import jsprit.core.problem.Skills;
import jsprit.core.util.Coordinate; import jsprit.core.util.Coordinate;
/** /**
@ -85,7 +86,11 @@ public interface Vehicle {
*/ */
public abstract Coordinate getEndLocationCoordinate(); public abstract Coordinate getEndLocationCoordinate();
public abstract Set<String> getSkills(); /**
* Returns skills.
*
* @return
*/
public abstract Skills getSkills();
public abstract boolean hasSkill(String string);
} }

View file

@ -20,6 +20,7 @@ import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import jsprit.core.problem.Skills;
import jsprit.core.util.Coordinate; import jsprit.core.util.Coordinate;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@ -77,8 +78,8 @@ public class VehicleImpl implements Vehicle {
private boolean returnToDepot = true; private boolean returnToDepot = true;
private VehicleType type = VehicleTypeImpl.Builder.newInstance("default").build(); private VehicleType type = VehicleTypeImpl.Builder.newInstance("default").build();
private Set<String> skills = new HashSet<String>(); private Skills.Builder skillBuilder = Skills.Builder.newInstance();
/** /**
* Constructs the builder with the vehicleId. * Constructs the builder with the vehicleId.
@ -235,13 +236,13 @@ public class VehicleImpl implements Vehicle {
public static Builder newInstance(String vehicleId){ return new Builder(vehicleId); } public static Builder newInstance(String vehicleId){ return new Builder(vehicleId); }
/** /**
* Adds skill and returns build. * Adds skill and returns builder.
* *
* @param skill * @param skill
* @return * @return
*/ */
public Builder addSkill(String skill) { public Builder addSkill(String skill) {
this.skills.add(skill.toLowerCase()); skillBuilder.addSkill(skill);
return this; return this;
} }
@ -284,7 +285,7 @@ public class VehicleImpl implements Vehicle {
private final String startLocationId; private final String startLocationId;
private final Set<String> skills; private final Skills skills;
private VehicleImpl(Builder builder){ private VehicleImpl(Builder builder){
id = builder.id; id = builder.id;
@ -296,7 +297,7 @@ public class VehicleImpl implements Vehicle {
startLocationCoord = builder.startLocationCoord; startLocationCoord = builder.startLocationCoord;
endLocationId = builder.endLocationId; endLocationId = builder.endLocationId;
endLocationCoord = builder.endLocationCoord; endLocationCoord = builder.endLocationCoord;
skills = builder.skills; skills = builder.skillBuilder.build();
} }
/** /**
@ -429,16 +430,8 @@ public class VehicleImpl implements Vehicle {
} }
@Override @Override
public Set<String> getSkills() { public Skills getSkills() {
return Collections.unmodifiableSet(skills); return skills;
} }
@Override
public boolean hasSkill(String skill) {
return skills.contains(skill.toLowerCase());
}
} }

View file

@ -0,0 +1,62 @@
package jsprit.core.algorithm.state;
import jsprit.core.problem.Skills;
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
import jsprit.core.problem.job.Service;
import jsprit.core.problem.solution.route.VehicleRoute;
import jsprit.core.problem.solution.route.state.StateFactory;
import jsprit.core.problem.vehicle.Vehicle;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* Created by schroeder on 01.07.14.
*/
public class UpdateRequiredSkillsTest {
private VehicleRoute route;
private StateManager stateManager;
@Before
public void doBefore(){
Vehicle vehicle = mock(Vehicle.class);
Service service = mock(Service.class);
Service service2 = mock(Service.class);
Service service3 = mock(Service.class);
when(service.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill1").build());
when(service2.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill1").addSkill("skill2")
.addSkill("skill3").build());
when(service3.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill4")
.addSkill("skill5").build());
route = VehicleRoute.Builder.newInstance(vehicle).addService(service).addService(service2).addService(service3).build();
stateManager = new StateManager(mock(VehicleRoutingTransportCosts.class));
stateManager.addStateUpdater(new UpdateSkills(stateManager));
}
@Test
public void whenUpdatingRoute_skillsAtRouteLevelShouldContainAllSkills(){
stateManager.update(route);
Skills skills = stateManager.getRouteState(route, StateFactory.SKILLS, Skills.class);
assertNotNull(skills);
Assert.assertEquals(5,skills.values().size());
assertTrue(skills.containsSkill("skill1"));
assertTrue(skills.containsSkill("skill2"));
assertTrue(skills.containsSkill("skill3"));
assertTrue(skills.containsSkill("skill4"));
assertTrue(skills.containsSkill("skill5"));
}
}

View file

@ -0,0 +1,39 @@
package jsprit.core.problem;
import org.junit.Test;
import java.util.HashSet;
import java.util.Set;
import static org.junit.Assert.assertTrue;
/**
* Created by schroeder on 01.07.14.
*/
public class SkillsTest {
@Test
public void whenSkillsAdded_theyShouldBeinSkillSet(){
Skills skills = Skills.Builder.newInstance().addSkill("skill1").addSkill("skill2").build();
assertTrue(skills.containsSkill("skill1"));
assertTrue(skills.containsSkill("skill2"));
}
@Test
public void whenSkillsAddedCaseInsensitive_theyShouldBeinSkillSet(){
Skills skills = Skills.Builder.newInstance().addSkill("skill1").addSkill("skill2").build();
assertTrue(skills.containsSkill("skilL1"));
assertTrue(skills.containsSkill("skIll2"));
}
@Test
public void whenSkillsAddedThroughAddAll_theyShouldBeinSkillSet(){
Set<String> skillSet = new HashSet<String>();
skillSet.add("skill1");
skillSet.add("skill2");
Skills skills = Skills.Builder.newInstance().addAllSkills(skillSet).build();
assertTrue(skills.containsSkill("skill1"));
assertTrue(skills.containsSkill("skill2"));
}
}

View file

@ -1,6 +1,7 @@
package jsprit.core.problem.job; package jsprit.core.problem.job;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import org.junit.Test; import org.junit.Test;
@ -44,18 +45,25 @@ public class DeliveryTest {
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(); .addSkill("drill").addSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().contains("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
assertTrue(s.requiresSkill("ScrewDriver"));
} }
@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(); .addSkill("DriLl").addSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().contains("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("drilL")); assertTrue(s.getRequiredSkills().containsSkill("drilL"));
} }
@Test
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("screwDriver").build();
assertFalse(s.getRequiredSkills().containsSkill("drill"));
assertFalse(s.getRequiredSkills().containsSkill("drilL"));
}
} }

View file

@ -1,6 +1,7 @@
package jsprit.core.problem.job; package jsprit.core.problem.job;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import org.junit.Test; import org.junit.Test;
@ -44,18 +45,26 @@ public class PickupTest {
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(); .addSkill("drill").addSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().contains("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("ScrewDriver")); assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
} }
@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(); .addSkill("DriLl").addSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().contains("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("drilL")); assertTrue(s.getRequiredSkills().containsSkill("drilL"));
} }
@Test
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){
Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc")
.addSkill("screwDriver").build();
assertFalse(s.getRequiredSkills().containsSkill("drill"));
assertFalse(s.getRequiredSkills().containsSkill("drilL"));
}
} }

View file

@ -16,12 +16,6 @@
******************************************************************************/ ******************************************************************************/
package jsprit.core.problem.job; package jsprit.core.problem.job;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
@ -30,6 +24,9 @@ import jsprit.core.util.Coordinate;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.*;
import static org.junit.Assert.assertFalse;
public class ServiceTest { public class ServiceTest {
@Test @Test
@ -151,17 +148,25 @@ public class ServiceTest {
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(); .addSkill("drill").addSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().contains("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("ScrewDriver")); assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
} }
@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(); .addSkill("DriLl").addSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().contains("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("drilL")); assertTrue(s.getRequiredSkills().containsSkill("drilL"));
} }
@Test
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){
Service s = Service.Builder.newInstance("s").setLocationId("loc")
.addSkill("screwDriver").build();
assertFalse(s.getRequiredSkills().containsSkill("drill"));
assertFalse(s.getRequiredSkills().containsSkill("drilL"));
}
} }

View file

@ -1,13 +1,12 @@
package jsprit.core.problem.job; package jsprit.core.problem.job;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import jsprit.core.problem.solution.route.activity.TimeWindow; import jsprit.core.problem.solution.route.activity.TimeWindow;
import jsprit.core.util.Coordinate; import jsprit.core.util.Coordinate;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.*;
public class ShipmentTest { public class ShipmentTest {
@Test @Test
@ -236,16 +235,24 @@ public class ShipmentTest {
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(); .addSkill("drill").addSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().contains("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("ScrewDriver")); assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
} }
@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(); .addSkill("DriLl").addSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().contains("drill")); assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.requiresSkill("drilL")); assertTrue(s.getRequiredSkills().containsSkill("drilL"));
} }
@Test
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("screwDriver").build();
assertFalse(s.getRequiredSkills().containsSkill("drill"));
assertFalse(s.getRequiredSkills().containsSkill("drilL"));
}
} }

View file

@ -192,9 +192,9 @@ public class VehicleImplTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("type").build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("type").build();
Vehicle v = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type1).setEndLocationId("start") Vehicle v = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type1).setEndLocationId("start")
.addSkill("drill").addSkill("screwdriver").build(); .addSkill("drill").addSkill("screwdriver").build();
assertTrue(v.getSkills().contains("drill")); assertTrue(v.getSkills().containsSkill("drill"));
assertTrue(v.hasSkill("drill")); assertTrue(v.getSkills().containsSkill("drill"));
assertTrue(v.hasSkill("screwdriver")); assertTrue(v.getSkills().containsSkill("screwdriver"));
} }
@Test @Test
@ -202,9 +202,9 @@ public class VehicleImplTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("type").build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("type").build();
Vehicle v = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type1).setEndLocationId("start") Vehicle v = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type1).setEndLocationId("start")
.addSkill("drill").addSkill("screwdriver").build(); .addSkill("drill").addSkill("screwdriver").build();
assertTrue(v.getSkills().contains("drill")); assertTrue(v.getSkills().containsSkill("drill"));
assertTrue(v.hasSkill("dRill")); assertTrue(v.getSkills().containsSkill("dRill"));
assertTrue(v.hasSkill("ScrewDriver")); assertTrue(v.getSkills().containsSkill("ScrewDriver"));
} }
@Test @Test
@ -212,7 +212,7 @@ public class VehicleImplTest {
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("type").build(); VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("type").build();
Vehicle v = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type1).setEndLocationId("start") Vehicle v = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type1).setEndLocationId("start")
.addSkill("drill").build(); .addSkill("drill").build();
assertFalse(v.hasSkill("ScrewDriver")); assertFalse(v.getSkills().containsSkill("ScrewDriver"));
} }