[pgrouting-dev] Finally getting back to integrating your TRSP improvements

Helder Alves helderalvespt at gmail.com
Mon May 5 00:33:42 PDT 2014


Hi Steve and all!

Do you have any advance on this matter? :-)

Thanks!

--
Helder Alves
On Apr 14, 2014 4:05 PM, "Stephen Woodbridge" <woodbri at swoodbridge.com>
wrote:

> On 4/13/2014 3:08 PM, Ashraf Hossain wrote:
>
>> Dear Steve,
>> I am out of town in village, I will come back to you soon with my
>> thoughts.
>>
>
> Hi Roni,
>
> No problem, enjoy your time being mostly disconnected from the net :)
>
> Looking at GraphDefinition.cpp, I'm thinking that a small refactoring
> might make it easier to deal with multi_dijkstra using edges versus nodes.
> Something along the lines of:
>
> vector<int> GraphDefinition::makeVirtualNodes(vector<int> edge_ids,
> vector<double> edge_parts);
>
> This could take a list of edges and position on the edges and create a
> vector of virtual nodes and add then to the graph and return vector of the
> new virtual node ids. Then in multi_dijkstra you can loop through these as
> the start and end nodes. If we only have one start and end then the
> existing code could be change to work with this vector.
>
> And it would be easy to change or clone multi_dijkstra to add options for
> one_to_many and many_to_many loops.
>
> We could also eliminate the existing edge to edge version of my_dijkstra
> or trivialize it to call multi_dijkstra where we pass it just a vector of
> the start and end points. This would remove redundant code and simplify
> testing and verification of the existing code.
>
> Any thoughts on this when you have a chance to look over the code.
>
> I'm not sure what the best way to do this in GraphDefinition. It looks
> like we have a few places where we check if(is<Start|End>Virtual) when
> evaluating restrictions because this gets a little trickier. If the node is
> a via point in the middle of a restriction, then we will continue on that
> edge as if there is no virtual node there, but if it is the first or last
> point in overall route we will treat it like the start or end case as we do
> now. In the case of one_to_many and many_to_many, the start and end points
> would get treated as they are now also.
>
> I'm thinking that with these changes, we could potentially also replace
> pgr_dijkstra and pgr_kdijkstra with the trsp code so we have one common
> code base for
>
> pgr_dijkstra()            - pgr_trsp() point_to_point
> pgr_kdijkstra()           - pgr_trsp() one_to_many
> pgr_makeDistanceMatrix()  - pgr_trsp() many_to_many
>
> We would be able to support turn restrictions or not with all these
> functions.
>
> One question I have about trsp is when I do a dijkstra solution in Boost,
> I solve the whole graph so in the kdijkstra case (one_to_many) I make one
> solution of the graph and I can extract paths to the "many" end nodes in
> the graph rather than doing multiple solves like A-B, A-C, A-D, ...? Can we
> do the same (extract multiple end points) in trsp? If so then many_to_many
> becomes (N * one_to_many).
>
> Hope this all makes some sense.
>
> Thanks,
>   -Steve
>
>  Regards
>> Roni
>>
>>
>> On Sun, Apr 13, 2014 at 6:28 AM, Stephen Woodbridge
>> <woodbri at swoodbridge.com <mailto:woodbri at swoodbridge.com>> wrote:
>>
>>     Hi Roni,
>>
>>     I hope you and your family are doing well.
>>     I am well but have been very busy. I'm between some contracts at the
>>     moment and I am looking at the TRSP improvements you did quite a
>>     ways back to add the reverse cost and routing from nodes A-B-C-...
>>
>>     Looking at multi_dijkstra it seems that I should be able to mimic
>>     that code based on how you clean up after each route A-B to restart
>>     for B-C and create a similar function that computes one to many
>>     destinations, A-B, A-C, A-D, etc.
>>
>>     What do you think?
>>
>>     So for integrating this code, I probably need to implement a family
>>     of additional functions like:
>>
>>
>>     Existing functions:
>>
>>     pgr_trsp(text, integer, integer, boolean, boolean)
>>     -- node to node
>>
>>     pgr_trsp(text, integer, integer, boolean, boolean, text)
>>     -- node to node with restrictions
>>
>>     pgr_trsp(text, integer, double precision, integer, double precision,
>>     boolean, boolean)
>>     -- edge to edge
>>
>>     pgr_trsp(text, integer, double precision, integer, double precision,
>>     boolean, boolean, text)
>>     -- edge to edge with restrictions
>>
>>     pgr_trsp(text, integer[], boolean, boolean, text)
>>     -- array of nodes **this gets changed to use new code (1)**
>>
>>     pgr_trsp(text, integer[], float8[], boolean, boolean, text)
>>     -- array of edges **this gets changed to use new code (2)**
>>
>>     (1) should plug directly into your code. I currently do this in C by
>>     calling your old code multiple times, but it will be more efficient
>>     to change this to call multi_dijkstra because we only build the
>>     graph once.
>>
>>     (2) I currently do this in C by making multiple calls to your old
>>     code. The multi_dijkstra only accepts nodes, not edges, so I'll look
>>     at making a version that can be called by edges. Unless you want to
>>     do that :)
>>
>>     Then I think I would like to add a new argument to (1) and (2) above
>>     "boolean onetomany" and if it is true then we compute A-B, A-C, A-D,
>>     ... and if it is false it will compute A-B-C-...
>>
>>     I'll have to think about how to return the results, but that should
>>     not be too hard.
>>
>>     TODO:
>>
>>     1. create function to support multi_dijkstra with edges
>>     2. create new function onetomany_dijkstra for nodes
>>     3. create new function onetomany_dijkstra for edges
>>     4. update C code wrappers to support the above
>>     5. develop test cases
>>     6. write the documentation
>>     7. check it in
>>
>>     Ok that is a bunch of work! Maybe I'll start with just getting (1)
>>     done so it calls your new code, and write a test case for that. Then
>>     tackle the rest.
>>
>>     Thoughts?
>>
>>     -Steve
>>
>>
>>
> _______________________________________________
> pgrouting-dev mailing list
> pgrouting-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/pgrouting-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/pgrouting-dev/attachments/20140505/0e9cd0ae/attachment.html>


More information about the pgrouting-dev mailing list