⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 minforedynprog.m

📁 该程序实现了一个标准的动态规划算法
💻 M
字号:
function [OptPol,OptObjval]=MinForeDynprog(x,DecisFun,StageObjFun,StateTransFun,ObjFun)
step=length(x(1,:));x_isnan =~isnan(x);compar_valm =inf.*ones(size(x)) ;
f_opt=nan.*ones(size(x));d_opt =f_opt; k =1;tmpl=find(x_isnan(:,k));
tmp2=length(tmp1);
for i=1:tmp2
 u=nan;tmp3=feval(StageObjFun,k,x(tmp1(i),k),u);
f_opt(i,k)=tmp3;d_opt(i,k)=u;
end
for k =2:1:step
 tmp4 = find(x_isnan(:,k));tmp5=length(tmp4);
 for i =1:tmp5
  u=feval(DecisFun,k ,x(i,k));tmp6 = length(u);
  for j =1:tmp6
   tmp7=feval(StateTransFun ,k,x(tmp4(i),k),u(j));
   tmp8=x(:,k-1)-tmp7 ;tmp9=find(tmp8==0);
   if~isempty(tmp9)
    tmp10=feval(StageObjFun,k,tmp7,u(j)) ;
    tmp10 =feval(ObjFun,tmp10,f_opt(tmp9(1),k-1)) ;
    if tmp10<=compar_valm(i,k)
     f_opt(i,k)=tmp10;d_opt(i,k)=u(j);compar_valm(i,k)=tmp10;
end  end  end  end  end
f = f_opt(:,step);f=f(find(~isnan(f)),1);
OptObjval =min(f(:));
OptPol=[ ];tmpx =[ ];tmpd =[ ];tmpf=[ ];
tmp11= find(f_opt(:,step)==OptObjval);tmp12=length(tmp11);
for i=1:tmp12
 tmpd(i)=d_opt(tmp11(i),step);tmpx(i)=x(tmp11(i),step);
 tmp13=feval(StateTransFun,step,tmpx(i),tmpd(i));
 tmpf(i)=feval(StageObjFun,step,tmp13,tmpd(i));
 OptPol(step .*(i-1)+step,[1,2,3,4]=[step,tmpx(i),nan,nan] ;
 OptPol(step.*(i-1)+step-1,[1,2,3,4]=[step-1,tmp13,tmpd(i),tmpf(i)] ;
 for k=step-1:-1:2
  tmpx(i)=tmp13;tmp14=x(:,k)-tmpx(i);tmp15=find(tmp14==0);
  if ~isempty(tmp15)
   tmpd(i)=d_opt(tmp15(1),k);
  end
  tmp13=feval(StateTransFun,tmpx(i),tmpd(i));
  tmpf(i)=feval(StageObjFun,k,tmp13,tmpd(i)) ;
  OptPol(step.*(i-1)+ k-1,[1,2,3,4]=[k-1,tmp13,tmpd(i),tmpf(i)];
end  end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -