@Override public ChangeValue getChangeValue(NetworkChangeEvent event) { return event.getFreespeedChange(); } };
if(event.getFreespeedChange() != null) { writeChangeValue(NetworkChangeEventsParser.FREESPEED_TAG, event.getFreespeedChange());
/** * Applies a new change event to the link. * * @param event a network change event. */ protected synchronized void applyEvent(final NetworkChangeEvent event) { if(this.changeEvents == null) this.changeEvents = new TreeMap<>(); this.changeEvents.put(event.getStartTime(), event); if (event.getFreespeedChange() != null) { this.variableFreespeed.incChangeEvents(); } if (event.getFlowCapacityChange() != null) { this.variableFlowCapacity.incChangeEvents(); } if (event.getLanesChange() != null) { this.variableLanes.incChangeEvents(); } }
private void addNetworkChangeEventToLocalDataStructure(NetworkChangeEvent networkChangeEvent) { ChangeValue freespeedChange = networkChangeEvent.getFreespeedChange(); if (freespeedChange != null) { double startTime = networkChangeEvent.getStartTime(); Map<Link,Double> newLinkSpeedsAtThisTime = changedLinksByTime.computeIfAbsent(startTime, k -> new HashMap<>()); for ( Link link : networkChangeEvent.getLinks() ) { // yy seems that the following should be available centrally. kai, dec'17 double newSpeed ; switch ( freespeedChange.getType() ) { case ABSOLUTE_IN_SI_UNITS: newSpeed = freespeedChange.getValue() ; break; case FACTOR: newSpeed = link.getFreespeed() * freespeedChange.getValue() ; break; case OFFSET_IN_SI_UNITS: newSpeed = link.getFreespeed() + freespeedChange.getValue() ; break; default: throw new RuntimeException("change event type not implemented") ; } if ( startTime > 0. ) { log.debug( "registering a change event for time=" + startTime + "; linkId=" + link.getId() ) ; } newLinkSpeedsAtThisTime.put( link, newSpeed ) ; } } }
public TtmobsimListener(NetworkChangeEvent nce) { if (nce.getLinks().size() > 1) { throw new RuntimeException("Expecting only one network change event for a single link. Aborting..."); } else { for (Link link : nce.getLinks()) { this.link = link; this.networkChangeEventTime = nce.getStartTime(); this.reducedFreespeed = nce.getFreespeedChange().getValue(); Assert.assertEquals(true, this.reducedFreespeed < this.link.getFreespeed()); } } }
@Test public void testNegativeOffsetChangeEvents() { final Network network = NetworkUtils.createNetwork(); Node node1 = NetworkUtils.createAndAddNode(network, Id.create("1", Node.class), new Coord((double) 0, (double) 0)); Node node2 = NetworkUtils.createAndAddNode(network, Id.create("2", Node.class), new Coord((double) 0, (double) 1000)); final Link link = NetworkUtils.createAndAddLink(network, Id.create("2", Link.class), node1, node2, (double) 1500, 1.667, (double) 3600, (double) 1); final String fileName = this.utils.getOutputDirectory() + "offsetChanges.xml"; List<NetworkChangeEvent> changeEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(300.0); event.setFreespeedChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.OFFSET_IN_SI_UNITS, -3.6)); event.addLink(link); changeEvents.add(event); new NetworkChangeEventsWriter().write(fileName, changeEvents); List<NetworkChangeEvent> changeEvents2 = new ArrayList<>(); new NetworkChangeEventsParser(network, changeEvents2).readFile(fileName); Assert.assertFalse(changeEvents2.isEmpty()); Assert.assertEquals(1, changeEvents2.size()); NetworkChangeEvent event2 = changeEvents2.get(0); Assert.assertEquals(event.getStartTime(), event2.getStartTime(), 0.0); Assert.assertEquals(NetworkChangeEvent.ChangeType.OFFSET_IN_SI_UNITS, event2.getFreespeedChange().getType()); Assert.assertEquals(event.getFreespeedChange().getValue(), event2.getFreespeedChange().getValue(), 1e-10); }
@Test public void testPositiveOffsetChangeEvents() { final Network network = NetworkUtils.createNetwork(); Node node1 = NetworkUtils.createAndAddNode(network, Id.create("1", Node.class), new Coord((double) 0, (double) 0)); Node node2 = NetworkUtils.createAndAddNode(network, Id.create("2", Node.class), new Coord((double) 0, (double) 1000)); final Link link = NetworkUtils.createAndAddLink(network, Id.create("2", Link.class), node1, node2, (double) 1500, 1.667, (double) 3600, (double) 1); final String fileName = this.utils.getOutputDirectory() + "offsetChanges.xml"; List<NetworkChangeEvent> changeEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(300.0); event.setFreespeedChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.OFFSET_IN_SI_UNITS, +3.6)); event.addLink(link); changeEvents.add(event); new NetworkChangeEventsWriter().write(fileName, changeEvents); List<NetworkChangeEvent> changeEvents2 = new ArrayList<>(); new NetworkChangeEventsParser(network, changeEvents2).readFile(fileName); Assert.assertFalse(changeEvents2.isEmpty()); Assert.assertEquals(1, changeEvents2.size()); NetworkChangeEvent event2 = changeEvents2.get(0); Assert.assertEquals(event.getStartTime(), event2.getStartTime(), 0.0); Assert.assertEquals(NetworkChangeEvent.ChangeType.OFFSET_IN_SI_UNITS, event2.getFreespeedChange().getType()); Assert.assertEquals(event.getFreespeedChange().getValue(), event2.getFreespeedChange().getValue(), 1e-10); }