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

强化学习部分代码的注释分析

引言

对一些代码块进行注释。我直接复制过来的,不能运行的话别怪我。

多臂赌博机

代码来自链接。欢迎回到原来的链接学习。

%I thought what I'd do was I'd pretend I was one of those deaf-mutes,or should I ?clear all;
epsilon=[0.5,0.2,0.1,0.02,0.005];  %epsilon概率进行探索(exploration),1-epsilon概率进行利用(exploitation)
m=5; 表示一共有5种情况T=10000; 表示一共运行1万次
%决策机内存初始化
Avegain=zeros(m,5);  % 每种情况,标记当下每一个摇臂的中奖概率
Testtime=zeros(m,5);	% 每种情况下,标记每一个实验摇臂的实验次数
Reward=zeros(5,T);		% 奖励for k=1:mfor i=1:Tif rand(1)<=epsilon(k) %探索num=unidrnd(5);  %随机生成最大为5的正整数,随机选择摇臂else   %利用a=findmax(Avegain(k,:)); % 自主建立函数,选择在当前情况下最大中奖概率的摇臂num=a(2);%选择平均奖赏最大的摇臂。因为是自建函数,这个应该是返回摇臂的序号endr=Slotmachine5(num);% 自建函数,拉下摇杆,获得回报。if i==1                                            %更新累计奖赏Reward(k,i)=r;elseReward(k,i)=(Reward(k,i-1)*(i-1)+r)/i;end        Avegain(k,num)=(Avegain(k,num)*Testtime(k,num)+r)/(Testtime(k,num)+1); %更新所选臂的平均奖赏Testtime(k,num)=Testtime(k,num)+1;                 %更新所选臂的实验次数end
end
result.Testtime=Testtime;
result.Avegain=Avegain;
result.Reward=Reward;
plot(1:10000,Reward);
xlabel('测试次数');
ylabel('平均累计奖赏');
legend('ε=0.5','ε=0.2','ε=0.1','ε=0.02','ε=0.005');

剩下的我相信大家都已经懂了。这就是相信的力量。

风场中的Q-learning

风场中的Q-learning源自网址:

%I thought what I'd do was I'd pretend I was one of those deaf-mutes, or should I?clear all;%风速初始化
Windyworld.windx=zeros(7,10);
Windyworld.windy=zeros(7,10);
Windyworld.windy(:,4:9)=Windyworld.windy(:,4:9)+1;  % 定义风速向量(在4-9之间为x=0,  y=1)targetxy=[6,8];                 %!!注意:第一个坐标为y坐标,第二个坐标为x坐标  终点坐标alpha=0.5;
gamma=0.99;                     
Tloop=6000;                       %总学习循环次数
mark=zeros(1,Tloop);             %记录是否成功%迭代为二重时间循环
Q_func=zeros(7,10,4);            %!!三维值函数矩阵:(z=1:+x)(z=2:-x)(z=3:+y)(z=4:-y)  初始化定义Q表格
Q_func(:,:,1)=0.2;               %size(B),ndims(B)
Q_func(targetxy(1),targetxy(2),:)=0;     %目标值的所有Q函数始终为0for Ts=1:Tloop                   %Ts=study time%单次运动初始化rolexy=[4,1];  % 初始化出发result(Ts).Q_func=zeros(7,10,4); % result(Ts).trace=zeros(40,3);result(Ts).trace(1,:)=([1,rolexy(1),rolexy(2)]);for Tm=1:40% 按照策略获得到达下一步的动作。这其中包括智能体选择动作的ε-greedy策略,函数名tcegreedy,Ts为训练次数,Q_func(rolexy(1),rolexy(2),:)为当下Q表格的内容;act=tcegreedy(Ts,Q_func(rolexy(1),rolexy(2),:));% 智能体在风的影响下运动,函数名movement;输入参数包括,选择的动作act,当下的位置rolexy以及风速运行的方位Windyworldnextxy=movement(act,rolexy,Windyworld);%TD算法进行策略值迭代%计算reward% 计算,如果到达目标则返回奖励;超出边界则返回惩罚,没有超出边界且没到达目标则返回0奖励  if nextxy(1)==targetxy(1)&&nextxy(2)==targetxy(2)  %到达目标reward=5;else if nextxy(1)<1||nextxy(1)>7||nextxy(2)<1||nextxy(2)>10 %超出边界reward=-1;elsereward=0;end                     %reward不考虑超出步数的问题end%计算下一步的策略函数最大值%Qlearning方式进行Q函数更新,更新Q值中所用的s'状态下动作与实际在s'状态下做出动作不一定相同(因为e-greedy的存在)if nextxy(1)<1||nextxy(1)>7||nextxy(2)<1||nextxy(2)>10 %超出边界Q1=0;elseQ1=max(Q_func(nextxy(1),nextxy(2),:));endQ_func(rolexy(1),rolexy(2),act)=(1-alpha)*Q_func(rolexy(1),rolexy(2),act)+alpha*(reward+gamma*Q1);%更新坐标rolexy=nextxy;result(Ts).trace(Tm+1,:)=([Tm+1,rolexy(1),rolexy(2)]);%判断是否跳出本episodeif rolexy(1)==targetxy(1)&&rolexy(2)==targetxy(2)mark(Ts)=1;   % 如果到达目标,则返回成功标记break;else if rolexy(1)<1||rolexy(1)>7||rolexy(2)<1||rolexy(2)>10break;    % 否则出界,直接退出endend        endresult(Ts).Q_func=Q_func;
endAvegain=zeros(1,Tloop);
for i=1:TloopAvegain(i)=sum(mark(1:i))/i;  % 返回不同时期的成功概率
end

相关文章:

强化学习部分代码的注释分析

引言 对一些代码块进行注释。我直接复制过来的&#xff0c;不能运行的话别怪我。 多臂赌博机 代码来自链接。欢迎回到原来的链接学习。 %I thought what Id do was Id pretend I was one of those deaf-mutes&#xff0c;or should I ?clear all; epsilon[0.5,0.2,0.1,0.0…...

ctf.bugku-备份是个好习惯

访问页面得到字符串 这串字符串是重复的&#xff1b; d41d8cd98f00b204e9800998ecf8427e 从前端、源码上看&#xff0c;除了这段字符串&#xff0c;没有其他信息&#xff1b;尝试解密&#xff0c;长度32位&#xff1b;各种解密方式试试&#xff1b; MD5免费在线解密破解_MD5在…...

C++面试速通宝典——14

220. static关键字的作用 ‌‌‌‌  static关键字在编程中有多种作用&#xff1a; 在类的成员变量前使用&#xff0c;表示该变量属于类本身&#xff0c;而不是任何类的实例。在类的成员函数前使用&#xff0c;表示该函数不需要对象实例即可调用&#xff0c;且只能访问类的静…...

k8s的简介和部署

一、k8s简介 在部署应用程序的方式上面&#xff0c;主要经历了三个阶段&#xff1a; 传统部署:互联网早期&#xff0c;会直接将应用程序部署在物理机上优点:简单&#xff0c;不需要其它技术的参与缺点:不能为应用程序定义资源使用边界&#xff0c;很难合理地分配计算资源&…...

Thingsboard 网关实战 modbus通信 rpc下发控制指令

我们这里说的是Thingsboard通过网关modbus通信接入设备&#xff0c;然后通过rpc下发指令去控制开关信号的设备&#xff0c;不会网关通过modbus接入设备的&#xff0c;可以看我之前的文章&#xff0c;从小白教学。 下面我们就说如何下发rpc开关信号指令 第一步.在modbus配置文…...

基于pytorch的手写数字识别

import pandas as pd import numpy as np import torch import matplotlib import matplotlib.pyplot as plt from torch.utils.data import TensorDataset, DataLoadermatplotlib.use(tkAgg)# 设置图形配置 config {"font.family": serif,"mathtext.fontset&q…...

MySQL 实验 7:索引的操作

MySQL 实验 7&#xff1a;索引的操作 索引是对数据表中一列或多列的值进行排序的一种结构&#xff0c;索引可以大大提高 MySQL 的检索速度。合理使用索引&#xff0c;可以大大提升 SQL 查询的性能。 索引好比是一本书前面的目录&#xff0c;假如我们需要从书籍查找与 xx 相关…...

为Floorp浏览器添加搜索引擎及搜索栏相关设置. 2024-10-05

Floorp浏览器开源项目地址: https://github.com/floorp-Projects/floorp/ 1.第一步 为Floorp浏览器添加搜索栏 (1.工具栏空白处 次键选择 定制工具栏 (2. 把 搜索框 拖动至工具栏 2.添加搜索引擎 以添加 搜狗搜索 为例 (1.访问 搜索引擎网址 搜狗搜索引擎 - 上网从搜狗开始 (2…...

如何设置WSL Ubuntu在Windows开机时自动启动

如何设置WSL Ubuntu在Windows开机时自动启动 步骤详解1. 创建批处理脚本2. 添加到Windows启动项 注意事项结语 在使用Windows Subsystem for Linux (WSL) 时,我们可能希望Ubuntu能够在Windows启动时自动运行。本文将介绍如何实现这一功能,让您的开发环境更加便捷。 步骤详解 …...

使用TensorBoard可视化模型

目录 TensorBoard简介 神经网络模型 可视化 轮次-损失曲线 轮次-准确率曲线 轮次-学习率曲线 迭代-评估准确率曲线 迭代-评估损失曲线 TensorBoard简介 TensorBoard是一款出色的交互式的模型可视化工具。安装TensorFlow时,会自动安装TensorBoard。如图: TensorFlow可…...

《深度学习》OpenCV 图像拼接 原理、参数解析、案例实现

目录 一、图像拼接 1、直接看案例 图1与图2展示&#xff1a; 合并完结果&#xff1a; 2、什么是图像拼接 3、图像拼接步骤 1&#xff09;加载图像 2&#xff09;特征点检测与描述 3&#xff09;特征点匹配 4&#xff09;图像配准 5&#xff09;图像变换和拼接 6&am…...

Hive数仓操作(三)

一、Hive 数据库操作 1. 创建数据库 基本创建数据库命令&#xff1a; CREATE DATABASE bigdata;说明&#xff1a; 数据库会在 HDFS 中以目录的形式创建和保存&#xff0c;数据库名称会存储在 Hive 的元数据中。如果不指定目录&#xff0c;数据库将在 /user/hive/warehouse 下…...

TDSQL-C电商可视化,重塑电商决策新纪元

前言&#xff1a; 在数字化浪潮席卷全球的今天&#xff0c;电子商务行业以其独特的魅力和无限潜力&#xff0c;成为了推动全球经济增长的重要引擎。然而&#xff0c;随着业务规模的急剧扩张&#xff0c;海量数据的涌现给电商企业带来了前所未有的挑战与机遇。如何高效地处理、…...

翔云 OCR:发票识别与验真

在数字化时代&#xff0c;高效处理大量文档和数据成为企业和个人的迫切需求。翔云 OCR 作为一款强大的光学字符识别工具&#xff0c;在发票识别及验真方面表现出色&#xff0c;为我们带来了极大的便利。 一、翔云 OCR 简介 翔云 OCR 是一款基于先进的人工智能技术开发的文字识别…...

HTML ASCII:Web 开发中的字符编码基础

HTML ASCII&#xff1a;Web 开发中的字符编码基础 ASCII&#xff0c;全称为美国信息交换标准代码&#xff08;American Standard Code for Information Interchange&#xff09;&#xff0c;是一种用于电子通信的字符编码标准。它最初于1963年提出&#xff0c;用于在不同的计算…...

Meta 首个多模态大模型一键启动!首个多针刺绣数据集上线,含超 30k 张图片

小扎在 Meta Connect 2024 主题演讲中宣布推出首个多模态大模型 Llama 3.2 vision&#xff01;该模型有 11B 和 90B 两个版本&#xff0c;成为首批支持多模态任务的 Llama 系列模型&#xff0c;根据官方数据&#xff0c;这两个开原模型的性能已超越闭源模型。 小编已经迫不及待…...

阿里云ECS服务器仿真

1.首先使用qemu-img对RAW镜像进行转换&#xff0c;qemu-img convert -O vmdk 1.raw 2.vmdk 2.使用WinHex对镜像的root密码进行删除 3.由于这次阿里云ECS使用了CONFIG_SYSTEM_TRUSTED_KEYS验证&#xff0c;无法直接仿真&#xff0c;需使用live系统对内核进行修改。分为以下几步&…...

如何为树莓派安装操作系统,以及远程操控树莓派的两种方法,无线操控和插网线操控

文章目录 一、下载树莓派的系统二、将文件下载到SD卡中1.使用官方软件2.其他选择 三、远程连接电脑安装vnc-viewer1.无线操作&#xff08;配置树莓派&#xff0c;开启VNC&#xff09;电脑远程配置2.有线连接&#xff08;需要一根网线&#xff09; 总结 一、下载树莓派的系统 下…...

【最新华为OD机试E卷-支持在线评测】简单的自动曝光(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…...

每日一练:等差数列划分

413. 等差数列划分 - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; 如果一个数列 至少有三个元素 &#xff0c;并且任意两个相邻元素之差相同&#xff0c;则称该数列为等差数列。 例如&#xff0c;[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给…...

Kotlin真·全平台——Kotlin Compose Multiplatform Mobile(kotlin跨平台方案、KMP、KMM)

前言 随着kotlin代码跨平台方案的推出&#xff0c;kotlin跨平台一度引起不少波澜。但波澜终归没有掀起太大的风浪&#xff0c;作为一个敏捷型开发的公司&#xff0c;依然少不了Android和iOS的同步开发&#xff0c;实际成本和效益并没有太多变化。所以对于大多数公司来说依然风平…...

unity 默认渲染管线材质球的材质通道,材质球的材质通道

标准渲染管线——材质球的材质通道 文档&#xff0c;与内容无关&#xff0c;是介绍材质球的属性的。 https://docs.unity3d.com/2022.1/Documentation/Manual/StandardShaderMaterialParameters.html游戏资源中常见的贴图类型 https://zhuanlan.zhihu.com/p/260973533 十大贴图…...

PostgreSQL升级:使用pg_upgrade进行大版本(16.3)升级(17.0)

1.pg_upgrade工具介绍 pg_upgrade 会创建新的系统表&#xff0c;并以重用旧的数据文件的方式进行升级。 pg_upgrade 的参数选项如下&#xff1a; -b bindir&#xff0c;--old-bindirbindir&#xff1a;旧的 PostgreSQL 可执行文件目录&#xff1b; -B bindir&#xff0c;--new-…...

userdel命令:删除指定Linux用户

一、命令简介 ​userdel​ 命令用于删除 Linux 系统中的用户账号。当您不再需要某个用户账号时&#xff0c;可以使用 userdel​ 命令将其从系统中删除。 ‍ 二、命令参数 userdel [选项] 用户名一些常用的选项包括&#xff1a; -r, --remove: 删除用户的家目录及邮件目录。…...

QT系统学习篇(1)

一、什么是Qt、Qt的优势 QT是一个跨平台的C图形用户界面库&#xff0c;目前包括Qt Creator、Qt Designer等等快速开发工具。支持所有Linux/Unix系统&#xff0c;还支持windows平台。Qt很容易扩展&#xff0c;并且允许真正的组件编程。&#xff08;军工企业项目开发基本离不开Q…...

每日一刷——9.26——ACM训练题——Fibonacci Again

题目描述&#xff1a; There are another kind of Fibonacci numbers: F(0) 7, F(1) 11, F(n) F(n-1) F(n-2) (n>2). Input Input consists of a sequence of lines, each containing an integer n. (n < 1,000,000). Output Print the word "yes" if 3 d…...

代码随想录 | Day28 | 回溯算法:组合组合总和III

代码随想录 | Day28 | 回溯算法&#xff1a;组合&&组合总和III 关于这个章节&#xff0c;大家最好是对递归函数的理解要比较到位&#xff0c;听着b站视频课可能呢才舒服点&#xff0c;可以先去搜一搜关于递归函数的讲解&#xff0c;理解&#xff0c;再开始这个章节会比…...

【重学 MySQL】四十五、数据库的创建、修改与删除

【重学 MySQL】四十五、数据库的创建、修改与删除 一条数据存储的过程数据输入数据验证数据处理数据存储数据持久化反馈与日志注意事项 标识符命名规则基本规则长度限制保留字与特殊字符命名建议示例 MySQL 中的数据类型创建数据库创建数据库时指定字符集和排序规则 查看数据库…...

STM32驱动直流电机

stm32通过PWM控制直流电机的方向和速度。 小直流电机需要几百毫安的电流&#xff0c;单片机只能提供几毫安的电流。电机内线圈转动时切割磁感线以及电机内转子线圈的电感效应都会产生反电动势&#xff0c;损坏芯片。 电机驱动芯片能够作为STM32驱动电机的帮手。 SLEEP暂停工作…...

【C++】二叉搜索树+变身 = AVL树

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、AVL树二、AVL树的实现2.1 平衡因子2.2 旋转处理2.2.1 左单旋&#xff1a;插入新节点后单纯的右边高2.2.2 …...