@Override public Plan selectPlan(HasPlansAndId<Plan, Person> person) { if (delegate == null) { delegate = (PlanSelector) ((GenericPlanStrategyImpl) controler.getInjector().getBinding(Key.get(PlanStrategy.class, Names.named(delegateName))).getProvider().get()).getPlanSelector(); } if (MatsimRandom.getLocalInstance().nextDouble() <= this.selectionFrequency) { Plan plan = (Plan) delegate.selectPlan(person); if (slave != null) slave.addPlansForPsim(plan); return plan; } else return person.getSelectedPlan(); }
private void removePlans(final HasPlansAndId<PL, AG> person, final int maxNumberOfPlans) { while (person.getPlans().size() > maxNumberOfPlans) { PL plan = this.removalPlanSelector.selectPlan(person); person.removePlan(plan); if (plan == person.getSelectedPlan()) { final PL newPlanToSelect = new RandomPlanSelector<PL, AG>().selectPlan(person) ; if ( newPlanToSelect == null ) { throw new IllegalStateException( "could not find a plan to select for person "+person ); } person.setSelectedPlan( newPlanToSelect ); } } }
plan = this.planSelector.selectPlan(person);
/** * Test how a plan selector reacts when a person has no plans at all. The correct behavior would be * to just return null, as stated in * {@link PlanSelector#selectPlan(HasPlansAndId) PlanSelector.selectPlan(Person)} * * @author mrieser */ public void testNoPlans() { Person person = PopulationUtils.getFactory().createPerson(Id.create(1, Person.class)); assertNull(getPlanSelector().selectPlan(person)); }
person.getPlans().remove(selector.selectPlan(person)); assertEquals("test that a plan was removed", 4, person.getPlans().size()); assertFalse("test that plan with undefined score was removed.", person.getPlans().contains(plan3)); person.getPlans().remove(selector.selectPlan(person)); assertEquals("test that a plan was removed", 3, person.getPlans().size()); assertFalse("test that the plan with minimal score was removed", person.getPlans().contains(plan4)); person.getPlans().remove(selector.selectPlan(person)); person.getPlans().remove(selector.selectPlan(person)); assertEquals("test that two plans were removed", 1, person.getPlans().size()); assertTrue("test that the plan left has highest score", person.getPlans().contains(plan2));
plan = selector.selectPlan(person); assertEquals(40.0, plan.getScore().doubleValue(), 0.0); plan.setScore(null); plan = selector.selectPlan(person); assertEquals(30.0, plan.getScore().doubleValue(), 0.0); plan.setScore(null); plan = selector.selectPlan(person); assertEquals(10.0, plan.getScore().doubleValue(), 0.0); plan.setScore(null); plan = selector.selectPlan(person); assertEquals(-20.0, plan.getScore().doubleValue(), 0.0); plan.setScore(null); plan = selector.selectPlan(person); assertEquals(-50.0, plan.getScore().doubleValue(), 0.0); plan.setScore(null); plan = selector.selectPlan(person); assertNull(plan.getScore());
/** * Test how a plan selector reacts when a plan has a score of zero (0.0). * This test only ensures that a plan is returned and no Exception occurred when selecting a plan. */ public void testZeroScore() { PlanSelector<Plan, Person> selector = getPlanSelector(); Plan plan; Person person = PopulationUtils.getFactory().createPerson(Id.create(1, Person.class)); plan = PersonUtils.createAndAddPlan(person, false); plan.setScore(0.0); assertNotNull(selector.selectPlan(person)); }
person.getPlans().remove(selector.selectPlan(person)); person.getPlans().remove(selector.selectPlan(person)); assertEquals("test that two plans were removed", 4, person.getPlans().size()); assertFalse("test that plan with undefined score was removed.", person.getPlans().contains(plan3)); assertFalse("test that plan with worst score was removed.", person.getPlans().contains(plan4)); person.getPlans().remove(selector.selectPlan(person)); person.getPlans().remove(selector.selectPlan(person)); assertEquals("test that two plans were removed", 2, person.getPlans().size()); assertFalse("test that the plan with worst score was removed", person.getPlans().contains(plan1)); assertFalse("test that the plan with the 2nd-worst score was removed", person.getPlans().contains(plan6)); person.getPlans().remove(selector.selectPlan(person)); assertEquals("test that one plan was removed", 1, person.getPlans().size()); assertTrue("test that the plan with highest score of type b was not removed", person.getPlans().contains(plan2));
plan = PersonUtils.createAndAddPlan(person, false); plan.setScore(-10.0); assertNotNull(selector.selectPlan(person)); plan = PersonUtils.createAndAddPlan(person, false); plan.setScore(-50.0); assertNotNull(selector.selectPlan(person)); plan = PersonUtils.createAndAddPlan(person, false); plan.setScore(20.0); assertNotNull(selector.selectPlan(person)); plan = PersonUtils.createAndAddPlan(person, false); plan.setScore(Double.NEGATIVE_INFINITY); assertNotNull(selector.selectPlan(person));
assertNotNull(selector.selectPlan(person)); plan = PersonUtils.createAndAddPlan(person, false); plan.setScore(10.0); assertNotNull(selector.selectPlan(person)); plan.setScore(10.0); PersonUtils.createAndAddPlan(person, false); assertNotNull(selector.selectPlan(person)); plan = PersonUtils.createAndAddPlan(person, false); plan.setScore(10.0); assertNotNull(selector.selectPlan(person));
@Override public void testZeroScore() { this.network = createNetwork(); PlanSelector<Plan,Person> selector = getPlanSelector(); Link l1 = network.getLinks().get(Id.create("1", Link.class)); Link l6 = network.getLinks().get(Id.create("6", Link.class)); Link l7 = network.getLinks().get(Id.create("7", Link.class)); Person person = PopulationUtils.getFactory().createPerson(Id.create(1, Person.class)); Plan p1 = PopulationUtils.createPlan(person); Activity a = PopulationUtils.createActivityFromLinkId("h", l6.getId()); Activity b = PopulationUtils.createActivityFromLinkId("w", l7.getId()); Leg leg = PopulationUtils.createLeg(TransportMode.car); leg.setDepartureTime(0.0); leg.setTravelTime(10.0); leg.setTravelTime( 10.0 - leg.getDepartureTime() ); NetworkRoute r = RouteUtils.createLinkNetworkRouteImpl(l6.getId(), l7.getId()); ArrayList<Id<Link>> srcRoute = new ArrayList<Id<Link>>(); srcRoute.add(l1.getId()); r.setLinkIds(l6.getId(), srcRoute, l7.getId()); r.setDistance(RouteUtils.calcDistanceExcludingStartEndLink(r, network)); leg.setRoute(r); p1.addActivity(a); p1.addLeg(leg); p1.addActivity(b); p1.setScore(0.0); person.addPlan(p1); assertNotNull(selector.selectPlan(person)); }
person.addPlan(p1); assertNotNull(selector.selectPlan(person)); p3.setScore(-10.0); person.addPlan(p3); assertNotNull(selector.selectPlan(person)); assertNotNull(selector.selectPlan(person)); p1.setScore(Double.NEGATIVE_INFINITY); person.addPlan(p1); assertNotNull(selector.selectPlan(person));