For ordinal extensions¶
-
class
embedded_voting.ManipulationCoalitionOrdinal(ratings, embeddings, rule_positional=None, rule=None)[source]¶ This class extends the
ManipulationCoalitionclass to ordinal rules (irv, borda, plurality, etc.), because theManipulationCoalitioncannot be used for ordinal preferences.Parameters: - ratings (Ratings or np.ndarray) – The ratings of voters to candidates
- embeddings (Embeddings) – The embeddings of the voters
- rule_positional (RulePositional) – The ordinal rule used.
- rule (Rule) – The aggregation rule we want to analysis.
-
winner_¶ The index of the winner of the election without manipulation.
Type: int
-
welfare_¶ The welfares of the candidates without manipulation.
Type: float list
-
rule_positional¶ The positional rule used.
Type: RulePositional
Examples
>>> np.random.seed(42) >>> ratings_dim_candidate = [[1, .2, 0], [.5, .6, .9], [.1, .8, .3]] >>> embeddings = EmbeddingsGeneratorPolarized(10, 3)(.8) >>> ratings = RatingsFromEmbeddingsCorrelated(coherence=0.8, ratings_dim_candidate=ratings_dim_candidate)(embeddings) >>> rule_positional = RuleInstantRunoff() >>> manipulation = ManipulationCoalitionOrdinal(ratings, embeddings, rule_positional, RuleSVDNash()) >>> manipulation.winner_ 2 >>> manipulation.is_manipulable_ True >>> manipulation.worst_welfare_ 0.0
-
trivial_manipulation(candidate, verbose=False)[source]¶ This function computes if a trivial manipulation is possible for the candidate passed as parameter.
Parameters: - candidate (int) – The index of the candidate for which we manipulate.
- verbose (bool) – Verbose mode. By default, is set to False.
Returns: If True, the ratings is manipulable for this candidate.
Return type: bool
Examples
>>> np.random.seed(42) >>> ratings_dim_candidate = [[1, .2, 0], [.5, .6, .9], [.1, .8, .3]] >>> embeddings = EmbeddingsGeneratorPolarized(10, 3)(.8) >>> ratings = RatingsFromEmbeddingsCorrelated(coherence=.8, ratings_dim_candidate=ratings_dim_candidate)(embeddings) >>> manipulation = ManipulationCoalition(ratings, embeddings, RuleSVDNash()) >>> manipulation.trivial_manipulation(0, verbose=True) 1 voters interested to elect 0 instead of 1 Winner is 0 True
Particular cases¶
Borda¶
-
class
embedded_voting.ManipulationCoalitionOrdinalBorda(ratings, embeddings, rule=None)[source]¶ This class do the coalition manipulation analysis for the
RulePositionalBordarule_positional.Parameters: - ratings (Ratings or np.ndarray) – The ratings of voters to candidates
- embeddings (Embeddings) – The embeddings of the voters
- rule (Rule) – The aggregation rule we want to analysis.
Examples
>>> np.random.seed(42) >>> ratings_dim_candidate = [[1, .2, 0], [.5, .6, .9], [.1, .8, .3]] >>> embeddings = EmbeddingsGeneratorPolarized(10, 3)(.8) >>> ratings = RatingsFromEmbeddingsCorrelated(coherence=0.8, ratings_dim_candidate=ratings_dim_candidate)(embeddings) >>> manipulation = ManipulationCoalitionOrdinalBorda(ratings, embeddings, RuleSVDNash()) >>> manipulation.winner_ 1 >>> manipulation.is_manipulable_ False >>> manipulation.worst_welfare_ 1.0
k-Approval¶
-
class
embedded_voting.ManipulationCoalitionOrdinalKApproval(ratings, embeddings, k=2, rule=None)[source]¶ This class do the coalition manipulation analysis for the
RulePositionalKApprovalrule_positional.Parameters: - ratings (Ratings or np.ndarray) – The ratings of voters to candidates
- embeddings (Embeddings) – The embeddings of the voters
- k (int) – The parameter of the k-approval rule.
- rule (Rule) – The aggregation rule we want to analysis.
Examples
>>> np.random.seed(42) >>> ratings_dim_candidate = [[1, .2, 0], [.5, .6, .9], [.1, .8, .3]] >>> embeddings = EmbeddingsGeneratorPolarized(10, 3)(.8) >>> ratings = RatingsFromEmbeddingsCorrelated(coherence=0.8, ratings_dim_candidate=ratings_dim_candidate)(embeddings) >>> manipulation = ManipulationCoalitionOrdinalKApproval(ratings, embeddings, k=2, rule=RuleSVDNash()) >>> manipulation.winner_ 1 >>> manipulation.is_manipulable_ False >>> manipulation.worst_welfare_ 1.0
Instant Runoff¶
-
class
embedded_voting.ManipulationCoalitionOrdinalIRV(ratings, embeddings, rule=None)[source]¶ This class do the coalition manipulation analysis for the
RuleInstantRunoffrule_positional.Parameters: - ratings (Ratings or np.ndarray) – The ratings of voters to candidates
- embeddings (Embeddings) – The embeddings of the voters
- rule (Rule) – The aggregation rule we want to analysis.
Examples
>>> np.random.seed(42) >>> ratings_dim_candidate = [[1, .2, 0], [.5, .6, .9], [.1, .8, .3]] >>> embeddings = EmbeddingsGeneratorPolarized(10, 3)(.8) >>> ratings = RatingsFromEmbeddingsCorrelated(coherence=0.8, ratings_dim_candidate=ratings_dim_candidate)(embeddings) >>> manipulation = ManipulationCoalitionOrdinalIRV(ratings, embeddings, RuleSVDNash()) >>> manipulation.winner_ 2 >>> manipulation.is_manipulable_ True >>> manipulation.worst_welfare_ 0.0