我在理解算法时遇到问题。这是网上最流行的一个

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


^^^这件作品特别使我感到困惑。在总体中,个体中的“概率之和”甚至是“概率”是什么?这些就像个人一开始就拥有的价值观吗?

最佳答案

那是一段非常混乱的代码。

在第二段代码中,probability是连接到总体的每个成员的变量,而sum of probabilities是整个总体的全局变量。

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

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

那就是该代码在做什么。 Sum of probabilities从0开始,并且在循环中的第一次,probability是您直觉上会想到的。它标志着第一个成员的终点。然后更新“概率之和”。在循环中第二次出现“概率”,这是您直觉上认为的……将被“概率之和”转移。顺其自然。

因此,第一个循环是将适应性值求和作为规范化事物的序幕。您询问的第二个循环是在单位间隔中归一化和安排这些归一化的概率。第三个(最复杂)循环是选择两个随机数,将其与总体中的两个成员匹配,然后进行匹配。 (请注意,假设这些成员采用某种类似于数组的格式,以便您可以根据滚动的随机数顺序检查其端点。)

07-27 22:38