Matlab动态规划 投资问题

in Matlab with 0 comment

这学期学运筹学,用matlab写了一个动态规划投资问题,不过因为matlab用起来实在太难受了,所以偷懒把步长设为固定,省略了一些代码。

不过这个是为了化简解题,所以代码不是最优代码,有很多冗余计算

使用说明

输入表需要预处理,先保证第一列为零,然后删去
第一行的数值应该为[1 2 3 4...]*n

预处理示例:

处理1

处理2

function [result, celue] = touzi(data, mmax, n)
% author: hunsh
% time: 05/16/2020
% data 输入的表
% mmax, n 为递归使用的参数,用户使用不需要输入该参数
% result是最优值,celue是最优解,中间会输出动态规划表,答题照抄就行了

if nargin == 1 % 用户调用
    disp([data(1,:)])
    for i=2:size(data,1)
        tm=zeros(i,size(data,2));
        for j=1:size(data,2)
            [r,c]=touzi(data, j, i);
            tm(1,j)=r;
            tm(2:length(c)+1,j)=c.';
        end
        disp("f"+(i-1))
        disp(tm(1,:))
        disp(tm(2:i,:))
    end
    
    [result, celue] = touzi(data, size(data,2),size(data,1));
    return
end
% disp([mmax n])
if n==1
    result=0;
    celue=[];
    return
end
if mmax==0
    result=0;
    celue=zeros(1,n-1);
    return
end
result=0;
celue=0;
for i=0:mmax % 总价
    [r,c]=touzi(data, i, n-1);
    f=data(n,:);
    if mmax-i==0
        if r>result
            result=r;
            celue=[c 0];
        end
    else
        if r+f(mmax-i)>result
            result=r+f(mmax-i);
            celue=[c mmax-i];
        end
    end
end

运行示例

Responses