轮盘赌算法

首先,这个算法可以如下表述:

如果已知A类对象生成概率为P(A),B类对象生成概率为P(B),C类对象···,K类对象,他们的概率总和为1,问如何在A~K中随机生成一个对象

算法理解如下:

即我们需要先对0~1区段按照概率大小划分长度,设随机生成一个0~1之间的数,这种随机数生成结果是在0~1均匀分布的,然后看其究竟落在哪个概率区段即为生成哪种对象

算法代码:

package test;

import org.junit.Test;

public class Roulette {

    @Test
    public  void test() {
        double[] P={0.2,0.3,0.5};//假设的概率分布
        int appearnum=0;
        for(int i=0;i<100;i++){
            int result=roulette(P);
            if(result==2)//统计第2类对象生成的数目,可以看出大致为50%的生成概率
                appearnum++;
        }
        System.out.println(appearnum);
    }
    /**
     * 轮盘赌函数
     * @param P 各类对象概率分布
     * @return 生成的对象类
     */
    private int roulette(double[] P){

        double rand=Math.random();
        double pointer=0;//pointer指示每个区段的右边界,从左往右扫描判断
        for(int i=0;i<P.length;i++){
            pointer+=P[i];
            if(rand<=pointer)
                return i;
        }
        return -1;
    }

}
时间: 2024-10-10 05:45:12

轮盘赌算法的相关文章

轮盘赌算法及其实现

参考:http://blog.sina.com.cn/s/blog_67c17d1c01017hyt.html 1.基本思想:个体被选中的概率与其适应度函数值成正比 设群体大小为n,个体i的适应度为Fi,则个体i被选中遗传到下一代群体的概率为: 2.工作过程: 设想群体全部个体的适当性分数由一张饼图来代表 (见图). 群体中每一染色体指定饼图中一个小块.块的大小与染色体的适应性分数成比例,适应性分数愈高,它在饼图中对应的小块所占面积也愈大.为了选取一个染色体,要做的就是旋转这个轮子,直到轮盘停止

蚁群算法解决TSP问题

一.论述 1.算法来源 蚁群算法的基本原理来源于自然界蚂蚁觅食的最短路径原理,根据昆虫学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并且能在环境发生变化(如原有路径上有了障碍物)后,自适应地搜索新的最佳路径. 2.单个蚂蚁寻找路径 正反馈: 单个的蚂蚁为了避免自己迷路,它在爬行时,同时也会释放一种特殊的分泌物--信息素(Pheromone),而且它也能觉察到一定范围内的其它蚂蚁所分泌的信息素,并由此影响它自己的行为.当一条路上的信息素越来

搜说算法之遗传算法---遗传算法简介

优化算法入门系列文章目录(更新中): 1. 模拟退火算法 2. 遗传算法 遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 . 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法.因此在介绍遗传算法前有必要简单的介绍生物进化知识. 一.进化论知识  作为遗传算法生物背景的介绍,下面内容了解即可: 种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群. 个体:组成种群的单个生物. 基因 ( Gene ) :一个遗传

游戏开发中的人工智能 复习

游戏开发中的人工智能 复习 (个人复习,一些仅是给自己的复习提示(=w=),转载注明出处:http://blog.csdn.net/hcbbt/article/details/42815479) 配套教材:游戏开发中的人工智能 知识点 移动 Bresenham,视线(略),拦截 // Bresenham if (deltaCol > deltaRow) { fraction = deltaRow * 2 - deltaCol; while (nextCol != endCol) { if (fr

遗传算法

遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 . 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法.因此在介绍遗传算法前有必要简单的介绍生物进化知识. 一.进化论知识  作为遗传算法生物背景的介绍,下面内容了解即可: 种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群. 个体:组成种群的单个生物. 基因 ( Gene ) :一个遗传因子.  染色体 ( Chromosome ) :包含一组的基因. 生存竞

遗传算法简介

优化算法入门系列文章目录(更新中): 1. 模拟退火算法 2. 遗传算法 遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 . 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法.因此在介绍遗传算法前有必要简单的介绍生物进化知识. 一.进化论知识  作为遗传算法生物背景的介绍,下面内容了解即可: 种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群. 个体:组成种群的单个生物. 基因 ( Gene ) :一个遗传

遗传算法的简单应用-巡回旅行商(TSP)问题的求解

上篇我们用遗传算法求解了方程,其中用到的编码方式是二进制的编码,实现起来相对简单很多, 就连交配和变异等操作也是比较简单,但是对于TSP问题,就稍微复杂一点,需要有一定的策略, 才能较好的实现. 这次的TSP问题的题目是: 随机产生10~30个城市,每个城市之间的距离也是随机产生,距离的范围是[1,50],求最优的路径 ========================================================== 下面就是具体的求解,由于我的策略是基于知网上的<一种改进的遗

遗传算法的简单应用-求解方程

上篇初识遗传算法讲述了遗传算法的基本思想,这篇博客就用遗传算法求解方程. 具体的如下: 求解方程 -x^3+7*x+13=0 在[3,4]区间的解,解精确到0.001,交叉概率0.7 变异概率0.01,迭代次数为100,字符编码长度为10(二进制编码) 首先简单的分析一下: 1.编码与解码 题目要求的是采用二进制的编码方式来实现,既然已经编码了,自然就需要解码,给定的10 位二进制编码表示的区间范围就是0~1023,题目的区间是[3,4]很自然的就能想到10位二进 制编码中的0表示是就是[3,4

人工智能-遗传算法解决推箱子问题现实

原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 由于各种原因,可能存在诸多不足,欢迎斧正! 一.研究背景 推箱子游戏中的路径查找问题-给定一方格,求两点最短距离. 传统求两点最短路径的算法有: 1.通用的搜索算法 2.解决无负权边的带权有向图的单源最短路问题的Dijkstra算法 3.求解含负权边的带权有向图的单源最短路径问题的Bellman-Ford算法 4.Bellman-for