当前位置: 首页 > news >正文

轮盘赌算法

目录

  • 背景
  • 什么是轮盘赌
  • 轮盘赌的设计
  • 轮盘赌过程
  • python代码
  • 应用

背景

在现实生活中,我们尝尝需要一些简单小巧易操作的方法来做出决定而不是直接一拍脑门就决定的,如抓阄,就是一种比较古老的选择方式,轮盘赌则是西方人发明的一种选择方式。在一些智能算法如蚁群算法,遗传算法等中都有用到这种思想,轮盘赌常被用来设计随机选择算法,其目的是为了让个体被选中的概率适配个体在总体中的适应度,这一点很符合达尔文的优胜劣汰原则,如果一个个体适应度低,那么,这个个体配偶权可能被剥夺,多么痛的领悟。

什么是轮盘赌

轮盘赌全名叫轮盘赌博游戏,常见于地下赌场及网络赌场,其核心道具就是轮盘。轮盘赌的玩法是通过预测旋转轮盘后小球落位的数字或颜色进行下注,有美式与欧式两种主要类型。我们不去细究轮盘赌在拉斯维加斯还有澳门的作用,我们重点看看轮盘赌巧妙设计以及在智能算法中的作用。
轮盘赌

轮盘赌的设计

轮盘
如上图所示,假设整体由5个个体组成,现在要随机从中选择一个个体进行后续操作,你会选谁呢?
简单做一个转盘,旋转这个盘子,直到转盘停止时,看指针停止在哪一块上,就选中指针所指的那个个体,很显然个体3有更多机会被选中。如果每个个体的适应度都一样,那么有均等机会被选中,但事实上,每个个体是有差异性的,称为个体的适应度差异,往往通过适应度函数来体现,适应度函数可以理解为该个体在特定环境下的性能或优劣程度。上图已经刻画出每个个体的适应度了,到此为此,我们已经知道如何通过选择转盘来选择了,称此时的选中概率为选择概率,选择谁的可能性大,有多大,选择谁的可能性小,有多小,但是你要设计一个映射让计算机随机生成一个东西就能锚定其中某个个体,而且锚定的与人类选择要一致,既选择概率与区间跨度对应起来了,这就是计算机模拟,于是乎,我们计算出累计概率

个体12345
选择概率0.310.050.380.120.14
累计概率0.310.360.740.861
区间跨度[0,0.31][0.31,0.36][0.36,0.74][0.74,0.86][0.86,1]

有了累计概率,我们就可以从0到1进行切分,切分成一个一个区间,做一个,接着,产生一个[0, 1]之间的随机数。然后,根据这个随机数落在哪个区间就选择对应个体。若为随机数是0.02,则落在第一个区间,则选择个体1,若随机数为0.56,则落在第三个区间,选择个体3,如果随机数是0.97,则选择第5个个体,这样给一个随机选择一个个体,给一个随机数选择一个个体,由于给的随机数是随机的,那么选择个体也是随机的,也就是说你从任何一个个体开始计算累计概率都是一样的,轮盘赌算法与个体的排列顺序有关;

轮盘赌过程

1,确定总体中每个个体,计算每个个体的适应度;

2,归一化适应度,使得它们的总和为1,这样做是为了将适应度值的占比转换为被选择的概率

选择概率=(每个个体适应度/所有个体适应度之和)

3,计算累积概率:从第一个个体开始,逐个累加每个个体的归一化适应度值,得到每个个体对应的累积概率。

4,选择个体:根据某种随机方法(如随机数生成器),产生一个[0, 1]之间的随机数。然后,根据这个随机数的大小,选择对应个体

python代码

知道轮盘赌是怎么回事,也知道怎么一步一步来进行选择了,下面用python脚本模拟轮盘赌

import random def rws():rnd = random.random() #产生0~1之间随机数unit = [1,2,3,4,5] #个体p = [0.31, 0.05, 0.38, 0.12, 0.14] #个体适应度sm = 0 #累计概率idx = 0 #被选择序号for i in range(len(p)): #对适应度循环sm += p[i] #计算累计概率if rnd <=sm: #如果所选随机数小于累计概率,则选中idx= i #选择第i个个体breakreturn unit[idx]
if __name__=="__main__":result = rws()print(result)

应用

除了赌博,轮盘赌在蚁群算法的蚂蚁选择,在遗传算法中的父代筛选过程中都大放异彩,除此之外,你还可以用轮盘赌和你好朋友去赌一赌运气。

http://www.lryc.cn/news/599821.html

相关文章:

  • C语言————原码 补码 反码 (试图讲清楚版)
  • 多智能体(Multi-agent)策略模式:思维链CoT和ReAct
  • Ubuntu 环境下创建并启动一个 MediaMTX 的 systemd 服务
  • 电科金仓新一代数据库一体机:以 “云数据库 - AI 版” 破局 AI 时代,三骏守护定义行业新标杆
  • 项目管理进阶——解读软件项目管理-项目阶段复盘会(通用模板)【附全文阅读】
  • 文心4.5开源之路:从封闭到开放的力量
  • ARM-I2C硬实现
  • linux-开机启动流程
  • 编程语言Java——核心技术篇(三)异常处理详解
  • 将本地项目推送到远程github仓库
  • 学习游戏制作记录(克隆技能)7.25
  • C语言|指针的应用
  • Python 之 keyboard
  • 详解软件需求中的外部接口需求
  • 网络安全入门第一课:信息收集实战手册(3)
  • 芯显15寸工控液晶屏RV150X0M-N10产品资料详情
  • 高德地图 loca 实现点线的显示和点击
  • Ping32:企业数据安全的智能护盾
  • C++中使用Essentia实现STFT/ISTFT
  • C++中new和delete的多重面孔:operator new、new operator与placement new解析
  • 机器学习-SVM支持向量机
  • Zookeeper学习专栏(十):核心流程剖析之服务启动、请求处理与选举协议
  • 【Linux】进程切换与优先级
  • Metaspace耗尽导致OOM问题
  • 【运维自动化-标准运维】各类全局变量使用说明(下)
  • 伯俊科技× OB Cloud:零售业落地AI的“三步走”渐进式发展实践
  • 企业微信H5应用OAuth2登录,企业微信授权登录
  • 国产DevOps平台Gitee:如何重塑中国企业研发效能新格局
  • 如何在 Ubuntu 24.04 或 22.04 上安装和使用 GDebi
  • Qt 反射机制与动态属性系统