遗传算法个体表示

时间:2015-11-03 17:38:46

标签: genetic-algorithm evolutionary-algorithm

通常对遗传算法的介绍包括个体的二进制表示,其中通过翻转位来发生突变。是否还有其他常用的表示形式?

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

2 个答案:

答案 0 :(得分:1)

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

您可以使用基本相同的其他类型的数组。

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

  

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

(来自Wikipedia

仅举一个例子,Differential evolution基于实值向量,并且在许多数值优化问题上可以胜过“标准”遗传算法(另见What's differential evolution and how does it compare to a genetic algorithm?)。

表示长度很少变化(也探讨了可变长度表示,但交叉实现更复杂)。

答案 1 :(得分:1)

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

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

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

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

可能性无穷无尽:)。