我对建模优化问题有疑问。 我想对网络或图形中两个节点之间的路径中的所有链接进行建模。大多数论文都基于仅对两个节点(直接连接)之间的一个链接建模的基础。
我不知道如何在优化模型中显示节点i和节点j之间的路径。
您有什么建议吗?
谢谢
答案 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
优化模型如下所示:
该约束只是对节点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上搜索它们,两种语言都有很多实现。这些用于“访问所有给定的两个节点之间的所有节点”(也称为图遍历)。使用这种方法来获取两个节点内的路径。
如果您对实现这些算法中的任何问题还有更多疑问,请打开一个提示问题,并确保下次提供更多信息,包括您尝试过但不起作用的代码...