ホーム » コードあり » 2022 Q1(3)

2022 Q1(3)

事象A,B,Cが独立とは限らない場合のP(A∩B∩C)の取り得る範囲を求めました。

コード

### 2022 Q1(3)   2024.7.27

import itertools

def generate_combinations(n, k):
    base_list = [1] * k + [0] * (n - k)
    all_combinations = set(itertools.permutations(base_list))
    return list(all_combinations)

def calculate_intersection(A, B, C):
    return np.mean(np.array(A) & np.array(B) & np.array(C))

def find_min_max_intersection(n, k):
    all_combinations = generate_combinations(n, k)
    min_intersection = 1.0
    max_intersection = 0.0

    for A in all_combinations:
        for B in all_combinations:
            for C in all_combinations:
                intersection_ratio = calculate_intersection(A, B, C)
                if intersection_ratio < min_intersection:
                    min_intersection = intersection_ratio
                if intersection_ratio > max_intersection:
                    max_intersection = intersection_ratio

    return min_intersection, max_intersection

# パラメータを設定
n = 8
k = 6

# 最小値と最大値を計算
min_intersection, max_intersection = find_min_max_intersection(n, k)

min_intersection, max_intersection
(0.25, 0.75)

アルゴリズム

  1. 組み合わせの生成
    • 配列の長さ n8、1の数 k6 と設定する。
    • 配列 11111100 を作成し、 itertools.permutations を使ってすべての並べ替えを生成する。
  2. 交差部分の確率計算
    • すべての組み合わせに対して、配列 A, B, C を選ぶ。
    • 例えば、 A = 11111100, B = 11011110, C = 11101110 の場合、交差部分 A & B & C11001100 となる。これにより、確率は \frac{4}{8} = 0.5 となる。
  3. 最小値と最大値の取得
    • すべての組み合わせに対して計算した確率を比較し、最小値と最大値を更新する。
    • 最終的に、最小値と最大値を返す。