NAME

Algorithm::RankAggregate::BordaCount - Pure Perl implementation of Borda count

SYNOPSIS

use Algorithm::RankAggregate::BordaCount;

my @case = (
    [-26.8,  -3.8, -11.2, -9.4, -2.7],
    [-24.8,  18.2, -8.0,  -3.4, 18.0],
    [-17.7,  13.0, -2.4,  -5.7, 12.9],
);

my $bc = Algorithm::RankAggregate::BordaCount->new();

# give point to attribute which is ranked higher than 4
my @result = @{$bc->aggregate(\@case, 4)};

# in this case, @result = (0,11,4,5,10)

DESCRIPTION

Algorithm::RankAggregate::BordaCount is Pure Perl implementation of Borda count. You may read http://en.wikipedia.org/wiki/Borda_count.

EXPORTED FUNCTIONS

new()

You can get the instance of this module in following way.

my $bc = Algorithm::RankAggregate::BordaCount->new();

new(\@array)

If you want to think of multi voters, you can get the instance of this module in following way.

my @voters = (42, 26, 15, 17);
my $bc = Algorithm::RankAggregate::BordaCount->new(\@voters);

If you want to use weighted borda count, you can get the instance of this module in following way.

my @weights = (0.4, 0.3, 0.2, 0.1);
my $bc = Algorithm::RankAggregate::BordaCount->new(\@weights);

aggregate(\@array_of_array)

In first, you should make a array of array which make from real value.

my @score_lists_list = (
     [-26.8,  -3.8, -11.2, -9.4, -2.7],
     [-24.8,  18.2, -8.0,  -3.4, 18.0],
     [-17.7,  13.0, -2.4,  -5.7, 12.9],
);

And you can get borda counts in following way.

my @result = @{$bc->aggregate(\@score_lists_list)};

$bc->aggregate() is simple wrapper of $bc->aggregate_score_to_count();

If you want to use a array of array which make from rank number, you should call $br->aggregate_rank_to_count();

my @rank_lists_list = (
     [5, 2, 4, 3, 1],
     [5, 1, 4, 3, 2],
     [5, 1, 3, 4, 2],
);

aggregate(\@array_of_array, $positive_int_value)

When you want to get the point of candidates which is ranked higher than N(N is a positive natural value), you can get borda counts in following way.

my @result = @{$bc->aggregate(\@score_lists_list, N)};

By using this parameter, you can give "N - rank + 1" point to candidate.

$bc->aggregate() is simple wrapper of $bc->aggregate_score_to_count();

aggregate_score_to_count(\@array_of_array, $positive_int_value)

This is main function of $bc->aggregate().

aggregate_rank_to_count(\@array_of_array, $positive_int_value)

It is called in $bc->aggregate_score_to_count() to get the result borda count array.

Example

This is example to represent "how to use Algorithm::RankAggregate::BordaCount".

use Algorithm::RankAggregate::BordaCount;

# http://en.wikipedia.org/wiki/Borda_count
# each array of array are (Memphis, Nashville, Chattanooga, Knoxville)
my @score_lists_list = (
    [4, 3, 2, 1],
    [1, 4, 3, 2],
    [1, 2, 4, 3],
    [1, 2, 3, 4],
);
my @voters = (42,26,15,17);
my $bc = Algorithm::RankAggregate::BordaCount->new(\@voters);
my @result = @{$bc->aggregate(\@score_lists_list, 3);

# in this case, @result = (126, 194, 173, 107)

AUTHOR

Toshinori Sato (@overlast) <overlasting {at} gmail.com>

SEE ALSO

https://github.com/overlast/private/tree/master/lang/perl/CPAN

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.