动态规划在火力分配中得应用。1. 问题描述设 有 m 个 目 标 , 目 标 价 值 ( 重 要 性 与 危 害 性 ) 各 不 相 同 , 用 数 值 AK(K =1,2,、、m)表示,计划用n枚导弹突袭,导弹击毁目标得概率 PK=,其中就是常数,取决于导弹得特性与目标得性质;为向目标发射得导弹数,问题:做出方案使预期得突击效果最大.2. 问题建模上述问题可以表述为 约束条件为 (为非负整数)3. 算法描述下面通过一个实例说明:设目标数目为4(m=4),导弹为 5(n=5),与 aK取值情况如下表所示: 表1:A k 取值情况目标 K123487630、20、30、50、9将火力分配可分为 4 个阶段,每个阶段指标函数为: 可能取值为0,1,2,3,4,5,将函数值带人如下表:表 2 函数值u0000011、4 51、812、3 61、7 922、6 43、1 63、7 92、5 133、6 14、154、6 62、8 144、4 14、895、1 92、9355、065、445、512、97动态规划问题基本方程为: c=0逐次向前推一级K=4 K=3 K=2 K=1 ()只需要求解得最大值然后反推回去就可以获得最优得分配方案4. M a tlab 仿真求解因为 与取值为整数,可以采纳动态规划得方法,获得得最大值,对应得最优方案function[p_opt,fval]=dynprog(x,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=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) ; ...