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

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

动态规划在火力分配中地应用
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。

相关文档
最新文档