动态规划matlab仿真实例

上传人:新** 文档编号:512804722 上传时间:2023-01-22 格式:DOC 页数:5 大小:30.98KB
返回 下载 相关 举报
动态规划matlab仿真实例_第1页
第1页 / 共5页
动态规划matlab仿真实例_第2页
第2页 / 共5页
动态规划matlab仿真实例_第3页
第3页 / 共5页
动态规划matlab仿真实例_第4页
第4页 / 共5页
动态规划matlab仿真实例_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《动态规划matlab仿真实例》由会员分享,可在线阅读,更多相关《动态规划matlab仿真实例(5页珍藏版)》请在金锄头文库上搜索。

1、动态规划在火力分配中的应用。1. 问题描述设有m个目标,目标价值(重要性和危害性)各不相同,用数值AK(K=1,2,.m)表示,计划用n枚导弹突袭,导弹击毁目标的概率PK=1-e-ak uk,其中ak是常数,取决于导弹的特性与目标的性质;uk为向目标发射的导弹数,问题:做出方案使预期的突击效果最大。2. 问题建模上述问题可以表述为 maxV=k=1mAk(1-e-ak uk)约束条件为 k=1muk=n (uk 为非负整数)3. 算法描述下面通过一个实例说明:设目标数目为4(m=4),导弹为5(n=5),Ak和aK取值情况如下表所示: 表1:Ak ,uk取值情况目标K1234Ak8763uk0

2、.20.30.50.9将火力分配可分为4个阶段,每个阶段指标函数为:V1u1=8(1-e-0.2u1) V2u2=7(1-e-0.3u2) V3u3=6(1-e-0.5u3) V4u4=3(1-e-0.9u4)uk 可能取值为0,1,2,3,4,5,将函数值带人如下表:表2 函数值uV1u1V2u2V3u3V4u40000011.451.812.361.7922.643.163.792.5133.614.154.662.8144.414.895.192.9355.065.445.512.97动态规划问题基本方程为:fkxk=maxVkuk+fk+1xk-uk cf5x5=0逐次向前推一级K=4

3、 f4x4=V4u4=3(1-e-0.9u4) K=3 f3x3=maxV3u3+f4x3-u3=max6(1-e-0.5u3)+ f4x3-u3K=2 f2x2=maxV2u2+f3x2-u2= max7(1-e-0.3u2)+ f3x2-u2K=1 f1x1= maxV1u1+f2x1-u1= max8(1-e-0.2u1)+ f2x1-u1 (0uk5可取等号)只需要求解f15的最大值然后反推回去就可以获得最优的分配方案4. Matlab仿真求解因为xk 与uk取值为整数,可以采用动态规划的方法,获得f15的最大值,对应的最优方案functionp_opt,fval=dynprog(x,

4、DecisFun,SubObjFun,TransFun,ObjFun) %求解动态规划问题最小值函数k=length(x(1,:) %判断决策级数x_isnan=isnan(x); % 非空状态矩阵t_vubm=inf*ones(size(x); % 性能指标中间矩阵f_opt=nan*ones(size(x); % 总性能指标矩阵d_opt=f_opt; %每步决策矩阵tmp1=find(x_isnan(:,k); % 最后一步状态向量tmp2=length(tmp1); % 最后一步状态个数for i=1:tmp2 u=feval(DecisFun,k,x(tmp1(i),k); tmp3

5、=length(u);%决策变量 for j=1:tmp3 % 求出当前状态下所有决策的最小性能指标 tmp=feval(SubObjFun,k,x(tmp1(i),k),u(j); if tmp = t_vubm(i,k) %t_vub f_opt(i,k)=tmp; d_opt(i,k)=u(j); t_vubm(i,k)=tmp; end; end;end for ii=k-1:-1:1 tmp10=find(x_isnan(:,ii); tmp20=length(tmp10); for i=1:tmp20 %求出当前状态下所有可能的决策 u=feval(DecisFun,ii,x(tm

6、p10(i),ii); tmp30=length(u) ; for j=1:tmp30 % 求出当前状态下所有决策的最小性能指标 tmp00=feval(SubObjFun,ii,x(tmp10(i),ii),u(j); % 单步性能指标 tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j); % 下一状态 tmp50=x(:,ii+1)-tmp40; % 找出下一状态在 x 矩阵的位置 tmp60=find(tmp50=0) ; ifisempty(tmp60) if nargin6 %矩阵不同需要修改nargin的值,很重要 tmp00=tmp00+f_o

7、pt(tmp60(1),ii+1); % set the default object value else tmp00=feval(ObjFun,tmp00,f_opt(tmp60(1),ii+1); end %当前状态的性能指标 if tmp00=t_vubm(i,ii) f_opt(i,ii)=tmp00; d_opt(i,ii)=u(j); t_vubm(i,ii)=tmp00; end; end; end; end;endfval=f_opt(:,1);tmp0 = find(isnan(fval);fval=fval(tmp0,1);p_opt=;tmpx=;tmpd=;tmpf=

8、; tmp01=length(tmp0); for i=1:tmp01 tmpd(i)=d_opt(tmp0(i),1); tmpx(i)=x(tmp0(i),1); tmpf(i)=feval(SubObjFun,1,tmpx(i),tmpd(i); p_opt(k*(i-1)+1,1,2,3,4)=1,tmpx(i),tmpd(i),tmpf(i); for ii=2:k tmpx(i)=feval(TransFun,ii,tmpx(i),tmpd(i); tmp1=x(:,ii)-tmpx(i);tmp2=find(tmp1=0); if isempty(tmp2) tmpd(i)=d_

9、opt(tmp2(1),ii); end tmpf(i)=feval(SubObjFun,ii,tmpx(i),tmpd(i); p_opt(k*(i-1)+ii,1,2,3,4)=ii,tmpx(i),tmpd(i),tmpf(i); end;end; 下面编写四个函数:function u = DecisF1( k,x ) %决策函数if k=4 u=x;else u=0:x;endfunction y = TransF1( k,x,u ) %状态转移方程y=x-u;function v = SubObjF1( k,x,u ) %阶段k的指标函数a=0.2,0.3,0.5,0.9;A=8,

10、7,6,3;v=A(k)*(1-exp(-a(k)*u);v=-v; %max变为minfunction y = ObjF1( v,f ) %基本方程中的函数y=v+f;y=-y; %max变为min测试代码:clear;n=5;x1=n;nan*ones(n,1);x2=0:n;x2=x2;x=x1,x2,x2,x2;p,f=dynprog(x,DecisF1,SubObjF1,TransF1,ObjF1)%p为分配方案,f为结果5. Matlab仿真结果分析运行结果显示:P为方案:即对目标1发射1枚导弹,对目标2发射1枚,对目标3发射2枚,对目标4发生1枚导弹,能获得最大效能。f为最大的效能:即在这种分配下的最大效能为8.8374

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号