?? minforedynprog.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 + -