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

多臂老虎机问题——一个面向初学者的指南

原文towardsdatascience.com/the-multi-armed-bandit-problem-a-beginner-friendly-guide-2293ce7d8da8多臂老虎机 (MAB) 是决策中的一个经典问题其中代理必须在多个选项称为“臂”之间进行选择并在一系列试验中最大化总奖励。这个问题得名于一个涉及老虎机赌徒的隐喻单臂老虎机每个老虎机都有不同的但未知的支付概率。目标是找到最佳策略来拉动臂选择动作并在一段时间内最大化赌徒的整体奖励。MAB 问题是对利用-探索权衡的一种花哨称呼。多臂老虎机问题是一个在众多工业应用中出现的根本性问题。让我们来探讨它并检查解决它的有趣策略。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5c2a4fdb3263a4976e94bcc3205afb43.png由 Grok 生成的图像示例你刚刚来到一个新城市。你是一名间谍计划在这里停留 120 天来完成你的下一个任务。镇上有三家餐厅意大利菜、中国菜和墨西哥菜。你希望在逗留期间最大限度地提高你的用餐满意度。然而你不知道哪家餐厅最适合你。以下是三家餐厅的情况意大利餐厅平均满意度评分为 8/10中国餐厅平均满意度评分为 6/10墨西哥餐厅平均满意度评分为 9/10困境在于当你开始时并不知道这些满意度评分。你将如何策略性地在 120 顿晚餐中选择最好的餐厅探索假设你平均探索三家餐厅。换句话说你每天访问每家餐厅 40 天。预期的满意度评分将为 (408 406 40 * 9) 920。因此平均每天满意度为 7.67。这是一个最优策略吗如果你选择了墨西哥餐厅你的平均满意度将是 9探索与利用你不想探索太多。同时你也不想随机选择一家餐厅并一直光顾它。你需要一种策略该策略侧重于探索然后是利用——重新访问始终提供最高满意度的餐厅。这导致了探索-利用困境多臂老虎机算法帮助你平衡两者。ε-Greedyε-Greedy算法是一种管理探索和利用的简单方法。以概率 ε你通过随机选择一家餐厅来尝试来探索。以概率 1-ε你通过选择迄今为止提供最佳满意度的餐厅来进行利用。随着时间的推移这种策略帮助你发现最好的餐厅同时偶尔尝试新的选项。以下 Python 代码模拟了 ε-Greedy 算法。真实的平均满意度分数遵循均值为 8、6 和 9标准差为 1、2 和 1.5 的正态分布。importnumpyasnpclassEpsilonGreedy:def__init__(self,n_restaurants,epsilon):self.n_restaurantsn_restaurants self.epsilonepsilon self.visitsnp.zeros(n_restaurants)self.satisfactionnp.zeros(n_restaurants)defchoose_restaurant(self):ifnp.random.random()self.epsilon:returnnp.random.choice(self.n_restaurants)# Exploreelse:returnnp.argmax(self.satisfaction/(self.visits1e-5))# Exploitdefupdate(self,restaurant,score):self.visits[restaurant]1self.satisfaction[restaurant]score n_restaurants3epsilon0.1n_days120true_avg_satisfactionnp.array([8,6,9])true_stddev_satisfactionnp.array([1,2,1.5])total_satisfaction_arr[]foriinrange(50):# Run the simulation 50 timesepsilon_greedy_restaurantEpsilonGreedy(n_restaurants,epsilon)total_satisfaction0for_inrange(n_days):restaurantepsilon_greedy_restaurant.choose_restaurant()scorenp.random.normal(loctrue_avg_satisfaction[restaurant],scaletrue_stddev_satisfaction[restaurant])epsilon_greedy_restaurant.update(restaurant,score)total_satisfactionscoreprint(Total Satisfaction (Epsilon-Greedy):,total_satisfaction)total_satisfaction_arr.append(total_satisfaction)# Calculate average satisfactionnp.mean(total_satisfaction_arr)/n_days,np.std(total_satisfaction_arr)/n_days我用 ε0.1 模拟了该算法 50 次。我观察到平均满意度分数为 8.49±0.35。可以调整 ε 参数。上置信界上置信界算法也试图平衡探索和利用。它考虑了迄今为止记录的平均满意度分数以及餐厅满意度的不确定性。未被访问足够的餐厅会被更多地探索以减少不确定性但表现一致的餐厅仍然受到青睐。一旦它足够自信UCB 算法最终会确定最令人满意的餐厅。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6b3e00787eace03a189a3e15fa62871f.png上置信界。图由作者提供UCB 涉及最大化上述方程中的括号内的项。上述置信界方程是从Hoeffding 不等式推导出来的。Hoeffding 不等式提供了一个理论保证即餐厅的真实满意度位于估计满意度的置信区间内。第一个项是观察到的平均满意度分数第二个项是置信区间。请注意分母n_i是餐厅被访问的次数。如果n_i较小第二个项较大。因此在利用满意度最高的餐厅之前它给了数据较少的餐厅一个机会。你访问餐厅的频率越低不确定性越高算法会给这个餐厅更高的置信分数以鼓励探索。以下 Python 代码模拟了与 ε-Greedy 算法中相同的满意度分数分布的 UCB 算法。importnumpyasnpclassUCB:def__init__(self,n_restaurants):self.n_restaurantsn_restaurants self.visitsnp.zeros(n_restaurants)self.satisfactionnp.zeros(n_restaurants)self.total_trials0defchoose_restaurant(self):ifself.total_trialsself.n_restaurants:returnself.total_trials# First, visit each restaurant at least onceucb_valuesnp.zeros(self.n_restaurants)forrestaurantinrange(self.n_restaurants):avg_scoreself.satisfaction[restaurant]/(self.visits[restaurant]1e-5)confidence_boundnp.sqrt(2*np.log(self.total_trials1)/(self.visits[restaurant]1e-5))ucb_values[restaurant]avg_scoreconfidence_boundreturnnp.argmax(ucb_values)defupdate(self,restaurant,score):self.visits[restaurant]1self.satisfaction[restaurant]score self.total_trials1n_restaurants3n_days120true_avg_satisfactionnp.array([8,6,9])true_stddev_satisfactionnp.array([1,2,1.5])total_satisfaction_arr[]foriinrange(50):# Run the simulation 50 timesucb_restaurantUCB(n_restaurants)total_satisfaction0for_inrange(n_days):restaurantucb_restaurant.choose_restaurant()scorenp.random.normal(loctrue_avg_satisfaction[restaurant],scaletrue_stddev_satisfaction[restaurant])ucb_restaurant.update(restaurant,score)total_satisfactionscoreprint(Total Satisfaction (UCB):,total_satisfaction)total_satisfaction_arr.append(total_satisfaction)# Calculate average satisfactionnp.mean(total_satisfaction_arr)/n_days,np.std(total_satisfaction_arr)/n_days我模拟了该算法 50 次。我观察到平均满意度分数为 8.84±0.19。Thompson SamplingThompson Sampling 是另一种广泛用于解决多臂老虎机MAB问题的算法。与其他使用固定规则进行探索和利用的方法如 ε-Greedy 或 UCB不同Thompson Sampling 使用概率方法来平衡探索和利用。Thompson Sampling 的核心思想是在可能的满意度分数上维持一个概率分布通常是 Beta 分布。每家餐厅都被分配一个先验概率分布表示你期望有多满意。最初分布较宽反映了不确定性。在每次晚餐之前你从每家餐厅的分布中采样一个潜在的满意度分数并选择采样分数最高的餐厅。晚餐后你根据实际体验到的满意度更新餐厅的概率分布。更新后的分布成为下一次晚餐的先验分布。以下 Python 代码模拟了与ε-Greedy 算法中展示的相同满意度的 Thompson Sampling 算法。importnumpyasnpclassThompsonSampling:def__init__(self,n_restaurants):self.n_restaurantsn_restaurants self.visitsnp.zeros(n_restaurants)self.satisfactionnp.zeros(n_restaurants)self.alphanp.ones(n_restaurants)# Beta distribution parametersself.betanp.ones(n_restaurants)defchoose_restaurant(self):sampled_valuesnp.random.beta(self.alpha,self.beta)returnnp.argmax(sampled_values)defupdate(self,restaurant,score):self.visits[restaurant]1self.satisfaction[restaurant]score# Update the beta distribution based on the satisfaction scoreifscorenp.mean(self.satisfaction/(self.visits1e-5)):self.alpha[restaurant]1# successelse:self.beta[restaurant]1# failuren_restaurants3n_days120true_avg_satisfactionnp.array([8,6,9])true_stddev_satisfactionnp.array([1,2,1.5])total_satisfaction_arr[]foriinrange(50):# Run the simulation 50 timesthompson_sampling_restaurantThompsonSampling(n_restaurants)total_satisfaction0for_inrange(n_days):restaurantthompson_sampling_restaurant.choose_restaurant()scorenp.random.normal(loctrue_avg_satisfaction[restaurant],scaletrue_stddev_satisfaction[restaurant])thompson_sampling_restaurant.update(restaurant,score)total_satisfactionscoreprint(Total Satisfaction (Thompson Sampling):,total_satisfaction)total_satisfaction_arr.append(total_satisfaction)# Calculate average satisfactionnp.mean(total_satisfaction_arr)/n_days,np.std(total_satisfaction_arr)/n_days我模拟了该算法 50 次。我观察到平均满意度评分为 8.5±0.3。所有三种算法的性能都优于基本策略的等概率探索。请注意这只是一个简单示例仅涉及三家餐厅。在实际情况下您可能在一个城市中有数百家餐厅。应用在线广告平台和电子商务应用– 多臂老虎机MAB算法可以通过选择显示哪些广告来优化网站广告位置以最大化点击率CTR或转化率。打车和外卖应用– MAB 可以帮助实时优化司机分配和路线规划以最大化效率和最小化等待时间。我希望您觉得我的文章有启发性。感谢阅读

相关文章:

多臂老虎机问题——一个面向初学者的指南

原文:towardsdatascience.com/the-multi-armed-bandit-problem-a-beginner-friendly-guide-2293ce7d8da8 多臂老虎机 (MAB) 是决策中的一个经典问题,其中代理必须在多个选项(称为“臂”)之间进行选择,并在一系列试验中…...

【亲测免费】【免费下载】 探索视觉新边界:RexVision视觉框架深度解析

探索视觉新边界:RexVision视觉框架深度解析 【下载地址】RexVision视觉框架下载仓库 本仓库提供了一个名为“RexVision视觉框架”的资源文件下载。该框架是一个视觉处理相关的工具或库,用户只需将文件放置在D盘的根目录下即可进行编译和使用 项目地址:…...

终极指南:如何在Mac上免费实现NTFS读写功能

终极指南:如何在Mac上免费实现NTFS读写功能 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management for NTFS dri…...

探索Qt高级停靠系统:打造灵活强大的用户界面

探索Qt高级停靠系统:打造灵活强大的用户界面 【下载地址】Qt-Advanced-Docking-System使用教程与示例代码 Qt-Advanced-Docking-System 使用教程与示例代码本仓库提供了一个关于如何使用 Qt-Advanced-Docking-System 的详细教程及示例代码 项目地址: https://gitc…...

Linux应用目录规范实战指南

Linux应用目录规范实战指南本文面向具备一定 Linux 基础的技术人员,围绕应用目录规范展开,重点讨论配置目录、数据目录和日志目录职责分离。在中级运维和系统管理工作中,这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交…...

【免费下载】 QQ空间说说批量删除插件:2023年最新版推荐

QQ空间说说批量删除插件:2023年最新版推荐 【下载地址】QQ空间说说批量删除插件-2023年最新版 本仓库提供了一个2023年最新版的QQ空间说说批量删除插件。该插件可以帮助用户快速批量删除QQ空间中的说说,节省大量手动操作的时间 项目地址: https://gitc…...

3步解放设计师双手:Layerdivider如何将单张插画智能分层为可编辑PSD

3步解放设计师双手:Layerdivider如何将单张插画智能分层为可编辑PSD 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 想象一下,当你…...

创新设计与智能系统设计融合

在智能制造与工业大模型时代,创新设计(以生成式AI、变型衍生、大规模定制为核心)与智能系统设计(以端-边-云协同、工业智能体、自主控制为核心)的融合,是制造企业实现研发与生产双向闭环的终极路径 。两者的…...

番茄小说下载器:终极解决方案,轻松构建个人数字图书馆

番茄小说下载器:终极解决方案,轻松构建个人数字图书馆 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 还在为网络小说资源分散、广告干扰、无法离线阅读…...

【亲测免费】 Unity WebGL中文输入插件——为WebGL游戏开启无缝中文输入新时代!

Unity WebGL中文输入插件——为WebGL游戏开启无缝中文输入新时代! 【下载地址】UnityWebGL中文输入插件 本仓库提供了一个Unity WebGL中文输入插件,该插件支持输入法跟随和全屏功能。通过使用此插件,开发者可以在WebGL平台上实现中文输入&…...

终极指南:如何在Windows上免费扩展虚拟显示器,轻松打造多屏工作空间

终极指南:如何在Windows上免费扩展虚拟显示器,轻松打造多屏工作空间 【免费下载链接】virtual-display-rs A Windows virtual display driver to add multiple virtual monitors to your PC! For Win10. Works with VR, obs, streaming software, etc …...

抖音批量下载神器:一键保存多个创作者的所有视频作品

抖音批量下载神器:一键保存多个创作者的所有视频作品 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 在当前短视频内容爆炸的时代,抖音汇聚了无数创意视频和优质内容。无论是学习舞蹈…...

用C++模拟堆宝塔游戏:PTA L2-045题解与保姆级代码逐行解析

用C模拟堆宝塔游戏:PTA L2-045题解与保姆级代码逐行解析 堆宝塔游戏是一个有趣的逻辑挑战,它不仅能锻炼编程思维,还能帮助我们深入理解数据结构中的栈操作。本文将带你从零开始,用C实现这个游戏,并逐行解析代码逻辑&a…...

【免费下载】 摩擦磨损仿真Archard模型 - FORTRAN子程序中文注释版:加速您的科研与工程项目

摩擦磨损仿真Archard模型 - FORTRAN子程序中文注释版:加速您的科研与工程项目 【下载地址】摩擦磨损仿真archard模型-FORTRAN子程序中文注释版 本仓库提供了一款专为摩擦磨损分析设计的Umeshmotion子程序模型,采用经典的Archard模型实现。此资源针对工程…...

别再手动画图了!用Graphviz + Python自动生成流程图,效率提升10倍

用PythonGraphviz实现自动化图表生成:告别低效手绘时代 你是否曾在PPT中反复调整箭头位置,只为让一张流程图看起来更专业?或是花半小时拖拽图形,却发现某个节点的颜色需要全局修改?在技术文档、系统架构设计或算法可视…...

Win10显示器关闭就锁屏?一个注册表键值让你告别烦人锁屏(附详细路径)

Win10显示器关闭后自动锁屏的终极解决方案:注册表深度优化指南 1. 问题背景与用户痛点 每当我们在Windows 10系统中设置显示器自动关闭以节省能源时,常常会遇到一个令人困扰的现象:显示器关闭后不久,系统就会自动进入锁屏状态。这…...

IL-4诱导的M2INF巨噬细胞在二型免疫疾病及感染防御中的机制研究

摘要郑世进课题组通过深入研究IL-4诱导的M2INF巨噬细胞,揭示了其产生机制主要涉及糖代谢途径的重编程和组蛋白H3K4位点甲基化修饰的改变。这一发现为理解二型免疫疾病的发生发展提供了新的视角,并为相关疾病的治疗策略提供了理论依据。通过在小鼠模型&am…...

别再死记硬背One-Hot了!用Python从零实现一个Word2Vec词嵌入模型(附完整代码)

从零构建Word2Vec:用Python实现词嵌入的实战指南 词嵌入技术早已成为自然语言处理的基石,但大多数教程要么停留在理论层面,要么直接调用现成的库函数。本文将带你用纯Python和NumPy从零实现一个Word2Vec模型,彻底掌握词向量生成的…...

终极指南:3种方法快速部署Windows官方包管理器Winget

终极指南:3种方法快速部署Windows官方包管理器Winget 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirrors/wi/w…...

【亲测免费】 探索光谱与色谱数据分析的新利器:CARS-PLS MATLAB 源码

探索光谱与色谱数据分析的新利器:CARS-PLS MATLAB 源码 【下载地址】CARS-PLS用于光谱数据或色谱数据变量选择的MATLAB源码 本仓库提供了一个用于光谱数据或色谱数据变量选择的 MATLAB 源码,基于 CARS-PLS(Competitive Adaptive Reweighted S…...

告别触摸漂移!手把手教你为ESP32和XPT2046电阻屏制作LVGL校准工具

ESP32电阻屏精准触控实战:从硬件校准到LVGL交互优化 电阻式触摸屏在嵌入式设备中广泛应用,但精度问题一直困扰着开发者。当你在ESP32上连接XPT2046触摸控制器时,是否遇到过点击位置漂移、响应不准确的烦恼?本文将带你深入解决这一…...

保姆级教程:用ESP32 AT固件实现手机蓝牙配对,从编译到连接一次搞定

ESP32蓝牙开发实战:从固件编译到手机配对的完整指南 在物联网设备开发中,蓝牙连接是最基础也最常用的功能之一。ESP32作为一款高性价比的Wi-Fi/蓝牙双模芯片,凭借其出色的性能和丰富的开发资源,已经成为智能家居、可穿戴设备等领域…...

CVBS转BT656/BT601,能成熟、应用广泛的低功耗视频解码器

GM7150是一款低功耗、9位NTSC/PAL视频解码器,由成都振芯科技股份有限公司生产。该芯片采用CMOS工艺,通过IC总线与PC或DSP相连构成应用系统。它内部包含1个模拟处理通道,能实现CVBS、S-Video视频信号源选择、A/D转换、自动钳位、自动增益控制(…...

Windows热键冲突终结者:Hotkey Detective深度解析与实战指南

Windows热键冲突终结者:Hotkey Detective深度解析与实战指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 想…...

探索高效存储:STM32F4系列SD卡读写与FATFS文件系统移植

探索高效存储:STM32F4系列SD卡读写与FATFS文件系统移植 【下载地址】SD卡读写与FATFS文件系统移植SPI模式 本仓库提供了一个完整的SD卡读写程序,并成功移植了FATFS文件系统,适用于STM32F4系列微控制器。通过SPI模式,您可以轻松实现…...

Pydantic序列化避坑大全:从‘按声明类型序列化’到灵活exclude/include的5个常见误区

Pydantic序列化深度避坑指南:从类型陷阱到安全控制的实战解析 深夜调试代码时,你是否遇到过这样的场景:明明在内存中完整的对象,通过API返回给前端时却莫名丢失了关键字段?或者当你在日志中打印包含敏感信息的模型时&a…...

从外卖配送范围到跨国航线规划:Geopy距离计算的3个实战场景与避坑经验

从外卖配送范围到跨国航线规划:Geopy距离计算的3个实战场景与避坑经验 在数字化浪潮席卷各行各业的今天,地理距离计算已成为许多商业应用的核心技术组件。无论是外卖小哥的手机App上闪烁的配送范围提示,还是国际物流系统中精确到米的航线规划…...

【亲测免费】 GeoMatch_src:基于边缘的模板匹配技术

GeoMatch_src:基于边缘的模板匹配技术 【下载地址】GeoMatch_srcVS2015OpenCV3.3版说明文档 本仓库提供了**GeoMatch_src**项目的更新版本,专为使用Visual Studio 2015和OpenCV 3.3环境的开发者设计。GeoMatch_src是一个基于边缘的模板匹配技术实现&…...

如何零风险升级SillyTavern:保护角色数据完整的终极指南

如何零风险升级SillyTavern:保护角色数据完整的终极指南 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 还在为SillyTavern版本更新而提心吊胆吗?担心升级过程中珍贵…...

突破性效率工具:3步实现Draw.io Mermaid智能绘图完整方案

突破性效率工具:3步实现Draw.io Mermaid智能绘图完整方案 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin 还在为传统拖拽式绘图效率低下而烦恼吗&#xff1…...