public void addPlansForPsim(Plan plan) { if (plansForPSim == null) plansForPSim = new HashMap<>(); plansForPSim.put(plan.getPerson().getId(),plan); }
private final String getSubpopulation(final Plan plan) { if (this.subpopulationAttribute == null) return null; else if (plan.getPerson() == null) return null; else if (this.personAttributes == null) return null; else { Object o = this.personAttributes.getAttribute(plan.getPerson().getId().toString(), this.subpopulationAttribute); if (o != null) return o.toString(); else return null; } }
@Override public boolean areLinked( final Plan p1, final Plan p2) { final boolean areLinked = containsCoTraveler( p1 , p2.getPerson().getId() ); assert areLinked == containsCoTraveler( p2 , p1.getPerson().getId() ) : "inconsistent plans "+p1+" "+(areLinked ? "contains " : "does not contains ")+p2.getPerson().getId()+ " and "+p2+" "+(!areLinked ? "contains " : "does not contains ")+p1.getPerson().getId(); return areLinked; }
private static Map<Id<Person>, Plan> getPlansMap(final GroupPlans plan) { final Map<Id<Person>, Plan> planPerAgent = new LinkedHashMap<>(); for ( Plan p : plan.getAllIndividualPlans() ) { planPerAgent.put( p.getPerson().getId() , p ); } return planPerAgent; }
private void writeIndividualPlan(final Plan plan) { final List<Tuple<String, String>> atts = new ArrayList<Tuple<String, String>>(); atts.add( createTuple( PERSON_ATT , plan.getPerson().getId().toString() ) ); final int index = plan.getPerson().getPlans().indexOf( plan ); assert index >= 0; atts.add( createTuple( PLAN_NR_ATT , index+"" ) ); writeStartTag( PLAN_TAG , atts , true ); }
@Override public double getWeight( final Plan indivPlan, final ReplanningGroup replanningGroup) { final double planScore = baseWeight.getWeight( indivPlan , replanningGroup ); final double bestScore = getBestScore( indivPlan.getPerson() , replanningGroup ); return planScore - bestScore; }
@Override public double getWeight( final Plan indivPlan, final ReplanningGroup replanningGroup) { final Double weight = (Double) personAttributes.getAttribute( indivPlan.getPerson().getId().toString(), weightAttribute ); return (weight == null ? 1 : weight.doubleValue()) * delegate.getWeight( indivPlan , replanningGroup ); } }
@Override public String toString() { return "{PlanRecord: "+plan.getPerson().getId()+":"+plan.getScore()+ " linkedWith:"+(jointPlan == null ? "[]" : jointPlan.getIndividualPlans().keySet())+ " linkedPlansSize:"+linkedPlans.size()+ " weight="+avgJointPlanWeight+ " isFeasible="+isStillFeasible+"}"; }
private Map<Id<Person>, Plan> getPlansMap(final GroupPlans groupPlans) { final Map<Id<Person>, Plan> map = new HashMap< >(); for (Plan p : groupPlans.getIndividualPlans()) { map.put( p.getPerson().getId() , p ); } for (JointPlan jp : groupPlans.getJointPlans()) { map.putAll( jp.getIndividualPlans() ); } return map; }
public boolean addAndCheckTabu( final Iterable<PlanRecord> records ) { boolean tabu = areAltersTabu( records ); for ( PlanRecord r :records ) { tabu = !tabuAgents.add( r.getPlan().getPerson().getId() ) || tabu; } return tabu; }
private boolean areAltersTabu( final Iterable<PlanRecord> records ) { for ( PlanRecord r :records ) { final Set<Id<Person>> alters = socialNetwork.getAlters( r.getPlan().getPerson().getId() ); for ( Id<Person> alter : alters ) { if ( tabuAgents.contains( alter ) ) { return true; } } } return false; } }
@Override public String toString() { return "{PlanRecord: "+plan.getPerson().getId()+":"+plan.getScore()+ " linkedWith:"+(jointPlan == null ? "[]" : jointPlan.getIndividualPlans().keySet())+ " weight="+individualPlanWeight+ " isFeasible="+isStillFeasible+"}"; } }
private int rank(final Plan plan) { int nWorsePlans = 0; for ( Plan other : plan.getPerson().getPlans() ) { if ( other != plan && other.getScore() < plan.getScore() ) nWorsePlans++; } return nWorsePlans; }
@Override public void run(Plan plan) { Plan newPlan = executedPlans.getExecutedPlans().get( plan.getPerson().getId() ) ; Gbl.assertNotNull( newPlan ) ; PopulationUtils.copyFromTo(newPlan, plan); } };
@Override public void handlePlan(final Plan plan) { // Creating a dummy population which only contains the plans which are passed here. // I need to copy the plans because I am not supposed to add a plan to a different Person. // I also need to memorize the plans which are passed here, because I am supposed to mutate them. final Person personWithOnlySelectedPlan = this.exportPopulation.getFactory().createPerson(plan.getPerson().getId()); final Plan planForNewPerson = PopulationUtils.createPlan(personWithOnlySelectedPlan); PopulationUtils.copyFromTo(plan, planForNewPerson); personWithOnlySelectedPlan.addPlan(planForNewPerson); this.exportPopulation.addPerson(personWithOnlySelectedPlan); this.plansToMutate.put(plan.getPerson().getId(), plan); }
@Override public Plan createCopyOfSelectedPlanAndMakeSelected() { Plan oldPlan = this.getSelectedPlan(); if (oldPlan == null) { return null; } Plan newPlan = PopulationUtils.createPlan(oldPlan.getPerson()); PopulationUtils.copyFromTo(oldPlan, newPlan); this.getPlans().add(newPlan); this.setSelectedPlan(newPlan); return newPlan; }