【问题标题】:How to represent a path for a genetic algorithm?如何表示遗传算法的路径?
【发布时间】:2009-04-13 17:41:34
【问题描述】:

我想用 GA 来确定从 A 到 B 的最优路径,满足一定的条件(长度、圈数等)

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

问题是,我真的不知道有什么好的方法可以很好地表示这样的信息,以便在 GA 中使用,尤其是因为路径的长度是可变的。

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

【问题讨论】:

    标签: language-agnostic artificial-intelligence genetic-algorithm


    【解决方案1】:

    我不确定你的表示问题到底是什么,所以我怀疑你有这个问题是因为误解了 GA 的染色体字符串。从理论上讲,如果您采取额外的步骤来划分您的单个基因,则不必在整数边界上明确重组染色体串,这将允许您在逐个基因的基础上进行重组。这解决了可变长度基因的问题,例如您的“路径”。重组可变长度基因只是在突变方法中添加另一个变体,特别是“使用这个元素或核对这个元素”,除了标准的“使用来自 A 的元素或来自 B 的元素”,如果你的基因可以分解成离散的元素,就像你的路径一样。

    【讨论】:

    • 那么我该怎么做才能交叉两条不同长度的染色体呢?
    • 如果你的意思是在重组过程中发现X染色体不包含Y染色体上的一些基因子集S,那么重组随机选择S的哪些基因出现在合成的染色体上,即同样的方式我们处理可变长度的基因。
    • 另外,它可能会帮助您(我知道它帮助了我)将染色体明确概念化为字符串,而仅仅是一组操作和变量。字符串表示主要用于类比 DNA、imr,但在 GA 实现中没有明确要求。
    【解决方案2】:

    听起来你真的很想使用A* optimisation algorithm 之类的东西,它通常用于(效果很好)寻路。您可以指定任何您喜欢的启发式函数以获得适当的解决方案。

    【讨论】:

      【解决方案3】:

      我会使用 U、D、L、R....

      所以“上 4、左 8、下 3、右 3、下 1、左 10、上 4、左 1、上 3”将是:

      UUUULLLLLLLLDDDRRRDLLLLLLLLLLLUUUULUUU

      这样培育字符串会容易得多。

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

      • 在 1 到 MAX(LEN(A), LEN(B)) {1 到 15} 之间选择一个随机的所需长度 (len)
      • 在 1 和 len 之间选择一个随机分割点。
      • 选择是让 A 还是 B 随机先行。
      • 从一个中取出第一个 s 字符,然后从另一个中取出最后一个 (len-s) 个字符。

      【讨论】:

        【解决方案4】:

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

        也许您可以按照建议选择数字编码路径表示,但仍然可以使用您的示例编码为 Osama ALASSIRY 建议:UUUULLLLLLLLDDDRRRDLLLLLLLLLUUUULUUU
        对于交叉:

        • 让变异操作符读取给定个体的当前长度,
        • 生成两个随机数 x1,y1,x1,y1 =
        • 对个人 2 做同样的事情,现在你有两对 (x1,y1) 和 (x2,y2),
        • 从个体 1 复制 x1 和 y1 之间的内容,并将其插入到个体 2 的值 x2 和 y2 之间。新版本的 Individual 2 可能会改变它的长度,因为 x1y1 和 x2y2 之间的基因数量可以不同,但​​没关系,
        • x2y2 之间个体 2 的原始版本中的内容应插入 x1y1 之间个体 1 的新版本中(其长度也会改变),

        说清楚:
        父 A:UUUULLLLLLLLDDDRRRDLLLLLLLLLLLUUUULUUU
        父 B:DRRRRLULUDDDR
        你生成随机对pairA(4,18),pairB(0,5) 假设您从 0 开始计算基因,您将交换以下字符串:
        UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUU
        DRRRRLULUDDDR
        所以越过你得到
        UUUUDRRRRLLLLLLLLLLUUUULUUU
        LLLLLLLLDDDRRRDULUDDDR
        现在你刚刚穿越了。您也可以使用一个切割点或多个点。

        关于变异:

        • 生成0到个体长度之间的数字,
        • 生成 1-4 之间的数字并更新该基因。 (如果生成了 1,则将其更改为 U、2-D、3-L、4-R)

        你刚刚做了突变。您还可以突变多个基因。

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

        【讨论】:

          【解决方案5】:

          在我看来,这听起来与Travelling salesman problem 非常相似,该页面是否包含一些有用的信息?

          【讨论】:

            猜你喜欢
            • 2012-09-23
            • 2016-02-03
            • 2017-08-10
            • 1970-01-01
            • 1970-01-01
            • 2018-12-10
            • 1970-01-01
            • 1970-01-01
            • 2011-01-11
            相关资源
            最近更新 更多