我正在考虑使用分支和绑定并行化旅行商问题。任何人都可以指导我采取的方法。
答案 0 :(得分:1)
以下来自Bertsimas和Tsitsiklis的Introduction to Linear Optimization的想法
我认为第一部分不能并行完成(除非你可以并行执行LP解决)
x = BooleanMatrix(num_nodes by num_nodes) # entry (i, j) is 1 if (i, j) is in tour
c = CostMatrix(num_nodes by num_nodes) # entry (i, j) is cost of edge (i, j)
solve integer LP:
min sum(x .* c) # component-wise
subject to:
sum(i-th row of x) = 1 for all i
sum(j-th row of x) = 1 for all j
你可以使用例如相对快速地解决这个问题。 GLPK
问题在于约束强制每个节点一个入口和一个出口,但不强加连接。你最终可能会得到一个让你脱节的解决方案。 (例如,5节点图中的(1->2->3->1) (4->5->4)
)
您现在在路径长度上有一个下限,可以进行分支绑定以查找解决方案,如下所示:
for each edge (t, h) in the tour from the setup:
solve traveling salesman problem with same graph minus edge (t, h)
新LP与以前相同,只是删除了您使用过的一条边。您可以并行化此循环。