遗传算法中探索与利用的区别

时间:2013-11-23 11:55:12

标签: search genetic-algorithm genetic-programming

在进化算法中,维持了两个主要的能力,即探索和开发。

探索在新区域中搜索新解决方案的算法,而挖掘意味着使用已存在的解决方案并对其进行细化,以便它的适应性得到改善。

在我的情况下,我担心遗传算法,我的问题是我读了很多不同的文章,我找出了三种不同的解释,探索和利用这些观点如下:

  1. 在一篇文章中,它谈到探索是通过交叉和利用变异进行的探索来完成的

  2. 在一篇文章中,第一篇文章的逆转,通过突变和利用交叉进行探索

  3. 最后一篇是A. E. Eiben和C.A.撰写的论文“On Evolutionary Exploration and Exploitation”(1998)。 Schippers ,它说开发是通过选择过程完成的,而探索是由操作员完成的,无论它是交叉还是突变

  4. 从我的小观点来看,交叉和变异都给了我们一个新的解决方案,这个解决方案在算法的随机部分是人口中不存在的,所以它是探索过程,当选择个体进行交配或繁殖时我从已经存在的解决方案中选择,并根据它的适应性,这是启发式部分,因此它被利用。

    哪个是正确的?哪个步骤或操作员负责勘探和负责开采?

    请为此我需要推理合理的答案。

2 个答案:

答案 0 :(得分:8)

第3号似乎是正确的解释。

交叉和变异都是探索问题空间的方法。选择用于利用当前集合中的“好”遗传物质。

但是,我认为你建议这些是两个独立的,多样化的概念。它们都是遍历问题空间的方法,两者几乎总是一起使用。算法应该通过交叉和变异探索问题空间,但是应该通过在其他好的解决方案附近引入解决方案来实现。

诀窍始终是寻找合适的平衡点。过度开发,你会陷入局部最大值,走得太远而无法探索,你会把时间花在不那么好的解决方案上,而忽略你已经收集的信息。

答案 1 :(得分:0)

Crossover运算符实现深度搜索或利用,留下对变异运算符的广度搜索或探索:

(资料来源:https://www.cs.cmu.edu/afs/cs/project/jair/pub/volume24/ortizboyer05a-html/node1.html

SELECT Registration.FName,RequestPooja.RitualId AS RitualId ,Rituals.Name 
FROM RequestPooja 
INNER JOIN Registration  ON RequestPooja.UserId = Registration.Id   
INNER JOIN Rituals ON  Rituals.Id=RequestPooja.RitualId
WHERE Registration.Id=2

UNION ALL

 SELECT Registration.FName,AaparaKarma.RitualId AS RitualId  ,Rituals.Name 
 FROM AaparaKarma 
 INNER JOIN Registration  ON AaparaKarma.UserId = Registration.Id  
 INNER JOIN Rituals ON  Rituals.Id=AaparaKarma.RitualId
 WHERE Registration.Id=2

算法永远不会达到最佳解决方案 没有突变。假设,最优解是x = 9 9 0 0 9 9 0 0.如果 突变不会发生,那么改变基因的唯一方法就是应用交叉算子。无论交叉的执行方式如何,其唯一的结果是在染色体的某些位置交换父母的基因。这意味着儿童染色体中的第一个基因只能是6,8,2或4(即x1,x2,x3和x4最优的第一个基因),并且因为初始种群中没有一个基因以基因9开始,单独的交叉算子永远不会在开始时产生一个带有基因9的弹簧。

(资料来源:http://www.eis.mdx.ac.uk/staffpages/rvb/teaching/BIS3226/sol15.pdf