轮盘赌

///
/// 更新下一代;
/// 基于轮盘选择选择方法,进行基因型的选择;
///
private static void UpdateNext()
{
// 获取总的fit;
double totalFitValue = 0;
for (int i = 0; i < chromosomes.Count; i++)
{
//适应度为负数的取0;
if (chromosomes[i].fitValue <= 0)
{
totalFitValue += 0;
}
else
{
totalFitValue += chromosomes[i].fitValue;
}
}
Console.WriteLine("totalFitValue " + totalFitValue);

        //算出每个的fit percent;
        for (int i = 0; i < chromosomes.Count; i++)
        {
            if (chromosomes[i].fitValue <= 0)
            {
                chromosomes[i].fitValuePercent = 0;
            }
            else
            {
                chromosomes[i].fitValuePercent = chromosomes[i].fitValue / totalFitValue;
            }
            Console.WriteLine("fitValuePercent " + i + " " + chromosomes[i].fitValuePercent);
        }

        计算累积概率;
         第一个的累计概率就是自己的概率;
        chromosomes[0].probability = chromosomes[0].fitValuePercent;
        Console.WriteLine("probability 0 " + chromosomes[0].probability);
        double probability = chromosomes[0].probability;
        for (int i = 1; i < chromosomes.Count; i++)
        {
            if (chromosomes[i].fitValuePercent != 0)
            {
                chromosomes[i].probability = chromosomes[i].fitValuePercent + probability;
                probability = chromosomes[i].probability;
            }
            Console.WriteLine("probability " + i + " " + chromosomes[i].probability);
        }
        chromosomesChild.Clear();
        //轮盘选择选择方法,用于选出前两个;
        for (int i = 0; i < chromosomes.Count; i++)
        {
            //产生0-1之前的随机数;
            //int seed = i * 100 / 3;
            double rand = random.NextDouble();//0.0-1.0
            Console.WriteLine("挑选的rand " + rand);
            if (rand < chromosomes[0].probability)
            {
                chromosomesChild.Add(chromosomes[0].Clone());
            }
            else
            {
                for (int j = 0; j < chromosomes.Count - 1; j++)
                {
                    if (chromosomes[j].probability <= rand && rand <= chromosomes[j + 1].probability)
                    {
                        chromosomesChild.Add(chromosomes[j + 1].Clone());
                    }
                }
            }
        }
        for (int i = 0; i < chromosomes.Count; i++)
        {
            chromosomes[i] = chromosomesChild[i];
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值