遗传算法是一个通用的一般框架,有无数可能的变化。本节将介绍两种有趣的技术。
拉马克(Lamarckian)选择的说明。计算机程序不像生物学那样会受到限制。设计者常抛弃这些限制,就像早期飞行员抛弃了羽毛翅膀的想法那样。在创造“永生”样本时我们就违反过限制,把样本直接复制进后代从而免受到重组和变异的破坏。接下来再看看另一种情况。
在基准遗传算法中,新的子串只能在重组和变异的随机过程中产生。在这之后,遗传信息在样本整个生命周期中都将保持不变。一个比达尔文更早的生物学家让-巴蒂斯特·拉马克(Jean-Baptiste Larmarck)的想法更加灵活:他认为生物体的进化是受需求驱动的。长颈鹿为了能吃到高处的树叶而不停地伸脖子,于是脖子变长,长脖子这一进化又遗传给后代。尽管拉马克的假说在生物学里被认为是不成立的,但是在其他领域并不是完全没有用。例如,研究人员可通过发表科学论文把知识传递给后来人。
相比经典的达尔文进化过程,拉马克的进化过程要快得多,这就是为什么我们要在遗传算法中实现它的原因。把这个概念并入到图13.1所示的循环中的最简单的办法是把“拉马克”算子放在“幸运轮”和重组算子之间。拉马克算子的任务是通过适应性来改善染色体。例如,我们可以设问,如果某一位产生了变异会发生什么?因为变异是不可逆的,所以我们可以在变异过程中更灵活一些,先测试当第i位翻转后将发生什么,然后选择较好的版本。
多种群搜索。多种群搜索要和遗传算法依靠的多参数一起进行。大多数时候要靠个人的经验,另外也可以在相同的初始种群上并行地运行多个遗传算法,每个都有各自的变异频率、是否逆序变异、不同的重组算子的组合或修改过的适应度函数。在这些情况中,有一些搜索能更快地找到解。
回忆一下在讨论过早退化那一节曾提到的多种群搜索。在那里建议让两个或多个种群在相对隔绝的情况下独立进化,偶尔允许异种杂交。而如果种群使用了本文前面提到的不同的染色体定义,则这种杂交可能不容易实现。这时编程人员需要使用专门的程序实现一种编码向另一种编码的转换。
数据串,符号串。染色体编码不需要必须是二进制位串,也可以是数字串或字符串。前面提到的重组算子都可以用于这两种编码形式,但变异算子需要做些改变。在数字串中最常见的变异是用“噪声”叠加到部分(或全部)染色体的“基因”上。例如,如果所有的位置包含区间[0,100]的数字,于是噪声就可以建模为区间[-a,+a]的随机数,其中a是用户指定的参数,类似于前面二进制串中的变异频率。它的工作原理见下表:
……
展开
——雅克·凯瑞特 |《计算评论》
米罗斯拉夫·库巴特所著的这本《机器学习导论》更像是一本科普性质的读物,作者尽量避开复杂的数学公式,用生动形象的方式介绍机器学习算法,而且本书篇幅适当,又涵盖了几乎所有基本的机器学习方法,使得本书不仅适合作为本科学生机器学习课的教材,也适合想了解机器学习入门知识的普通读者。
——刘成林|中国科学院自动化研究所副所长、模式识别国家重点实验室主任