• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: Matlab
  • 标签: matlab  动态规划  

资源简介

用matlab实现动态规划的源代码,函数文件形式,参数说明见注释

资源截图

代码片段和文件信息

function [p_optfval]=dynprog(xDecisFunObjFunTransFun)
% [p_optfval]=dynprog(xDecisFunObjFunTransFun)
% 自由始端和终端的动态规划求指标函数最小值的逆序算法递归计算程序。
% x是状态变量,一列代表一个阶段状态;
% M-函数DecisFun(kx)由阶段k的状态变量x求出相应的允许决策变量;
% M-函数ObjFun(kxu)是阶段指标函数,
% M-函数TransFun(kxu)是状态转移函数其中x是阶段k的某状态变量,u是相应的决策变量;
% 输出p_opt由4列构成,p_opt=[序号组;最优策略组;最优轨线组;指标函数值组];
% 输出fval是一个列向量,各元素分别表示p_opt各最优策略组对应始端状态x的最优函数值;
%
%例(参看胡良剑等编《数学实验--使用MATLAB》P180
%先写3个函数
%                 eg13f1_2.m
%    function u=DecisF_1(kx)
%    在阶段k由状态变量x的值求出其相应的决策变量所有的取值
%    c=[70728076];q=10*[67126];
%    if q(k)-x<0u=0:100;       %决策变量不能取为负值
%    elseu=q(k)-x:100;end;     %产量满足需求且不超过100
%    u=u(:);
%                 eg13f2_2.m
%    function v=ObjF_1(kxu)
%    阶段k的指标函数
%    c=[70728076];v=c(k)*u+2*x;
%                 eg13f3_2.m
%    function y=TransF_1(kxu)
%     状态转移方程
%     q=10*[67126];y=x+u-q(k);
%调用DynProg.m计算如下:
%    clear;x=nan*ones(144);% x是10的倍数,最大范围0≤x≤130
%       %因此x=01...13,所以x初始化取14行,nan表示无意义元素
%    x(1:71)=10*(0:6)‘;     % 按月定义x的可能取值
%    x(1:112)=10*(0:10)‘;x(1:123)=10*(2:13)‘;
%    x(1:74)=10*(0:6)‘;
%    [pf]=dynprog(x‘eg13f1_2‘‘eg13f2_2‘‘eg13f3_2‘)

% By X.D. Ding June 2000

k=length(x(1:));f_opt=nan*ones(size(x));d_opt=f_opt;
t_vubm=inf*ones(size(x));x_isnan=~isnan(x);t_vub=inf;
% 计算终端相关值
tmp1=find(x_isnan(:k));tmp2=length(tmp1);
for i=1:tmp2
    u=feval(DecisFunkx(ik));tmp3=length(u);
    for j=1:

评论

共有 条评论