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:35:40 +02:00
parent 9c4bd498c4
commit c04d3acd51
23 changed files with 279 additions and 343 deletions

View file

@ -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

View file

@ -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"));

View file

@ -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));
}
}

View file

@ -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)

View file

@ -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)

View file

@ -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 {

View file

@ -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.*;

View file

@ -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 {