我在阅读关于进化算法的内容时感到困惑。
我想知道进化编程、进化策略和遗传算法之间的“传统”区别是什么,因为我认为在现代它们基本上已经融合成相同的东西了?
我的理解是,遗传算法通过改变“基因”来产生结果,进化策略通过改变参数来改变个体。根据(http://en.wikipedia.org/wiki/Evolutionary_algorithm)中的numerical parameters
,这具体意味着什么?进化编程主要通过对实数的变异来进行变化吗?
进化编程和遗传编程是寻找解决问题的程序的方法,而遗传算法和进化策略是使用候选者寻找问题解决方案的方法吗?我看不出其中的区别,我在进化策略与遗传算法之间的唯一区别是参数列表与染色体以及实数与整数的区别?
谢谢。
回答:
希望这能帮你澄清一些事情:
进化算法:在给定的候选解决方案群体中,尝试找到“最佳匹配”解决方案的算法。算法从随机候选者开始,并通过繁殖、变异、重组和选择来进行演化。
从这里开始,你会发现几种“标准方式”来称呼几类进化算法。这些名称是由学术研究赋予的;我认为命名惯例中的细微差异既来自于细微的原因,也来自于随着时间推移可用词汇的缺乏:
-
遗传算法:给定的群体被定义为“一串数字”(传统上是0和1的向量)。
-
遗传编程:给定的群体是一组结构不同的计算机程序。问题是哪个程序是解决给定问题的“最佳匹配”。如果你熟悉Lisp处理,你会知道整个程序可以表示为树;想象你的算法变异或重组这些树。你最终会得到很多从原始候选者演化而来的程序,其中一些在解决你的问题上会比其他程序更好。
-
进化编程:给定一个具有固定结构但有参数的特定计算机程序,研究的群体是通过改变这些参数得到的程序集。例如,如果你认为你的问题可以用有限状态机来表示,这种技术可以帮助你找到状态的数量、状态之间的授权转换、这些转换的概率。
-
进化策略:给定的群体是一个实数向量+参数,如研究候选者中的变异率,试图达到最优。想象你从一组(c1,c2,c3)三维向量的群体开始。在每一代中,你通过向c1、c2和c3添加一个随机值来变异它们。随机值可能基于标准差为S的高斯分布。开始时使用较大的S值可能是有趣的,这样变异会产生遍布各处的向量,一旦你开始找到有趣的向量,你就可以开始减小S以“聚焦”在这些有趣的向量周围。
记住,这些名称只是命名惯例。有些名称很好地描述了它们的含义,有些则不太优化。在AI领域的进化命名仍在进行中;-)