19 package tutorial.programming.ownMobsimAgentWithPerception;
21 import java.util.HashMap;
40 class MyObserver
implements BasicEventHandler {
41 Map<Id<Link>,Double> nVehs =
new HashMap<>() ;
42 private Scenario scenario;
44 MyObserver( Scenario sc ) {
49 public void handleEvent(Event event) {
50 Id<Link> linkId = null ;
52 if ( event instanceof LinkEnterEvent ) {
53 linkId = ((LinkEnterEvent) event).getLinkId() ;
54 }
else if ( event instanceof VehicleEntersTrafficEvent ) {
55 linkId = ((VehicleEntersTrafficEvent) event).getLinkId() ;
57 if ( nVehs.get( linkId ) != null ) {
58 double val = nVehs.get( linkId ) ;
59 nVehs.put( linkId, val++ ) ;
61 nVehs.put( linkId, 1. ) ;
64 String arrivalMode = TransportMode.car ;
65 if ( event instanceof LinkLeaveEvent ) {
66 linkId = ((LinkLeaveEvent) event).getLinkId() ;
67 }
else if ( event instanceof VehicleLeavesTrafficEvent ) {
68 linkId = ((VehicleLeavesTrafficEvent)event).getLinkId() ;
69 arrivalMode = ((VehicleLeavesTrafficEvent)event).getNetworkMode() ;
71 if ( arrivalMode.equals( TransportMode.car ) ) {
72 if ( nVehs.get( linkId ) != null ) {
73 double val = nVehs.get( linkId ) ;
74 nVehs.put( linkId, val-- ) ;
76 throw new RuntimeException(
"should not happen; a car should always have to enter a link before leaving it") ;
81 double congestionLevel(Id<Link> linkId) {
82 final Double nn = nVehs.get( linkId );
86 final Link link = this.scenario.getNetwork().getLinks().get(linkId);
87 double nLanes = link.getNumberOfLanes() ;
88 double length = link.getLength() ;
89 double estimStorCap = nLanes * length / 7.5 ;
90 return nn / estimStorCap ;
94 public void reset(
int iteration) {