基于MonteCarlo法的经典射击问题中的杀伤概率估计问题

该文探讨了一种火炮射击的概率建模方法,涉及二维正态分布的射击误差、系统误差和目标击毁概率。通过Monte Carlo模拟进行仿真,计算火力单位对目标的命中率和杀伤概率。仿真步骤包括产生随机误差、计算导弹轨迹、判断是否击中目标及统计命中次数,最终得出火力单位的杀伤效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 问题的建模

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8XV0G1q3-1608805460033)(D:\文件\2020 09 19\美赛软件\打击.png)]

​ 若假设一个火力单位有 m m m件同种类型的武器,同步发射,一次发射时每件武器各发射出 n n n发射弹。在这样的条件下,击毁一个目标 V V V的概率,一般称为杀伤概率。若我们假设每发射弹弹着点的射击误差均位二维随机向量。假设第 i i i件武器第 j j j发射弹弹着点的射击误差向量是:
X i j = Y i j + Z + A i + A X_{ij} = Y_{ij}+Z+A_i+A Xij=Yij+Z+Ai+A
​ 其中, X i j X_{ij} Xij取值 x = ( x 1 , x 2 ) x = (x_1,x_2) x=(x1,x2);对不同件的武器,不同的发射弹是非重复误差 Y i j Y_{ij} Yij的取值 y = ( y 1 , y 2 ) y = (y_1,y_2) y=(y1,y2),且服从如下概率密度的二维正态分布:
ϕ 1 ( y 1 , y 2 ) = 1 2 π ∣ B ∣ 1 2 e − 1 2 ( y 1 , y 2 ) B − 1 ( y 1 , y 2 ) T \phi_1(y_1,y_2) = \frac{1}{2\pi|B|^{\frac{1}{2}}}e^{-\frac{1}{2}(y_1,y_2)B^{-1}(y_1,y_2)^T} ϕ1(y1,y2)=2πB211e21(y1,y2)B1(y1,y2)T
​ 其中 B B B为二阶协方差矩阵。其中对于不同的武器,误差 Z Z Z重复误差取值为 z = ( z 1 , z 2 ) z = (z_1,z_2) z=(z1,z2),服从如下概率密度的二维正态分布:
ϕ 2 ( z 1 , z 2 ) = 1 2 π ∣ C ∣ 1 2 e − 1 2 ( z 1 , z 2 ) B − 1 ( z 1 , z 2 ) T \phi_2(z_1,z_2) = \frac{1}{2\pi|C|^{\frac{1}{2}}}e^{-\frac{1}{2}(z_1,z_2)B^{-1}(z_1,z_2)^T} ϕ2(z1,z2)=2πC211e21(z1,z2)B1(z1,z2)T
​ 其中 C C C为二阶协方差矩阵。且 A i A_i Ai i i i件武器的系统误差,取值为 a i = ( a i 1 , a i 2 ) a_i = (a_{i1},a_{i2}) ai=(ai1,ai2) A A A火力单位的系统误差,取常数值 a = ( a 1 , a 2 ) a = (a_1,a_2) a=(a1,a2)。比如说我们假设一发命中弹的杀伤概率为:
g = 1 ω 0 g = \frac{1}{\omega_0} g=ω01
ω 0 : \omega_0: ω0:击毁目标所需要的平均命中弹数目。如果我们设计的目标 V V V是边长为 2 l 2l 2l的正方形。因此具有 m m m

武器组成的火力单位,一次发射 n n n发射弹,对目标 V V V的杀伤概率:
R = ∫ − ∞ ∞ ∫ − ∞ ∞ Q ( z 1 , z 2 ) ϕ 3 ( z 1 , z 2 ) d z 1 d z 2 R = \int_{-\infty}^{\infty}\int_{-\infty}^{\infty}Q(z_1,z_2)\phi_3(z_1,z_2)dz_1dz_2 R=Q(z1,z2)ϕ3(z1,z2)dz1dz2
​ 其中: Q ( z 1 , z 2 ) Q(z_1,z_2) Q(z1,z2)表示一次射击中 m m m件武器 n n n发导弹至少一发导弹击中 V ( z 1 , z 2 ) V(z_1,z_2) V(z1,z2)的概率:
Q ( z 1 , z 2 ) = 1 − ∏ i = 1 m [ 1 − P i ( z 1 , z 2 ) ] n Q(z_1,z_2) = 1 - \prod_{i = 1}^m[1-P_i(z_1,z_2)]^n Q(z1,z2)=1i=1m[1Pi(z1,z2)]n
P i ( z 1 , z 2 ) P_i(z_1,z_2) Pi(z1,z2)表示第 i i i种武器击中 V ( z 1 , z 2 ) V(z_1,z_2) V(z1,z2)的概率:
P i ( z 1 , z 2 ) = ∬ D g ϕ 1 ( x 1 − z 1 − a i 1 − a 1 , x 2 − z 2 − a i 2 − a 2 ) d σ P_i(z_1,z_2) = \iint_{D}g\phi_1(x_1-z_1-a_{i1}-a_1,x_2-z_2-a_{i2}-a_2)d\sigma Pi(z1,z2)=Dgϕ1(x1z1ai1a1,x2z2ai2a2)dσ
​ 其中 D D D为边长为 2 l 2l 2l的正方形区域。其中 ϕ 3 ( z 1 , z 2 ) \phi_3(z_1,z_2) ϕ3(z1,z2)表示击种目标 V ( z 1 , z 2 ) V(z_1,z_2) V(z1,z2)的总的误差概率密度函数,是 X i j X_{ij} Xij的概率密度函数。

求解以上模型理论上是计算其二重积分比较方便,详细的计算过程就不赘述,有想了解具体的计算过程的同学请参考我之前写的博客《通俗易懂的MonteCarlo积分方法(六)》

  • 问题的仿真步骤

    在这里我们不用以前那种比较复杂的积分计算方法。我们将直接采用投点法对这整个射击过程进行模拟。先产生服从给定分布的随机变量,再用随机投点法求积

    *STEP1:*产生二维正态分布随机向量 y i j ∼ ϕ 1 ( y 1 , y 2 ) , z i ∼ ϕ 2 ( z 1 , z 2 ) y_{ij}\sim \phi_1(y_1,y_2),z_i \sim\phi_2(z_1,z_2) yijϕ1(y1,y2),ziϕ2(z1,z2)

    *STEP2:*计算代表一发导弹对的射击误差的随机向量的 x i j = ( x i j 1 , x i j 2 ) x_{ij} = (x_{ij1},x_{ij2}) xij=(xij1,xij2),其中:
    x i j 1 = y i j 1 + z 1 + a i 1 + a 1 x i j 2 = y i j 2 + z 2 + a i 2 + a 2 x_{ij1} = y_{ij1} + z_1+a_{i1} + a_1\\ x_{ij2} = y_{ij2} + z_2 + a_{i2} + a_2 xij1=yij1+z1+ai1+a1xij2=yij2+z2+ai2+a2
    *STEP3:*计算 F i j = [ X ∗ − x i j ; X ∗ + x i j ] F_{ij} = [X^*-x_{ij};X^*+x_{ij}] Fij=[Xxij;X+xij]为实际打击区域。

    *STEP4:*判断 F i j ∈ V ? F_{ij} \in V ? FijV?( V V V为被打击对象所在区域)如果 F i j ∈ V , S i j = 1 , F_{ij}\in V,S_{ij} = 1, FijV,Sij=1,否则 S i j = 0 S_{ij} = 0 Sij=0

    *STEP5:*计算一个火力单位一次射击命中的总次数 S : S: S:
    S = ∑ i = 1 m ∑ j = 1 n S i j S = \sum_{i = 1}^m\sum_{j =1}^nS_{ij} S=i=1mj=1nSij
    ​ 那么这个火力单位的命中率 H : H: H:
    H = S m n H = \frac{S}{mn} H=mnS
    ​ 那么现在开始计算杀伤概率,只要这么多次尝试有一次击中 V V V,便可以彻底摧毁 V V V,那么总的 杀伤概率为:
    k = 1 − ∏ i = 1 m [ 1 − P i ( V ) ] k = 1 - \prod_{i = 1}^m[1-P_i(V)] k=1i=1m[1Pi(V)]
    ​ 其中 P i ( V ) P_i(V) Pi(V)为武器 i i i能击中 V V V的概率,在这里我们做 M M M次仿真模拟,求得:
    P i ( V ) = 1 M n ∑ k = 1 M ∑ j = 1 n S i j k P_i(V) = \frac{1}{Mn}\sum_{k = 1}^M\sum_{j = 1}^nS_{ijk} Pi(V)=Mn1k=1Mj=1nSijk
    *STEP6:*重复实验 N N N次,得到 k i ( i = 1 , 2 , 3... ) k_i(i =1,2,3...) ki(i=1,2,3...) 其杀伤概率的均值为 R : R: R:
    R = 1 N ∑ i = 1 N k i R = \frac{1}{N}\sum_{i = 1}^Nk_i R=N1i=1Nki

  • 求解代码:

    我们不妨设有 m = 4 m = 4 m=4, n = 10 n = 10 n=10,被打击的点为原点坐标为 ( 0 , 0 ) (0,0) (0,0),二维随机变量 Y i j Y_{ij} Yij的均值为 ( 0 , 0 ) (0,0) (0,0)(炮口永远是对准目标的)。 m × n m\times n m×n个单位的方差矩阵 Y σ 1 , Y σ 2 Y_{\sigma_1},Y_{\sigma_2} Yσ1,Yσ2分别用随机数产生:

    >> clear
    >> Ysi1 = rand(4,10);
    >> Ysi2 = rand(4,10);
    

    Y σ 1 Y_{\sigma_1} Yσ1具体的值为:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-poIYKHxG-1608805460037)(D:\文件\2020 09 19\美赛软件\sig1.png)]

    Y σ 2 Y_{\sigma_2} Yσ2具体的值为:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TXikOTHr-1608805460041)(D:\文件\2020 09 19\美赛软件\sig2.png)]

    >>  Zsi1 = rand(4,1);
    >> Zsi2 = rand(4,1);
    

    Z σ 1 Z_{\sigma_1} Zσ1的值为:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vg8lG62b-1608805460043)(D:\文件\2020 09 19\美赛软件\zsi1.png)]

    Z σ 2 Z_{\sigma_2} Zσ2的值为:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V3ubKGIV-1608805460045)(D:\文件\2020 09 19\美赛软件\zsi2.png)]

协方差矩阵 O O O为:
O = ( σ 1 2 ρ σ 1 σ 2 ρ σ 1 σ 2 σ 2 2 ) O = \begin{pmatrix}\sigma_1^2 &\rho\sigma_1\sigma_2\\ \rho\sigma_1\sigma_2&\sigma^2_2\end{pmatrix} O=(σ12ρσ1σ2ρσ1σ2σ22)
我们设 ρ = 0.8 \rho = 0.8 ρ=0.8

我们分别设置 a 1 , a 2 = 0 a_1,a_2 = 0 a1,a2=0,即假设火力系统摆放位置等因素考虑确定,不存在系统误差。

我们设置 a i 1 , a i 2 a_{i1},a_{i2} ai1,ai2分别由在 [ − 0.1 , 0.1 ] [-0.1,0.1] [0.1,0.1]上均匀分布随机数产生:

>> a_i1 = unifrnd(-0.1,0.1,[4 1]);
>> a_i2 = unifrnd(-0.1,0.1,[4 1]);

a i 1 a_{i1} ai1的值为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PkBPLmi9-1608805460046)(D:\文件\2020 09 19\美赛软件\a1.png)]

a i 2 a_{i2} ai2的值为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nPGeQFLA-1608805460048)(D:\文件\2020 09 19\美赛软件\a2.png)]

被打击目标的 l = 0.5 m l = 0.5m l=0.5m,即要打击一个 1 m 2 1m^2 1m2的正方体 V V V

以下附上仿真代码:

function Attack
intialValue;%赋初值
m = 4;
n = 10;
l = 0.5;%一边长0.5m
rho = 0.8;
X_mean = 0;
Y_mean = 0;%被打击物体的坐标为(0,0);
N = 100;%仿真100次
M = 100;%子仿真100次
a1 = 0;
a2 = 0;
S = zeros(m,n,M);
P = zeros(1,m);
k = zeros(1,N);
Propablity = zeros(1,N);
for i = 1:N
    %模拟打击过程
   for j = 1:m
       z = mvnrnd([X_mean,Y_mean],XFC(rho,Zsi1(j),Zsi2(j)));
       for times = 1:M
         for k = 1:n
           y = mvnrnd([X_mean,Y_mean],XFC(rho,Ysi1(j,k),Ysi2(j,k)));
           x(1) = y(1)+z(1)+a_i1(j)+a1;
           x(2) = y(2)+z(2)+a_i2(j)+a2;
           F(1) = X_mean + x(1);%实际打击的一个坐标
           F(2) = Y_mean + x(2);%实际打击的另一个坐标
           if (-l<=F(1)<= l)&&(-l<=F(2)<= l)
               S(j,k,times) = 1;
           else
               S(j,k,times) = 0;
           end
         end
       end
   end
   %计算杀伤率
   Pro = 1;
   for j = 1:m
      PV = 0;
      for k = 1:n
          for times = 1:M
               PV = PV + S(j,k,times);
          end
      end
      P(j) =  PV/(M*n);
      Pro = Pro * (1-P(j));
   end
   k(i) = 1 - Pro;
   Propablity(i) = sum(k(1:i))/i;
end
   plot(1:N,Propablity,'g'); 
   title('仿真迭代曲线');
   xlabel('仿真次数');
   ylabel('杀伤率');
   disp(['杀伤率是:',num2str(Propablity(N))]);
end


function OS = XFC(rho,sigma1,sigma2)
OS = [sigma1^2,rho*sigma1*sigma2;rho*sigma1*sigma2,sigma2^2];
end

function intialValue 
    Ysi1 = rand(4,10);
    Ysi2 = rand(4,10);
    Zsi1 = rand(4,1);
    Zsi2 = rand(4,1);
    a_i1 = unifrnd(-0.1,0.1,[4 1]);
    a_i2 = unifrnd(-0.1,0.1,[4 1]);
end

然后就:

[外链图片转存中...(img-w52t6Xhf-1608805460049)]

???合着我这半天白搞了???

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值