The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Vote::Count::Method::CondorcetDropping

VERSION 2.02

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.