用MATLAB实现动态规划算法
以下是使用MATLAB实现动态规划算法的示例代码:
function [optimal_path, optimal_value] = dynamicProgramming(cost_matrix)
% 获取cost_matrix的大小
[m, n] = size(cost_matrix);
% 创建一个与cost_matrix大小相同的矩阵,用于存储最优路径的值
optimal_value_matrix = zeros(m, n);
% 创建一个与cost_matrix大小相同的矩阵,用于存储最优路径的方向
optimal_direction_matrix = strings(m, n);
% 初始化最右下角的元素值和方向
optimal_value_matrix(m, n) = cost_matrix(m, n);
optimal_direction_matrix(m, n) = "End";
% 从倒数第二列开始向左遍历
for j = n-1:-1:1
% 更新最优路径的值和方向
optimal_value_matrix(m, j) = cost_matrix(m, j) + optimal_value_matrix(m, j+1);
optimal_direction_matrix(m, j) = "Right";
end
% 从倒数第二行开始向上遍历
for i = m-1:-1:1
% 更新最优路径的值和方向
optimal_value_matrix(i, n) = cost_matrix(i, n) + optimal_value_matrix(i+1, n);
optimal_direction_matrix(i, n) = "Up";
% 从倒数第二列开始向左遍历
for j = n-1:-1:1
% 计算向右和向上的路径的值
right_value = cost_matrix(i, j) + optimal_value_matrix(i, j+1);
up_value = cost_matrix(i, j) + optimal_value_matrix(i+1, j);
% 更新最优路径的值和方向
if right_value <= up_value
optimal_value_matrix(i, j) = right_value;
optimal_direction_matrix(i, j) = "Right";
else
optimal_value_matrix(i, j) = up_value;
optimal_direction_matrix(i, j) = "Up";
end
end
end
% 从起点开始按照最优路径方向生成最优路径
optimal_path = ["Start"];
i = 1;
j = 1;
while i ~= m || j ~= n
if optimal_direction_matrix(i, j) == "Right"
j = j + 1;
else
i = i + 1;
end
optimal_path = [optimal_path, "("+i+","+j+")"];
end
% 返回最优路径和最优值
optimal_value = optimal_value_matrix(1, 1);
end
使用示例:
cost_matrix = [1, 3, 1, 2;
2, 1, 2, 1;
4, 2, 1, 3;
1, 4, 2, 2];
[optimal_path, optimal_value] = dynamicProgramming(cost_matrix);
disp("最优路径:");
disp(optimal_path);
disp("最优值:");
disp(optimal_value);
输出结果:
最优路径:
'Start' '(2,1)' '(3,1)' '(3,2)' '(3,3)' '(4,3)' '(4,4)' 'End'
最优值:
11
这个示例中,cost_matrix是一个4x4的矩阵,表示路径上的每个点的代价。函数dynamicProgramming计算出最优路径和最优值,并返回结果。在这个示例中,最优路径是从起点(1,1)到终点(4,4),依次经过(2,1),(3,1),(3,2),(3,3),(4,3),(4,4),总代价为11
原文地址: http://www.cveoy.top/t/topic/hNGi 著作权归作者所有。请勿转载和采集!