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

^^^这篇文章特别让我困惑。在人口中的个人的背景下,“概率之和”甚至“概率”是什么?这些是个人一开始就有的价值观吗?

4

2 回答 2

1

关键在

probability = sum of probabilities + (fitness / sum)

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

Probability衡量个体创造后代的机会;它在轮盘上的切片大小。sum of probabilities是轮盘赌的总大小。每个人probability的适应度都是其适应度的函数。

在尝试理解算法时,我发现此链接很有帮助。

于 2011-11-26T07:35:23.190 回答
1

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

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

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

为此,从技术上讲,每个成员都需要两个数字,一个开始和一个结束。但是第一个成员的开始将是 0;第二个成员的开始将是第一个成员的结束;以此类推,直到最后一个成员,其结尾为 1。

这就是该代码正在做的事情。 Sum of probabilities从 0 开始,第一次循环时,probability你直觉地认为它会是。它正在标记第一个成员的终点。然后更新“概率总和”。第二次通过循环,“概率”就是你直觉地认为的......被“概率总和”转移。就这样。

所以第一个循环是将适应度值求和作为标准化事物的前奏。您询问的第二个循环是将这些归一化概率归一化并安排在单位间隔中。第三个(最复杂的)循环是挑选两个随机数,将它们与种群中的两个成员匹配,然后将它们配对。(请注意,假设这些成员采用某种类似数组的格式,以便您可以根据您滚动的随机数顺序检查它们的端点。)

于 2011-12-16T04:32:08.387 回答