站长网网站模板,wordpress主题 动漫,网站建设项目报告书,wordpress虚拟机引言
对一些代码块进行注释。我直接复制过来的#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…引言
对一些代码块进行注释。我直接复制过来的不能运行的话别怪我。
多臂赌博机
代码来自链接。欢迎回到原来的链接学习。
%I thought what Id do was Id pretend I was one of those deaf-mutesor should I ?clear all;
epsilon[0.5,0.2,0.1,0.02,0.005]; %epsilon概率进行探索exploration1-epsilon概率进行利用(exploitation)
m5; 表示一共有5种情况T10000; 表示一共运行1万次
%决策机内存初始化
Avegainzeros(m,5); % 每种情况标记当下每一个摇臂的中奖概率
Testtimezeros(m,5); % 每种情况下标记每一个实验摇臂的实验次数
Rewardzeros(5,T); % 奖励for k1:mfor i1:Tif rand(1)epsilon(k) %探索numunidrnd(5); %随机生成最大为5的正整数随机选择摇臂else %利用afindmax(Avegain(k,:)); % 自主建立函数选择在当前情况下最大中奖概率的摇臂numa(2);%选择平均奖赏最大的摇臂。因为是自建函数这个应该是返回摇臂的序号endrSlotmachine5(num);% 自建函数拉下摇杆获得回报。if i1 %更新累计奖赏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.TesttimeTesttime;
result.AvegainAvegain;
result.RewardReward;
plot(1:10000,Reward);
xlabel(测试次数);
ylabel(平均累计奖赏);
legend(ε0.5,ε0.2,ε0.1,ε0.02,ε0.005);剩下的我相信大家都已经懂了。这就是相信的力量。
风场中的Q-learning
风场中的Q-learning源自网址
%I thought what Id do was Id pretend I was one of those deaf-mutes, or should I?clear all;%风速初始化
Windyworld.windxzeros(7,10);
Windyworld.windyzeros(7,10);
Windyworld.windy(:,4:9)Windyworld.windy(:,4:9)1; % 定义风速向量在4-9之间为x0, y1targetxy[6,8]; %!!注意第一个坐标为y坐标第二个坐标为x坐标 终点坐标alpha0.5;
gamma0.99;
Tloop6000; %总学习循环次数
markzeros(1,Tloop); %记录是否成功%迭代为二重时间循环
Q_funczeros(7,10,4); %!!三维值函数矩阵z1xz2-xz3yz4-y 初始化定义Q表格
Q_func(:,:,1)0.2; %size(B),ndims(B)
Q_func(targetxy(1),targetxy(2),:)0; %目标值的所有Q函数始终为0for Ts1:Tloop %Tsstudy time%单次运动初始化rolexy[4,1]; % 初始化出发result(Ts).Q_funczeros(7,10,4); % result(Ts).tracezeros(40,3);result(Ts).trace(1,:)([1,rolexy(1),rolexy(2)]);for Tm1:40% 按照策略获得到达下一步的动作。这其中包括智能体选择动作的ε-greedy策略函数名tcegreedyTs为训练次数Q_func(rolexy(1),rolexy(2),:)为当下Q表格的内容acttcegreedy(Ts,Q_func(rolexy(1),rolexy(2),:));% 智能体在风的影响下运动函数名movement输入参数包括选择的动作act当下的位置rolexy以及风速运行的方位Windyworldnextxymovement(act,rolexy,Windyworld);%TD算法进行策略值迭代%计算reward% 计算如果到达目标则返回奖励超出边界则返回惩罚没有超出边界且没到达目标则返回0奖励 if nextxy(1)targetxy(1)nextxy(2)targetxy(2) %到达目标reward5;else if nextxy(1)1||nextxy(1)7||nextxy(2)1||nextxy(2)10 %超出边界reward-1;elsereward0;end %reward不考虑超出步数的问题end%计算下一步的策略函数最大值%Qlearning方式进行Q函数更新更新Q值中所用的s状态下动作与实际在s状态下做出动作不一定相同因为e-greedy的存在if nextxy(1)1||nextxy(1)7||nextxy(2)1||nextxy(2)10 %超出边界Q10;elseQ1max(Q_func(nextxy(1),nextxy(2),:));endQ_func(rolexy(1),rolexy(2),act)(1-alpha)*Q_func(rolexy(1),rolexy(2),act)alpha*(rewardgamma*Q1);%更新坐标rolexynextxy;result(Ts).trace(Tm1,:)([Tm1,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_funcQ_func;
endAvegainzeros(1,Tloop);
for i1:TloopAvegain(i)sum(mark(1:i))/i; % 返回不同时期的成功概率
end