当前位置: 首页 > 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
http://www.lryc.cn/news/454423.html

相关文章:

  • ctf.bugku-备份是个好习惯
  • C++面试速通宝典——14
  • k8s的简介和部署
  • Thingsboard 网关实战 modbus通信 rpc下发控制指令
  • 基于pytorch的手写数字识别
  • MySQL 实验 7:索引的操作
  • 为Floorp浏览器添加搜索引擎及搜索栏相关设置. 2024-10-05
  • 如何设置WSL Ubuntu在Windows开机时自动启动
  • 使用TensorBoard可视化模型
  • 《深度学习》OpenCV 图像拼接 原理、参数解析、案例实现
  • Hive数仓操作(三)
  • TDSQL-C电商可视化,重塑电商决策新纪元
  • 翔云 OCR:发票识别与验真
  • HTML ASCII:Web 开发中的字符编码基础
  • Meta 首个多模态大模型一键启动!首个多针刺绣数据集上线,含超 30k 张图片
  • 阿里云ECS服务器仿真
  • 如何为树莓派安装操作系统,以及远程操控树莓派的两种方法,无线操控和插网线操控
  • 【最新华为OD机试E卷-支持在线评测】简单的自动曝光(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 每日一练:等差数列划分
  • Kotlin真·全平台——Kotlin Compose Multiplatform Mobile(kotlin跨平台方案、KMP、KMM)
  • unity 默认渲染管线材质球的材质通道,材质球的材质通道
  • PostgreSQL升级:使用pg_upgrade进行大版本(16.3)升级(17.0)
  • userdel命令:删除指定Linux用户
  • QT系统学习篇(1)
  • 每日一刷——9.26——ACM训练题——Fibonacci Again
  • 代码随想录 | Day28 | 回溯算法:组合组合总和III
  • 【重学 MySQL】四十五、数据库的创建、修改与删除
  • STM32驱动直流电机
  • 【C++】二叉搜索树+变身 = AVL树
  • Flutter String 按 ,。分割