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

merged skills

This commit is contained in:
oblonski 2014-07-29 11:28:18 +02:00
commit 9c4bd498c4
17 changed files with 676 additions and 32 deletions

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

@ -0,0 +1,129 @@
package jsprit.core.problem.constraint;
import jsprit.core.algorithm.state.StateManager;
import jsprit.core.algorithm.state.UpdateSkills;
import jsprit.core.problem.Skills;
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
import jsprit.core.problem.job.Service;
import jsprit.core.problem.misc.JobInsertionContext;
import jsprit.core.problem.solution.route.VehicleRoute;
import jsprit.core.problem.vehicle.Vehicle;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class SkillConstraintTest {
private HardRouteStateLevelConstraint skillConstraint;
private StateManager stateManager;
private VehicleRoute route;
private Vehicle vehicle;
@Before
public void doBefore(){
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));
stateManager.update(route);
skillConstraint = new HardSkillConstraint(stateManager);
}
@Test
public void whenJobToBeInsertedRequiresSkillsThatVehicleDoesNotHave_itShouldReturnFalse(){
Service s4 = mock(Service.class);
when(s4.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill5").build());
when(vehicle.getSkills()).thenReturn(Skills.Builder.newInstance()
.addAllSkills(Arrays.asList("skill1","skill2","skill3","skill4")).build());
JobInsertionContext insertionContext = new JobInsertionContext(route,s4,vehicle,route.getDriver(),0.);
assertFalse(skillConstraint.fulfilled(insertionContext));
}
@Test
public void whenJobToBeInsertedRequiresSkillsThatVehicle2DoesNotHave_itShouldReturnFalse(){
Service s4 = mock(Service.class);
when(s4.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill5").build());
Vehicle vehicle2 = mock(Vehicle.class);
when(vehicle2.getSkills()).thenReturn(Skills.Builder.newInstance()
.addAllSkills(Arrays.asList("skill1","skill2","skill3","skill4")).build());
JobInsertionContext insertionContext = new JobInsertionContext(route,s4,vehicle2,route.getDriver(),0.);
assertFalse(skillConstraint.fulfilled(insertionContext));
}
@Test
public void whenJobToBeInsertedRequiresSkillsThatVehicleHave_itShouldReturnTrue(){
Service s4 = mock(Service.class);
when(s4.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill4").build());
when(vehicle.getSkills()).thenReturn(Skills.Builder.newInstance()
.addAllSkills(Arrays.asList("skill1","skill2","skill3","skill4","skill5")).build());
JobInsertionContext insertionContext = new JobInsertionContext(route,s4,vehicle,route.getDriver(),0.);
assertTrue(skillConstraint.fulfilled(insertionContext));
}
@Test
public void whenJobToBeInsertedRequiresSkillsThatVehicle2Have_itShouldReturnTrue(){
Service s4 = mock(Service.class);
when(s4.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill4").build());
Vehicle vehicle2 = mock(Vehicle.class);
when(vehicle2.getSkills()).thenReturn(Skills.Builder.newInstance()
.addAllSkills(Arrays.asList("skill1","skill2","skill3","skill4","skill5")).build());
JobInsertionContext insertionContext = new JobInsertionContext(route,s4,vehicle2,route.getDriver(),0.);
assertTrue(skillConstraint.fulfilled(insertionContext));
}
@Test
public void whenRouteToBeOvertakenRequiresSkillsThatVehicleDoesNotHave_itShouldReturnFalse(){
Service s4 = mock(Service.class);
when(s4.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill4").build());
when(vehicle.getSkills()).thenReturn(Skills.Builder.newInstance()
.addAllSkills(Arrays.asList("skill1","skill2","skill6","skill4")).build());
JobInsertionContext insertionContext = new JobInsertionContext(route,s4,vehicle,route.getDriver(),0.);
assertFalse(skillConstraint.fulfilled(insertionContext));
}
@Test
public void whenRouteToBeOvertakenRequiresSkillsThatVehicleDoesHave_itShouldReturnTrue(){
Service s4 = mock(Service.class);
when(s4.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill4").build());
when(vehicle.getSkills()).thenReturn(Skills.Builder.newInstance()
.addAllSkills(Arrays.asList("skill1","skill2","skill3","skill4","skill5")).build());
JobInsertionContext insertionContext = new JobInsertionContext(route,s4,vehicle,route.getDriver(),0.);
assertTrue(skillConstraint.fulfilled(insertionContext));
}
@Test
public void whenNoSkillsAreRequired_itShouldReturnTrue(){
Service s4 = mock(Service.class);
when(s4.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().build());
when(vehicle.getSkills()).thenReturn(Skills.Builder.newInstance().build());
JobInsertionContext insertionContext = new JobInsertionContext(VehicleRoute.emptyRoute(),s4,vehicle,route.getDriver(),0.);
assertTrue(skillConstraint.fulfilled(insertionContext));
}
@Test
public void whenSkillsIsRequiredWhichVehicleDoesNotHave_itShouldReturnFalse(){
Service s4 = mock(Service.class);
when(s4.getRequiredSkills()).thenReturn(Skills.Builder.newInstance().addSkill("skill1").build());
when(vehicle.getSkills()).thenReturn(Skills.Builder.newInstance().build());
JobInsertionContext insertionContext = new JobInsertionContext(VehicleRoute.emptyRoute(),s4,vehicle,route.getDriver(),0.);
assertFalse(skillConstraint.fulfilled(insertionContext));
}
}

View file

@ -19,6 +19,8 @@
package jsprit.core.problem.job;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
@ -56,6 +58,30 @@ public class DeliveryTest {
assertEquals(1,one.getSize().getNuOfDimensions());
assertEquals(1,one.getSize().get(0));
}
@Test
public void whenAddingSkills_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("drill").addSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
}
@Test
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("DriLl").addSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().containsSkill("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

@ -19,6 +19,8 @@
package jsprit.core.problem.job;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
@ -56,6 +58,31 @@ public class PickupTest {
assertEquals(1,one.getSize().getNuOfDimensions());
assertEquals(1,one.getSize().get(0));
}
@Test
public void whenAddingSkills_theyShouldBeAddedCorrectly(){
Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc")
.addSkill("drill").addSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
}
@Test
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){
Pickup s = (Pickup) Pickup.Builder.newInstance("s").setLocationId("loc")
.addSkill("DriLl").addSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().containsSkill("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;
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.Set;
@ -30,6 +24,9 @@ import jsprit.core.util.Coordinate;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.junit.Assert.assertFalse;
public class ServiceTest {
@Test
@ -146,5 +143,30 @@ public class ServiceTest {
assertEquals(1.0,s.getTimeWindow().getStart(),0.01);
assertEquals(2.0,s.getTimeWindow().getEnd(),0.01);
}
@Test
public void whenAddingSkills_theyShouldBeAddedCorrectly(){
Service s = Service.Builder.newInstance("s").setLocationId("loc")
.addSkill("drill").addSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
}
@Test
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){
Service s = Service.Builder.newInstance("s").setLocationId("loc")
.addSkill("DriLl").addSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().containsSkill("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

@ -18,14 +18,13 @@
******************************************************************************/
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.util.Coordinate;
import org.junit.Test;
import static org.junit.Assert.*;
public class ShipmentTest {
@Test
@ -249,4 +248,29 @@ public class ShipmentTest {
assertEquals(1,one.getSize().getNuOfDimensions());
assertEquals(1,one.getSize().get(0));
}
@Test
public void whenAddingSkills_theyShouldBeAddedCorrectly(){
Shipment s = Shipment.Builder.newInstance("s").setPickupLocation("loc").setDeliveryLocation("delLoc")
.addSkill("drill").addSkill("screwdriver").build();
assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("drill"));
assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
}
@Test
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){
Delivery s = (Delivery) Delivery.Builder.newInstance("s").setLocationId("loc")
.addSkill("DriLl").addSkill("screwDriver").build();
assertTrue(s.getRequiredSkills().containsSkill("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

@ -205,5 +205,33 @@ public class VehicleImplTest {
assertTrue(!v.equals(v2));
}
@Test
public void whenAddingSkills_theyShouldBeAddedCorrectly(){
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("type").build();
Vehicle v = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type1).setEndLocationId("start")
.addSkill("drill").addSkill("screwdriver").build();
assertTrue(v.getSkills().containsSkill("drill"));
assertTrue(v.getSkills().containsSkill("drill"));
assertTrue(v.getSkills().containsSkill("screwdriver"));
}
@Test
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly(){
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("type").build();
Vehicle v = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type1).setEndLocationId("start")
.addSkill("drill").addSkill("screwdriver").build();
assertTrue(v.getSkills().containsSkill("drill"));
assertTrue(v.getSkills().containsSkill("dRill"));
assertTrue(v.getSkills().containsSkill("ScrewDriver"));
}
@Test
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly(){
VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("type").build();
Vehicle v = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type1).setEndLocationId("start")
.addSkill("drill").build();
assertFalse(v.getSkills().containsSkill("ScrewDriver"));
}
}