<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Apr 16, 2013 at 8:34 PM, Stephen Woodbridge <span dir="ltr"><<a href="mailto:woodbri@swoodbridge.com" target="_blank">woodbri@swoodbridge.com</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>On 4/16/2013 1:41 PM, Raffaello Bertini wrote:<br>

</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>
another value for CH, it's is ability to manage huge graph.<br>
<br>
ok, go on my ideas:<br>
based on an overlay graph (the distance matrix), generated from multiple<br>
dijkstra results, used for tsp/vrp problem, instead of using euclidean<br>
distances ("distance as the crow flies") and achieve better results:<br>
<br></div>
-*strategy for caching data*:<div><br>
  need a table/indexed file to store results (this step can be<br>
precomputed or in "real-time request generated")<br>
  when building the graph for ex. tsp computation, check&fetch data<br>
directly on that table, instead of fetch the data from the "roads graph"<br>
table and then compute the arc connect "2 city", if the data it's not<br>
present ca be computed and inserted in the overlay graph. Trading speed<br>
for datasize and reduce fetching data. This operation can be partialy,<br>
some are to compute others are fetched because precompute from previsius<br>
dijkstra calling.<br>
The table simply store the node source,target and optional geometry for<br>
visualization. To manage multiple road tables as data input, algorithm<br>
create tables using *special*name  (the name of original table plus<br>
"something") and use it respectively.<br>
if some user wants "detailed" results, the dijkstra results (ex:  the<br>
path connecting 2 city) , it can be used another table (maybe temporary<br>
for the problem istances) to fetch data directly instead of recompute a<br>
single arc/dikstra solution.<br>
</div></blockquote>
<br>
Ok, if I understand this, you are proposing creating a table to cache routes in that you might want for a TSP solution, and if you do not find the route stored, then you will compute it and store. Is this what you are proposing?<br>




<br>
If so here are some comments related to do that.<br>
<br>
1. this might make sense for a given client, say a bakery that has N clients that they service. This would allow them to cache the various routes, and plug them into a delivery truck route plan if they had say 10 orders for today.<br>




<br>
2. This does not make sense in the more generalized case of a web application where the user enter N random points and requests an optimized route. It is unlikely that you will ever have the needed routes cached and more likely that you will need to generate all the routes for the matrix on the fly.<br>




<br>
3. creating a cache table requires some additional infrastructure to manage the cache. This adds complexity. If you only have one client, and 50-100 locations you can cache the routes and if you add a new location you can add the required rows.<br>




<br>
If you have N cities, have you thought about using Dijkstra to compute N Dijkstra solutions to extract the 1 to N-1 routes in each iteration?<br></blockquote><div><br></div><div>yes i'm actually proposing/using N Dijkstra. I try to explain better:<br>



 pgroute needs fetch data to build the graph ("roads graph"), for tsp/vrp computation, this graph can be a "meta-graph" (overlay graph) which each arc weight connecting 2 city is a solution of one dijkstra, everytime needs N Dijkstra to build up the overlaygraph and fetch many rows from DB. <br>



if partially have stored some results (X) of this dijkstra computation, can reduce the ammount of fetch data and increase the speed of computation because we have only compute N-X dijkstra to build the overlaygraph for this istance. the price is needing more DB space to store results.</div>



<div><br>ok, maybe for a completely general way it's not usefull at all, but the main use case of pgroute i suppose is primarly to sector-based routing application.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>
One more point is to use  "WaypointResults Table", that can be used to<br>
store solution of some TSP/VRP problem and than fetch solution directly<br>
instead of (re)compute it. etc......<br>
<br></div>
-*vrp (with capacity)*: The first VRP algorithm can be based on the tsp,<div><br>
so it's somenthing like solving multiple TSP problem. Do it on single<br>
and/or multidepot. Needs one more parameter input as sql query for<br>
depots....<br>
So if the vrp depends on tsp, it's a good thing to have a good tsp<br>
solver too..<br>
It also can benefit from the above strategy proposed.<br>
</div></blockquote>
<br>
Look at this:<br>
<a href="https://github.com/pgRouting/pgrouting/tree/sew-devel-2_0/src/tsp/src" target="_blank">https://github.com/pgRouting/<u></u>pgrouting/tree/sew-devel-2_0/<u></u>src/tsp/src</a><br>
</blockquote><div><br></div><div>saw it: tsp compute euclidean distance and it's symmetric, it can be upgraded using the dijkstra results connecting the cities (with an approximation on the exact point (x,y)) but costs are no more symmteric. <br>



one more:<br>looking into the code using meta-heuristic, needs to make a choice about better quality or faster solution because i think the local search used can be upgrade with a 3opt.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




In fact, you should be looking at this sew-develop-2_0 branch as this will be the new structure going forward and what we will expect for GSoC students to work with.<br></blockquote><div><br></div><div><br></div>
<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
-*CH*: I never worked on it and i will really happy to do it, I think i<div><br>
can do it in the contest of GSoc. But and i don't have detailed insights<br>
at all on it, I found an online thesys that seems a good point to start.<br>
So the main idea is to develop around the dijkstra and use it to speed<br>
up the results of shortest_path, etc....<br>
The technique of contraction remind me of a tsp historical problem<br>
(pr76) and the way it was resolved.<br>
Some strategies for manage the preprocessing phase can be achieved as<br>
you said or maybe even better.<br>
Finally saying, the first step i think is integrating/developing CH for<br>
pgrouting;<br>
the 2nd find a way to improve performance on preprocessing, etc...<br>
</div></blockquote>
<br>
With respect to the GSoC program:<br>
<br>
1. pick a project that is interesting and challenging to you. It should be something that will hold your interest, let you learn something new and be of value to the pgRouting.<br>
<br>
2. Right sizing your effort. Students tend to be very enthusiastic and tend to over commit, we can help you with this. A project needs to define a minimum set of goals to be successful, and then can have additional stretch goals. You need to think about your project in terms of goals and deliverables because this is how you get measured.<br>




<br>
3. I think either of these projects would be of value, although I'm not sure I understand what you would be doing related to the VRP problem and just adding a caching table to your existing code does not sound very challenging. So we might need to hear more about what you plan to do if you go that direction.<br>




<br>
4. If you are interested in working on the contraction hierarchy we should discuss this more as there are a lot of aspects related to this and it is something that you would probably want to get more familiar with.<br>
<br>
Do you have a preference (strong or weak) on which project is most interesting to you? You might not at this point and that is ok.<br>
<br>
-Steve<br></blockquote><div><br></div><div>i like all this stuff to work on, but I prefer contraction hierarchy so i can improve my skills, learn somenthing new and it' have a major value respect the others algorithm, because every algorithm can depends on CH. it's the main purpose and it's related of one of my personal challenge too.<br>

So, yes I need to discuss more about CH, in meanwhile i'm reading/studying a thesys on this subject. <br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>
On Tue, Apr 16, 2013 at 5:16 PM, Stephen Woodbridge<br></div><div><div>
<<a href="mailto:woodbri@swoodbridge.com" target="_blank">woodbri@swoodbridge.com</a> <mailto:<a href="mailto:woodbri@swoodbridge.com" target="_blank">woodbri@swoodbridge.<u></u>com</a>>> wrote:<br>
<br>
    Hi Raffaello,<br>
<br>
    Thank you for your interest. It sounds like you are doing some<br>
    interesting work.<br>
<br>
<br>
    On 4/16/2013 10:38 AM, Raffaello Bertini wrote:<br>
<br>
        Hi,<br>
        I'm raffaello bertini student of computer science university of<br>
        Bologna,<br>
        Italy.<br>
        i'm actually doing a thesys project using pgrouting (forked) to<br>
        solve<br>
        tsp, vrp problem.<br>
<br>
<br>
    You might be interested to look at sew-devel-2_0 branch in github.<br>
    This will be our 2.0 release eventually. I have already integrated a<br>
    lot of changes into it. On major change it the there is a new TSP<br>
    solver that is not dependent on GAUL, and while I have not<br>
    benchmarked it yet, I believe it is faster than GAUL.<br>
<br>
<br>
        My master course of computer science was on logistic and graph<br>
        theory<br>
        problem, algorithm and code-optimization<br>
        I'm interested partecipating in Gsoc2013 to:<br>
        -develop vrp problem (heuristic) based on tsp instance.<br>
        -develop a strategy for caching data to speed-up computation for<br>
        problem<br>
        or large problem.<br>
        -and I'm also interested in contraction Hieracy.<br>
<br>
        actually I've already developed on my pgrouting forked: project:<br>
<br>
        tsp 3opt asym (start from nearest neighbour).<br>
        trivial vrp single depot solution<br>
        a overlay graph mapping dijkstra solutions, usefull for<br>
        computation on<br>
        tsp/vrp or any algorithm that needs it.<br>
<br>
<br>
    This would all be interesting stuff to contribute back to pgRouting.<br>
<br>
    I think that we would like to get the contraction hierarchy code<br>
    integrated with pgrouting. The big value is the ability to compute<br>
    many routes very quickly, which would be advantageous for compute<br>
    the distance matrix needed to feed the tsp solver. The challenge<br>
    will be how to integrate this with pgRouting. One solution might be<br>
    to set it up as a separate daemon where the plpgsql wrapper connects<br>
    to it via shared memory or a socket and passes the query to it and<br>
    then formates the results back to the SQL caller.<br>
<br>
    Because of the cost to detoast blobs in the database, I'm not sure<br>
    there is any value in trying to store the preprocessed data in the<br>
    database. We might want to have a data loader than can pull the edge<br>
    data from the database via a configured SQL query and then build the<br>
    contraction hierarchy data file, which then gets used for later<br>
    route requests.<br>
<br>
    Anyway, I'm interested in hearing more about your ideas on your<br>
    three areas of interest.<br>
<br>
    Thanks,<br>
       -Steve<br></div></div>
    ______________________________<u></u>___________________<br>
    pgrouting-dev mailing list<br>
    <a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a> <mailto:<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.<u></u>osgeo.org</a>><br>




    <a href="http://lists.osgeo.org/__mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/__<u></u>mailman/listinfo/pgrouting-dev</a><br>
    <<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/<u></u>mailman/listinfo/pgrouting-dev</a><u></u>><div><br>
<br>
<br>
<br>
<br>
______________________________<u></u>_________________<br>
pgrouting-dev mailing list<br>
<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/<u></u>mailman/listinfo/pgrouting-dev</a><br>
<br>
</div></blockquote><div><div>
<br>
______________________________<u></u>_________________<br>
pgrouting-dev mailing list<br>
<a href="mailto:pgrouting-dev@lists.osgeo.org" target="_blank">pgrouting-dev@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-dev" target="_blank">http://lists.osgeo.org/<u></u>mailman/listinfo/pgrouting-dev</a><br>
</div></div></blockquote></div><br></div></div>