MATSIM
MyMobsimAgent.java
Go to the documentation of this file.
1 package tutorial.programming.ownMobsimAgent;
2 
3 import org.matsim.api.core.v01.Id;
11 import org.matsim.facilities.Facility;
12 
13 class MyMobsimAgent implements MobsimAgent {
14 
15  private final Scenario scenario;
16 
17  private enum MyState {Activity, Leg}
18 
19  private MyState myState = MyState.Activity;
20  private final Id<Person> id;
21  private Id<Link> currentLinkId;
22  private final MobsimTimer simTimer;
23 
24  MyMobsimAgent(Scenario scenario, MobsimTimer simTimer) {
25  this.id = Id.createPersonId("MyMobsimAgent");
26  this.scenario = scenario;
27  this.simTimer = simTimer;
28  Id<Link> linkId = getRandomLinkId();
29  this.currentLinkId = linkId;
30  }
31 
32  private Id<Link> getRandomLinkId() {
33  // get a random link:
34  Link[] links = NetworkUtils.getSortedLinks(scenario.getNetwork());
35  int random = MatsimRandom.getLocalInstance().nextInt(links.length);
36  return links[random].getId();
37  }
38 
39  @Override
40  public Id<Link> getCurrentLinkId() {
41  return currentLinkId;
42  }
43 
44  @Override
45  public Id<Link> getDestinationLinkId() {
46  return getRandomLinkId();
47  }
48 
49  @Override
50  public Id<Person> getId() {
51  return this.id;
52  }
53 
54  @Override
55  public State getState() {
56  switch (myState) {
57  case Activity:
58  return State.ACTIVITY;
59  case Leg:
60  return State.LEG;
61  }
62  throw new IllegalStateException();
63  }
64 
65  @Override
66  public double getActivityEndTime() {
67  if (simTimer.getTimeOfDay() > 18.0 * 60.0 * 60.0) {
68  // Sandmaennchen. Ab in die Falle.
69  return Double.POSITIVE_INFINITY;
70  } else {
71  int currentTenMinuteInterval = (int) (simTimer.getTimeOfDay() / (24.0 * 6.0));
72  return (currentTenMinuteInterval + 1) * 24.0 * 6.0;
73  }
74  }
75 
76  @Override
77  public void endActivityAndComputeNextState(double now) {
78  myState = MyState.Leg;
79  }
80 
81  @Override
82  public void endLegAndComputeNextState(double now) {
83  myState = MyState.Activity;
84  }
85 
86  @Override
87  public void setStateToAbort(double now) {
88  throw new UnsupportedOperationException();
89  }
90 
91  @Override
92  public Double getExpectedTravelTime() {
93  return 5 * 60.0; // all my travels take 5 minutes
94  }
95 
96  @Override
97  public Double getExpectedTravelDistance() {
98  return 1000.0; // all my travels are 1km
99  }
100 
101  @Override
102  public String getMode() {
103  return "teleportation";
104  }
105 
106  @Override
107  public void notifyArrivalOnLinkByNonNetworkMode(Id<Link> linkId) {
108  this.currentLinkId = linkId;
109  }
110 
111 @Override
112 public Facility<? extends Facility<?>> getCurrentFacility() {
113  // TODO Auto-generated method stub
114  throw new RuntimeException("not implemented") ;
115 }
116 
117 @Override
118 public Facility<? extends Facility<?>> getDestinationFacility() {
119  // TODO Auto-generated method stub
120  throw new RuntimeException("not implemented") ;
121 }
122 
123 }
static Link[] getSortedLinks(final Network network)
void endLegAndComputeNextState(final double now)
void endActivityAndComputeNextState(final double now)
void notifyArrivalOnLinkByNonNetworkMode(final Id< Link > linkId)