Language agnostic 如何表示遗传算法的路径?

Language agnostic 如何表示遗传算法的路径?,language-agnostic,artificial-intelligence,genetic-algorithm,Language Agnostic,Artificial Intelligence,Genetic Algorithm,我想使用遗传算法来确定从a到B的最佳路径,满足某些条件(长度、圈数等) 路径的一个示例是: 上4,左8,下3,右3,下1,左10,上4,左1,上3 问题是,我真的不知道有什么好的方法来表示这样的信息,特别是因为路径的长度是可变的 有人知道如何做这样的事情吗?我不确定你的表达问题到底是什么,所以我怀疑你是因为误解了遗传算法的染色体串而提出这个问题的。从理论上讲,如果你采取额外的步骤来划分你的单个基因,那么染色体串不必在整数边界上显式重组,这将允许你在一个基因一个基因的基础上重组。这就解决了可变长度

我想使用遗传算法来确定从a到B的最佳路径,满足某些条件(长度、圈数等)

路径的一个示例是: 上4,左8,下3,右3,下1,左10,上4,左1,上3

问题是,我真的不知道有什么好的方法来表示这样的信息,特别是因为路径的长度是可变的


有人知道如何做这样的事情吗?

我不确定你的表达问题到底是什么,所以我怀疑你是因为误解了遗传算法的染色体串而提出这个问题的。从理论上讲,如果你采取额外的步骤来划分你的单个基因,那么染色体串不必在整数边界上显式重组,这将允许你在一个基因一个基因的基础上重组。这就解决了可变长度基因的问题,比如你的“路径”。重组可变长度基因只需在突变方法中添加另一个变体,特别是在标准的“使用来自a的元素或来自B的元素”之外添加“使用此元素或核化此元素”,如果你的基因可以分解为离散的元素,就像你的路径一样。

对我来说,这听起来与,那个页面包含一些有用的信息吗?

我会使用U、D、L、R

所以“上4,左8,下3,右3,下1,左10,上4,左1,上3”应该是:

uullllllllldddrrrdlllllllllllluuuluuuuu

这将是更容易繁殖这样的字符串

对于A(15个字符)和B(3个字符),我在A和B之间的繁殖功能是:

  • 选择介于1和MAX之间的随机所需长度(len)(len(a),len(B)){1和15}
  • 在1和len之间选择一个随机分割点
  • 选择是否希望A或B随机先走
  • 从要首先执行的一个字符中选取前s个字符,从另一个字符中选取最后(len-s)个字符

听起来您真的很想使用类似的东西,这是路径查找常用的方法(效果很好)。您可以指定任何您喜欢的启发式函数,以获得合适的解决方案。

GA可以处理长度可变的染色体。实际的个体可能非常复杂。例如,它可以包含一些固定长度的位、字符串(无固定长度)以及一些共轭复数对。此外,共轭复数对必须始终保持某些条件。这是可以做到的,但个体越复杂,遗传操作就越复杂(如交叉、突变)。可能适应度函数需要更多的代码行。但这仍然是可能的

也许正如建议的那样,您可以选择数字编码的路径表示法,但仍然可以使用您的示例按照建议编码:uuullllllldddrrrdlllllllllluluuuuu
对于交叉:

  • 让变异运算符读取给定个体的当前长度1
  • 生成两个随机数x1,y1,都是x1,y1=
  • 对单个2执行相同的操作,现在有两对(x1,y1)和(x2,y2)
  • 从单个1复制x1和y1之间的内容,并将其插入值x2和y2之间的单个2中。新版本的个体2可能会改变其长度,因为x1y1和x2y2之间的基因数量可能不同,但这没关系
  • x2y2之间的个人2的原始版本应插入x1y1之间的个人1的新版本中(其长度也将改变)
要说清楚:
父级A:uuuullllllldddrrrdlllllllllluuuuuuuuuuuu
父级B:drrrrluluddr
生成随机对pairA(4,18),pairB(0,5) 假设从0开始计算基因,则交换以下字符串:
UUUUlllllllllllldddrrrdlllllllllllllluuuuuuu
DRRRRLuluddr
因此,跨越后,您将获得
UUUUDRRRRLlllllllllluuuuuuuu
LLLLLLLLDDDRRRDuluddr
现在你刚过马路。也可以使用一个切割点或多个切割点

至于突变:

  • 生成介于0和个体长度之间的数字
  • 生成1-4之间的数字并更新该基因。(如果生成了1,则将其更改为U、2-D、3-L、4-R)
你刚刚做了变异。你也可以变异多个基因


但正如我所说,还有其他的可能性。

那么我该如何跨越两条不同长度的染色体呢?如果你的意思是在重组过程中发现X染色体不包含Y染色体上的某些基因子集S,那么重组会随机选择S的哪些基因出现在合成染色体上,也可以帮助你(我知道这对我有帮助)不把染色体明确地概念化为一个字符串,而仅仅是一组操作和变量。字符串表示主要用于与DNA、imr的类比,但在GA实现中没有明确要求。