離散数学

情報システムの機能モジュールデプロイ設定の組合せ

情報システムの設定において、複数の機能モジュールの有効・無効を決定する場面を想定します。特定の制約条件の下で、利用可能なデプロイ設定の総数を組合せ論の概念を用いて計算します。これにより、制約付きの選択肢の中から有効なパターンを効率的に数え上げる能力を養います。

組合せ論

情報システムの設定において、複数の機能モジュールの有効・無効を決定する場面を想定します。特定の制約条件の下で、利用可能なデプロイ設定の総数を組合せ論の概念を用いて計算します。これにより、制約付きの選択肢の中から有効なパターンを効率的に数え上げる能力を養います。

情報システムの機能モジュールデプロイ設定の組合せ

ある情報システムには、以下の5つの独立した機能モジュールが存在します。 モジュールA, モジュールB, モジュールC, モジュールD, モジュールE

これらのモジュールは、システムにデプロイする際に個別に有効/無効を設定できます。しかし、システムの安定性と機能互換性のために、以下のデプロイ制約が存在します。

  1. 最小モジュール数制約: デプロイ設定では、少なくとも3つのモジュールを有効にする必要があります。
  2. 依存性制約: モジュールAを有効にする場合、必ずモジュールBも有効にしなければなりません。(モジュールBが有効でもモジュールAは無効でもよい)
  3. 排他性制約: モジュールCとモジュールDは、同時に有効にすることはできません

これらの制約をすべて満たすようなデプロイ設定の総数を求めてください。

解答を見る

この問題を解くために、包含と排除の原理を利用します。まず、全てのデプロイ設定の総数を求め、そこから各制約に違反する設定を排除していきます。

各モジュールは有効 (1) または無効 (0) の2つの状態を取るため、5つのモジュールがある場合、全てのデプロイ設定の総数は $2^5 = 32$ 通りです。

次に、各制約の違反パターンを集合として定義し、その要素数を計算します。

  • $U$: 全てのデプロイ設定の集合 ($|U| = 32$)
  • $C_1$: 最小モジュール数制約に違反する設定の集合 (有効モジュール数が2個以下)
  • $C_2$: 依存性制約に違反する設定の集合 (モジュールAが有効で、かつモジュールBが無効)
  • $C_3$: 排他性制約に違反する設定の集合 (モジュールCが有効で、かつモジュールDも有効)

求めたいのは、$|U| - |C_1 \cup C_2 \cup C_3|$ です。 包含と排除の原理により、 $|C_1 \cup C_2 \cup C_3| = |C_1| + |C_2| + |C_3| - (|C_1 \cap C_2| + |C_1 \cap C_3| + |C_2 \cap C_3|) + |C_1 \cap C_2 \cap C_3|$

1. 各違反集合の要素数を計算

$|C_1|$: 有効モジュール数が2個以下の設定

  • 有効モジュールが0個の場合: $\binom{5}{0} = 1$ 通り (全て無効)
  • 有効モジュールが1個の場合: $\binom{5}{1} = 5$ 通り
  • 有効モジュールが2個の場合: $\binom{5}{2} = 10$ 通り $|C_1| = 1 + 5 + 10 = 16$ 通り。

$|C_2|$: モジュールAが有効かつモジュールBが無効な設定

  • モジュールAを有効、モジュールBを無効と固定します。
  • 残りの3つのモジュール (C, D, E) は自由に有効/無効を設定できます。 $2^3 = 8$ 通り。 $|C_2| = 8$ 通り。

$|C_3|$: モジュールCが有効かつモジュールDも有効な設定

  • モジュールCを有効、モジュールDを有効と固定します。
  • 残りの3つのモジュール (A, B, E) は自由に有効/無効を設定できます。 $2^3 = 8$ 通り。 $|C_3| = 8$ 通り。

2. 2つの違反集合の共通部分の要素数を計算

$|C_1 \cap C_2|$: (有効モジュール数が2個以下) かつ (Aが有効 & Bが無効)

  • Aを有効、Bを無効と固定します。これで既に1つのモジュールが有効です。
  • 残りの3つのモジュール (C, D, E) から、有効にするモジュールを0個または1個選びます (合計で1+0=1個または1+1=2個の有効モジュールにするため)。
    • {C, D, E} から0個選ぶ: $\binom{3}{0} = 1$ 通り ({A} のみ有効)
    • {C, D, E} から1個選ぶ: $\binom{3}{1} = 3$ 通り ({A,C}, {A,D}, {A,E} が有効) $|C_1 \cap C_2| = 1 + 3 = 4$ 通り。

$|C_1 \cap C_3|$: (有効モジュール数が2個以下) かつ (Cが有効 & Dも有効)

  • Cを有効、Dを有効と固定します。これで既に2つのモジュールが有効です。
  • 残りの3つのモジュール (A, B, E) から、有効にするモジュールを0個選びます (合計で2+0=2個の有効モジュールにするため)。
    • {A, B, E} から0個選ぶ: $\binom{3}{0} = 1$ 通り ({C,D} のみ有効) $|C_1 \cap C_3| = 1$ 通り。

$|C_2 \cap C_3|$: (Aが有効 & Bが無効) かつ (Cが有効 & Dも有効)

  • Aを有効、Bを無効、Cを有効、Dを有効と固定します。
  • 残りの1つのモジュール (E) は自由に有効/無効を設定できます。 $2^1 = 2$ 通り。 $|C_2 \cap C_3| = 2$ 通り。

3. 3つの違反集合の共通部分の要素数を計算

$|C_1 \cap C_2 \cap C_3|$: (有効モジュール数が2個以下) かつ (Aが有効 & Bが無効) かつ (Cが有効 & Dも有効)

  • Aを有効、Bを無効、Cを有効、Dを有効と固定します。
  • この時点で、A, C, Dの3つのモジュールが既に有効です。
  • これは「有効モジュール数が2個以下」という条件に違反するため、この条件を満たす設定は存在しません。 $|C_1 \cap C_2 \cap C_3| = 0$ 通り。

4. 包含と排除の原理を用いて違反パターンの総数を計算

$|C_1 \cup C_2 \cup C_3| = |C_1| + |C_2| + |C_3| - (|C_1 \cap C_2| + |C_1 \cap C_3| + |C_2 \cap C_3|) + |C_1 \cap C_2 \cap C_3|$ $= 16 + 8 + 8 - (4 + 1 + 2) + 0$ $= 32 - 7 + 0$ $= 25$ 通り。

5. 全体から違反パターンを引いて最終的な答えを求める

全てのデプロイ設定の総数から、いずれかの制約に違反する設定の総数を引きます。 有効なデプロイ設定の総数 $= |U| - |C_1 \cup C_2 \cup C_3|$ $= 32 - 25 = 7$ 通り。

したがって、すべての制約を満たすデプロイ設定の総数は 7通り です。

参考:条件を満たす7つのデプロイ設定 (各モジュールの状態を (A,B,C,D,E) の順で「有効/無効」として表記し、有効なモジュール名も記載します)

  1. (有効, 有効, 有効, 無効, 無効) - {A, B, C}
  2. (有効, 有効, 無効, 有効, 無効) - {A, B, D}
  3. (有効, 有効, 無効, 無効, 有効) - {A, B, E}
  4. (有効, 有効, 有効, 無効, 有効) - {A, B, C, E}
  5. (有効, 有効, 無効, 有効, 有効) - {A, B, D, E}
  6. (無効, 有効, 有効, 無効, 有効) - {B, C, E}
  7. (無効, 有効, 無効, 有効, 有効) - {B, D, E}