MATSIM
RunPPopulationGenerator.java
Go to the documentation of this file.
1 package tutorial.programming.example08DemandGeneration;
2 
3 import java.util.HashMap;
4 import java.util.Map;
5 
6 import org.matsim.api.core.v01.Coord;
7 import org.matsim.api.core.v01.Id;
20 
24 public class RunPPopulationGenerator implements Runnable {
25 
26  private Map<String, Coord> zoneGeometries = new HashMap<>();
27 
29 
30  private Scenario scenario;
31 
33 
34  public static void main(String[] args) {
36  potsdamPop.run();
37  }
38 
39  @Override
40  public void run() {
42  population = scenario.getPopulation();
43  fillZoneData();
45  PopulationWriter populationWriter = new PopulationWriter(scenario.getPopulation(), scenario.getNetwork());
46  populationWriter.write("./input/population.xml");
47  }
48 
49  private void fillZoneData() {
50  // Add the locations you want to use here.
51  // (with proper coordinates)
52  zoneGeometries.put("home1", new Coord((double) 0, (double) 1));
53  zoneGeometries.put("work1", new Coord((double) 50, (double) 0));
54  }
55 
56  private void generatePopulation() {
57  generateHomeWorkHomeTrips("home1", "work1", 20); // create 20 trips from zone 'home1' to 'work1'
58  //... generate more trips here
59  }
60 
61  private void generateHomeWorkHomeTrips(String from, String to, int quantity) {
62  for (int i=0; i<quantity; ++i) {
63  Coord source = zoneGeometries.get(from);
64  Coord sink = zoneGeometries.get(to);
65  Person person = population.getFactory().createPerson(createId(from, to, i, TransportMode.car));
66  Plan plan = population.getFactory().createPlan();
67  Coord homeLocation = shoot(ct.transform(source));
68  Coord workLocation = shoot(ct.transform(sink));
69  plan.addActivity(createHome(homeLocation));
70  plan.addLeg(createDriveLeg());
71  plan.addActivity(createWork(workLocation));
72  plan.addLeg(createDriveLeg());
73  plan.addActivity(createHome(homeLocation));
74  person.addPlan(plan);
75  population.addPerson(person);
76  }
77  }
78 
79  private Leg createDriveLeg() {
80  Leg leg = population.getFactory().createLeg(TransportMode.car);
81  return leg;
82  }
83 
84  private Coord shoot(Coord source) {
85  // Insert code here to blur the input coordinate.
86  // For example, add a random number to the x and y coordinates.
87  return source;
88  }
89 
90  private Activity createWork(Coord workLocation) {
91  Activity activity = population.getFactory().createActivityFromCoord("work", workLocation);
92  activity.setEndTime(17*60*60);
93  return activity;
94  }
95 
96  private Activity createHome(Coord homeLocation) {
97  Activity activity = population.getFactory().createActivityFromCoord("home", homeLocation);
98  activity.setEndTime(9*60*60);
99  return activity;
100  }
101 
102  private Id<Person> createId(String source, String sink, int i, String transportMode) {
103  return Id.create(transportMode + "_" + source + "_" + sink + "_" + i, Person.class);
104  }
105 
106 }
abstract void addLeg(final Leg leg)
static CoordinateTransformation getCoordinateTransformation(final String fromSystem, final String toSystem)
abstract void addActivity(final Activity act)
Id< Person > createId(String source, String sink, int i, String transportMode)
static Config createConfig(final String filename)
Activity createActivityFromCoord(String actType, Coord coord)
static Scenario createScenario(final Config config)
void setEndTime(final double seconds)