有一个n * n网格,网格的一个单元格中有一个代理A. A可以传播T个细胞。
网格中的每个单元格都有一些重量,A的路径必须最大化该重量。
A也必须在其行进范围T内返回其起始位置。
代表路径的个人代表是什么?
我尝试过的方法:
两种方法的问题在于交叉几乎总是会产生无效路径。路径在中间被打破。他们没有形成封闭的道路。我似乎无法找到一种代表个人解决方案和合适的交叉方法的好方法。请帮忙。
答案 0 :(得分:2)
首先,我想说这个问题更适合其他方法,例如可能ant colony optimization,贪婪的方法可以提供足够好的解决方案等。由于你的确切原因,GA可能效果不佳描述
但是,如果你必须使用GA,这里有两个可能值得研究的模型:
严重惩罚无效路径,给予无效移动成本 - 无穷大。例如,如果您的染色体说从单元格x
转到无法访问的单元格y
,请考虑y
-infinity的成本。这可能值得结合发生交叉的概率很低,可能是5%。
不要做交叉,只是做一些更多涉及后代的突变。
如果你想变得更加漂亮,这有点类似于travelling salesman problem,它有很多关于遗传算法的研究:
http://www.math.hmc.edu/seniorthesis/archives/2001/kbryant/kbryant-2001-thesis.pdf
答案 1 :(得分:2)
您可以将路径编码为参考列表:
假设这些是您的位置(1 2 3 4 5 6 7 8 9)
(1 2 3 4 8)
的子集路由可以编码为(1 1 2 1 4)
。
现在带两个父母
p1 = (1 1 2 1 | 4 1 3 1 1)
p2 = (5 1 5 5 | 5 3 3 2 1)
将产生
o1 = (1 1 2 1 5 3 3 2 1)
o2 = (5 1 5 5 4 1 3 1 1)
将被解码为这些位置路线
o1 = 1 – 2 – 4 – 3 – 9 – 7 – 8 – 6 – 5
o2 = 5 – 1 – 7 – 8 – 6 – 2 – 9 – 3 – 4
这样,交叉将始终产生有效的结果(这种表示是否有助于您更好地解决问题)。
可以找到一些其他信息here。