@@ -105,21 +105,38 @@ namespace dsm {
105105 }
106106
107107 int Street::nMovingAgents () const { return m_movingAgents.size (); }
108- int Street::nExitingAgents (Direction direction) const {
109- int nAgents{0 };
108+ double Street::nExitingAgents (Direction direction, bool normalizeOnNLanes) const {
109+ double nAgents{0 .};
110+ int n{0 };
110111 for (auto i{0 }; i < m_nLanes; ++i) {
111112 if (direction == Direction::ANY) {
112113 nAgents += m_exitQueues[i].size ();
114+ ++n;
113115 } else if (m_laneMapping[i] == direction) {
114116 nAgents += m_exitQueues[i].size ();
115117 } else if (m_laneMapping[i] == Direction::RIGHTANDSTRAIGHT &&
116118 (direction == Direction::RIGHT || direction == Direction::STRAIGHT)) {
117119 nAgents += m_exitQueues[i].size ();
120+ ++n;
118121 } else if (m_laneMapping[i] == Direction::LEFTANDSTRAIGHT &&
119122 (direction == Direction::LEFT || direction == Direction::STRAIGHT)) {
120123 nAgents += m_exitQueues[i].size ();
124+ ++n;
125+ } else if (direction == Direction::RIGHTANDSTRAIGHT &&
126+ (m_laneMapping[i] == Direction::RIGHT ||
127+ m_laneMapping[i] == Direction::STRAIGHT)) {
128+ nAgents += m_exitQueues[i].size ();
129+ ++n;
130+ } else if (direction == Direction::LEFTANDSTRAIGHT &&
131+ (m_laneMapping[i] == Direction::LEFT ||
132+ m_laneMapping[i] == Direction::STRAIGHT)) {
133+ nAgents += m_exitQueues[i].size ();
134+ ++n;
121135 }
122136 }
137+ if (normalizeOnNLanes) {
138+ n > 1 ? nAgents /= n : nAgents;
139+ }
123140 return nAgents;
124141 }
125142
0 commit comments