遗传算法 | 轮盘赌算法思想及Java实现

算法思想:

轮盘赌选择法,又称比例选择方法.其基本思想是:各个个体被选中的概率与其适应度大小成正比.
具体操作如下:
(1)计算出群体中每个个体的适应度f(i=1,2,…,M),M为群体大小;
(2)计算出每个个体被遗传到下一代群体中的概率;

在这里插入图片描述 

(3)计算出每个个体的累积概率(思想其实跟随机数抽取其实就是一样的,只是便于计算机实现,如下列代码所示)

在这里插入图片描述

在这里插入图片描述
(4)在[0,1]区间内产生一个均匀分布的伪随机数r;
(5)若r<q[1],则选择个体1,否则,选择个体k,使得:q[k-1]<r≤q[k] 成立;
(6)重复(4)、(5)共M次

Java实例:

//模拟轮盘赌算法
    //适应度
    static Double[] fit = {1.0,2.0,3.0,4.0};
    //根据适应度求得的被选中概率
    static Double[] p1 ={0.1,0.2,0.3,0.4};
    //累积概率
    //0.1 表示0~0.1(0.1的概率) 0.3表示0.1~0.3(0.2的概率) 0.6表示0.3~0.6(0.3的概率) 1.0表示0.6~1(0.4的概率) 理解时被这里压坑了,避!
    static Double[] q1 ={0.1,0.3,0.6,1.0};
    //对应适应度为1、2、3、4的累计抽中值
    static int s1=0,s2=0,s3=0,s4=0;

    public static void main(String[] args) {
        while(s1+s2+s3+s4<100000){
            for(int i=0;i<4;i++) {
                Double ans = Math.random();
                if (ans < q1[0])
                    s1++;
                else if (ans < q1[1])
                    s2++;
                else if (ans < q1[2])
                    s3++;
                else if (ans < q1[3])
                    s4++;
            }
        }
        System.out.println("选择适应度为1的概率为:"+s1);
        System.out.println("选择适应度为2的概率为:"+s2);
        System.out.println("选择适应度为3的概率为:"+s3);
        System.out.println("选择适应度为4的概率为:"+s4);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值