<br><br><div class="gmail_quote">On Wed, Mar 30, 2011 at 2:04 AM, Stephen Woodbridge <span dir="ltr">&lt;<a href="mailto:woodbri@swoodbridge.com">woodbri@swoodbridge.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Jay,<br>
<br>
Currently in pgRouting you can have different cost columns, like distance, traversal time, etc that is stored on the edge. I think that is would be very advantageous with we could pass a pgpsql function to fetch the cost. We could easily set up a standard signature for such a function. like:<br>

<br>
float cost := getEdgeCost(time, vehicle_type, node_from, node_to);<br>
<br>
or something like that. Where time could be NULL for some default behavior, or a value that would be used to figure out the cost. vehicle_type might be helpful if there are multiple costs to traverse a link based on say, car, carpool, bus, truck, walking, taxi, etc. This could also be used to implement the rules for bus and train lines.<br>

<br></blockquote><div><br><br>Sounds good. Again since the GSoc Application deadline looming on 8th April, can this be considered as a valid GSoc project? If yes, I would start writing down the proposal for the same. Would like to hear thoughts of Daniel or Anton on the same.<br>
<br>Please also suggest any changes / improvements in the idea too :)<br><br>&nbsp;</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Regarding the multi-modal routing, What you proposed is very close to the multimodal implementation. You define a start time and start node and a destination. As the route is evaluated, the time is incremented by the cost of each edge or node. In the multimodal, we had the ability if I&#39;m not mistaken to have a cost at a node, this might have been implemented by adding some segment with the cost on that. This was used for the cost of waiting for a scheduled item, like a bus, train to a stop.<br>

<br>
-Steve<div><div></div><div class="h5"><br>
<br>
On 3/29/2011 2:41 PM, Jay Mahadeokar wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div></div><div class="h5">
Hi,<br>
<br>
I tried to survey existing time dependent routing algorithms that do not<br>
do pre-processing as in CH and SHARC. The problem is formally defined in<br>
[1]. It gives a bidirectional A* algorithm for time-dependent scenario.<br>
The paper is explained in short in [2].<br>
<br>
Now, the algorithm discussed there is complex and also involves<br>
pre-processing the distances from set of landmark nodes to all other<br>
nodes which is used by the potential function in A*.But, the paper<br>
states the problem very formally.<br>
<br>
*Main motivation is:* People are not really interested in the distance<br>
they travel, but instead they want the route which will lead to their<br>
destination quickest (in least time).<br>
<br>
For starters, I was thinking of modifying simple dijkstra algorithm for<br>
time dependent routing. In simple words, the problem can be framed as<br>
follows (For formal problem statement refer [1]):<br>
<br>
Each edge has a range of costs associated with it. The cost depends on<br>
the start time at which we want to traverse the road which will be<br>
governed by the traffic and other parameters. We can assume a function<br>
which will return the cost of edge and time required to cross the edge,<br>
if we pass the edge id and start time to it.<br>
<br>
Im writing down a rough pseudo-code for the dijkstra search:<br>
<br>
Note that I have modified lines 3,6,15 and 18 (from the pseudo-code<br>
given on wikipedia [3])<br>
<br>
 &nbsp;1*function* &nbsp;Dijkstra(/Graph/,/source/ &nbsp;, start_time):<br>
<br>
 &nbsp;2*for each* &nbsp;vertex/v/ &nbsp;in/Graph/:/// Initializations/<br>
 &nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dist[/v/] := infinity ;/// Unknown distance function from source to v/<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time[v] := 0 ;<br>
<br>
 &nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;previous[/v/] := undefined ;/// Previous node in optimal path from source/<br>
 &nbsp;5*end for*;<br>
 &nbsp;6 &nbsp; &nbsp; &nbsp;dist[/source/] := 0 ;/// Distance from source to source/<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; time[source] := start_time ;<br>
 &nbsp;7/Q/ &nbsp;:= the set of all nodes in/Graph/ &nbsp;;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; /// All nodes in the graph are unoptimized - thus are in Q/<br>
 &nbsp;8*while* &nbsp;/Q/ &nbsp;*is not* &nbsp;empty:/// The main loop/<br>
<br>
 &nbsp;9/u/ &nbsp;:= vertex in/Q/ &nbsp;with smallest dist[] ;<br>
10*if* &nbsp;dist[/u/] = infinity:<br>
11*break* &nbsp;;/// all remaining vertices are inaccessible from source/<br>
<br>
12*fi* &nbsp;;<br>
13 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;remove/u/ &nbsp;from/Q/ &nbsp;;<br>
14*for each* &nbsp;neighbor/v/ &nbsp;of/u/:/// where v has not yet been removed from Q./<br>
15/alt/ &nbsp;:= dist[/u/] + dist_between(/u/,/v/ &nbsp;, time[u],end_time) ; //end_time returns the time at which we reach v from u<br>
<br>
16*if* &nbsp;/alt/ &nbsp;&lt; &nbsp;dist[/v/]:/// Relax (u,v,a)/<br>
17 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dist[/v/] :=/alt/ &nbsp;;<br>
18 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;previous[/v/] :=/u/ &nbsp;;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time[v] := end_time;<br>
<br>
19*fi* &nbsp;;<br>
20*end for* &nbsp;;<br>
21*end while* &nbsp;;<br>
22*return* &nbsp;dist[] ;<br>
23*end* &nbsp;Dijkstra.<br>
<br>
<br>
This will be a very basic implementation and there will be much scope<br>
for improvement and implementation using better and complex techniques<br>
as given in [1].<br>
<br>
*Questions*:<br>
<br>
1. @Daniel - Is this somewhat what you are interested in?<br>
2. Can this be considered as a GSoc project?<br>
3. pgRouting mainly provides routing for postgres. So, do we assume the<br>
data pertaining the time-dependent values for each edge present in the<br>
postgres database? If yes we will need to finalise the format of the<br>
data stored right?<br>
4. Is there already a standard format for storing time-dependent edge<br>
weights data, or we should assume the function that returns the edge<br>
cost as black box and just code the time dependent functionality without<br>
worrying as to how the function actually gets the values from (database<br>
or somewhere else)<br>
<br>
<br>
@Stephen - I have not yet looked at the multimodal routing<br>
implementation. I guess the idea I have proposed is different from that<br>
one right? Will look into it if this one does not shape well. :)<br>
<br>
[1] Bidirectional A&lowast; Search on Time-Dependent Road Networks<br></div></div>
&lt;<a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBcQFjAA&amp;url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.144.2183%26rep%3Drep1%26type%3Dpdf&amp;ei=Sh2STeDIJY-qcb-F1YkH&amp;usg=AFQjCNFnYYtw2Ap_dNyjbYcaPnmB-bMZOQ&amp;sig2=DTMTucn2TMhT0eXTiqKlTg" target="_blank">http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBcQFjAA&amp;url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.144.2183%26rep%3Drep1%26type%3Dpdf&amp;ei=Sh2STeDIJY-qcb-F1YkH&amp;usg=AFQjCNFnYYtw2Ap_dNyjbYcaPnmB-bMZOQ&amp;sig2=DTMTucn2TMhT0eXTiqKlTg</a>&gt;<div class="im">
<br>
[2] Slide Show of above paper<br></div>
&lt;<a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=2&amp;ved=0CCAQFjAB&amp;url=http%3A%2F%2Fctw08.dti.unimi.it%2Fslides%2FB5%2FB5-1-Nannicini.pdf&amp;ei=Sh2STeDIJY-qcb-F1YkH&amp;usg=AFQjCNGEl-mbYR1MF9HBKY-dbBxrX8xfcw&amp;sig2=ylApFLDB6FTQNuYUwaPQDQ" target="_blank">http://www.google.com/url?sa=t&amp;source=web&amp;cd=2&amp;ved=0CCAQFjAB&amp;url=http%3A%2F%2Fctw08.dti.unimi.it%2Fslides%2FB5%2FB5-1-Nannicini.pdf&amp;ei=Sh2STeDIJY-qcb-F1YkH&amp;usg=AFQjCNGEl-mbYR1MF9HBKY-dbBxrX8xfcw&amp;sig2=ylApFLDB6FTQNuYUwaPQDQ</a>&gt;<div class="im">
<br>
[3] <a href="http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm" target="_blank">http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm</a><br>
<br>
<br>
On Mon, Mar 28, 2011 at 8:35 PM, Stephen Woodbridge<br></div><div><div></div><div class="h5">
&lt;<a href="mailto:woodbri@swoodbridge.com" target="_blank">woodbri@swoodbridge.com</a> &lt;mailto:<a href="mailto:woodbri@swoodbridge.com" target="_blank">woodbri@swoodbridge.com</a>&gt;&gt; wrote:<br>
<br>
 &nbsp; &nbsp;Last years GSoC project for OpenGraphRouter [1], implemented<br>
 &nbsp; &nbsp;multimodal routing and incorporated bus and train schedules along<br>
 &nbsp; &nbsp;with time dependent routing. So you would say what you start time<br>
 &nbsp; &nbsp;was and it would then compute the routes based on travel time,<br>
 &nbsp; &nbsp;between nodes, transfer times at stations, etc. Basically at nodes<br>
 &nbsp; &nbsp;that were stations, we link in the schedule for that stop and costs<br>
 &nbsp; &nbsp;to the connecting nodes were dynamically computed from the schedules<br>
 &nbsp; &nbsp;and the arrival time at the stop. Arrival time was based on your<br>
 &nbsp; &nbsp;start time plus the travel time to that stop.<br>
<br>
 &nbsp; &nbsp;[1] <a href="http://opengraphrouter.sourceforge.net/" target="_blank">http://opengraphrouter.sourceforge.net/</a><br>
<br>
 &nbsp; &nbsp;It would be cool if we could use the work done here and migrate that<br>
 &nbsp; &nbsp;back to pgRouting or integrate it with the contraction highways.<br>
<br>
 &nbsp; &nbsp;I think the abstraction of this is that we need a method that gets<br>
 &nbsp; &nbsp;the cost and for regular highway nodes and edges it would mostly<br>
 &nbsp; &nbsp;just return a static value assigned to that object. But for we had<br>
 &nbsp; &nbsp;time dependent turn restrictions or we had multimodal station, it<br>
 &nbsp; &nbsp;would lookup the cost based on a schedule or timetable linked to<br>
 &nbsp; &nbsp;that object.<br>
<br>
 &nbsp; &nbsp;This would allow the schedules and timetables to be hidden from the<br>
 &nbsp; &nbsp;implementation. And different types of objects could point to<br>
 &nbsp; &nbsp;different methods for computing the costs.<br>
<br>
 &nbsp; &nbsp;-Steve<br>
<br>
<br>
 &nbsp; &nbsp;On 3/28/2011 10:46 AM, Daniel Kastl wrote:<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Hi Jay,<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;In my opinion time dependent routing is a nice idea and a<br>
 &nbsp; &nbsp; &nbsp; &nbsp;feature you<br>
 &nbsp; &nbsp; &nbsp; &nbsp;can hardly find in existing routing libraries. I haven&#39;t seen<br>
 &nbsp; &nbsp; &nbsp; &nbsp;any open<br>
 &nbsp; &nbsp; &nbsp; &nbsp;source implementation yet. Someone else knows one?<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Currently pgRouting takes into account the network loaded when<br>
 &nbsp; &nbsp; &nbsp; &nbsp;running<br>
 &nbsp; &nbsp; &nbsp; &nbsp;the query. But it could happen, that network conditions change while<br>
 &nbsp; &nbsp; &nbsp; &nbsp;travelling in the network, right? For example one could reach a road<br>
 &nbsp; &nbsp; &nbsp; &nbsp;that is closed on certain times.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;It could be a very cool feature, if pgRouting could support even<br>
 &nbsp; &nbsp; &nbsp; &nbsp;changes<br>
 &nbsp; &nbsp; &nbsp; &nbsp;during travel time. So personally I would prefer such a project idea<br>
 &nbsp; &nbsp; &nbsp; &nbsp;over one to speed up shortest path computation.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Daniel<br>
<br>
<br>
<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;2011/3/28 Jay Mahadeokar &lt;<a href="mailto:jai.mahadeokar@gmail.com" target="_blank">jai.mahadeokar@gmail.com</a><br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;mailto:<a href="mailto:jai.mahadeokar@gmail.com" target="_blank">jai.mahadeokar@gmail.com</a>&gt;<br></div></div><div><div></div><div class="h5">
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;mailto:<a href="mailto:jai.mahadeokar@gmail.com" target="_blank">jai.mahadeokar@gmail.com</a> &lt;mailto:<a href="mailto:jai.mahadeokar@gmail.com" target="_blank">jai.mahadeokar@gmail.com</a>&gt;&gt;&gt;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Hi,<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;I was looking at GSoc 2011 ideas page and Adding support for time<br>
 &nbsp; &nbsp; &nbsp; &nbsp;constraints seems to be one of the ideas. I read two papers on the<br>
 &nbsp; &nbsp; &nbsp; &nbsp;topic which are an extension to (two of the current best) techniques<br>
 &nbsp; &nbsp; &nbsp; &nbsp;for speeding up shortest path algos.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;1. Time Dependent Contraction Hierarchies<br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;<a href="http://algo2.iti.kit.edu/english/1222.php" target="_blank">http://algo2.iti.kit.edu/english/1222.php</a>&gt; - an extension to<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;contraction hierarchies problem that we have somewhat discussed in<br>
 &nbsp; &nbsp; &nbsp; &nbsp;the Network layering Support thread, and we have not reached to any<br>
 &nbsp; &nbsp; &nbsp; &nbsp;specific conclusion there.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;2. Time Dependent SHARC Routing<br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;<a href="http://portal.acm.org/citation.cfm?id=1431038" target="_blank">http://portal.acm.org/citation.cfm?id=1431038</a>&gt; - which is an<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;extension to SHARC technique.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;I guess, if we implement one of the above preprocessing technique,<br>
 &nbsp; &nbsp; &nbsp; &nbsp;the extension will be a relatively simple task. Do you have any<br>
 &nbsp; &nbsp; &nbsp; &nbsp;other approach towards implementing the time constraints? As we<br>
 &nbsp; &nbsp; &nbsp; &nbsp;have already found, the implementation of the Contraction<br>
 &nbsp; &nbsp; &nbsp; &nbsp;hierarchies will take significant brainstorming and effort.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;--<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Regards,<br>
 &nbsp; &nbsp; &nbsp; &nbsp;-Jay Mahadeokar<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;_______________________________________________<br>
 &nbsp; &nbsp; &nbsp; &nbsp;pgrouting-dev mailing list<br>
 &nbsp; &nbsp; &nbsp; &nbsp;<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a><br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;mailto:<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a>&gt;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;mailto:<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a><br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;mailto:<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a>&gt;&gt;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/pgrouting-dev</a><br>
<br>
<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;--<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Georepublic UG &amp; Georepublic Japan<br>
 &nbsp; &nbsp; &nbsp; &nbsp;eMail: <a href="mailto:daniel.kastl@georepublic.de" target="_blank">daniel.kastl@georepublic.de</a><br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;mailto:<a href="mailto:daniel.kastl@georepublic.de" target="_blank">daniel.kastl@georepublic.de</a>&gt;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;mailto:<a href="mailto:daniel.kastl@georepublic.de" target="_blank">daniel.kastl@georepublic.de</a><br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;mailto:<a href="mailto:daniel.kastl@georepublic.de" target="_blank">daniel.kastl@georepublic.de</a>&gt;&gt;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Web: <a href="http://georepublic.de" target="_blank">http://georepublic.de</a> &lt;<a href="http://georepublic.de/" target="_blank">http://georepublic.de/</a>&gt;<br>
<br>
<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;_______________________________________________<br>
 &nbsp; &nbsp; &nbsp; &nbsp;pgrouting-dev mailing list<br>
 &nbsp; &nbsp; &nbsp; &nbsp;<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a> &lt;mailto:<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a>&gt;<br>

 &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/pgrouting-dev</a><br>
<br>
<br>
 &nbsp; &nbsp;_______________________________________________<br>
 &nbsp; &nbsp;pgrouting-dev mailing list<br>
 &nbsp; &nbsp;<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a> &lt;mailto:<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a>&gt;<br>
 &nbsp; &nbsp;<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/pgrouting-dev</a><br>
<br>
<br>
<br>
<br>
--<br></div></div>
Regards,<br>
-Jay Mahadeokar<br>
<br>
</blockquote>
<br>
</blockquote></div><br><br clear="all"><br>-- <br>Regards,<br>-Jay Mahadeokar<br><br>