@Override public double getLinkMinimumTravelDisutility(final Link link) { if(link != null) // travel time in seconds return (link.getLength() / link.getFreespeed()); log.warn("Link is null. Returned 0 as walk time."); return 0.; } }
@Override public double getLinkTravelTime(Link link, double time, Person person, Vehicle vehicle) { double freeSpeedTT = link.getLength() / link.getFreespeed(time); // equiv. to FreeSpeedTravelTime double linkTravelTime = timeStepSize * Math.floor(freeSpeedTT / timeStepSize); // used in QSim for TT at link return linkTravelTime + 1;// adds 1 extra second for moving over nodes } }
@Override public double getLinkTravelDisutility(final Link link, final double time, final Person person, final Vehicle vehicle) { if(link!=null) return link.getLength() / link.getFreespeed(); log.warn("Link is null. Returned 0 as free speed time."); return 0.; }
@Override public double getLinkMinimumTravelDisutility(Link link) { return link.getLength() / link.getFreespeed(); } }
@Override public double getLinkMinimumTravelDisutility(Link link) { if(link!=null) return link.getLength() / link.getFreespeed(); log.warn("Link is null. Returned 0 as free speed time."); return 0.; }
public static double getFreespeedTravelTime( Link link ) { return link.getLength() / link.getFreespeed() ; } public static double getFreespeedTravelTime( Link link, double time ) {
@Override public double getLinkTravelTime(Link link, double time, Person person, Vehicle vehicle) { return link.getLength() / link.getFreespeed(time); }
@Override public double getLinkMinimumTravelDisutility(Link link) { if (this.marginalUtlOfDistance == 0.0) { return (link.getLength() / link.getFreespeed()) * this.travelCostFactor; } return (link.getLength() / link.getFreespeed()) * this.travelCostFactor - this.marginalUtlOfDistance * link.getLength(); }
@Override public double getLinkTravelDisutility(final Link link, final double time, final Person person, final Vehicle vehicle) { if (this.marginalUtlOfDistance == 0.0) { return (link.getLength() / link.getFreespeed(time)) * this.travelCostFactor; } return (link.getLength() / link.getFreespeed(time)) * this.travelCostFactor - this.marginalUtlOfDistance * link.getLength(); }
@Override public double getLinkMinimumTravelDisutility(Link link) { double minDisutility = Double.MAX_VALUE; double free_tt = link.getLength()/link.getFreespeed(); for(VehicleTypeVarCosts c : typeSpecificCosts.values()){ double disu = c.perMeter*link.getLength() + c.perSecond*free_tt; if(disu < minDisutility) minDisutility=disu; } return minDisutility; }
@Override public double getLinkTravelTime(Link link, double time, Person person, Vehicle vehicle) { if (speed) return link.getLength() / this.value; else if (speedFactor) return (link.getLength() / link.getFreespeed()) * this.value; else throw new RuntimeException("Neither speed nor speed factor was found! Aborting."); } }
@Override public double getLinkMinimumTravelDisutility(Link link) { return link.getLength() / Math.min( link.getFreespeed() , params.getTeleportedModeFreespeedLimit() ) ; } } ;
@Override public double getLinkTravelTime(Link link, double time, Person person, org.matsim.vehicles.Vehicle vehicle) { double velocity; if(vehicle.getType().getMaximumVelocity() < link.getFreespeed(time)){ velocity = vehicle.getType().getMaximumVelocity(); } else velocity = link.getFreespeed(time); if(velocity <= 0.0) throw new IllegalStateException("velocity must be bigger than zero"); return link.getLength() / velocity; } };
@Override public void handleEvent(LinkEnterEvent event) { // calculate earliest link exit time Link currentLink = network.getLinks().get(event.getLinkId()); double freespeedTt = currentLink.getLength() / currentLink.getFreespeed(); // this is the earliest time where matsim sets the agent to the next link double matsimFreespeedTT = Math.floor(freespeedTt + 1); for (Id<Person> passengerId : vehicleIdToPassengerIds.get(event.getVehicleId())){ this.earliestLinkExitTimePerAgent.put(passengerId, event.getTime() + matsimFreespeedTT); } }
/** * Compare link attributes. Return whether they are the same or not. */ private boolean bothLinksHaveSameLinkStats(Link linkA, Link linkB){ boolean bothLinksHaveSameLinkStats = true; if(!linkA.getAllowedModes().equals(linkB.getAllowedModes())){ bothLinksHaveSameLinkStats = false; } if(linkA.getFreespeed() != linkB.getFreespeed()){ bothLinksHaveSameLinkStats = false; } if(linkA.getCapacity() != linkB.getCapacity()){ bothLinksHaveSameLinkStats = false; } if(linkA.getNumberOfLanes() != linkB.getNumberOfLanes()){ bothLinksHaveSameLinkStats = false; } return bothLinksHaveSameLinkStats; }
@Override public String determineHebfaType(Link link) { String roadType = (String) link.getAttributes().getAttribute(OSM_HIGHWAY_TAG); String hbefaType = null; if (roadType != null) { hbefaType = getHEBFAtype(roadType,link.getFreespeed()); } return hbefaType; }
@Override public double getLinkMinimumTravelDisutility(Link link) { double minDisutility = Double.MAX_VALUE; double free_tt = link.getLength()/link.getFreespeed(); for(CarrierVehicleType type : vehicleTypes.getVehicleTypes().values()){ double disu = type.getVehicleCostInformation().perDistanceUnit*link.getLength() + type.getVehicleCostInformation().perTimeUnit*free_tt; if(disu < minDisutility) minDisutility=disu; } return minDisutility; } };
@Override public void notifyMobsimInitialized(MobsimInitializedEvent e) { // check free speed travel times - they should be initialized now assertEquals(link.getLength()/link.getFreespeed(t1), travelTime.getLinkTravelTime(link, t1, null, null)); assertEquals(link.getLength()/link.getFreespeed(t2), travelTime.getLinkTravelTime(link, t2, null, null)); assertEquals(link.getLength()/link.getFreespeed(t3), travelTime.getLinkTravelTime(link, t3, null, null)); assertEquals(link.getLength()/link.getFreespeed(t4), travelTime.getLinkTravelTime(link, t4, null, null)); assertEquals(link.getLength()/link.getFreespeed(t5), travelTime.getLinkTravelTime(link, t5, null, null)); assertEquals(link.getLength()/link.getFreespeed(t6), travelTime.getLinkTravelTime(link, t6, null, null)); assertEquals(link.getLength()/link.getFreespeed(t7), travelTime.getLinkTravelTime(link, t7, null, null)); assertEquals(link.getLength()/link.getFreespeed(t8), travelTime.getLinkTravelTime(link, t8, null, null)); }
private int createInvertedLink(Link inLink, Link outLink, int numberOfLinksGenerated, Set<String> modes){ Link link = NetworkUtils.createAndAddLink(this.invertedNetwork,Id.create(numberOfLinksGenerated + 1, Link.class), this.invertedNetwork.getNodes().get(Id.create(inLink.getId(), Node.class)), this.invertedNetwork.getNodes().get(Id.create(outLink.getId(), Node.class)), outLink.getLength(), outLink.getFreespeed(), outLink.getCapacity(), outLink.getNumberOfLanes() ); link.setAllowedModes(modes); // log.error("created inverted link " + link.getId() + " from " + inLink.getId() + " to " + outLink.getId() + " with modes " + modes); NetworkUtils.setType( ((Link) link), NetworkUtils.getType(((Link) outLink))); return numberOfLinksGenerated + 1; }
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()); } } }