遗传算法个体表示

Genetic algorithm individual representation

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

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

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

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

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

...for solving optimization problems that require vastly disparate definition domains for the problem parameters. For instance, in problems of cascaded controller tuning, the internal loop controller structure can belong to a conventional regulator of three parameters, whereas the external loop could implement a linguistic controller (such as a fuzzy system) which has an inherently different description. This particular form of encoding requires a specialized crossover mechanism that recombines the chromosome by section, and it is a useful tool for the modelling and simulation of complex adaptive systems, especially evolution processes.

(来自Wikipedia

举个例子,Differential evolution is based on real valued vectors and can outperform "standard" Genetic Algorithms on many numerical optimization problems (see also What's differential evolution and how does it compare to a genetic algorithm?)。

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

基本上,基因型可以由任何你想要的东西组成。唯一的问题是它必须是 "evolvable",即您必须定义一些重组和突变运算符(或至少是突变​​)。只要你有这个,你就可以开始了。

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

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

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

可能性是无限的:)。