- class svvamp.RuleIteratedBucklin(**kwargs)[source]#
Iterated Bucklin method.
Options#
>>> RuleIteratedBucklin.print_options_parameters() cm_option: ['lazy', 'exact']. Default: 'lazy'. icm_option: ['lazy']. Default: 'lazy'. iia_subset_maximum_size: is_number. Default: 2. im_option: ['lazy', 'exact']. Default: 'lazy'. tm_option: ['lazy', 'exact']. Default: 'exact'. um_option: ['lazy', 'exact']. Default: 'lazy'.
Notes
The candidate with least adjusted median Borda score (cf. below) is eliminated. Then the new Borda scores are computed. Etc. Ties are broken in favor of lower-index candidates: in case of a tie, the candidate with highest index is eliminated.
Adjusted median Borda score:
Let
med_c
be the median Borda score for candidatec
. Letx_c
the number of voters who put a lower Borda score toc
. Thenc
’s adjusted median ismed_c - x_c / (n_v + 1)
.If
med_c > med_d
, then it is also true for the adjusted median. Ifmed_c = med_d
, thenc
has a better adjusted median iffx_c < x_d
, i.e. if more voters give toc
the Borda scoremed_c
or higher.So, the best candidate by adjusted median is the
Bucklin
winner. Here, at each round, we eliminate the candidate with lowest adjusted median Borda score, which justifies the name of “Iterated Bucklin method”.Unlike Baldwin method (= Iterated Borda), Iterated Bucklin does not meet the Condorcet criterion. Indeed, a Condorcet winner may have the (strictly) worst median ranking.
is_cm_()
: Non-polynomial or non-exact algorithms from superclassRule
.is_icm_()
: The algorithm from superclassRule
is polynomial and has a window of error of 1 manipulator.is_im_()
: Non-polynomial or non-exact algorithms from superclassRule
.is_iia()
: Non-polynomial or non-exact algorithms from superclassRule
.is_tm_()
: Exact in polynomial time.is_um_()
: Non-polynomial or non-exact algorithms from superclassRule
.
Examples
>>> profile = Profile(preferences_ut=[ ... [ 0. , -0.5, -1. ], ... [ 1. , -1. , 0.5], ... [ 0.5, 0.5, -0.5], ... [ 0.5, 0. , 1. ], ... [-1. , -1. , 1. ], ... ], preferences_rk=[ ... [0, 1, 2], ... [0, 2, 1], ... [1, 0, 2], ... [2, 0, 1], ... [2, 1, 0], ... ]) >>> rule = RuleIteratedBucklin()(profile) >>> rule.demo_results_(log_depth=0) ************************ * * * Election Results * * * ************************ *************** * Results * *************** profile_.preferences_ut (reminder) = [[ 0. -0.5 -1. ] [ 1. -1. 0.5] [ 0.5 0.5 -0.5] [ 0.5 0. 1. ] [-1. -1. 1. ]] profile_.preferences_rk (reminder) = [[0 1 2] [0 2 1] [1 0 2] [2 0 1] [2 1 0]] ballots = [[0 1 2] [0 2 1] [1 0 2] [2 0 1] [2 1 0]] scores = [[0.83333333 0.66666667 0.66666667] [1.66666667 1. inf]] candidates_by_scores_best_to_worst [0, 1, 2] scores_best_to_worst [[0.83333333 0.66666667 0.66666667] [1.66666667 1. inf]] w = 0 score_w = [0.83333333 1.66666667] total_utility_w = 1.0 ********************************* * Condorcet efficiency (rk) * ********************************* w (reminder) = 0 condorcet_winner_rk_ctb = 0 w_is_condorcet_winner_rk_ctb = True w_is_not_condorcet_winner_rk_ctb = False w_missed_condorcet_winner_rk_ctb = False condorcet_winner_rk = 0 w_is_condorcet_winner_rk = True w_is_not_condorcet_winner_rk = False w_missed_condorcet_winner_rk = False *************************************** * Condorcet efficiency (relative) * *************************************** w (reminder) = 0 condorcet_winner_ut_rel_ctb = 0 w_is_condorcet_winner_ut_rel_ctb = True w_is_not_condorcet_winner_ut_rel_ctb = False w_missed_condorcet_winner_ut_rel_ctb = False condorcet_winner_ut_rel = 0 w_is_condorcet_winner_ut_rel = True w_is_not_condorcet_winner_ut_rel = False w_missed_condorcet_winner_ut_rel = False *************************************** * Condorcet efficiency (absolute) * *************************************** w (reminder) = 0 condorcet_admissible_candidates = [ True False False] w_is_condorcet_admissible = True w_is_not_condorcet_admissible = False w_missed_condorcet_admissible = False weak_condorcet_winners = [ True False False] w_is_weak_condorcet_winner = True w_is_not_weak_condorcet_winner = False w_missed_weak_condorcet_winner = False condorcet_winner_ut_abs_ctb = 0 w_is_condorcet_winner_ut_abs_ctb = True w_is_not_condorcet_winner_ut_abs_ctb = False w_missed_condorcet_winner_ut_abs_ctb = False condorcet_winner_ut_abs = 0 w_is_condorcet_winner_ut_abs = True w_is_not_condorcet_winner_ut_abs = False w_missed_condorcet_winner_ut_abs = False resistant_condorcet_winner = nan w_is_resistant_condorcet_winner = False w_is_not_resistant_condorcet_winner = True w_missed_resistant_condorcet_winner = False >>> rule.demo_manipulation_(log_depth=0) ***************************** * * * Election Manipulation * * * ***************************** ********************************************* * Basic properties of the voting system * ********************************************* with_two_candidates_reduces_to_plurality = True is_based_on_rk = True is_based_on_ut_minus1_1 = False meets_iia = False **************************************************** * Manipulation properties of the voting system * **************************************************** Condorcet_c_ut_rel_ctb (False) ==> Condorcet_c_ut_rel (False) || || || Condorcet_c_rk_ctb (False) ==> Condorcet_c_rk (False) || || || || || || || V V || || V V Condorcet_c_ut_abs_ctb (False) ==> Condorcet_ut_abs_c (False) || || || || || V V || || maj_fav_c_rk_ctb (False) ==> maj_fav_c_rk (True) || || || || || V V V V majority_favorite_c_ut_ctb (False) ==> majority_favorite_c_ut (True) || || V V IgnMC_c_ctb (False) ==> IgnMC_c (True) || || V V InfMC_c_ctb (False) ==> InfMC_c (True) ***************************************************** * Independence of Irrelevant Alternatives (IIA) * ***************************************************** w (reminder) = 0 is_iia = True log_iia: iia_subset_maximum_size = 2.0 example_winner_iia = nan example_subset_iia = nan ********************** * c-Manipulators * ********************** w (reminder) = 0 preferences_ut (reminder) = [[ 0. -0.5 -1. ] [ 1. -1. 0.5] [ 0.5 0.5 -0.5] [ 0.5 0. 1. ] [-1. -1. 1. ]] v_wants_to_help_c = [[False False False] [False False False] [False False False] [False False True] [False False True]] ************************************ * Individual Manipulation (IM) * ************************************ is_im = nan log_im: im_option = lazy candidates_im = [ 0. 0. nan] ********************************* * Trivial Manipulation (TM) * ********************************* is_tm = False log_tm: tm_option = exact candidates_tm = [0. 0. 0.] ******************************** * Unison Manipulation (UM) * ******************************** is_um = nan log_um: um_option = lazy candidates_um = [ 0. 0. nan] ********************************************* * Ignorant-Coalition Manipulation (ICM) * ********************************************* is_icm = False log_icm: icm_option = lazy candidates_icm = [0. 0. 0.] necessary_coalition_size_icm = [0. 5. 3.] sufficient_coalition_size_icm = [0. 6. 4.] *********************************** * Coalition Manipulation (CM) * *********************************** is_cm = nan log_cm: cm_option = lazy, um_option = lazy, icm_option = lazy, tm_option = exact candidates_cm = [ 0. 0. nan] necessary_coalition_size_cm = [0. 0. 1.] sufficient_coalition_size_cm = [0. 2. 3.]
- property candidates_by_scores_best_to_worst_#
1d array of integers. Candidates are sorted according to their order of elimination.
- property scores_#
2d array of integers.
scores[r, c]
is the adjusted median Borda score of candidatec
at elimination roundr
.