【问题标题】:Genetic algorithm - shortest path in weighted graph遗传算法 - 加权图中的最短路径
【发布时间】:2017-08-10 11:04:01
【问题描述】:
我想制作一个遗传算法来解决加权连通图中的最短路径问题。类似于旅行推销员,但不是全连通图,而是连通图。
我的想法是以二进制形式为每个染色体随机生成一个由 n-1 个节点组成的路径,其中数字表示路径中的节点。然后我将根据权重总和(如果不能从 A 到 B 我会给它惩罚)和其中的交叉/变异位来选择最好的。它会起作用吗?感觉有点像小版本的蛮力。有没有更好的办法?
谢谢!
【问题讨论】:
标签:
machine-learning
artificial-intelligence
genetic-algorithm
【解决方案1】:
遗传算法几乎是“小版本的蛮力”。它只是一种元启发式,而不是具有良好收敛保证的优化方法。它基本上依靠随机性来提供新的解决方案,因此它是一种“稍微好一点的随机搜索”。
那么“它会起作用吗”?是的,它会做一些事情,只要你有足够的突变随机性,它甚至(最终)会收敛到最优。它会比随机搜索更好吗?很难说,这取决于几十个因素,不仅是你的编码,还有所有使用的超参数等等。一般遗传算法都是关于试验和错误的。特别是染色体不丢失任何信息的表示(你的没有)无关紧要,这意味着一切都取决于交叉和突变的巧妙实现(只要染色体不丢失它们所包含的任何信息)都是等价的)。
【解决方案2】:
已编辑。
您可以使用排列编码 GA。在排列编码中,您应该给出起点和终点。 GA 使用您的适应度函数搜索最佳染色体。候选解决方案(染色体)将类似于 2-5-4-3-1 或 2-3-1-4-5 或 1-2-5-4-3 等。因此您的解决方案取决于您的适应度函数。 (查看 R 的 GA 包以轻松应用置换 GA。)
连接是您的问题的约束。我最好的建议是创建一个这样的约束矩阵:
FirstPoint SecondPoint Connected
A B true
A C true
A E false
... ... ...
在标准 TSP 中,仅考虑距离。在您的适应度函数中,您必须考虑这个矩阵并为每个错误添加一个惩罚以返回值。
Example chromosome: A-B-E-D-C
A-B: 1
B-E: 1
E-D: 4
D-C: 3
Fitness value: 9
.
Example chromosome: A-E-B-C-D
A-E: penalty
E-B: 1
B-C: 6
C-D: 3
Fitness value: 10 + penalty value.
因为您的约束是硬约束,您可以使用最大整数值作为惩罚。 GA 会找到最佳解决方案。 :)