微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

矩阵表上的 pgRouting pgr_TSP 返回:非对称矩阵作为输入给出

如何解决矩阵表上的 pgRouting pgr_TSP 返回:非对称矩阵作为输入给出

我使用 pgr_dijkstraCostMatrix 创建了一个距离矩阵表。

这个表现在有 168.000.000 条记录。 (id = 整数,start_vid = bigint,end_vid = bigint agg_cost = 双精度)

我还有一个积分表(这些是要访问的积分)。 持有 13 项记录。 (id = bigint,name = var char)

如果我检查所有点是否都在矩阵中,我会得到一个很好的结果。 返回了 156 条记录,所以:13*13 -13。这正是我所期望的。

此检查的 sql

SELECT start_vid,end_vid,agg_cost
    FROM distance AS a
       INNER JOIN
       points AS b
       ON a.start_vid = b.id
       INNER JOIN
       points AS c
       ON a.end_vid = c.id order by start_vid,end_vid 

现在,当我对此使用 pgr_TSP 时,出现错误

错误:非对称矩阵作为输入给出 上下文:sql 函数“pgr_tsp”语句 1 sql 状态:XX000

使用的 sql

SELECT * FROM pgr_TSP(
    $$
    SELECT start_vid,agg_cost
FROM distance AS a
   INNER JOIN
   points AS b
   ON a.start_vid = b.id
   INNER JOIN
   points AS c
   ON a.end_vid = c.id
         
    $$,start_id := 92242,randomize := false
);

在这里缺少什么? 如果我的选择为我的 13 个点生成一个完整的矩阵?

使用 Postgresql 12、PostGIS 3.0.1 和 pgRouting 3.0.0。

解决方法

晚上好,

我遇到了与您类似的问题。我的矩阵是 12 X 12,它是 pgr_dijkstraCostMatrix 的结果,选项定向为真。这产生了非对称矩阵,因为某些单元格的 agg_cost 值不相似。例如,从节点 1 到 2 的路径成本必须与从 2 到 1 的路径成本相同。 ,从而产生一个对称矩阵。下面的可视化示例;

|非对称 |----------------------> |与上述解对称|

| X | 2 | 1 |------------------------------->| X | 1.5 | 1 |

| 1 | X | 2 |------------------------------->| 1.5 | X | 2.5 |

| 1 | 3 | X |------------------------------->| 1 | 2.5 | X |

(1,2)+(2,1)/2 = 2 + 1 / 2 = 1.5

(1,3)+(3,1)/2 = 1 + 1 / 2 = 1

(2,2)/2 = 2 + 3 / 2 = 2.5

然而,虽然这解决了 TSP 产生的错误,但结果并不是最令人满意的。你也可以试试这个,如果你有任何结果,请告诉我。你有没有试过别的?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。