this.currentEvent.setFreespeedChange(newNetworkChangeType(atts .getValue(CHANGE_TYPE_TAG), atts.getValue(VALUE_TAG)));
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 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); }
change.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 20)); final NetworkChangeEvent event = change; NetworkUtils.addNetworkChangeEvent(((Network)network),event);
change.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 20)); link.applyEvent(change); change2.setFreespeedChange(new ChangeValue(ChangeType.FACTOR, 3.0)); link.applyEvent(change2); change3.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 30)); link.applyEvent(change3); change4.setFreespeedChange(new ChangeValue(ChangeType.OFFSET_IN_SI_UNITS, +22.)); link.applyEvent(change4); change4.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 40)); link.applyEvent(change4); change5.setFreespeedChange(new ChangeValue(ChangeType.FACTOR, 0.5)); link.applyEvent(change5); change6.setFreespeedChange(new ChangeValue(ChangeType.FACTOR, 0.5)); link.applyEvent(change6);
NetworkChangeEvent event = new NetworkChangeEvent(1); event.addLink(link1); event.setFreespeedChange(new ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS,10.)); ((TimeVariantLinkImpl)link1).applyEvent(event); event = new NetworkChangeEvent(1); event.addLink(link3); event.setFreespeedChange(new ChangeValue(NetworkChangeEvent.ChangeType.FACTOR,6.)); ((TimeVariantLinkImpl)link3).applyEvent(event);
nce.setFreespeedChange(new ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 1.)); NetworkUtils.addNetworkChangeEvent(scenario.getNetwork(), nce);
event.setFreespeedChange(freespeedChange); NetworkUtils.addNetworkChangeEvent(network, event); event.addLink(link22); event.setFreespeedChange(freespeedChange); NetworkUtils.addNetworkChangeEvent(network, event); event.addLink(link22);
@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.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 20)); final NetworkChangeEvent event = change; NetworkUtils.addNetworkChangeEvent(network,event);
changeEvent.setFreespeedChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 50)); engine.addNetworkChangeEvent(changeEvent); Assert.assertEquals("it should still be 20 now.", 20, link1.getFreespeed(30), 0);
change.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 20)); final NetworkChangeEvent event = change; NetworkUtils.addNetworkChangeEvent(network,event);
change.setFreespeedChange(new ChangeValue(ChangeType.FACTOR, 0.5)); link.applyEvent(change);
change.setFreespeedChange(new ChangeValue(ChangeType.ABSOLUTE_IN_SI_UNITS, 20)); link.applyEvent(change);