mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
merged skills
This commit is contained in:
parent
9c4bd498c4
commit
c04d3acd51
23 changed files with 279 additions and 343 deletions
|
|
@ -159,7 +159,7 @@ public class StateManagerTest {
|
|||
public void whenCreatingNewState_itShouldHaveAnIndex(){
|
||||
StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class));
|
||||
StateId stateId = stateManager.createStateId("foo-state");
|
||||
assertEquals(10,stateId.getIndex());
|
||||
assertEquals(21,stateId.getIndex());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -167,8 +167,8 @@ public class StateManagerTest {
|
|||
StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class));
|
||||
StateId fooState = stateManager.createStateId("foo-state");
|
||||
StateId foofooState = stateManager.createStateId("foo-foo-state");
|
||||
assertEquals(10,fooState.getIndex());
|
||||
assertEquals(11,foofooState.getIndex());
|
||||
assertEquals(21,fooState.getIndex());
|
||||
assertEquals(22,foofooState.getIndex());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -176,8 +176,8 @@ public class StateManagerTest {
|
|||
StateManager stateManager = new StateManager(mock(VehicleRoutingProblem.class));
|
||||
StateId fooState = stateManager.createStateId("foo-state");
|
||||
StateId foofooState = stateManager.createStateId("foo-state");
|
||||
assertEquals(10, fooState.getIndex());
|
||||
assertEquals(10, foofooState.getIndex());
|
||||
assertEquals(21, fooState.getIndex());
|
||||
assertEquals(21, foofooState.getIndex());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -1,27 +1,23 @@
|
|||
package jsprit.core.algorithm.state;
|
||||
|
||||
import jsprit.core.problem.Skills;
|
||||
import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
|
||||
import jsprit.core.problem.VehicleRoutingProblem;
|
||||
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 jsprit.core.problem.vehicle.VehicleImpl;
|
||||
import jsprit.core.problem.vehicle.VehicleType;
|
||||
import jsprit.core.problem.vehicle.VehicleTypeImpl;
|
||||
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.
|
||||
* Tests skill updater
|
||||
*/
|
||||
public class UpdateRequiredSkillsTest {
|
||||
|
||||
|
|
@ -31,24 +27,23 @@ public class UpdateRequiredSkillsTest {
|
|||
|
||||
@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));
|
||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("t").build();
|
||||
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocationId("start").setType(type).build();
|
||||
Service service = Service.Builder.newInstance("s").setLocationId("loc").addSkill("skill1").build();
|
||||
Service service2 = Service.Builder.newInstance("s2").setLocationId("loc").addSkill("skill1").addSkill("skill2").addSkill("skill3").build();
|
||||
Service service3 = Service.Builder.newInstance("s3").setLocationId("loc").addSkill("skill4").addSkill("skill5").build();
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).addJob(service)
|
||||
.addJob(service2).addJob(service3).build();
|
||||
route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(vrp.getJobActivityFactory()).addService(service).addService(service2).addService(service3).build();
|
||||
|
||||
stateManager = new StateManager(vrp);
|
||||
stateManager.updateSkillStates();
|
||||
stateManager.informInsertionStarts(Arrays.asList(route),null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenUpdatingRoute_skillsAtRouteLevelShouldContainAllSkills(){
|
||||
stateManager.update(route);
|
||||
Skills skills = stateManager.getRouteState(route, StateFactory.SKILLS, Skills.class);
|
||||
Skills skills = stateManager.getRouteState(route, InternalStates.SKILLS, Skills.class);
|
||||
assertNotNull(skills);
|
||||
Assert.assertEquals(5,skills.values().size());
|
||||
assertTrue(skills.containsSkill("skill1"));
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
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.VehicleRoutingProblem;
|
||||
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 jsprit.core.problem.vehicle.VehicleImpl;
|
||||
import jsprit.core.problem.vehicle.VehicleType;
|
||||
import jsprit.core.problem.vehicle.VehicleTypeImpl;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
|
|
@ -15,115 +15,72 @@ 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;
|
||||
private VehicleImpl vehicle;
|
||||
|
||||
private VehicleImpl vehicle2;
|
||||
|
||||
private VehicleRoutingProblem vrp;
|
||||
|
||||
@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);
|
||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("t").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();
|
||||
|
||||
Service service = Service.Builder.newInstance("s").setLocationId("loc").addSkill("skill1").build();
|
||||
Service service2 = Service.Builder.newInstance("s2").setLocationId("loc").addSkill("skill1").addSkill("skill2").addSkill("skill3").build();
|
||||
|
||||
Service service3 = Service.Builder.newInstance("s3").setLocationId("loc").addSkill("skill4").addSkill("skill5").build();
|
||||
Service service4 = Service.Builder.newInstance("s4").setLocationId("loc").addSkill("skill1").build();
|
||||
|
||||
vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).addVehicle(vehicle2).addJob(service)
|
||||
.addJob(service2).addJob(service3).addJob(service4).build();
|
||||
|
||||
route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(vrp.getJobActivityFactory()).addService(service).addService(service2).build();
|
||||
|
||||
StateManager stateManager = new StateManager(vrp);
|
||||
stateManager.updateSkillStates();
|
||||
stateManager.informInsertionStarts(Arrays.asList(route),null);
|
||||
|
||||
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.);
|
||||
public void whenJobToBeInsertedRequiresSkillsThatNewVehicleDoesNotHave_itShouldReturnFalse(){
|
||||
JobInsertionContext insertionContext = new JobInsertionContext(route,vrp.getJobs().get("s3"),vehicle,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.);
|
||||
JobInsertionContext insertionContext = new JobInsertionContext(route,vrp.getJobs().get("s4"),vehicle,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.);
|
||||
JobInsertionContext insertionContext = new JobInsertionContext(route,vrp.getJobs().get("s3"),vehicle2,route.getDriver(),0.);
|
||||
assertFalse(skillConstraint.fulfilled(insertionContext));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenRouteToBeOvertakenRequiresSkillsThatVehicleDoesNotHave2_itShouldReturnFalse(){
|
||||
JobInsertionContext insertionContext = new JobInsertionContext(route,vrp.getJobs().get("s4"),vehicle2,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.);
|
||||
JobInsertionContext insertionContext = new JobInsertionContext(route,vrp.getJobs().get("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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,12 +18,10 @@
|
|||
******************************************************************************/
|
||||
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;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class DeliveryTest {
|
||||
|
||||
@Test(expected=IllegalStateException.class)
|
||||
|
|
|
|||
|
|
@ -18,12 +18,10 @@
|
|||
******************************************************************************/
|
||||
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;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class PickupTest {
|
||||
|
||||
@Test(expected=IllegalStateException.class)
|
||||
|
|
|
|||
|
|
@ -16,16 +16,14 @@
|
|||
******************************************************************************/
|
||||
package jsprit.core.problem.job;
|
||||
|
||||
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
import jsprit.core.util.Coordinate;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
import jsprit.core.util.Coordinate;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
|
||||
public class ServiceTest {
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ package jsprit.core.problem.job;
|
|||
|
||||
import jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
import jsprit.core.util.Coordinate;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
|
|
|||
|
|
@ -19,14 +19,12 @@
|
|||
package jsprit.core.problem.vehicle;
|
||||
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle;
|
||||
import jsprit.core.util.Coordinate;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
|
||||
public class VehicleImplTest {
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue