以下是使用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

用MATLAB实现动态规划算法

原文地址: http://www.cveoy.top/t/topic/hNGi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录