如何计算两个均匀分布中A随机值大于B随机值的概率?
均匀分布下A.random() > B.random()的精确概率计算
给定两个连续均匀分布:
- 分布A:区间(ψ, Ψ)
- 分布B:区间(φ, Φ)
需要精确计算A.random() > B.random()的概率,已梳理出四种区间重叠情况及代码框架,但不确定重叠区间内的概率计算方式,要求不使用模拟方法,仅通过数学推导得到精确解。
区间重叠情况示意图
# A>B? # # ------------------------------------------------------------ # # φ Φ ψ+++++++++Ψ ==> ψ >= Φ : 必然成立(100%) # ψ---------Ψ φ Φ ==> φ >= Ψ : 必然不成立(0%) # ψ-------φ????Ψ Φ ==> Φ >= Ψ >= φ : 可能成立 # φ ψ????Φ+++++++++++Ψ ==> Ψ >= Φ >= ψ : 可能成立
原代码框架
if ψ >= Φ: # ALWAYS a max (ψ >= Φ) return 1 elif φ >= Ψ: # NEVER a max (φ >= Ψ) return 0 elif Φ >= Ψ and Ψ >= φ: # SOMETIMES a max (Φ >= Ψ >= φ) range_A = Ψ - ψ range_B = Φ - φ overlap = Ψ - φ # [???? region] overlap_chance = <<<X>>> return overlap_chance elif Ψ >= Φ and Φ >= ψ: # SOMETIMES a max (Ψ >= Φ >= ψ) range_A = Ψ - ψ range_B = Φ - φ overlap = Φ - ψ # [???? region] overlap_chance = <<<X>>> all_good = Ψ - Φ # [++++ region] all_good_chance = all_good / range_chosen return overlap_chance + all_good_chance
重叠区间概率的数学推导
对于两个独立的均匀分布,我们可以通过面积法计算概率:把A的取值x和B的取值y看作平面直角坐标系中的点(x,y),所有可能的点构成一个矩形区域,面积为range_A * range_B。而满足x > y的区域面积占总矩形面积的比例就是所求概率。
情况1:Φ >= Ψ >= φ
此时总区域是x∈(ψ,Ψ),y∈(φ,Φ)。满足x>y的区域分为两部分:
- 当y∈(φ, ψ)时,x∈(ψ,Ψ)必然大于y,这部分面积为
(ψ - φ) * range_A - 当y∈(ψ, Ψ)时,x>y的区域是直角三角形,面积为
0.5 * range_A²
总满足条件的概率为:
[(ψ - φ) * range_A + 0.5 * range_A²] / (range_A * range_B) = [(ψ - φ) + 0.5 * range_A] / range_B
情况2:Ψ >= Φ >= ψ
此时总区域是x∈(ψ,Ψ),y∈(φ,Φ)。满足x>y的区域分为两部分:
- all_good区域:x∈(Φ,Ψ)时,x必然大于y(y<Φ<x),这部分概率为
(Ψ - Φ) / range_A - 重叠区间(ψ,Φ):
- 当y∈(φ,ψ)时,x∈(ψ,Φ)必然大于y,对应面积
(ψ - φ)*(Φ - ψ) - 当y∈(ψ,Φ)时,x>y的直角三角形面积为
0.5*(Φ - ψ)²
这部分概率为:
[(ψ - φ)*(Φ - ψ) + 0.5*(Φ - ψ)²] / (range_A * range_B) = [(ψ - φ) + 0.5*(Φ - ψ)] / range_A - 当y∈(φ,ψ)时,x∈(ψ,Φ)必然大于y,对应面积
修正后的完整代码
def prob_a_greater_than_b(psi, Psi, phi, Phi): range_A = Psi - psi range_B = Phi - phi if psi >= Phi: # A的最小值大于B的最大值,必然成立 return 1.0 elif phi >= Psi: # B的最小值大于A的最大值,必然不成立 return 0.0 elif Phi >= Psi and Psi >= phi: # 情况:Φ >= Ψ >= φ part1 = (psi - phi) / range_B part2 = 0.5 * range_A / range_B return part1 + part2 elif Psi >= Phi and Phi >= psi: # 情况:Ψ >= Φ >= ψ all_good_chance = (Psi - Phi) / range_A part1 = (psi - phi) / range_A part2 = 0.5 * (Phi - psi) / range_A overlap_chance = part1 + part2 return all_good_chance + overlap_chance
关于你的猜测说明
你之前猜测重叠区间内概率为(overlap / range_A) * (overlap / range_B) * 0.5,这个结论并不准确。因为重叠区间外存在必然满足A>B的区域,且重叠区间内的概率计算需要结合两个分布的区间范围,不能简单通过重叠比例相乘再乘0.5得到。
内容的提问来源于stack exchange,提问作者Bennett D
相关产品推荐
相关产品推荐

