private void assignDistanceBinsPerPerson(DesiredDurationPerson desiredDurationPerson) { Id personId = desiredDurationPerson.getPersonId(); PlanImpl plan = (PlanImpl) this.plans.getPersons().get(personId).getSelectedPlan(); List<? extends PlanElement> actslegs = plan.getPlanElements(); for (int j = 0; j < actslegs.size(); j = j + 2) { final Activity act = (Activity) actslegs.get(j); if (act.getType().startsWith("leisure")) { final LegImpl leg = (LegImpl) actslegs.get(j + 1); if (leg.getMode().equals(this.mode)) { int randomDistance = (int) Math.round( this.distanceBins.getRandomDistance( desiredDurationPerson.planContainsLeisurePriorToWork())); String newActType = act.getType() + "_" + randomDistance; act.setType(newActType); // minimum duration is 30 min! -> else division by zero while scoring plan.getPerson() .getDesires() .putActivityDuration( newActType, Math.max(30 * 60, desiredDurationPerson.getDuration())); // for plot this.durationDistanceBins.addVal(desiredDurationPerson.getDuration(), randomDistance); } } } }