[EM] Open-source Vote-Info-Split-Join (VISJ) framework
Richard Fobes
ElectionMethods at VoteFair.org
Mon Sep 12 18:39:34 PDT 2011
To help implement this "code-repository" goal, please consider the
open-source "Vote-Info-Split-Join" ("VISJ") framework I've created.
On 9/11/2011 9:15 PM, Greg Nisbet wrote:
> ... If the community could settle on a single
> language for reference implementations (speed being less important
> here than clarity and familiarity) of various voting methods and maybe
> a quick language such as C, C++, D, or Java when additional speed is
> required, and possibly an efficiently parallelizable language (e.g.
> Erlang, Haskell) to allow for distributed computation and greater
> scalability.
>
> The point being, a lot of people have spent time writing code and some
> have reinvented the wheel in a slightly different form or in another
> language. It'd be nice to have code all in one place and establish a
> set of conventions for how new algorithms are to be represented.
The Vote-Info-Split-Join framework splits vote information into two
paths, with one path being all the text information (such as election
names, candidate names, etc.) and the other path being numeric
information. The numeric information is the ballot-based preference
information indexed by incrementally assigned case numbers, election
("question") numbers, and choice numbers.
This framework allows programmers to focus on just handling the
preference information as numeric input, calculating the results using
any programming language that implements any election-method algorithm,
and then outputting the results in a numeric format.
The VISJ software joins (merges) the calculated numeric data with the
text information, and creates the final output, which can be in HTML,
XML (the current default), JSON, EML, or any other text-based format.
Changing the output layout, the output language, or nearly anything else
about the output, just requires editing portions of the VISJ code, which
is written in the easy-to-learn Dashrep language. Specifically, only a
few "Dashrep phrases" need to be given new "definitions".
Notice that the election-method-algorithm programming code does not need
to handle any text information, either for input or for output.
In actual elections the separation of text and numeric information
enforces anonymity during result calculations. In other words, the
candidate names and parties and other identifying information are not
available to the software that calculates the results.
This framework allows different election methods to be implemented using
different programming languages (Python, Perl, Ruby, etc.).
For comparing different election methods, the same numeric data (from
multiple elections) can be supplied to different programs that calculate
results for different election methods, and then the VISJ code, slightly
modified, can join the different results (and display the results in
comparison tables, or nearly any other layout). (If the speed of
parallel-processing is desired, these separate programs can run on
separate processors.)
The current version of this software handles input in a specific XML
format (slightly modified from the VoteFair.org internal format), but it
should be relatively easy to modify the code -- which is written in the
Dashrep language -- to accommodate information coded in Election Markup
Language (EML). The code contains instructions for making such changes.
Besides handling isolated single-winner elections, the VISJ framework is
designed to also handle interconnected elections, meaning that all the
information from a single ballot is kept together in the same "case".
The open-source code for the Vote-Info-Split-Join framework is on my
GitHub account, named "CPSolver". That account also contains the code
for the Dashrep engine, which I wrote in Perl. In turn (for those who
don't know), Perl runs on Windows, Linux/Unix, MacOS, and virtually any
other operating system. (Unlike many other Perl programs, the Dashrep
engine does not need the CPAN environment.)
Here is the URL:
www.github.com/cpsolver
I had intended to announce this software earlier, but I've been
distracted by the work of helping to write, edit, and refine the
"Declaration of Election Method Experts and Enthusiasts".
Richard Fobes
More information about the Election-Methods
mailing list