@Override public double getLinkTravelDisutility(final Link link, final double time, final Person person, final Vehicle vehicle) { double normalTravelDisutilityForLink = this.normalTravelDisutility.getLinkTravelDisutility(link, time, person, vehicle); double logNormalRnd = 1. ; // randomize if applicable: if ( sigma != 0. ) { logNormalRnd = (double) person.getCustomAttributes().get("logNormalRnd") ; } // end randomize double tollCost = this.tollCostHandler.getTypicalTollCost(link, time ); return normalTravelDisutilityForLink + tollCost*this.marginalUtilityOfMoney*logNormalRnd ; // sign convention: these are all costs (= disutilities), so they are all normally positive. tollCost is positive, marginalUtilityOfMoney as well. }
@Override public double getLinkMinimumTravelDisutility(final Link link) { return this.delegate.getLinkMinimumTravelDisutility(link); }
@Override public double getLinkTravelDisutility(Link link, double time, Person person, Vehicle vehicle) { double randomizedTimeDistanceDisutilityForLink = this.randomizedTimeDistanceTravelDisutility.getLinkTravelDisutility(link, time, person, vehicle); double logNormalRnd = 1. ; if ( sigma != 0. ) { logNormalRnd = (double) person.getCustomAttributes().get("logNormalRnd") ; } double linkExpectedTollDisutility = calculateExpectedTollDisutility(link.getId(), time, person.getId()); double randomizedTollDisutility = linkExpectedTollDisutility * logNormalRnd; return randomizedTimeDistanceDisutilityForLink + randomizedTollDisutility; }
@Override public double getLinkMinimumTravelDisutility(Link link) { return baseTransportDisutility.getLinkMinimumTravelDisutility(link); }
@Override public double getLinkTravelDisutility(Link link, double time, Person person, Vehicle vehicle) { double costs = base.getLinkTravelDisutility(link, time, person, vehicle); Id<VehicleType> typeId = vehicle.getType().getId(); double toll = roadPricing.getTollAmount(typeId, link, time); return costs + toll; }
@Override public double getLinkMinimumTravelDisutility(Link link) { return this.normalTravelDisutility.getLinkMinimumTravelDisutility(link); }
@Override public double getLinkTravelDisutility(Link link, double time, Person person, org.matsim.vehicles.Vehicle vehicle) { double costs = baseTransportDisutility.getLinkTravelDisutility(link, time, person, vehicle); Id<org.matsim.vehicles.VehicleType> typeId = vehicle.getType().getId(); double toll = vehicleTypeDependentPricingCalculator.getTollAmount(typeId, link, time); // System.out.println("huuuuuuuuuuuuuuuuuuuu - paid toll"); return costs + toll; }
@Override public double getLinkMinimumTravelDisutility(Link link) { return base.getLinkMinimumTravelDisutility(link); }
@Override public double getLinkTravelDisutility(final Link link, final double time, final Person person, final Vehicle vehicle) { int timeBin = (int) (time / timeBinSize); double timeDistanceTravelDisutilityFromDelegate = this.delegate.getLinkTravelDisutility(link, time, person, vehicle); double logNormalRnd = 1. ; if ( sigma != 0. ) { logNormalRnd = (double) person.getCustomAttributes().get("logNormalRnd") ; } // adjust the travel disutility for the toll double toll = 0.; LinkInfo linkInfo = info.getlinkInfos().get(link.getId()); if (linkInfo != null) { Double linkInfoTimeBinToll = linkInfo.getTime2toll().get(timeBin); if (linkInfoTimeBinToll != null) { toll = linkInfoTimeBinToll; } } double tollAdjustedLinkTravelDisutility = timeDistanceTravelDisutilityFromDelegate + logNormalRnd * marginalUtilityOfMoney * toll; return tollAdjustedLinkTravelDisutility; }
private void updateMinTravelCostPerLength(final Network network) { for (Link link : network.getLinks().values()) { double minCost = this.costFunction.getLinkMinimumTravelDisutility(link) / link.getLength(); if (getMinTravelCostPerLength() > minCost) { setMinTravelCostPerLength(minCost); } } }
@Override public void notifyReplanning(ReplanningEvent event) { Assert.assertEquals(42.0, travelTimes.get(TransportMode.car).getLinkTravelTime(null, 0.0, null, null), 0.0); Assert.assertEquals(37.0, travelDisutilities.get(TransportMode.car).createTravelDisutility(travelTimes.get(TransportMode.car)).getLinkTravelDisutility(null, 0.0, null, null), 0.0); } }
private void expandLandmarkFrom() { LandmarksFromTravelTimeComparator comparator = new LandmarksFromTravelTimeComparator(this.nodeData, this.landmarkIdx); PriorityQueue<Node> pendingNodes = new PriorityQueue<>(100, comparator); LandmarksData role = (LandmarksData) this.nodeData.get(this.landmark); role.setToLandmarkTravelTime(this.landmarkIdx, 0.0); role.setFromLandmarkTravelTime(this.landmarkIdx, 0.0); pendingNodes.add(this.landmark); while (!pendingNodes.isEmpty()) { Node node = pendingNodes.poll(); double fromTravTime = ((LandmarksData) this.nodeData.get(node)).getFromLandmarkTravelTime(this.landmarkIdx); LandmarksData role2; for (Link l : node.getOutLinks().values()) { Node n; n = l.getToNode(); double linkTravTime = this.costFunction.getLinkMinimumTravelDisutility(l); role2 = (LandmarksData) this.nodeData.get(n); double totalTravelTime = fromTravTime + linkTravTime; if (role2.getFromLandmarkTravelTime(this.landmarkIdx) > totalTravelTime) { role2.setFromLandmarkTravelTime(this.landmarkIdx, totalTravelTime); pendingNodes.add(n); } } } }
private void relaxNode(final Node n, PriorityQueue<Node> pendingNodes) { NodeData nData = nodeData.get(n.getId()); double currTime = nData.getTime(); double currCost = nData.getCost(); for (Link l : n.getOutLinks().values()) { Node nn = l.getToNode(); NodeData nnData = nodeData.get(nn.getId()); if (nnData == null) { nnData = new NodeData(); this.nodeData.put(nn.getId(), nnData); } double visitCost = currCost + tcFunction.getLinkTravelDisutility(l, currTime, PERSON, VEHICLE); double visitTime = currTime + ttFunction.getLinkTravelTime(l, currTime, PERSON, VEHICLE); if (visitCost < nnData.getCost()) { pendingNodes.remove(nn); nnData.visit(n.getId(), visitCost, visitTime); additionalComputationsHook( l, currTime ) ; pendingNodes.add(nn); } } }
private void expandLandmarkTo() { LandmarksToTravelTimeComparator comparator = new LandmarksToTravelTimeComparator(this.nodeData, this.landmarkIdx); PriorityQueue<Node> pendingNodes = new PriorityQueue<>(100, comparator); LandmarksData role = (LandmarksData) this.nodeData.get(this.landmark); role.setToLandmarkTravelTime(this.landmarkIdx, 0.0); role.setFromLandmarkTravelTime(this.landmarkIdx, 0.0); pendingNodes.add(this.landmark); while (!pendingNodes.isEmpty()) { Node node = pendingNodes.poll(); double toTravTime = ((LandmarksData) this.nodeData.get(node)).getToLandmarkTravelTime(this.landmarkIdx); LandmarksData role2; for (Link l : node.getInLinks().values()) { Node n = l.getFromNode(); double linkTravTime = this.costFunction.getLinkMinimumTravelDisutility(l); role2 = (LandmarksData) this.nodeData.get(n); double totalTravelTime = toTravTime + linkTravTime; if (role2.getToLandmarkTravelTime(this.landmarkIdx) > totalTravelTime) { role2.setToLandmarkTravelTime(this.landmarkIdx, totalTravelTime); pendingNodes.add(n); } } } }
double timeMod = 24.0 * 3600.0 - Math.abs(currTime % (24.0 * 3600.0)); travelTime = -1.0 * this.timeFunction.getLinkTravelTime(l, timeMod, getPerson(), getVehicle()); travelCost = this.costFunction.getLinkTravelDisutility(l, timeMod, null, null); travelCost = this.costFunction.getLinkTravelDisutility(l, currTime, null, null);
double linkTimeDistanceDisutility = timeDistanceDisutility.getLinkTravelDisutility(link, time, person, vehicle);
double timeMod = 24.0 * 3600.0 - Math.abs(currTime % (24.0 * 3600.0)); travelTime = -1.0 * this.timeFunction.getLinkTravelTime(l, timeMod, getPerson(), getVehicle()); travelCost = this.costFunction.getLinkTravelDisutility(l, timeMod, getPerson(), getVehicle()); } else { travelTime = -1.0 * this.timeFunction.getLinkTravelTime(l, currTime, getPerson(), getVehicle()); travelCost = this.costFunction.getLinkTravelDisutility(l, currTime, getPerson(), getVehicle());
Path path = router.calcLeastCostPath(fromLink.getToNode(), toLink.getFromNode(), departureTime, null, matsimVehicle); double additionalCostTo = travelDisutility.getLinkTravelDisutility(toLink, departureTime+path.travelTime, null, matsimVehicle); double additionalTimeTo = travelTime.getLinkTravelTime(toLink, departureTime+path.travelTime,null,matsimVehicle); TransportData newData = new TransportData(path.travelCost+additionalCostTo,path.travelTime+additionalTimeTo);
final double travelCost = this.costFunction.getLinkTravelDisutility(l, currTime, this.person, this.vehicle); final AStarNodeData data = getData(n); if (!data.isVisited(getIterationId())) {
Path path = router.calcLeastCostPath(fromLink.getToNode(), toLink.getFromNode(), departureTime, null, matsimVehicle); double additionalCostTo = travelDisutility.getLinkTravelDisutility(toLink, departureTime+path.travelTime, null, matsimVehicle); double additionalTimeTo = travelTime.getLinkTravelTime(toLink, departureTime+path.travelTime, null, matsimVehicle); transportTime = path.travelTime;