【问题标题】:Roulette Wheel selection procedure轮盘选择程序
【发布时间】:2012-06-01 16:47:54
【问题描述】:

是否可以使用适应度值来评估种群中的每个个体而不用找到概率,如下面的伪代码

For all members of population
    sum += fitness ( member)
End for 
Loop until new population is full 
      Do this twice 
            Number = Random between 0 and sum
            Currentfitness = 0.0
            For each member in population
               Currentfitness += fitness (member)
               if Number > Currentfitness then select member
            End for 
      End
Create offspring 
End loop

下面的代码是做什么的?

Do this twice

我真的很困惑轮盘赌如何选择一对父母。有什么帮助吗?在此先感谢

【问题讨论】:

  • Do this twice 因为要创建后代,您需要两个父母。所以你必须做两次选择父母的过程。

标签: c# c#-4.0 genetic-algorithm genetic-programming


【解决方案1】:

数字应该小于 Currentfitness,否则它会严重偏向于人口的第一个成员。

例子:

  • 考虑权重 {1, 2, 7}
  • 累积权重 {1, 3, 10}
  • 总重量10
  • 使用 r.NextDouble(10.0) 在 0 到 10 之间选择随机双精度数
  • 90% 的时间 1 是用给定的伪代码选择的。应该是 10%

【讨论】:

    【解决方案2】:

    该代码旨在选择一个随机元素,但具有一定权重的概率。

    例子:

    • 我们希望从具有以下权重的二元素数组中进行选择:{ 1, 9 }
    • 累计权重为 { 1, 10 }
    • 总重量为10
    • 我们在 1 到 10 之间选择一个随机数
    • 我们查看累积权重数组并找到我们的随机数所在的第一个索引 大于元素
    • 这个索引是随机选择元素的索引

    直观地说,这个例子是有道理的:10 次中的 9 次随机数会落在 1 到 9 之间,导致第一个元素以 0.9 的概率被绘制(就像指定的权重一样)。

    【讨论】:

    • 那么,我可以使用累积适应度的值而不是累积概率。 ?
    • 是的,目的是随机选择权重=适应度,概率与适应度成正比。
    • 如果我有6条染色体,按照原码。每次旋转的选择是什么?是一对父母还是三对父母?
    • 我对 VB.net 没有很好的经验。因为我想弄清楚每次旋转时选择的对是什么。是否需要根据适应度对染色体进行排序?
    猜你喜欢
    • 2018-07-04
    • 2014-08-27
    • 2018-04-23
    • 2010-09-22
    • 2021-06-02
    • 2020-08-06
    • 1970-01-01
    • 2012-02-04
    • 2014-05-25
    相关资源
    最近更新 更多