zoukankan      html  css  js  c++  java
  • 轮盘赌算法

    轮盘赌在遗传算法中应用的很多,效果也不错,而且它的思想很简单直观 —— 物竞天择、适者生存 —— 越强获得的资源越多 —— 在一个圆中,扇形的面积越大,圆中的点落在该扇形的概率越大。

    其主要步骤是:

    1. 计算每个个体被选中的概率p(在遗传算法中,先通过适应度函数计算适应度,然后根据适应度计算选择概率),假设有n个个体;

    2. 计算个体的累积概率 cum_p;

    3. 通过产生[0,1]间的伪随机数random_value,与累积概率进行比较,若:random_value<cum_p[i],本次则选择个体 i,i=1,2,3...n;

    示例如下:

    Python代码:

    import random
    import pandas as pd
    
    def format_data(data_list):
        data_v = set(data_list)
        data_dict = {}
        for ii in list(data_v):
            data_dict[ii] = 0
        for jj in data_list:
            data_dict[jj] = data_dict[jj] + 1
        
        return data_dict.keys(), data_dict.values()
    
    def choice_sample(data_frame, random_value):
        for ss in range(len(data_frame)):
            if data_frame['cum_p'][ss] > random_value:
                choice_ind = ss
                break
        return data_frame['words'][choice_ind]
        
    if __name__ == '__main__':
        data_list = ['南京','北京','西安','上海','西安','上海','上海','北京','上海','苏州'] #可以换成其他的数据列表
        columns = ['words']
        data_frame = pd.DataFrame(columns = columns)  #建立空的DataFrame
        
        keys_d, values_d = format_data(data_list)
        
        # 建数据
        data_frame['words'] = list(keys_d)
        data_frame['frequency'] = list(values_d)
        
        # 求比例
        data_frame['p'] = data_frame['frequency']/sum(data_frame['frequency'])
        
        #累积分布
        data_frame['cum_p'] = data_frame['p'].cumsum()
        print(data_frame)
        
        # 选择
        random_value = random.uniform(0,1)  #随机值
        print('随机值为:',random_value)
        choice_data = choice_sample(data_frame, random_value)
        print('选择个体为:',choice_data)

    ##

    参考:

    https://zhuanlan.zhihu.com/p/62666777

    https://www.cnblogs.com/adelaide/articles/5679475.html

  • 相关阅读:
    java_db2错误码对应值
    oracle_用户与概要文件
    quartz配置时间
    bzoj2395: [Balkan 2011]Timeismoney
    bzoj2725: [Violet 6]故乡的梦
    bzoj4400: tjoi2012 桥
    双连通分量模板
    bzoj3047: Freda的传呼机 && 2125: 最短路
    bzoj3541: Spoj59 Bytelandian Information Agency
    bzoj1023: [SHOI2008]cactus仙人掌图
  • 原文地址:https://www.cnblogs.com/qi-yuan-008/p/12718129.html
Copyright © 2011-2022 走看看