如何在优化问题中对路径建模?

时间:2019-05-20 19:11:08

标签: optimization linear-programming

我对建模优化问题有疑问。 我想对网络或图形中两个节点之间的路径中的所有链接进行建模。大多数论文都基于仅对两个节点(直接连接)之间的一个链接建模的基础。

我不知道如何在优化模型中显示节点i和节点j之间的路径。

您有什么建议吗?

谢谢

2 个答案:

答案 0 :(得分:1)

可能有帮助的例子。这是一个建模为LP的最短路径问题的小示例。该问题带有标签linear programming,所以我认为这就是您要查找的内容。

数据如下:

----     34 PARAMETER d  distances

            A           B           C           D           E           F           G           H

A                   8.000                                          10.000
B                               4.000                  10.000
C                                           3.000
D                                                      25.000      18.000
E                                           9.000                               7.000
F       5.000       7.000       3.000                   2.000
G                                           2.000                                           3.000
H       4.000       9.000

假设i->j不存在弧d(i,j)=0

我们想找到从G到C的最短路径。我们使用稀疏流入参数对此进行建模:

----     34 PARAMETER b

C -1.000,    G  1.000

最后,我们引入一组a(i,j)来指示网络结构。在此示例中,这仅反映了非零距离:

----     34 SET a  arcs exist if we have a distance

            A           B           C           D           E           F           G           H

A                     YES                                             YES
B                                 YES                     YES
C                                             YES
D                                                         YES         YES
E                                             YES                                 YES
F         YES         YES         YES                     YES
G                                             YES                                             YES
H         YES         YES

优化模型如下所示:

enter image description here

该约束只是对节点i上的流入等于流出进行建模(通常称为节点平衡约束)。对于大问题,请确保变量x(i,j)的数量不是全部i,j的范围,而是仅存在于弧段i->j的范围。当网络庞大且稀疏时,这可以带来很大的不同。

当我们以LP解决这个问题时,我们得到了解决方案:

----     34 VARIABLE x.L  flow

            B           C           H

B                   1.000
G                               1.000
H       1.000

即我们有一条最短的路径G -> H -> B -> C。成本为16。

可以针对最小成本或最大流量问题构建非常相似的模型。

答案 1 :(得分:0)

对不起,英语不好。

由于您没有提供任何源代码(是打开问题所必需的)或编程语言,所以我只能帮助您向您展示一些与寻路相关的算法。

Dijkstra的算法是一种用于查找图中节点之间最短路径的算法...也许这正是您要寻找的。请记住,Dijkstra的算法仅向您显示最海岸线(并非所有路径)

DFS BFS 算法是专门为图形搜索而设计的。在Internet上搜索它们,两种语言都有很多实现。这些用于“访问所有给定的两个节点之间的所有节点”(也称为图遍历)。使用这种方法来获取两个节点内的路径。

如果您对实现这些算法中的任何问题还有更多疑问,请打开一个提示问题,并确保下次提供更多信息,包括您尝试过但不起作用的代码...