[pgrouting-dev] New TSP API

Stephen Woodbridge woodbri at swoodbridge.com
Sun May 19 09:25:03 PDT 2013


OK, so both you an Daniel are looking at the problem from some higher 
level than I am dealing with. So we will have to build some layers to 
bridge the gap between that and the low level code that I have to deal with.

The solver takes as arguments:

num - the size of the matrix
matrix - a num*num array of float8

and returns an array of num indices which it the optimal order.

This will be very close to the first API I create. At this level it 
needs to be this simple. At a higher level some one can map ids to array 
indexes and map them back again.

Regarding, null cell values or negative cell values, I guess I can set 
them to infinity. I'm not going to try and modify the algorithm to 
eliminate arbitrary rows.

Postgresql supports an an array type and multi-dimensional arrays. Most 
people do not use them, but it is a convenient type for passing the data 
to this algorithm.

If I can get this to work, then we can look at layering something 
smarter on top of that.

The bottom line is if your data can not be put into a distance matrix 
then you do not have a problem that can be solved by TSP. Now we just 
need to make it easier to put the data into a distance matrix.

-Steve

On 5/19/2013 11:39 AM, Dave Potts wrote:
> Hi,
>
>
> Is there any sort of time tablethisn idea?
>
> I must admit,  I have a need for this type of thing and with out looking
> at the existing code its difficult to comment.
>
>   Due to the nature of the data that I am working with every node has
> its set of data, so I prefer a solution that uses a generic sql
> expression as a parmeter i.e. something like
>
> select target,cost,reverse_cost, etc where source =XXXXX
>
> Where XXXXX is a supply argument that gets provided invoked when data is
> need.
>
> Dave.
>
> On 19/05/13 15:58, Daniel Kastl wrote:
>>
>>
>>         SELECT * FROM pgr_tsp( 'SELECT id, start, end, cost FROM
>>         distances,
>>         origin int [, destination int])
>>
>>
>>     I can do this, so each record is one cell. What are "start" and
>>     "end"? are these vertex ids or are they indices? Does the use KNOW
>>     that they need to also have a row for (end,start) as well as
>>     (start,end)? These things are less obvious and there for have more
>>     room for errors.
>>
>>
>> Well start and end is just "id1" and "id2".
>> You could actually also have two costs there, one for each direction
>> (like cost and reverse_cost).
>>
>>
>>     I suppose we could write an aggregate function that takes your
>>     query and returns matrix[][]. But we still need to define how to
>>     deal with null values in the matrix.
>>
>>
>> I know I said "matrix", but actually I didn't think about matrix ;-)
>> I thought about pairs of id's with cost(s). So it wouldn't be an
>> [m][m] matrix but more like a table with m*m/2 records (if there is a
>> cost for each direction for each combination).
>> I don't know how it should be later internally for the algorithm, but
>> I would say, that a query (table) always has a fix number of columns
>> and a variable number of rows.
>>
>> In the end this would look like a graph, where all nodes are connected
>> with all nodes.
>>
>>
>>     select pgr_makematrix(i, j, cost) from
>>         (select start as i, end as j, cost from distances) as foo;
>>
>>     Then this could be passed as the SQL to the TSP. We need to keep
>>     each function simple and make them chainable or we limit the
>>     usefulness of them.
>>
>>
>> Exactly ;-)
>>
>>
>>     Any thoughts on how to deal with NULLs in the matrix?
>>
>>     We could have some default rules like?
>>     1. if the null is on a diagonal set it to zero
>>     2. if the cell(i,j) is null and cell(j,i) is not use cell(j,i)
>>     3. otherwise report an error
>>
>>
>> If you always have pairs A <-> B then you won't have a diagonal set.
>> In case there is no way in one direction (maybe even in both
>> directions), then this could be -1 for example?
>> Then it would be same as negative cost for Dijkstra or Astar and it
>> won't be taken into account.
>>
>> Daniel
>>
>>     Thoughts?
>>
>>     -Steve
>>
>>
>>         ... which would return the matrix in an optimized order.
>>         I think it would be nice to be able to set origin and
>>         destination point.
>>         But destination could be optional.
>>
>>         Daniel
>>
>>
>>
>>
>>
>>
>>
>>             I'm not interested in computing the distance matrix
>>         because I will
>>             not be able to do it "right" for any given use case and it
>>         limits
>>             how people can use the function.
>>
>>             Thoughts?
>>
>>             -Steve
>>             _________________________________________________
>>             pgrouting-dev mailing list
>>         pgrouting-dev at lists.osgeo.org
>>         <mailto:pgrouting-dev at lists.osgeo.org>
>>         <mailto:pgrouting-dev at lists.osgeo.org
>>         <mailto:pgrouting-dev at lists.osgeo.org>>
>>         http://lists.osgeo.org/__mailman/listinfo/pgrouting-dev
>>
>>             <http://lists.osgeo.org/mailman/listinfo/pgrouting-dev>
>>
>>
>>
>>
>>         --
>>         Georepublic UG & Georepublic Japan
>>         eMail: daniel.kastl at georepublic.de
>>         <mailto:daniel.kastl at georepublic.de>
>>         <mailto:daniel.kastl at georepublic.de
>>         <mailto:daniel.kastl at georepublic.de>>
>>         Web: http://georepublic.de <http://georepublic.de/>
>>
>>
>>
>>         _______________________________________________
>>         pgrouting-dev mailing list
>>         pgrouting-dev at lists.osgeo.org
>>         <mailto:pgrouting-dev at lists.osgeo.org>
>>         http://lists.osgeo.org/mailman/listinfo/pgrouting-dev
>>
>>
>>     _______________________________________________
>>     pgrouting-dev mailing list
>>     pgrouting-dev at lists.osgeo.org <mailto:pgrouting-dev at lists.osgeo.org>
>>     http://lists.osgeo.org/mailman/listinfo/pgrouting-dev
>>
>>
>>
>>
>> --
>> Georepublic UG & Georepublic Japan
>> eMail: daniel.kastl at georepublic.de <mailto:daniel.kastl at georepublic.de>
>> Web: http://georepublic.de <http://georepublic.de/>
>>
>>
>> _______________________________________________
>> pgrouting-dev mailing list
>> pgrouting-dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/pgrouting-dev
>
>
>
> _______________________________________________
> pgrouting-dev mailing list
> pgrouting-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/pgrouting-dev
>



More information about the pgrouting-dev mailing list