3

我在理解算法时遇到了问题。这里是最流行的在线看到的遗传算法轮盘选择

for all members of population 
    sum += fitness of this individual 
end for 

for all members of population 
    probability = sum of probabilities + (fitness/sum) 
    sum of probabilities += probability 
end for 

loop until new population is full 
    do this twice 
    number = Random between 0 and 1 
     for all members of population 
      if number > probability but less than next probability 
      then you have been selected 
     end for 
     end 
    create offspring 
end loop 


for all members of population 
    probability = sum of probabilities + (fitness/sum) 
    sum of probabilities += probability 
end for 

^^^这件作品特别让我困惑。在一个人群中,什么是“概率总和”,甚至是“概率”?这些就像个人在开始时的价值观?

回答

1

这是一个非常模糊的代码段。

在第二个代码块中,probability是一个附属于每个成员的变量,而sum of probabilities是整个人口的全局变量。

现在,轮盘赌比喻说的是,整个人口可以表示为一个轮盘赌轮,并且每个成员的人口在该轮盘赌轮中具有与其相对适合度成比例的切片。该代码正在做隐喻背后的肮脏工作 - 而不是轮子上的楔子,现在成员在线段[0,1]上用比例间隔表示,这是表示概率的常用方式。

要做到这一点,您在技术上需要两个数字,一个开始和一个结束,为每个成员。但第一个成员的开始将是0;第二名成员的开始将是第一名成员的结束;直到最后一个成员,其结束为1.

这就是代码所做的事情。 Sum of probabilities从0开始,并且第一次通过循环时,probability就是你直觉上认为的那样。它标志着第一个成员的终点。然后更新“概率之和”。通过循环第二次,“概率”就是你直觉上认为它会......被“概率之和”转移。事情就这样了。

所以第一个循环是将健身值加在一起作为标准化事物的前奏。你问的第二个循环是规范化和排列单位间隔内的归一化概率。第三个(最复杂的)循环是挑选两个随机数字,将它们与两个人口成员匹配并匹配它们。 (请注意,假设这些成员处于某种类似数组的格式,以便您可以依据您所滚动的随机数顺序检查其端点。)

1

的关键是

probability = sum of probabilities + (fitness/sum) 

if number > probability but less than next probability 
     then you have been selected 

​​是个人的机会创造后代的测量;它在轮盘上的切片大小。 sum of probabilities是轮盘的总大小。 每个人的probability是它的健身功能。

我发现this link有助于理解算法。

+1

那么为什么算法将概率之和加到(健身/总和)为每个成员的人口得到概率...概率应该是(健身/总和)仪式? – user1013905