You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成相关二项分布变量:n=4、p=0.5的导弹命中模拟需求

生成带指定相关性的离散命中数变量(n=4, p=0.5)

针对你提出的4枚存在相关性的导弹命中数生成需求,这里提供一套基于多元正态Copula的实现方案,完美适配corr∈[0,1]的场景,具体步骤和代码如下:

核心思路

每枚导弹的命中状态是伯努利变量(0=未命中,1=命中),我们需要先生成一组带指定相关性的伯努利变量,再求和得到0-4之间的离散结果。由于直接构造多元伯努利联合分布较复杂,正态Copula是最实用的方法——它通过先生成相关的正态变量,再转换为符合边际分布的离散变量。

步骤拆解

1. 构建相关性对应的协方差结构

每枚导弹的边际分布是Bernoulli(p=0.5),其方差为p*(1-p)=0.25。对于任意两枚导弹,它们的协方差为:
cov = corr * sqrt(var1 * var2) = corr * 0.25
对应到多元正态分布的相关系数矩阵,对角线元素为1(变量自身完全相关),非对角线元素为指定的corr。

2. 生成相关伯努利变量并求和

具体流程:

  • 生成服从多元正态分布的4维变量,其相关系数矩阵与我们需要的导弹相关性一致
  • 将正态变量转换为[0,1]区间的均匀分布变量(通过正态分布的累积分布函数)
  • 用伯努利分布的阈值p=0.5将均匀变量映射为命中/未命中状态
  • 对4个状态变量求和,得到最终的命中数

Python代码实现

用scipy和numpy即可快速实现:

import numpy as np
from scipy.stats import multivariate_normal, norm

def generate_correlated_hit_count(n=4, p=0.5, corr=0.5):
    # 构建多元正态分布的相关系数矩阵
    corr_matrix = np.full((n, n), corr)
    np.fill_diagonal(corr_matrix, 1.0)  # 对角线为1(自身相关)
    
    # 生成多元正态随机变量
    normal_vars = multivariate_normal.rvs(mean=np.zeros(n), cov=corr_matrix)
    
    # 转换为均匀分布变量
    uniform_vars = norm.cdf(normal_vars)
    
    # 转换为伯努利变量:<=p则命中(1),否则未命中(0)
    hit_flags = (uniform_vars <= p).astype(int)
    
    # 返回总命中数
    return hit_flags.sum()

# 测试示例:生成5个corr=0.8的样本
for _ in range(5):
    print(f"命中数:{generate_correlated_hit_count(corr=0.8)}")

特殊场景验证

  • 当corr=0时:生成的伯努利变量完全独立,求和结果服从标准二项分布Binomial(4, 0.5),和预期一致
  • 当corr=1时:所有正态变量完全相同,最终所有导弹要么全命中(返回4)要么全未命中(返回0),符合题目描述的极端相关情况

内容的提问来源于stack exchange,提问作者Gökhan Kesler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:28:09