Red Huang

Red Huang

Banzhafパワー指数(權力投票)

有一項決策要投票表決,一人一票,不得投廢票,過半數贊成則通過,反之則否決。投票者有許多派系組成,各個派系都相當團結,同樣派系的人,要嘛全部都是投贊成票,要嘛全部都是投反對票。然而有些派系人多,有些派系人少,人多的派系能左右大局,人少的派系卻勢單力薄。於是產生一個問題:有能力對最終決策造成影響的是哪些派系?影響能力又是多少?

一個派系有能力對決策造成影響,是指所有派系都設定立場之後,此派系一旦改變立場,會馬上顛倒決策結果。換個角度來說,是指此派系之外的所有派系都投完票之後,此派系若全數投贊成票,則會使決策順利通過,反之若全數投反對票,則會使決策無法通過。

Banzhaf Power Index の計算方式は次のようになります:一つの派系 X の Banzhaf Power Index = 派系 X 影響決策の場合の数 ÷ (派系 1 影響決策の場合の数 + ... + 派系 N 影響決策の場合の数) 。全ての派系の Banzhaf Power Index の合計は 1 になります。

Banzhaf Power Index を通じて、各派系の力や投票表決の公平性を確認することができます。

1.  
A派系9票、B派系9票、C派系7票、D派系3票、E派系1票、F派系1票。  
総投票数は30票。過半数の票数は16票。

2.  
A派系を例にとると、A派系が影響する決策の場合は合計16種類あります:

   AB AC ABC ABD ABE ABF ACD ACE ACF  
   ABDE ABDF ABEF ACDE ACDF ACEF ADEF  

派系が出現する場合は賛成票を投じたことを示し、派系が出現しない場合は反対票を投じたことを示します。
Aを除くと決策結果が逆転します。

3.  
D派系、E派系、F派系は全く結果に介入することができず、影響力がありません:

  | votes | power |  BPI  
\--+-------+-------+-------  
A |   9   |  16   | 16/48  
B |   9   |  16   | 16/48  
C |   7   |  16   | 16/48  
D |   3   |   0   |   0  
E |   1   |   0   |   0  
F |   1   |   0   |   0  
\--+-------+-------+--------  
  |  30   |  48   |  1.0
  1. int w [6];           // 各種派系の人数

  2. int c [(16-1) + 1];  // 0 票から 15 票までの未過半数の場合の数を計算する

  3. int power [6];   // 各派系が決策結果に影響する場合の数

  4. int sum = 0;    // power [] の合計

  5. void Banzhaf_power_index()

  6. {

  7.     for (int k=0; k<N; ++k)

  8.     {

  9.         // 一時的に派系 k を除外し、残りの派系の投票の場合の数を計算する。

  10.         memset(c, 0, sizeof(c));

  11.         c[0] = 1;

  12.         for (int i=0; i<N; ++i)

  13.             if (i != k)

  14.                 for (int j=16-1; j>=w[i]; --j)

  15.                     c[j] += c[j-w[i]];

  16.         // 過半数の票数に近づく場合の数を累計する

  17.         power[k] = 0;

  18.         for (int j=max(16-w[k], 0); j<16; ++j)

  19.             power[k] += c[j];

  20.         sum += power[k];

  21.     }

  22.     for (int i=0; i<N; ++i)

  23.         cout << i << "派系の BPI は" << float (power [i]) / sum;

  24. }

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。