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.