Link link = this.network.getLinks().get(Id.create(value, Link.class)); if(link != null) this.currentEvent.addLink(link); else log.warn(String.format("Link %1$s not found!", value));
public void addNetworkChangeEvent(double speedInMpS, Link link, double startTime) { NetworkChangeEvent changeEvent = new NetworkChangeEvent( startTime ) ; changeEvent.setFreespeedChange(new NetworkChangeEvent.ChangeValue( NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, speedInMpS ) ) ; changeEvent.addLink( link ) ; // (1) add to mobsim: this.qSim.addNetworkChangeEvent(changeEvent); // (2) add to replanner: this.replanner.addNetworkChangeEvent(changeEvent); // yyyy wanted to delay this until some agent has actually encountered it. kai, feb'18 }
public void createNetworkChangeEvents(Network network, TravelTimeCalculator tcc2) { for (Link l : network.getLinks().values()){ if (l.getId().toString().startsWith("pt")) continue; double length = l.getLength(); double previousTravelTime=l.getLength()/l.getFreespeed() ; for (double time = 0; time<ENDTIME ; time = time+TIMESTEP){ double newTravelTime = tcc2.getLinkTravelTimes().getLinkTravelTime(l, time, null, null); if (newTravelTime != previousTravelTime){ NetworkChangeEvent nce = new NetworkChangeEvent(time); nce.addLink(l); double newFreespeed = length / newTravelTime; if (newFreespeed < MINIMUMFREESPEED) newFreespeed = MINIMUMFREESPEED; ChangeValue freespeedChange = new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, newFreespeed); nce.setFreespeedChange(freespeedChange); this.networkChangeEvents.add(nce); previousTravelTime= newTravelTime; } } } }
private final void setFreeSpeedExample(){ // example how to set the freespeed of some link to zero: final double now = this.qSim.getSimTimer().getTimeOfDay(); if ( now == 0.*3600. + 6.*60. ) { NetworkChangeEvent event = new NetworkChangeEvent( now ) ; event.setFreespeedChange(new NetworkChangeEvent.ChangeValue( NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 0. )); event.addLink( scenario.getNetwork().getLinks().get( Id.createLinkId( 51825 ))); NetworkUtils.addNetworkChangeEvent( scenario.getNetwork(),event); for ( MobsimAgent agent : this.getMobsimDataProvider().getAgents().values() ) { if ( !(agent instanceof MATSimStubAgent) ) { this.getReplanner().reRouteCurrentLeg(agent, now); } } } }
@Test public void testWriteChangeEventWithSmallValueAndReadBack() { final String fileName = utils.getOutputDirectory() + "wurst.xml"; 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); List<NetworkChangeEvent> outputEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(0.0); event.setFlowCapacityChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 0.000000000004)); event.addLink(link); outputEvents.add(event); new NetworkChangeEventsWriter().write(fileName, outputEvents); List<NetworkChangeEvent> inputEvents = new ArrayList<>(); NetworkChangeEventsParser parser = new NetworkChangeEventsParser(network, inputEvents); parser.readFile(fileName); assertThat(inputEvents, hasItem(event)); }
@Test public void testAbsoluteChangeEvents() { 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() + "absoluteChanges.xml"; List<NetworkChangeEvent> changeEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(100.0); event.setFlowCapacityChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 0.000000000005)); 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.ABSOLUTE_IN_SI_UNITS, event2.getFlowCapacityChange().getType()); Assert.assertEquals(event.getFlowCapacityChange().getValue(), event2.getFlowCapacityChange().getValue(), 1e-10); }
@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 testScaleFactorChangeEvents() { 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() + "scalefactorChanges.xml"; List<NetworkChangeEvent> changeEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(200.0); event.setLanesChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.FACTOR, 2.5)); 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.FACTOR, event2.getLanesChange().getType()); Assert.assertEquals(event.getLanesChange().getValue(), event2.getLanesChange().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); }
change.addLink(link2); change.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 20)); final NetworkChangeEvent event = change;
event.addLink(link1); event.setFreespeedChange(new ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS,10.)); ((TimeVariantLinkImpl)link1).applyEvent(event); event.addLink(link3); event.setFreespeedChange(new ChangeValue(NetworkChangeEvent.ChangeType.FACTOR,6.)); ((TimeVariantLinkImpl)link3).applyEvent(event);
change.addLink(link); change.setLanesChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 2.0)); link.applyEvent(change);
change.addLink(link); change.setFlowCapacityChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 2)); link.applyEvent(change);
@Test public void testActivation_inactive() { Config config = ConfigUtils.createConfig(); Scenario scenario = ScenarioUtils.createScenario(config); NetworkFactory nf = scenario.getNetwork().getFactory(); Node node1 = nf.createNode(Id.create(1, Node.class), new Coord(0, 0)); Node node2 = nf.createNode(Id.create(2, Node.class), new Coord(100, 100)); Link link1 = scenario.getNetwork().getFactory().createLink(Id.create(1, Link.class), node1, node2); link1.setFreespeed(20); scenario.getNetwork().addNode(node1); scenario.getNetwork().addNode(node2); scenario.getNetwork().addLink(link1); EventsManager eventsManager = EventsUtils.createEventsManager(); QSim qsim = new QSimBuilder(config).useDefaults().build(scenario, eventsManager); NetworkChangeEventsEngine engine = new NetworkChangeEventsEngine(scenario.getNetwork(), new MessageQueue()); qsim.addMobsimEngine(engine); engine.onPrepareSim(); for (int i = 0; i < 30; i++) { engine.doSimStep(i); } NetworkChangeEvent changeEvent = new NetworkChangeEvent(37); changeEvent.addLink(link1); changeEvent.setFreespeedChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 50)); try { engine.addNetworkChangeEvent(changeEvent); Assert.fail("Expected exception due to links not being time dependent, but got none."); } catch (Exception expected) { } }
change.addLink(link2); change.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 20)); final NetworkChangeEvent event = change;
changeEvent.addLink(link1); changeEvent.setFreespeedChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 50)); engine.addNetworkChangeEvent(changeEvent);
changeEvent.addLink(link1); changeEvent.setFlowCapacityChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.FACTOR, 2)); engine.addNetworkChangeEvent(changeEvent);
change.addLink(link2); change.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 20)); final NetworkChangeEvent event = change;
change.addLink(link); change.setFreespeedChange(new ChangeValue(ChangeType.FACTOR, 0.5)); link.applyEvent(change);
change.addLink(link); change.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 20)); link.applyEvent(change);