Generate Weighted Majority Graphs¶
Generate Linearly Edge-Ordered Tournaments¶
- pref_voting.generate_weighted_majority_graphs.generate_edge_ordered_tournament(num_cands, parity='even')[source]¶
Generate a random uniquely weighted MarginGraph for
num_cands
candidates.- Parameters:
num_cands (int) – the number of candidates
- Returns:
a uniquely weighted margin graph
- Return type:
Note
This function randomly generates a tournament with a linear order over the edges. A tournament is an asymmetric directed graph with an edge between every two nodes. The linear order of the edges is represented by assigning to each edge a number \(2, \ldots, 2*n\), where \(n\) is the number of the edges.
… For Large Numbers of Voters¶
- pref_voting.generate_weighted_majority_graphs.generate_edge_ordered_tournament_infinite_limit(num_candidates, cov_matrix=None)[source]¶
Using the ideas from Section 9 of the paper An Analysis of Random Elections with Large Numbers of Voters by Matthew Harrison-Trainor (https://arxiv.org/abs/2009.02979) and the code provided at https://github.com/MatthewHT/RandomMarginGraphs/, generate a qualitative margin graph for
num_candidates
candidates.Important
The weights of the generated margin graphs are real numbers, representing a linear ordering of the edges. Only qualitative margin graph invariant voting methods, such as Split Cycle, Beat Path, Minimax, Ranked Pairs, etc., should be used on the generated graphs.
- Parameters:
num_candidates (int) – the number of candidates
- Returns:
MarginGraph
Generate Margin Graphs¶
- pref_voting.generate_weighted_majority_graphs.generate_margin_graph(num_cands, weight_domain=None, parity='even')[source]¶
Generate a random MarginGraph (allowing for ties in the margins) for
num_cands
candidates.- Parameters:
num_cands (int) – the number of candidates
- Returns:
MarginGraph
- pref_voting.generate_weighted_majority_graphs.generate_margin_graph_bradley_terry(num_cands, num_voters, score_prob_mod=<function <lambda>>)[source]¶
Generates a margin graph for num_cands candidates by first sampling candidate scores from score_prob_mod and then sampling votes from the Bradley-Terry model using the sampled scores.
- Parameters:
num_cands (int) – Number of candidates
num_voters (int) – Number of voters
score_prob_mod (function, optional) – A function that takes a candidate and returns a score. Defaults to lambda c: np.random.uniform(0,1).
- Returns:
A margin graph
- Return type:
Enumerate Canonical Objects¶
- pref_voting.generate_weighted_majority_graphs.enumerate_canonical_edge_ordered_tournaments(num_cands, parity='even')[source]¶
A canonical edge-ordered tournament (ceot) is a representative from an isomorphism class of linearly edge-ordered tournaments. Enumerate all ceots for
num_cands
candidates, representing a ceot as aMarginGraph
where the margins represent the linear order of the edges.- Parameters:
num_cands (int) – the number of candidates
parity (str, optional) – The parity of the margins, either ‘even’ or ‘odd’.
- Returns:
A generator of
MarginGraph
fornum_candidates
Warning
It is only feasible to finish the enumeration for up to 5 candidates.
- pref_voting.generate_weighted_majority_graphs.enumerate_uniquely_weighted_margin_graphs(num_cands, weight_domain)[source]¶
Enumerate all representatives from isomorphism classes of uniquely-weighted margin graphs with weights drawn from
weight_domain
.- Parameters:
num_cands (int) – the number of candidates
weight_domain (List[int]) – The list of weights in the margin graph.
- Returns:
A generator of
MarginGraph
fornum_candidates
Warning
It is only feasible to finish the enumeration for up to 5 candidates.