-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dynamic efficiante Schulze method calculation engine #5
Comments
I have been working on this during the hackathon. Went with the suggested existing implementation (https://github.com/bradbeattie/python-vote-core) which seemed fine (possibly found a bug in the library, see bradbeattie/python-vote-core#15). The chosen library implements several voting methods, some are "single winner methods" (including the classical Schulze Method), and some are "ordering methods" (including the Schulze Proportional Representation Method).
On the second day, we realized that we need and ordering method, and not just a single winner method, so we switched to SchulzePR. Interestingly, SchulzePR just gives the resulting order (which needed some post-processing in order to consider ties properly). |
The algorithm is polynomial so if the implementation is exponential it is a bad one. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.45.1855&rep=rep1&type=pdf http://link.springer.com/chapter/10.1007%2F3-540-58715-2_118 |
It's possible that the implementation was polynomial, not exponential. We did not analyze it rigorously, just looked at the graph :-) |
If the implementation's performance is bad (and I agree, it could be better), patches welcome. ;) |
Schulze method (there's a Heb page too) is about combining lists of preferences. Every voter casts a partially sorted list, meaning she can group items she sees in the same level of preference together – 1,(2,3,4),5 (Note that sorting in a group is doable but doesn’t change the ballot since 1,(4,2,3),5 means the same).
There’re several implementations of engines that calculate the final order of the augmented preferences, but as much as we understand they all assume two-stage process - a preliminary casting of ALL the ballots, and only then a single calculation.
Our system uses the algorithm for cumulative sort of issues and proposals, and therefore we need a dynamic Schulze engine, that efficiently updates the cumulative list as new ballots (or updated ones) are casted.
Two changes are therefore needed:
The task includes:
Integration of engine to a ballot casting UI and the usage of the outcome in the system will be done afterwards.
The text was updated successfully, but these errors were encountered: