- class svvamp.VotingRuleTasks(voting_systems=None, study_rule_criteria=None, detailed_tasks=None)[source]#
A set of tasks for the simulator, i.e. which voting rules with which options and which criteria about them.
A “task” consists of: a voting rule, a dictionary of options, and a
StudyRuleCriteria
object. A VotingRuleTasks is essentially a list of tasks.In the following, what we call a “voting system” consists of a voting rule and a dictionary of options (i.e. like a task, but with no
StudyRuleCriteria
object specified).- Parameters:
voting_systems (List, optional) – A list of pairs (rule_class, options), where rule_class is a subclass of
Rule
and options is a dictionary of options. Instead of (rule_class, options), one may provide a singleton rule_class (without parentheses), which is equivalent to (rule_class, {}).study_rule_criteria (StudyRuleCriteria, optional) – A
StudyRuleCriteria
object.detailed_tasks (object, optional) – Either a list of triples (rule_class, options, study_rule_criteria), or a VotingRuleTasks object.
Examples
Basically, there are two non-exclusive ways to define a VotingRuleTasks object:
Exhaustively with detailed_tasks.
As a Cartesian product by voting_systems and study_rule_criteria.
>>> voting_rule_tasks1 = VotingRuleTasks( ... voting_systems=[ ... RulePlurality, ... RuleExhaustiveBallot, ... (RuleIRV, {'cm_option': 'fast'}), ... (RuleApproval, {'approval_threshold': 10}), ... ], ... study_rule_criteria=StudyRuleCriteria( ... manipulation_criteria=['is_cm_', 'is_tm_', 'is_um_'], ... ), ... detailed_tasks=[ ... ( ... RuleIRV, ... {'cm_option': 'exact'}, ... StudyRuleCriteria( ... manipulation_criteria=['is_cm_'], ... manipulation_only=True ... ) ... ), ... ( ... RuleApproval, ... {'approval_threshold': 5}, ... StudyRuleCriteria( ... manipulation_criteria=['is_cm_', 'is_tm_', 'is_um_'] ... ) ... ), ... ] ... )
>>> voting_rule_tasks2 = VotingRuleTasks( ... voting_systems=[RuleIRV, RuleExhaustiveBallot], ... study_rule_criteria=StudyRuleCriteria(), ... detailed_tasks=VotingRuleTasks( ... voting_systems=[ ... (RuleIRV, {'cm_option': 'exact'}), ... (RuleExhaustiveBallot, {'cm_option': 'exact'}) ... ], ... study_rule_criteria=StudyRuleCriteria( ... manipulation_criteria=['is_cm_'], ... manipulation_only=True ... ) ... ) ... )
In examples 1 and 2 above, all elements of voting_systems will be assigned the same set of criteria, the argument study_rule_criteria. The argument detailed_tasks allows to give different criteria for voting systems needing a specific treatment.
When voting_systems is None (default), it is normally set to []. But if detailed_tasks is empty, or study_rule_criteria is not empty, then voting_systems is set to a quite extensive list of voting systems.
When study_rule_criteria is None (default), it is normally set to []. But if detailed_tasks is empty, or voting_systems is not empty, then study_rule_criteria is set to StudyRuleCriteria(), which leads to study an quite extensive list of criteria.
Study
RuleSchulze
andRanked Pairs
with a quite extensive list of criteria:>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleSchulze, RuleRankedPairs] ... )
Study a quite extensive list of voting systems, with CM being the only manipulation criterion:
>>> voting_rule_tasks = VotingRuleTasks( ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_']) ... )
Study a quite extensive list of voting systems with a quite extensive list of criteria:
>>> voting_rule_tasks = VotingRuleTasks()
- append_manipulation_criterion(criterion, rule_class=None)[source]#
Add a manipulation criterion for one or all voting rules.
Examples
Add criterion for all occurrences of rule_class:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV, (RuleIRV, {'cm_option': 'exact'})], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_manipulation_criterion(criterion='is_um_', rule_class=RuleIRV) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ is_um_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ is_um_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
If rule_class is None (default), then add criterion for all voting rules:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_manipulation_criterion('is_um_') >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ is_um_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ is_um_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
- append_manipulation_criterion_c(criterion, rule_class=None)[source]#
Add a manipulation criterion (candidates) for one or all voting rules.
Examples
Add criterion for all occurrences of rule_class:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV, (RuleIRV, {'cm_option': 'exact'})], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_manipulation_criterion_c(criterion='candidates_cm_', rule_class=RuleIRV) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: candidates_cm_ result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: candidates_cm_ result_criteria: None utility_criteria: None numerical_criteria: None
If rule_class is None (default), then add criterion for all voting rules:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_manipulation_criterion_c('candidates_cm_') >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: candidates_cm_ result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: candidates_cm_ result_criteria: None utility_criteria: None numerical_criteria: None
- append_numerical_criterion(criterion, rule_class=None)[source]#
Add a numerical criterion for one or all voting rules
Examples
Add criterion for all occurrences of rule_class:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV, (RuleIRV, {'cm_option': 'exact'})], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_numerical_criterion(criterion='nb_candidates_cm_', rule_class=RuleIRV) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: nb_candidates_cm_ voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: nb_candidates_cm_
If rule_class is None (default), then add criterion for all voting rules:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_numerical_criterion(criterion='nb_candidates_cm_') >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: nb_candidates_cm_ voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: nb_candidates_cm_
- append_result_criterion(criterion, rule_class=None)[source]#
Add a result criterion for one or all voting rules
Examples
Add criterion for all occurrences of rule_class:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV, (RuleIRV, {'cm_option': 'exact'})], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_result_criterion(criterion='w_is_condorcet_admissible_', rule_class=RuleIRV) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: w_is_condorcet_admissible_ utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: w_is_condorcet_admissible_ utility_criteria: None numerical_criteria: None
If rule_class is None (default), then add criterion for all voting rules:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_result_criterion(criterion='w_is_condorcet_admissible_') >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: w_is_condorcet_admissible_ utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: w_is_condorcet_admissible_ utility_criteria: None numerical_criteria: None
- append_task(rule_class, options=None, study_rule_criteria=None)[source]#
Append a task to the list.
- Parameters:
rule_class (class) – Subclass of
Rule
.options (dict, optional) – A dictionary of options. If None (default), then options will be an empty dictionary, which amounts to using the default options for this voting rule.
study_rule_criteria (StudyRuleCriteria, optional) – If None (default), then use the default StudyRuleCriteria() (with a quite extensive list of criteria).
Examples
>>> voting_rule_tasks = VotingRuleTasks(detailed_tasks=[ ... ( ... RuleIRV, ... {'cm_option': 'fast'}, ... StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ), ... ]) >>> voting_rule_tasks.append_task( ... RuleIRV, ... {'cm_option': 'exact'}, ... StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleIRV options: {'cm_option': 'fast'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
If options is not specified, then it is considered empty:
>>> voting_rule_tasks = VotingRuleTasks(voting_systems=[], detailed_tasks=[]) >>> voting_rule_tasks.append_task( ... rule_class=RuleIRV, ... study_rule_criteria=StudyRuleCriteria( ... manipulation_criteria=['is_cm_'], manipulation_only=True, numerical_criteria=[] ... ) ... ) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
If study_rule_criteria is not specified, then it is the default instance StudyRuleCriteria():
>>> voting_rule_tasks = VotingRuleTasks(voting_systems=[], detailed_tasks=[]) >>> voting_rule_tasks.append_task(rule_class=RuleIRV, options={'cm_option': 'exact'}) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_tm_ is_um_ ...
- append_utility_criterion(criterion, func, name, rule_class=None)[source]#
Add a utility criterion for one or all voting rules
- Parameters:
criterion (str) – The numerical data to be processed.
func (callable) – An aggregating function.
name (str) – The name chosen for this pair criterion / aggregation function. Cf.
StudyRuleCriteria.append_utility_criterion()
.rule_class (class) – Subclass of
Rule
.
Examples
Add criterion for all occurrences of rule_class:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV, (RuleIRV, {'cm_option': 'exact'})], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_utility_criterion( ... criterion='total_utility_w_', func=np.sum, name='total_u_sum', rule_class=RuleIRV) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: ('total_utility_w_', <function sum at ...>, 'total_u_sum') numerical_criteria: None voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: ('total_utility_w_', <function sum at ...>, 'total_u_sum') numerical_criteria: None
If rule_class is None (default), then add criterion for all voting rules:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.append_utility_criterion( ... criterion='total_utility_w_', func=np.sum, name='total_u_sum') >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: ('total_utility_w_', <function sum at ...>, 'total_u_sum') numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: ('total_utility_w_', <function sum at ...>, 'total_u_sum') numerical_criteria: None
- check_sanity()[source]#
Check sanity of the object
Preform some basic checks. It is recommended to use this method before launching big simulations.
Examples
Confirm that a configuration is sound:
>>> voting_rule_tasks = VotingRuleTasks() >>> voting_rule_tasks.check_sanity() VotingRuleTasks: Sanity check was successful.
Detect an illegal option:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[(RuleIRV, {'cm_option': 'unexpected_option'})], ... ) >>> voting_rule_tasks.check_sanity() Traceback (most recent call last): ValueError: 'cm_option' = 'unexpected_option' is not allowed in RuleIRV.
Detect an illegal
StudyRuleCriteria
:>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['unexpected_criterion']) ... ) >>> voting_rule_tasks.check_sanity() Traceback (most recent call last): ValueError: Criterion 'unexpected_criterion' is unknown for RuleIRV.
- extend(iterable)[source]#
Extend a VotingRuleTasks object.
Note that the usual command extend can be used to concatenate two VotingRuleTasks objects.
Examples
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks_2 = VotingRuleTasks( ... voting_systems=[RuleICRV, RuleCondorcetVtbIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_um_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.extend(voting_rule_tasks_2) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleICRV options: {} StudyRuleCriteria with: manipulation_criteria: is_um_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleCondorcetVtbIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_um_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
- remove_criterion(criterion, rule_class=None)[source]#
Remove a criterion for one or all voting rules.
Examples
Removes all occurrences of criterion for all occurrences of rule_class:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV, (RuleIRV, {'cm_option': 'exact'})], ... study_rule_criteria=StudyRuleCriteria( ... manipulation_criteria=['is_cm_', 'is_um_'], ... manipulation_only=True, ... numerical_criteria=[] ... ) ... ) >>> voting_rule_tasks.remove_criterion(criterion='is_um_', rule_class=RuleIRV) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ is_um_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
If rule_class is None (default), then criterion is removed for all voting rules:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV], ... study_rule_criteria=StudyRuleCriteria( ... manipulation_criteria=['is_cm_', 'is_um_'], ... manipulation_only=True, ... numerical_criteria=[] ... ) ... ) >>> voting_rule_tasks.remove_criterion('is_um_') >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
- remove_option(option, rule_class=None)[source]#
Remove an option and its value for one or all voting rules
Examples
Remove option for all occurrences of rule_class:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[ ... (RuleExhaustiveBallot, {'cm_option': 'exact'}), ... (RuleIRV, {'cm_option': 'exact'}) ... ], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.remove_option(option='cm_option', rule_class=RuleIRV) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
This means that from now on, RuleIRV will use its default value for cm_option.
If rule_class is None (default), then remove the option for all voting rules:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[ ... (RuleExhaustiveBallot, {'cm_option': 'exact'}), ... (RuleIRV, {'cm_option': 'exact'}) ... ], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.remove_option(option='cm_option') >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
- remove_rule(rule_class)[source]#
Remove a rule
Removes all occurrences of rule_class from this VotingRuleTasks object.
- Parameters:
rule_class (class) – Subclass of
Rule
.
Examples
>>> voting_rule_tasks = VotingRuleTasks(detailed_tasks=[ ... ( ... RuleIRV, ... {'cm_option': 'fast', 'um_option': 'fast'}, ... StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ), ... ( ... RuleIRV, ... {'cm_option': 'exact', 'um_option': 'exact'}, ... StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ), ... ( ... RuleCondorcetVtbIRV, ... {'cm_option': 'very_slow', 'um_option': 'exact'}, ... StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) ... ]) >>> voting_rule_tasks.remove_rule(RuleIRV) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleCondorcetVtbIRV options: {'cm_option': 'very_slow', 'um_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
- set_option(option, value, rule_class=None)[source]#
Set an option for one or all voting rules
- Parameters:
Examples
Set option to value for all occurrences of rule_class:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.set_option('cm_option', 'exact', rule_class=RuleIRV) >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None
If rule_class is None (default), do this for all voting rules:
>>> voting_rule_tasks = VotingRuleTasks( ... voting_systems=[RuleExhaustiveBallot, RuleIRV], ... study_rule_criteria=StudyRuleCriteria(manipulation_criteria=['is_cm_'], manipulation_only=True, ... numerical_criteria=[]) ... ) >>> voting_rule_tasks.set_option('cm_option', 'exact') >>> print(voting_rule_tasks) VotingRuleTasks with: voting_system: RuleExhaustiveBallot options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None voting_system: RuleIRV options: {'cm_option': 'exact'} StudyRuleCriteria with: manipulation_criteria: is_cm_ manipulation_criteria_c: None result_criteria: None utility_criteria: None numerical_criteria: None