我想使用GA来确定从A到B的最佳路径,满足某些条件(长度,转数等)。
路径的一个例子是: Up 4,Left 8,Down 3,Right 3,Down 1,Left 10,Up 4,Left 1,Up 3
问题是,我真的不知道如何以一种很好的方式在GA中表示这样的信息,特别是因为路径的长度可变。
有没有人知道如何做这样的事情?
答案 0 :(得分:2)
我不确定你的代表问题到底是什么,所以我怀疑你对GA的染色体串的误解有这个问题。从理论上讲,如果您采取额外的步骤划分您的个体基因,染色体串不必在整数边界上明确重组,这将允许您在逐个基因的基础上重组。这解决了可变长度基因的问题,例如你的“路径”。重组可变长度基因只是在突变方法中添加另一个变体,特别是“使用此元素或核心这个元素”,除了标准的“使用来自A的元素或来自B的元素”,如果你的基因易碎到离散的话元素,就像你的道路一样。
答案 1 :(得分:2)
听起来你真的想要使用像A* optimisation algorithm这样的东西,这是常用的(效果很好)路径寻找。您可以指定任何您喜欢的启发式函数,以获得适当的解决方案。
答案 2 :(得分:1)
我会使用U,D,L,R ....
所以“Up 4,Left 8,Down 3,Right 3,Down 1,Left 10,Up 4,Left 1,Up 3”将是:
<强> UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUU 强>
如此繁殖字符串要容易得多。
对于A(15个字符)和B(3个字符),我在A&amp; A之间的繁殖功能。 B将是:
答案 3 :(得分:1)
GA可以处理长度可变的染色体。实际个人可能非常复杂。例如,它可以包含一定数量的固定长度位,字符串(没有固定长度),也可能包含一些共轭复数对。另外,共轭复数对必须始终保留一些条件。它可以做到,但是更复杂的个体得到,更复杂的遗传操作得到(例如交叉,突变)。可能健身功能需要更多代码。但它仍有可能。
根据建议,您可以选择数字编码路径表示,但仍可以将您的示例编码为Osama ALASSIRY建议: UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULU 对于交叉:
说清楚:
父A:UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUUUU
父母B:DRRRRLULUDDDR
你生成随机对pairA(4,18),pairB(0,5)
假设您从0开始计算基因,则交换以下字符串:
UUUU的 LLLLLLLLDDDRRRD 强> LLLLLLLLLLUUUULUUU
的 DRRRRL 强> ULUDDDR
所以在交叉后你得到了
UUUU的 DRRRRL 强> LLLLLLLLLLUUUULUUU
的 LLLLLLLLDDDRRRD 强> ULUDDDR
现在你刚刚交叉了。你也可以使用一个切割点或乘法点。
至于突变:
你刚刚做了突变。你也可以改变一个以上的基因。
但正如我所说,还有其他可能性。
答案 4 :(得分:0)
对我而言,这听起来与Travelling salesman problem非常相似,该页面是否包含一些有用的信息?