运筹优化学习17:马尔科夫决策规划--例题及Matlab、Lingo和Cplex的建模实现

简介: 运筹优化学习17:马尔科夫决策规划--例题及Matlab、Lingo和Cplex的建模实现

1 胡运权《运筹学》211页题目及理论分析

1.1 题目介绍

20200111221337550.png

20200111221259539.png

20200111221224728.png

1.2 Matlab实现

%输入参数为:决策一的状态转移矩阵和奖励矩阵;决策二的状态转移矩阵和奖励矩阵
%输出参数为:决策一的期望值与决策;决策二的期望值与决策
function [f1,d1,f2,d2] = markovOpt(P1, R1,P2,R2,N)
if N == 1
    Q1 = MatrixRowMulti(P1,R1);
    Q2 = MatrixRowMulti(P2,R2);
    [f1,d1] = max([Q1(1), Q2(1)]);
    [f2,d2] = max([Q1(2), Q2(2)]);
%     [f1,d1,f2,d2] = firstDecision(P1,R1,P2,R2);
else
    Q1 = MatrixRowMulti(P1,R1);
    Q2 = MatrixRowMulti(P2,R2);
    [ref1,~] = max([Q1(1), Q2(1)]);
    [ref2,~] = max([Q1(2), Q2(2)]);
    iter = 1;
    while iter ~= N
        ref = [ref1;ref2];
        tmp1 = [Q1(1,1) + P1(1,:) * ref(:,1); Q2(1,1) + P2(1,:) * ref(:,1)];
        tmp2 = [Q1(2,1) + P1(2,:) * ref(:,1); Q2(2,1) + P2(2,:) * ref(:,1)];
        [f1,d1] = max(tmp1);
        [f2,d2] = max(tmp2);
        ref1 = f1;
        ref2 = f2;
%         Q1 = [tmp1(1,1);tmp2(1,1)];
%         Q2 = [tmp1(2,1);tmp2(2,1)];
%         没搞明白此处Q为什么不用更新
        iter = iter + 1;
    end
end
end

验证代码:

%胡运权运筹学教程上的例题
P1 = [0.5,0.5; 0.4,0.6];
R1 = [9,3; 3,-7];
% Q1 = MatrixRowMulti(P1,R1)
P2 = [0.8,0.2; 0.7,0.3];
R2 = [4,4;1,-19];
% Q2 = MatrixRowMulti(P2,R2)
% %f为报酬
% [f1,d1] = max([Q1(1), Q2(1)])
% [f2,d2] = max([Q1(2), Q2(2)])
%多阶段调度的例子
[f1,d1,f2,d2] = markovOpt(P1,R1,P2,R2,1000);

image.png

可见,工厂应该选择策略而,也就是打广告的方式才能够获得最大的总期望收益

1.3 使用Lingo求解

代码对模型的不等式做了移项处理,即将P移到不等式的左边

min = v22;
!v_ij标识阶段i处于状态j的期望奖励值
v11 >= 6; 
v12 >= -3;
- 0.5 * v11 - 0.5 * v12 + v21 >= 6;
- 0.4 * v11 - 0.6 * v12 + v22 >= -3;
- 0.8 * v11 - 0.2 * v12 + v21 >= 4;
- 0.7 * v11 - 0.3 * v12 + v22 >= -5;
- 0.5 * v21 - 0.5 * v22 + v31 >= 6;
- 0.4 * v21 - 0.6 * v22 + v32 >= -3;
- 0.8 * v21 - 0.2 * v22 + v31 >= 4;
- 0.7 * v21 - 0.3 * v22 + v32 >= -5;
- 0.5 * v31 - 0.5 * v32 + v41 >= 6;
- 0.4 * v31 - 0.6 * v32 + v42 >= -3;
- 0.8 * v31 - 0.2 * v32 + v41 >= 4;
- 0.7 * v31 - 0.3 * v32 + v42 >= -5;
!将值函数定义为自由变量
@free(v11); @free(v12);
@free(v21); @free(v22);
@free(v31); @free(v32);
@free(v41); @free(v42);

1.4 使用Cplex建模及求解

dvar float v11; dvar float v12; 
dvar float v21; dvar float v22;
dvar float v31; dvar float v32; 
dvar float v41; dvar float v42; 
minimize v41;
subject to{
v11 >= 6; 
v12 >= -3;
- 0.5 * v11 - 0.5 * v12 + v21 >= 6;
- 0.4 * v11 - 0.6 * v12 + v22 >= -3;
- 0.8 * v11 - 0.2 * v12 + v21 >= 4;
- 0.7 * v11 - 0.3 * v12 + v22 >= -5;
- 0.5 * v21 - 0.5 * v22 + v31 >= 6;
- 0.4 * v21 - 0.6 * v22 + v32 >= -3;
- 0.8 * v21 - 0.2 * v22 + v31 >= 4;
- 0.7 * v21 - 0.3 * v22 + v32 >= -5;
- 0.5 * v31 - 0.5 * v32 + v41 >= 6;
- 0.4 * v31 - 0.6 * v32 + v42 >= -3;
- 0.8 * v31 - 0.2 * v32 + v41 >= 4;
- 0.7 * v31 - 0.3 * v32 + v42 >= -5;
};

20200127220934732.png

上述代码得到结果,只需更改对应的目标函数,即可得到与下表是一致的结果:

20200120155442445.png

2 刘克《马尔科夫决策过程理论与应用》1.2节例题及代码结果

2.1 题目

20200111222211851.png

2.2 例题分析

决策者可以做出两种决策:

决策一:采用行动a1和行动a2;对应概率矩阵和奖励,见代码中的P11和R11

决策二:采用行动a1和行动a3;对应概率矩阵和奖励,见代码中的P12和R12

2.3 代码结果

%刘克 马尔科夫决策过程理论及应用 1.2节例题1.1的求解
P11 = [0.7,0.3;0.6,0.4];
R11 = [10,10; -5, -5];
P12 = [0.7,0.3; 0.4,0.6];
R12 = [10,10; -2,-2];
iterCnt = 10;
resault = zeros(iterCnt,4);
for i = 1:iterCnt
[resault(i,1),resault(i,2),resault(i,3),resault(i,4)] = markovOpt(P11,R11,P12,R12,i);
end
resault

image.png

可见;决策者,应该选择决策一,即快修的方式能够在多阶段后获得最大收益。


相关文章
|
4天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
9天前
|
机器学习/深度学习 算法 调度
基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出规划路径结果和满载率
基于ACO蚁群优化的VRPSD问题求解MATLAB仿真,输出ACO优化的收敛曲线、规划路径结果及每条路径的满载率。在MATLAB2022a版本中运行,展示了优化过程和最终路径规划结果。核心程序通过迭代搜索最优路径,更新信息素矩阵,确保找到满足客户需求且总行程成本最小的车辆调度方案。
|
15天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
|
18天前
|
机器学习/深度学习 算法 调度
基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出规划路径结果和满载率
该程序基于ACO蚁群优化算法解决VRPSD问题,使用MATLAB2022a实现,输出优化收敛曲线及路径规划结果。ACO通过模拟蚂蚁寻找食物的行为,利用信息素和启发式信息指导搜索,有效求解带时间窗约束的车辆路径问题,最小化总行程成本。
|
16天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
21天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化卷积神经网络(Bayes-CNN)的多因子数据分类识别算法matlab仿真
本项目展示了贝叶斯优化在CNN中的应用,包括优化过程、训练与识别效果对比,以及标准CNN的识别结果。使用Matlab2022a开发,提供完整代码及视频教程。贝叶斯优化通过构建代理模型指导超参数优化,显著提升模型性能,适用于复杂数据分类任务。
|
26天前
|
算法 决策智能
基于GA-PSO遗传粒子群混合优化算法的TSP问题求解matlab仿真
本文介绍了基于GA-PSO遗传粒子群混合优化算法解决旅行商问题(TSP)的方法。TSP旨在寻找访问一系列城市并返回起点的最短路径,属于NP难问题。文中详细阐述了遗传算法(GA)和粒子群优化算法(PSO)的基本原理及其在TSP中的应用,展示了如何通过编码、选择、交叉、变异及速度和位置更新等操作优化路径。算法在MATLAB2022a上实现,实验结果表明该方法能有效提高求解效率和解的质量。
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
191 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
3月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
122 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
3月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
88 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
下一篇
无影云桌面