[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Ranking method in debvote (Re: voting counter robot)



佐野@浜松です。

 Debian / Debian JP で利用されている voting counter robot である
 debvote の動作について、FYI です。

Debian での DPL 選挙投票も始まっていますが、たぶん投票がカウント
されるアルゴリズムは同じはずなので、JP に参加されていない Debian
メンバーのためにも jp-policy に流しておきます。

 debvote の投票用紙には

 > In the brackets next to your preferred choice, place a 1.
 > Place a 2 in the brackets next to your next choice.  Continue till
 > you rank your last choice.  You may leave choices you consider
 > unacceptable blank.  Start with 1, don't skip any numbers, don't repeat.

> > 二つの行で囲まれた選択肢の括弧 ([ ]) 内に数字を入れます。
> > 最も望ましいと考える選択肢に 1 を、次善の案と考える選択肢に 2 を
> > 指定してください。以下同様に、最後の選択肢まで順番を付けていって
> > ください。気に入らない選択肢は空白のままにすることが可能です。
> > 必ず 1 から始めてください。途中で順番を飛ばしたり同じ順番を重ねて
> > 指定したりすると無効になります。

と書かれているのですが、この "You may leave choices you consider
unacceptable blank." (「気に入らない選択肢は空白のままにすることが
可能です。」) という文と、

> > To vote "no, no matter what" do not leave an option black but rank
> >  "Further Discussion" higher than the unacceptable choices.
> > 
> > 「誰が何と言おうと絶対にイヤ」という意志を表示したい場合は、
> > その選択肢を空白にするのではなく、「さらに議論を続ける」と
> > いう選択肢の順番をその容認できない選択肢よりも先にしてください。

この文が矛盾しているようにも読める、という指摘がありました。

そこで、現在 testvote1@vote.debian.or.jp で行なっている
「投票テスト」をサンプルとして、実際に「ランキング結果」に
各投票がどのように反映されているのか、その動作を説明しておこうと
思います。

なお「投票テスト」に参加した各投票サンプルについては

 <http://vote.debian.or.jp/check_testvote1.html>

また、「投票テスト」の「ランキング結果」については

 <http://vote.debian.or.jp/rank_testvote1.html>

から見ることができます。

さて、ある時点での testvote1 の投票サンプルとランキング結果を
例にとってみます。

 (コードを見たい人は debvote の /usr/lib/perl5/Debvote/Rank.pm を参照)

最初に、ある時点での testvote1 のランキング結果です。
   
   Here is the ranking result of the vote : testvote1.
     _________________________________________________________________
   
Choice #1: Yes
        is prefered to Choice #2: No (7-4)
        is prefered to Choice #3: Further Discussion (10-4)
Choice #2: No
        is prefered to Choice #3: Further Discussion (7-3)
Choice #3: Further Discussion
     _________________________________________________________________
   
次に、同じ時点での testvote1 の有効な投票のサンプルです。
   
                            testvote1: Ballot Check
     _________________________________________________________________
   
a : 2-1, b : 213, c : 1-2, d : 2-1, e : 1--, f : 123, g : 132
h : --1, i : 321, j : 123, k : 12-, l : 213, m : 231, n : 213
o : 123, p : 1-2, q : 123

   Total number: 17
     _________________________________________________________________
   
ここで、各投票が、ランキング結果においてどういう影響を与えているか
調べてみたのが以下のリストです。

        Choice #1 is prefered to Choice #2: (7-4)
     f, g, j, k, m, o, q  -  b, i, l, n   (void: a, c, d, e, h, p)

まず、選択肢 #1 と 選択肢 #2 の関係を調べています。
ここでは #1 を #2 より優先する意見が 7、逆の意見が 4 ということで
全体として #1 を #2 より優先するというランクが結果として得られて
います。

投票サンプルの中で、 #1 を #2 より優先しているのは、上記のとおり
 f, g, j, k, m, o , q の 7 票、逆の意見は b, i, l, n の 4 票です。
ここで a, c, d, e, h, p の 6 票は #1 または #2 のすくなくともひとつ
について空白としているため、 #1 と #2 の関係を調べる上では効果が
ありません。したがってこの優先順位についてはこれらの票は棄権として
扱われています。

        Choice #1 is prefered to Choice #3: (10-4)
     b, c, f, g, j, l, n, o, p, q  -  a, d, i, m (void: e, h, k)

これは #1 と #3 の順序関係を調べたものです。記号の意味は上と同様。

        Choice #2 is prefered to Choice #3: (7-3)
     b, f, j, l, n, o, q  -  g, i, m (void: a, c, d, e, h, k, p)

これは #2 と #3 の順序関係を調べてもので、記号の意味は上と同様です。

これでわかるように、 e や h のように、ひとつの選択肢だけに順番を
入れて、他の選択肢をすべて空白にした場合、何も選択していないのと
結果的に等価です。

どれかの選択肢を優先させたいという場合、すくなくともその該当する
選択肢を further discussion より優先させるという「順序」を設定
しなければいけません。そうしなければ棄権票となってしまいます。

これは debvote の実装がそうなっているからなので、Debian Project での
 vote でもおそらく同様のはずです。ということで official な人は
 Debian での投票の際に注意しましょう。

以上、debvote による投票では、すくなくとも further discussion と
自分が推したい選択肢の 2 つだけは空白でなく順序を設定するように
しましょう、という呼びかけでした。

上記の testvote1 はあくまで練習用なのでいろいろなサンプルがあるほうが
都合がいいのですが、本番の際は「選択肢間の順序関係だけが意味を持つ」
という点に御注意ください。

以上。

--
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351@nifty.ne.jp> : Taketoshi Sano (佐野 武俊)