[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