clear
clc
states=8; %初始数量
actions=8; %动作数量
final_state=8; %目标状态
episode=100; %迭代次数
gamma=1; %折扣系数
alpha=0.8; %学习速率
p_max=zeros(states,actions);%按Q值表选最大值进行动作的概率
T=5; %退火温度
reward=-1*[inf inf 47 inf inf 24 inf inf;
inf inf 55 31 31 inf 74 79;
47 55 inf 88 23 25 66 inf;
inf 31 88 inf inf 120 inf 29;
inf 31 23 inf inf inf 42 inf;
24 inf 25 120 inf inf inf inf;
inf 74 66 inf 42 inf inf 66;
inf 79 inf 29 inf inf 66 inf];
tic
Q_table=zeros(states,states);
for i=1:episode
current_state=randperm(states,1); %随机指定一个起始节点
while current_state~=final_state; %当前节点是否为目标节点
optinal_action=find(reward(current_state,:)>=-1000); %当前状态的可能动作集
if length(optinal_action)==0 %判断当前状态的可能动作集是否为空
print("not connected")
break
else
next_action=choose_next_action(Q_table,current_state,optinal_action,p_max); %根据退火算法选择当前状态的一个动作
next_state_optinal=find(reward(next_action,:)>=-1000);
maxQ=max(Q_table(next_action,next_state_optinal));
Q_current=Q_table(current_state,next_action);
Q_table(current_state,next_action)=(1-alpha)*Q_table(current_state,next_action)+alpha*(reward(current_state,next_action)+gamma*maxQ);
Q_next=Q_table(current_state,next_action);
p_max(current_state,next_action)=pmax(Q_current,Q_next,T);
current_state=next_action;
end
end
if i==episode/2
reward=-1*[inf inf 47 inf inf 24 inf inf;
inf inf 55 31 31 inf 74 79;
47 55 inf 88 23 25 66 inf;
inf 31 88 inf inf 120 inf 59;
inf 31 23 inf inf inf 42 inf;
24 inf 25 120 inf inf inf inf;
inf 74 66 inf 42 inf inf 66;
inf 79 inf 59 inf inf 66 inf];
Q_table
end
end
Q_table
toc
function [next_action]=choose_next_action(Q_table,current_state,optinal_action,p_max)
[max_Q,max_action]=max(Q_table(current_state,optinal_action));
if rand<=p_max(current_state,optinal_action(max_action))
next_action=optinal_action(randperm(length(optinal_action),1));
else
next_action=optinal_action(max_action);
end
end
function [p_max]=pmax(Q_current,Q_next,T)
p_max=exp(-abs((Q_current-Q_next)/T/Q_next));
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
MATLAB(Matrix Laboratory)是一款由美国MathWorks公司开发的高性能商业数学软件,它集成了高级技术计算语言、交互式环境以及丰富的工具箱,被广泛应用于工程计算、数据分析、算法开发和科学可视化等领域。MATLAB的核心功能包括: 1. **数值计算**:支持大规模矩阵和数组运算,对线性代数、微积分、概率统计等数学问题提供高效解决方案。 2. **编程环境**:提供了易于使用的脚本编写与函数定义界面,支持面向对象编程,并可通过M文件实现模块化程序设计。 3. **数据可视化**:内置强大的二维和三维图形绘制功能,能够创建高质量的数据图表,便于数据分析和结果展示。 4. **工具箱扩展**:MathWorks为MATLAB提供了众多领域的专业工具箱,如信号处理、图像处理、通信系统、控制系统、机器学习、深度学习、量化金融、优化算法等,极大地扩展了MATLAB的应用范围。 5. **Simulink仿真**:作为MATLAB的重要组成部分,Simulink是一个动态系统建模、仿真和基于模型的设计环境,特别适用于多域物理系统和嵌入式系统的模拟和实时测试。 6. **集成能力**:MATLAB可以与其他编程语言(如C、C++、Java、Python等)及外部应用程序进行数据交换和联合开发,也可以调用硬件接口进行实时实验和控制。 7. **交互式工作空间**:用户可以在命令窗口中直接输入表达式并立即得到结果,这种交互式的特性使得快速原型设计和调试变得极为便利。 总之,MATLAB是科学家、工程师和技术人员进行科研、教育和工业应用不可或缺的强大工具之一,尤其在需要大量数值计算和复杂系统建模的场景下发挥着重要作用。
资源推荐
资源详情
资源评论
收起资源包目录
卫星网络q学习matlab仿真.zip (2个子文件)
WGT1-code
ql.m 2KB
qlearning.m 2KB
共 2 条
- 1
资源评论
JJJ69
- 粉丝: 6353
- 资源: 5918
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功