NAME
Vote::Count::Method::CondorcetDropping
VERSION 2.01
Method Description for Simple Dropping
Simple Dropping eliminates the weakest choice until there is a Condorcet Winner. This method is simple and widely used.
SYNOPSIS
my $CondorcetElection =
Vote::Count::Method::CondorcetDropping->new(
'BallotSet' => $ballotset ,
'DropStyle' => 'all', # default = leastwins
'DropRule' => 'topcount', # default
'TieBreakMethod' => 'none', # default
);
my $Winner = $CondorcetElection->RunCondorcetDropping( $ActiveSet )->{'winner'};
RunCondorcetDropping
Takes an optional parameter of an Active Set as a HashRef. Returns a HashRef with the standard result keys: winner, tie, tied. Writes details to the Vote::Count logs.
Dropping Options
DropStyle
Set DropStyle to 'all' for dropping against all choices or 'leastwins' to only consider those choices.
Default is leastwins.
DropRule
Determines the rule by which choices will be eliminated when there is no Condorcet Winner. Supported Dropping Rules are: 'borda' count (with all the attendant weighting issues), 'approval', 'topcount' ('plurality'), and 'greatestloss'.
default is plurality (topcount)
SkipLoserDrop
Normally RunCondorcetDropping eliminates Condorcet Losers whenever they are discovered. Dropping Condorcet Losers will be skipped if set to 1.
Benham
This method modifies IRV by checking for a Condorcet Winner each round, and then drops the low choice as regular IRV. It is probably the most widely used Condorcet Method for Hand Counting because it does not require a full matrix. For each choice it is only required to determine if they lose to any of the other active choices. By Counting Approval at the beginning, it is often possible to determine that a choice will lose at least one pairing without conducting any pairings, then it is only necessary to check choices that possibly have no losses.
This method is fairly simple, and meets Condorcet Winner/Loser, but fails LNH, and inherits IRV's failings on consistency. BTR-IRV is even easier to Hand Count and is Smith Compliant, Benham has no obvious advantage to it, other than having been used more widely in the past.
The original method specified Random for Tie Breaker, which can be done in a reproducable manner with Precedence.
The following example implements Benham, resolving ties with a precedence file generated using the number of ballots cast as the random seed.
my $Benham = Vote::Count::Method::CondorcetDropping->new(
'BallotSet' => $someballotset,
'DropStyle' => 'all',
'DropRule' => 'topcount',
'SkipLoserDrop' => 1,
'TieBreakMethod' => 'precedence',
'PrecedenceFile' => '/tmp/benhamties.txt',
);
$Benham->CreatePrecedenceRandom( '/tmp/benhamties.txt' );
my $Result = $Benham->RunCondorcetDropping();
BUG TRACKER
https://github.com/brainbuz/Vote-Count/issues
AUTHOR
John Karr (BRAINBUZ) brainbuz@cpan.org
CONTRIBUTORS
Copyright 2019-2021 by John Karr (BRAINBUZ) brainbuz@cpan.org.
LICENSE
This module is released under the GNU Public License Version 3. See license file for details. For more information on this license visit http://fsf.org.
SUPPORT
This software is provided as is, per the terms of the GNU Public License. Professional support and customisation services are available from the author.