文档视界 最新最全的文档下载
当前位置:文档视界 › 动态规划matlab仿真实例(整理)

动态规划matlab仿真实例(整理)

动态规划matlab仿真实例(整理)
动态规划matlab仿真实例(整理)

动态规划在火力分配中地应用

1.问题描述

设有m个目标,目标价值(重要性和危害性)各不相同,用数值A< ( K=1, 2, ..m )表示,计划用n枚导弹突袭,导弹击毁目标地概率P K=1,其

中儿是常数,取决于导弹地特性与目标地性质;i为向目标发射地导弹数,问题:做出方案使预期地突击效果最大.

2.问题建模

上述冋题可以表述为

max卩=£化弹认1 - e耳叫)

约束条件为

睨“叫二薜严为非负整数)

3.算法描述

下面通过一个实例说明:设目标数目为4 (m=4),导弹为5 (n=5),'和a K

取值情况如下表所示:

表1: A k''取值情况

将火力分配可分为4个阶段,每个阶段指标函数为:

^1) = 8(1 -叫%(叫}= 7(1 -严? 叭) = 6(1 -""叫3(1 -严爲

二可能取值为0, 1, 2, 3, 4, 5,将函数值带人如下表:

表2函数值

动态规划问题基本方程为: :1

■- '■ ■■-' . '■ - :

i c

■「=0

逐次向前推一级 K=3 =max +

{E 3(U 3) + <4

(x 3

- ii 3

)} = max (6(1 -

e °”叫〕

打(工3 -旳)}

K=2 K=1 『2

(勺)

fi %)

=max {/2(u 2) + f 3(x 2-u 2)) = max {7(1 - e °叫)

+ 応区-沟)}

=mux {A 】(叫)+ 爲(尤]一强J} = max {8(1 - e °3 1 +

- u i)J

只需要求解':':,

地最大值然后反推回去就可以获得最优地分配方案

4. Matlab 仿真求解

因为' 与'取值为整数,可以采用动态规划地方法,获得':':,地最大值,对应

地最优方案

function[p_opt,fval]=dynprog(x,DecisFun,SubObjFun,TransFun,ObjFun) % 求解动态规划问题最小值函数 判断决策级数 非空状态矩阵

。 % 性能指标中间矩阵 。 % 总性能指标矩阵

每步决策矩阵

。 % 最后一步状态向量

% 最后一步状态个数

u=feval(DecisFun,k,x(tmp1(i),k))

tmp3=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(tmp10(i),ii)) 。 tmp30=length(u) 。 for j=1:tmp30 %

求出当前状态下所有决策地最小性能指标

tmp00=feval(SubObjFun,ii,x(tmp10(i),ii),u(j)) 。 % 单步性能 指标 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 。

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

tmp40=feval(TransFun,ii,x(tmp10(i),ii),u

(j))

tmp50=x(:,ii+1)-tmp40 tmp60=find(tmp50==0) if~isempty(tmp60) if nargin<6 %

tmp00=tmp00+f_opt(tmp60(1),ii+1)

。 % 下一状态

% 找出下一状态在 x 矩阵地位置

矩阵不同需要修改 nargin 地值,很重要

% set the default object value

end end end

end end fval=f_opt(:,1) 。 tmp0 = find(~isnan(fval)) 。 fval=fval(tmp0,1)

。 P_opt=[] 。tmpx=[] 。tmpd=[] 。tmpf=[] 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_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 。

end

function y = TransF1( k,x,u )% y=x-u 。

function v = SubObjF1( k,x,u )% a=[0.2,0.3,0.5,0.9] 。 A=[8,7,6,3] 。 v=A(k)*(1-exp(-a(k)*u)) v=-v 。 %max

变为 min function 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 为结果

决策函数 状态转

移方程

阶段k 地指标函数

5. Matlab 仿真结果分析

运行结果显示:

P 为方案:

即对目标1 发射1 枚导弹,对目标2 发射1 枚,对目标3 发射2 枚,对目标4 发生1 枚导弹,能获得最大效能.

f 为最大地效能:

即在这种分配下地最大效能为8.8374

相关文档