我在理解算法时遇到了问题。这是在线看到的最受欢迎的
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
^^^这件作品特别让我困惑。在人口中个体的背景下,“概率总和”甚至“概率”是什么?这些是个人在开始时的价值吗?
答案 0 :(得分: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
都是其适应性的函数。
我在尝试理解算法时发现this link很有帮助。
答案 1 :(得分:1)
这是一段非常模糊的代码。
在第二个代码块中,probability
是附加到群体中每个成员的变量,sum of probabilities
是整个群体的全局变量。
现在,轮盘赌的比喻说的是,整个人口可以表示为轮盘赌轮,并且每个人口中的每个成员在该轮盘赌轮中具有与其相对适合度成比例的切片。那段代码正在做那个隐喻背后的肮脏工作 - 而不是在车轮上楔形,成员现在用线段[0,1]上的比例区间来表示,这是表示概率的习惯方式。
为此,您在技术上需要为每个成员提供两个数字,即开始和结束。但第一个成员的开始将是0;第二个成员的开始将是第一个成员的结束;等,直到最后一个成员,结尾为1。
这就是代码正在做的事情。 Sum of probabilities
从0开始,第一次循环,probability
是你直觉所认为的。它标志着第一个成员的终点。然后更新“概率总和”。第二次通过循环,“概率”是你直觉上认为的......被“概率之和”转移。它就这样了。
所以第一个循环是将健身值相加作为规范事物的前奏。您要问的第二个循环是在单位间隔内对这些归一化概率进行归一化和排列。第三个(最复杂的)循环是挑选两个随机数,将它们与两个群体成员匹配,然后交配它们。 (请注意,假设这些成员采用某种类似于数组的格式,以便您可以根据已滚动的随机数顺序检查其端点。)