NAME
Vote::Count::Method::MinMax
VERSION 2.02
SYNOPSIS
my $MinMaxElection =
Vote::Count::Method::MinMax->new( 'BallotSet' => $ballotset );
# $method is one of: winning margin opposition
my $Winner = $MinMaxElection->MinMax( $method )->{'winner'};
say $MinMaxElection->logv();
The MinMax Methods
MinMax (also known as Minimax and Simpson-Kramer) uses a Pairwise comparison Matrix. Instead of looking at wins and losses as with Condorcet Methods, it scores each pairing, the choice with the lowest worst pairing score wins.
The Three MinMax Scoring Rules
Winning Votes ('winning')
When the choice being scored loses, the votes for the winner in the pairing are scored. When the choice wins or ties the pairing is scored as 0.
This scoring method meets the Condorcet Winner, but not the Smith, Condorcet Loser or Later Harm Criteria.
Margin ('margin')
When the choice being scored loses, the votes for the winner minus the votes for that choice in the pairing are scored. When the choice wins or ties the pairing is scored as 0.
This scoring method meets the Condorcet Winner, but not the Smith, Condorcet Loser or Later Harm Criteria.
Opposition ('opposition')
The votes for the other choice in the pairing are scored regardless of whether the choice won or lost.
This scoring method is claimed to meet the Later Harm Criteria, but fails Condorcet Winner and Smith.
Tie Breaker
As a Tie Breaker it is recommended to use the next worst pairing score. Because it follows the method and should resolve well, this Tie Breaker is implemented by Vote::Count within the MinMax method itself. If it returns a tie your implementation can apply another method like Modified Grand-Junction.
ScoreMinMax
Generate hashref scoring according the requested $method which is one of three scoring rules: 'winning', 'margin', 'opposition'.
my $scores = $MinMaxElection->ScoreMinMax( $method );
MinMaxPairingVotesTable
Generate a formatted table of the Pairing Matrix from a set of scores generated by ScoreMinMax.
say $MinMaxElection->MinMaxPairingVotesTable( $scores );
MinMax
Run and log the election with MinMax according to scoring $method: 'winning', 'margin', 'opposition'.
my $result = $MinMaxElection->MinMax( $method );
The returned value is a HashRef:
{ 'tie' => true or false value,
'winner' => will be false if tie is true --
otherwise the winning choice.
# tied is only present when tie is true.
'tied' => [ array ref of tied choices ],
}
Floor Rules
It is recommended to use a low Floor.
This method specifies that the scores from less worst pairings be used as the tie breaker, removing inconsequential choices can affect the resolveability of the tie breaker. Unlike IRV where the presence of inconsequential choices can be seen as a randomizing factor, and their bulk removal as improving the consistency of the method, this method does not benefit from that.
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.