pik-gane / vodle

We develop an interactive, consensus-oriented group decision app
https://twitter.com/vodle_it
GNU Affero General Public License v3.0
25 stars 16 forks source link

users can perform multiwinner polls #169

Open mensch72 opened 2 years ago

mensch72 commented 2 years ago

in a multiwinner poll with k winners ("allocate k seats"), the tally is performed thus:

  1. compute effective wap: (i) if 0, all eff.waps=0. (ii) if >=k waps are >0 but <k waps are 100, the k largest waps become effectively 100; in case of ties, all with the same wap also become eff. 100. this guarantees that either 0 or >=k options are approved.
  2. the shares are computed as in the other two poll types
  3. if some shares are larger than 1/k, they are limited to 1/k from top to bottom, by transferring excess shares to other options in a process similar to STV, so that everyone's share of 1/N is divided between her k topmost approved options: start with every non-abstaining part. i having si = 1/N share left. process options x from top to bottom. sum up si over all who approve x, giving wx. if wx<=1/k, assign wx to x and set all corresponding si to 0. otherwise, assign 1/k to x and multiply all corresponding si with 1 – 1/k/wx.
  4. then choose a random offset o in [0,1/k] and order options as in poll page, X1,...,Xm. let si be the share of the ith option in this ordering, and Ci = s1 + ... + si be the cumulative share up to the ith option.
  5. then give a seat to option i iff the interval [C(i-1), ci] (which is at most 1/k long) contains one of the k numbers o, o+1/k, o+2/k, ..., o+(k-1)/k. this way option i's probability of being a winner is k*si as desired.