public final class CustomWeighting extends AbstractWeighting
The formula for the edge weights is as follows:
weight = distance/speed + distance_costs + stress_costs
The first term simply corresponds to the time it takes to travel along the edge. The second term adds a fixed per-distance cost that is proportional to the distance but *independent* of the edge properties, i.e. it reads
distance_costs = distance * distance_influence
The third term is also proportional to the distance but compared to the second it describes additional costs that *do* depend on the edge properties. It can represent any kind of costs that depend on the edge (like inconvenience or dangers encountered on 'high-stress' roads for bikes, toll roads (because they cost money), stairs (because they are awkward when going by bike) etc.). This 'stress' term reads
stress_costs = distance * stress_per_meter
and just like the distance term it describes costs measured in seconds. When modelling it, one always has to 'convert' the costs into some time equivalent (e.g. for toll roads one has to think about how much money can be spent to save a certain amount of time). Note that the distance_costs described by the second term in general cannot be properly described by the stress costs, because the distance term allows increasing the per-distance costs per-se (regardless of the type of the road). Also note that both the second and third term are different to the first in that they can increase the edge costs but do *not* modify the travel *time*.
Instead of letting you set the speed directly, `CustomWeighting` allows changing the speed relative to the speed we get from the base flag encoder. The stress costs can be specified by using a factor between 0 and 1 that is called 'priority'.
Therefore the full edge weight formula reads:
weight = distance / (base_speed * speed_factor * priority) + distance * distance_influence
The open parameters that we can adjust are therefore: speed_factor, priority and distance_influence and they are
specified via the `CustomModel
`. The speed can also be restricted to a maximum value, in which case the value
calculated via the speed_factor is simply overwritten. Edges that are not accessible according to the access flags of
the base vehicle always get assigned an infinite weight and this cannot be changed using this weighting.
Modifier and Type | Field and Description |
---|---|
static String |
CATCH_ALL |
static String |
NAME |
accessEnc, avSpeedEnc, flagEncoder
INFINITE_U_TURN_COSTS
Constructor and Description |
---|
CustomWeighting(FlagEncoder baseFlagEncoder,
EncodedValueLookup lookup,
TurnCostProvider turnCostProvider,
CustomModel customModel) |
Modifier and Type | Method and Description |
---|---|
long |
calcEdgeMillis(EdgeIteratorState edgeState,
boolean reverse)
This method calculates the time taken (in milli seconds) to travel along the specified edgeState.
|
double |
calcEdgeWeight(EdgeIteratorState edgeState,
boolean reverse)
In most cases subclasses should only override this method to change the edge-weight.
|
double |
getMinWeight(double distance)
Used only for the heuristic estimation in A*
|
String |
getName() |
calcTurnMillis, calcTurnWeight, equals, getFlagEncoder, hashCode, hasTurnCosts, toString
public static final String NAME
public static final String CATCH_ALL
public CustomWeighting(FlagEncoder baseFlagEncoder, EncodedValueLookup lookup, TurnCostProvider turnCostProvider, CustomModel customModel)
public double getMinWeight(double distance)
Weighting
public double calcEdgeWeight(EdgeIteratorState edgeState, boolean reverse)
AbstractWeighting
TurnCostProvider
implementation to the constructor instead.calcEdgeWeight
in interface Weighting
calcEdgeWeight
in class AbstractWeighting
edgeState
- the edge for which the weight should be calculatedreverse
- if the specified edge is specified in reverse direction e.g. from the reverse
case of a bidirectional search.public long calcEdgeMillis(EdgeIteratorState edgeState, boolean reverse)
Weighting
calcEdgeMillis
in interface Weighting
calcEdgeMillis
in class AbstractWeighting
public String getName()
Copyright © 2012–2020. All rights reserved.