24/8/15算法笔记 强化学习贪婪算法,UCB,汤普森算法

以老虎机为例介绍各算法

import numpy as np#每个老虎机的中奖概率,0-1之间均匀分布
probs = np.random.uniform(size=10)#生成一个数组,其中的元素是从均匀分布(也称为矩形分布)中随机抽取的。均匀分布意味着每个数出现的概率是相同的。#记录每个老虎机的返回值
rewards = [[1]for _ in range(10)]  #初始化为1probs,rewards

import random
#贪婪算法的改进,递减的贪婪算法
def choose_one():#求出现在已经玩了多少次played_count = sum([len(i) for i in rewards])#随机选择的概率逐渐下降if random.random()<1/played_count:return random.randint(0,9)#计算每个老虎机的奖励平均rewards_mean = [np.mean(i) for i in rewards]#选择期望奖励估计值最大的拉杆return np.argmax(rewards_mean)
choose_one()
def try_and_play():i = choose_one()#玩老虎机,得到结果reward = 0if random.random()<probs[i]:reward = 1#记录玩的结果rewards[i].append(reward)try_and_play()
rewards

def get_result():#玩N次for _ in range(5000):try_and_play()#期望的最好结果target = probs.max()*5000#实际玩出的结果result = sum([sum(i) for i in rewards])return target,resultget_result()#前面是拿老虎机中奖概率最高的那台玩5000次出来的结果(理想上的最好)

上置信界算法UCB算法,多探索玩的少的机器

上置信界(Upper Confidence Bound, UCB)是一种用于决策过程中评估和比较不同选择的方法,特别是在面对不确定性时。UCB 通常与多臂老虎机问题(Multi-Armed Bandit Problem)相关,这是一种用以描述在不确定性下如何做出最优选择的理论框架

import random #随机选择的概率递减的贪婪算法
def choose_one():#求出每个老虎机各玩了多少次played_count = [len(i) for i in rewards]played_count = np.array(played_count)#求出上置信界#分子是总共玩了多少次,取根号后让他的增长速度变慢#分母是每台老虎机玩的次数,乘2让他的增长速度变快#随着玩的次数增加,分母会很快超过分子的增长速度,导致分数越来越小#具体到每一台老虎机,则是玩的次数越多,分数就越小,也就是ucb的加权越小#所以ucb衡量了每一台老虎机的不确定性,不确定性越大,探索的价值越大fenzi = played_count.sum()**0.5fenmu = played_count*2ucb = fenzi/fenmu#ucb本身取根号#大于1的数会被缩小,小于1的数会被放大,这样保持ucb恒定在一定的数值范围内ucb = ucb**0.5#计算每个老虎机奖励平均rewards_mean = [np.mean(i) for i in rewards]rewards_mean = np.array(rewards_mean)#ucb和期望求和ucb+=rewards_meanreturn ucb.argmax()
def try_and_play():i = choose_one()#玩老虎机,得到结果reward = 0if random.random()<probs[i]:reward = 1#记录玩的结果rewards[i].append(reward)try_and_play()
def get_result():#玩N次for _ in range(5000):try_and_play()#期望的最好结果target = probs.max()*5000#实际玩出的结果result = sum([sum(i) for i in rewards])return target,resultget_result()#前面是拿老虎机中奖概率最高的那台玩5000次出来的结果(理想上的最好)

汤普森采样法

汤普森采样(Thompson Sampling)是一种用于解决多臂老虎机问题(Multi-Armed Bandit Problem)的贝叶斯启发式方法。它是一种概率性的方法,通过随机选择最佳选项来平衡探索(exploration)和利用(exploitation)之间的权衡。以下是汤普森采样的一些关键特点:

  1. 贝叶斯方法:汤普森采样基于贝叶斯定理,通过假设奖励分布的先验知识,并根据观察到的数据更新这个分布。

  2. 随机性:与确定性的贪婪策略不同,汤普森采样在每次选择时都引入随机性,这有助于探索不太熟悉的选项。

  3. 探索与利用:汤普森采样自然地结合了探索(尝试新的或较少选择的选项)和利用(选择当前看起来最佳的选项)。

  4. 实现步骤

    • 对每个选项,根据其历史数据定义一个概率分布(通常是Beta分布或Beta二项分布)。
    • 在每次选择时,从每个选项的概率分布中抽取一个样本。
    • 选择具有最高样本值的选项进行探索。
  5. 适用场景:汤普森采样适用于奖励分布未知且需要不断学习的场景。

  6. 数学表达:如果假设奖励是从一个Beta分布中抽取的,那么在选择了n次之后,其中w次获得成功,Beta分布的参数将更新为(α = w + 1, β = n - w + 1)

#beta分布测试,你正在生成一个具有参数 α=1 和 β=1 的 Beta 分布的随机数。当 α=1 且 β=1 时,Beta 分布退化为均匀分布,这意味着生成的随机数将在 [0, 1] 区间内几乎均匀地分布。
print('当数字小的时候,beta分布的概率有很大的随机性')
for _ in range(5):print(np.random.beta(1,1))
print('当数字大时,beta分布逐渐稳定')
for _ in range(5):print(np.random.beta(1e5,1e5))

import random 
def choose_one():#求出每个老虎机出1的次数+1count_1 = [sum(i)+1 for i in rewards]#求出每个老虎机出0的次数+1count_0 = [sum(1-np.array(i))+1 for i in rewards]#按照beta分布计算奖励分布,这可以认为是每一台老虎机中奖的概率beta = np.random.beta(count_1,count_0)return beta.argmax()choose_one()
def try_and_play():i = choose_one()#玩老虎机,得到结果reward = 0if random.random()<probs[i]:reward = 1#记录玩的结果rewards[i].append(reward)try_and_play()
def get_result():#玩N次for _ in range(5000):try_and_play()#期望的最好结果target = probs.max()*5000#实际玩出的结果result = sum([sum(i) for i in rewards])return target,resultget_result()#前面是拿老虎机中奖概率最高的那台玩5000次出来的结果(理想上的最好)
(4965.406675195595, 4971)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402006.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务架构的未来发展趋势

文章目录 摘要引言当前发展趋势ServerlessService MeshAIOps 未来可能出现的挑战代码示例微服务架构示例 QA环节小结未来展望参考资料 摘要 微服务架构在软件开发中已经成为主流&#xff0c;但随着市场需求和技术环境的快速变化&#xff0c;微服务架构也在不断演进。本文将分析…

如何为 Nextcloud 配置自动数据库备份 - 应用程序

自动数据库备份模块简化了生成数据库计划备份的过程。这些备份可以存储在各种位置&#xff0c;包括本地驱动器、FTP 服务器、SFTP 服务器、Dropbox、Google Drive、OneDrive、NextCloud 和 Amazon S3 云存储。用户还可以选择启用自动删除过期备份的功能。此外&#xff0c;用户可…

MyBatis-Plus 进阶之条件构造器Wrapper和常用接口

目录 1.wrapper 介绍 1.1什么是 wrapper 2.QueryWrapper 2.1测试前的准备 2.2例1&#xff1a;组装查询条件 2.3例2&#xff1a;组装排序条件 2.4例3&#xff1a;组装删除条件 2.5例4&#xff1a;条件的优先级 2.6例5&#xff1a;组装 select 子句 2.7例6&#xff1a;…

[Linux][OS][信号的保存和处理]

目录 信号的处理 1. 在内核中的表示 2. 相关概念 3. 信号集操作函数 4.sigprocmask 5.sigpending 信号的捕捉 重谈地址空间 信号的处理 1. 在内核中的表示 普通信号&#xff0c;多次产生只会记录一次 信号范围 [1,31]&#xff0c;每一种信号都要有自己的一种处理方式…

【ElementUI】el-table值相同时合并行

效果图&#xff1a; 大致思路&#xff1a;el-table里添加合并行或列的计算方法span-method <el-table :data"tableList" :span-method"objectSpanMethod"> // 在获取到列表数据tableData后调用此方法 handleTableData(tableData) {let rowSpanArr …

Java JDVC编程

1、Java的数据库编程&#xff1a;JDBC JDBC&#xff08;Java Database Connectivity&#xff09;是Java中用来与数据库进行交互的一种标准API&#xff08;应用程序编程接口&#xff09;。它为开发人员提供了一种统一的方式来访问各种类型的数据库管理系统&#xff08;DBMS&…

【深度学习实践】基于深度学习的图像去雾算法-ChaIR-实践

本文介绍一个去雾算法ChaIR的使用方法&#xff0c;可以完成图像去雾&#xff0c;也可以用于图像去雨、去噪音等任务。本文不涉及论文原理&#xff0c;只包含源代码的跑通和使用。 先展示一下效果&#xff1a; 原图去雾 论文&#xff1a;Exploring the potential of channel …

如何以编程方式解析 XCResult 包的内容

文章目录 介绍查找 XCResult 包分享 XCResult 包 解析 XCResult 包自动解析 XCResult 包的内容 使用 XCResultKit 解析包的内容初始化库获取调用记录 获取测试信息导出屏幕录制 可运行 Demo初始化 Swift Package编写主文件代码解释运行 Demo 结论 介绍 XCResult 包是一个包含运…

ASP.NET在线交流论坛管理系统

ASP.NET在线交流论坛管理系统 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 用户功能有个人信息管理 帖了信息管理 意见反馈信息管理 点赞管理 收藏管理 后台管理员可以进行用户管理 …

数据结构-查找

一、基本术语 二、线性结构 ASL&#xff1a;平均查找长度 1、顺序查找 1.1、代码实现 typedef struct {int* elem;int TableLen; }SSTable;int Search_Seq(SSTable ST, int key) {ST.elem[0] key; //哨兵&#xff0c;使得循环不用判断数组是否会越界int i;for (i ST…

LoadRunner性能指标分析常用监控参数

性能分析&#xff0c;Windows自带一种 &#xff0c;LoadRunner自带一种&#xff0c;2种参数类似 Windows自带入口 运行中搜索&#xff1a;性能监视器 进到&#xff1a;性能-数据收集器-用户定义-右键-新建-数据收集器集 名称自己任意输入&#xff0c;选择手动创建 数据类型根…

Haproxy的配置详解与使用

一、haproxy简介 HAProxy是一个使用C语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理。 HAProxy特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬…

JavaScript基础——函数

函数简介 定义函数 调用函数 函数的参数和返回值 函数参数 1.有形参情况下不传递实参 2.传递数量少于形参个数的实参 3.传递数量等于形参个数的实参 函数返回值 报错Uncaught SyntaxError: Illegal return statement 返回数字和字符串 返回数组、对象和函数 没有返回…

nginx服务部署及其平滑升级

概述 1. 7层负载均衡&#xff08;nginx&#xff09; 1. 停掉4层的环境 systemctl disable --now keepalived.service # 停用之前的4层协议方式2. 源码安装nginx tar zxf nginx-1.22.1.tar.gz 具体方式是源码编译“三部曲” ./configure # 负责检查环境&#xff0c;生成指导…

JAVA实现GB/T 32960.3—2016电动汽车远程服务与管理系统技术规范 第3部分:通信协议及数据格式

完整的TCP服务端解析代码 1.maven依赖 不要的依赖自行删除&#xff0c;懒的删了 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-in…

Jenkins持续集成工具学习

一、从装修厨房看项目开发效率优化 二、持续集成工具 三、JavaEE项目部署方式对比 四、JenkinsSVN持续集成环境搭建 五、JenkinsGitHub持续集成环境搭建

8 个最佳 Java IDE 和文本编辑器

从 2024 年使用的最佳 Java IDE 和代码编辑器中进行选择&#xff0c;并提高您的 Java 生产力。 Java 是世界上最流行的编程语言之一&#xff0c;于 1995 年首次推出&#xff0c;它确实践行了“编写一个&#xff0c;随处运行”的座右铭。该语言用途广泛&#xff0c;可用于构建从…

排序算法之希尔排序

title: 希尔排序 date: 2024-7-25 10:48:15 0800 categories: 排序算法 tags:排序算法希尔排序 description: 1959年Shell发明&#xff0c;是简单插入排序的改进版。是一种高效的排序算法&#xff0c;通过分组和逐步缩减增量&#xff0c;使得数组在接近有序的情况下进行最终排…

【docker】dockerfile部署lnmp、docker compose初步

1、dockerfile部署lnmp mkdir /opt/lnmp cd /opt/lnmp mkdir nginx mysql php docker network create --subnet20.0.0.0/24 lnmp-net将wordpress文件夹拷贝到nginx、php文件夹 /opt/nginx/Dockerfile: # 使用官方的nginx镜像作为基础镜像 FROM nginx:latest# 复制默认配置文件…

分销商城小程序系统渠道拓展

线上卖货渠道很多&#xff0c;想要不断提高营收和新客获取&#xff0c;除了自己和工具本身努力外&#xff0c;还需要其他人的帮助来提高商城店铺的整体销量。 搭建saas商城系统网站/小程序&#xff0c;后台上货&#xff0c;设置支付、配送、营销、精美模板商城装修等内容&…