【问题标题】:Genetic algorithm individual representation遗传算法个体表示
【发布时间】:2016-02-03 23:48:50
【问题描述】:

遗传算法的典型介绍包括个体的二进制表示,其中通过翻转位发生突变。还有其他常用的表示吗?

当您想从特定十进制值的解开始时,二进制表示似乎很不方便。有没有其他以十进制形式表示个人的方案?

【问题讨论】:

  • 您不需要二进制表示。您只需将每个解决方案制定为可以组合在一起的单个节点的集合,然后将适应度函数应用于每个特定组合。

标签: genetic-algorithm evolutionary-algorithm


【解决方案1】:

线性二进制表示是原始表示,但还有许多其他众所周知的替代方法。

您可以拥有其他类型的数组,它们的使用方式基本相同。

您也可以混合使用这些类型。例如。连接几种类型的异源编码基因允许...

...用于解决问题参数需要完全不同的定义域的优化问题。例如,在级联控制器调谐问题中,内部回路控制器结构可以属于传统的三参数调节器,而外部回路可以实现具有固有不同描述的语言控制器(例如模糊系统)。这种特殊的编码形式需要一种专门的交叉机制,按部分重组染色体,它是复杂自适应系统,尤其是进化过程的建模和模拟的有用工具。

(来自Wikipedia

举个例子,Differential evolution 基于实值向量,在许多数值优化问题上的表现优于“标准”遗传算法(另请参阅What's differential evolution and how does it compare to a genetic algorithm?)。

很少改变的是表示长度(也探索了可变长度表示,但交叉实现更复杂)。

【讨论】:

    【解决方案2】:

    基本上,基因型可以由任何你想要的东西组成。唯一的问题是它必须是“可进化的”,即您必须定义一些重组和变异算子(或至少是变异)。只要你有这个,你就可以走了。

    我写了一个blog post,关于处理浮点数时二进制表示的问题。解决方案不是用二进制表示数字,而是直接使用数字作为基因型的一部分。一旦您的基因型是实数序列(而不是 0 和 1 序列),您的突变和重组算子就会发生巨大变化 - 您通常使用随机程序来生成和组合新解决方案。

    另一个例子是(基于树的)遗传编程——同样,它只不过是一种遗传算法,其表示不是二进制字符串。虽然它比普通的 GA 复杂得多,但它仍然是同一个想法——定义了交叉和变异算子的表示。

    另一种方法是基因型-表型程序。举个例子语法进化算法。它进行遗传编程,但在进化过程中修改的表示是二进制字符串(但长度可变),并且使用上下文无关语法将其转换为程序。

    可能性无穷无尽:)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-10
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      相关资源
      最近更新 更多