蚁群算法作为一种启发式算法,在进行路径选择的过程中,当选择下一目标时,通过轮盘赌概率选择的方式完成,这也保证了每次循环都能随机的命中概率较大的目标。其算法思路如下:

设P(i),其中i=1..n,为n个个体被选择的概率,在轮盘上表示为所占扇区的面积百分比,这里显然sum(P)=1。select用来保存n次选择的结果。

1) 第一种实现办法:可以想象一个转动的轮盘,注意这里轮盘最多只转一圈。每次转轮盘前,把色子随机放到轮盘外缘的某处,即色子不随轮盘转动,以一个随机数sel代表它所处的位置。轮盘转动后,色子所指示的轮盘扇区号不断变化,轮盘停止时色子所指示的轮盘上扇区号,即为本次轮盘赌所选中的个体号。

for i = 1:n %第i次掷色子

sel = rand; %产生一个0、1之间的随机数,代表色子在轮盘外缘所指示的位置

sumPs = 0; %轮盘初始转动的位置,从0变化到1

j = 1; %轮盘初始指示的位置

while sumPs

sumPs = sumPs + P(j) %轮盘转动

j = j + 1; %轮盘指示位置

end

select(i) = j-1; %轮盘停止时色子停留位置所指示的个体

end %循环终了,会对轮盘上由P所划分出来的n个区间产生n次随机选择,扇区越大,该扇区被选中的几率也越大

还需要注意的是:上面的程序中,我们当然可以把n改成2*n或者10*n,产生的结果都是“个体概率所表示扇区越大,该个体被选中的几率也越大”,并且随着实验次数的增大,这一结果越精确。

2)这种方法可以想象成往划分好扇区的轮盘里扔色子,事先生成一组满足均匀分布的随机数,代表n次掷色子或者n个色子一起扔,轮盘不动,色子所在区域为选择结果。

r = rand(1,n) %预先产生n个色子的位置,注意这里r服从0、1之间均匀分布

for i = 1:n %第i次轮盘赌

select(i) = n; %本次轮盘赌的结果初始化为n

for j = 1:n %轮盘开始转动

if r(j) <=P(i) %若色子停在轮盘第j扇区

select(i) = j; %则第i次轮盘赌的结果为j

break; %第i次轮盘赌结束

end %~第i次轮盘赌结束

end %~第i次轮盘赌结束

end %n次轮盘赌结束

原文出处:http://m.blog.csdn.net/blog/u010647162/23209729

java轮盘赌_轮盘赌算法相关推荐

  1. 匈牙利算法java实现_匈牙利算法(Hungarian Algorithm)

    匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法.换句话说就是,在可以接受的时间内去做匹配. 1. 描述问题 给定2个集合A和B,然后将AB中的元素完成一个连线.(这不就是小时候的连线题么 ...

  2. java 独木桥_趣味算法——青蛙过河(JAVA)

    青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...

  3. bitmap的java原理_布隆算法的原理及JAVA实现

    Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合. Bloom Filter ...

  4. 聚类算法的java实现_聚类算法之BIRCH(Java实现)

    BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)天生就是为处理超大规模(至少要让你的内存容不下)的数据集而设计的, ...

  5. 排序算法java快速排序_快速排序算法--Java实现

    标签(空格分隔): 数据结构与算法 原理: 对于任意一个无序数组,我们随机的选一个元素作为基准元素(例如:数组中的最后一个或者第一个元素, 然后我们将数组中的剩余元素分别与基准元素进行比较,将小于或等 ...

  6. java 墨卡托投影_墨卡托投影算法应用---获取辖区某区域的精准电子围栏

    背景:某项目做区域监控,需要内置某些区域的电子围栏. 方案:利用某度接口中墨卡托投影值,进行经纬度转换,入库保存后,让前端获取. 前置数据:区域文案名清单 接口1:  查询某区域的uid http:/ ...

  7. java 折半_折半算法

    /* 折半算法 思路:对于一个--有序--的数组来说,可以对折的方式,来查找给定的元素的角标值,如果没有,可以定义返回-1 折半的时候可以定义三个变量int max min和mid,在形参里定义key ...

  8. l bfgs算法java代码_优化算法——拟牛顿法之L-BFGS算法

    一.BFGS算法 BFGS算法的校正公式: 利用Sherman-Morrison公式可对上式进行变换,得到 令 ,则得到: 二.BGFS算法存在的问题 在BFGS算法中.每次都要存储近似Hesse矩阵 ...

  9. 排序算法java源代码_排序算法汇总(java实现,附源代码)

    整理系统的时候发现了原来写的各种算法的总结,看了一下,大吃一惊,那时候的我还如此用心,具体的算法,有的已经模糊甚至忘记了,看的时候就把内容整理出来,顺便在熟悉一下,以后需要的时候就可以直接过来摘抄了. ...

最新文章

  1. Ubuntu16.04桌面系统如何配置和启动wireshark
  2. 有 Bug 不会调试 ? 这篇文章很详细 !
  3. mysql 添加table_mysql数据库对table的增删改查
  4. volatile的用法
  5. MESI协议为何会引发 有序性、可见性的问题
  6. 在 CentOS7 安装 ELK【转】
  7. 修改RHEL7/centos7网卡为eth0
  8. java 近似值 循环次数,java题求解
  9. OpenCV的滑块与回调函数
  10. 实践卡尔曼滤波--小球追踪
  11. QQ浏览器怎么设置为默认浏览器
  12. springboot+Druid+mybatis整合
  13. lisp新建标注式样_[求助]请教一下,如何编定义标注样式的LSP?
  14. jQuery加载js脚本
  15. Linux x86-64 IOMMU详解(一)——IOMMU简介
  16. 数字逻辑练习题(七) 用74LS138译码器和门电路实现逻辑函数
  17. vertica MySQL_MySQL数据库之Vertica数据库的用法
  18. 苹果手表的真实触感信息(Real Touch Messaging)
  19. 远程桌面连接遇到的问题及解决方法
  20. MySQL 的查询优化

热门文章

  1. java开发可视化界面_java 可视化界面编程
  2. 《复杂网络》复杂网络的结构及特点
  3. spring Aop中aop:advisor 与 aop:aspect的区别
  4. Linux c 中alarm,signal,pause的使用说明
  5. Kyligence 春季论坛成功举办,助力企业构建数字化管理新体系
  6. Java操作Word转PDF(Word转图片)
  7. 8080端口被占用处理方法
  8. C#中,System.ComponentModel.Container详解
  9. 凤凰新闻 android,凤凰新闻app正式版
  10. /dev/null 21 详解