History#
0.11.0 (2024-10-18): Conversion to Poetry#
Conversion to Poetry instead of Setuptools.
The official compatibility of SVVAMP is now with Python 3.10, 3.11, and 3.12.
0.10.0 (2023-09-29): New profile generators, voting rules and CM algorithms#
Add
GeneratorProfileIc
: Profile generator using the ‘Impartial Culture’ model.Add
GeneratorProfilePerturbedCulture
: Profile generator using the ‘Perturbed Culture’ model.Add
GeneratorProfileUnanimous
: Profile generator with identical voters.Add
RuleKApproval
: k-Approval.Add
RuleSlater
: Slater method.Improve CM algorithms for
RuleBaldwin
,RuleCopeland
,RuleIRVDuels
,RuleKemeny
,RuleKimRoush
,RuleNanson
,RuleRankedPairs
, andRuleSplitCycle
.
0.9.1 (2022-03-24): Compatibility issues#
GeneratorProfileIanc
is now compatible with Python < 3.8.However, starting from this release, the official compatibility of SVVAMP is with Python 3.8, 3.9 and 3.10 (no support for Python 3.6 and 3.7).
0.9.0 (2022-03-24): GeneratorProfileIanc#
Add
GeneratorProfileIanc
: profile generator for the Impartial, Anonymous and Neutral Culture.
0.8.3 (2021-08-01): Fix bug in ExperimentAnalyzer#
Fix bug in
ExperimentAnalyzer
: forStudyRuleCriteria.numerical_criteria
, the aggregation was not done properly.Several cosmetic changes in
ExperimentsCompiler
.
0.8.2 (2021-07-29): Necessary coalition size to break IRV-Immunity#
Add
Profile.necessary_coalition_size_to_break_irv_immunity
: necessary coalition size to break IRV immunity (for each candidate different from the IRV-immune candidate, if one exists).Use this notion to improve the bound
necessary_coalition_size_cm_
forRuleCondorcetAbsIRV
,RuleCondorcetVtbIRV
,RuleExhaustiveBallot
,RuleICRV
,RuleIRV
,RuleIRVAverage
,RuleSmithIRV
,RuleTideman
andRuleWoodall
.
0.8.1 (2021-07-29): Use IRV-immune candidate for UM#
RuleCondorcetAbsIRV
,RuleCondorcetVtbIRV
,RuleExhaustiveBallot
,RuleICRV
,RuleIRV
,RuleIRVAverage
,RuleSmithIRV
,RuleTideman
andRuleWoodall
: add a precheck for UM based on the notion of IRV-immune candidate.
0.8.0 (2021-07-29): IRV-immune candidate#
Introduce the notion of IRV-immune candidate. A candidate
w
is IRV-immune iff in any subset of candidates containingw
, the plurality score ofw
is more thann_v / card(subset)
. This implies that in IRV (and most related rules),w
is the winner and CM is impossible.Add
Profile.exists_irv_immune_candidate
: whether there exists an IRV-immune candidate.Add
Profile.c_might_be_there_when_cw_is_eliminated_irv_style
: whether a candidatec
might be present in a round where the Condorcet winner is eliminated, IRV-style. In IRV (and most related rules), this condition is necessary to be able to cast CM in favor ofc
.Use the above mentioned notions to improve the CM algorithm of
RuleCondorcetAbsIRV
,RuleCondorcetVtbIRV
,RuleExhaustiveBallot
,RuleICRV
,RuleIRV
,RuleIRVAverage
,RuleSmithIRV
,RuleTideman
andRuleWoodall
.Add a UM precheck before CM in
RuleSmithIRV
,RuleTideman
andRuleWoodall
.
0.7.0 (2021-07-28): Better bounds for CM#
Introduce a heuristic method to improve the bounds
necessary_coalition_size_cm_
andsufficient_coalition_size_cm_
in the case of rules based on rankings.Bug fix: in previous version (0.6.12), the IRV-CM precheck for UM was not activated for
RuleCondorcetVtbIRV
.
0.6.12 (2021-07-28): Fix bug in PluralityEliminationEngine#
Fix bug in
PluralityEliminationEngine
: the previous version used to modify the original profile, which was not desired.PluralityEliminationEngineProfileUM
relies only onpreferences_borda_rk
and not onpreferences_rk
. This acceleratesRuleSmithIRV
.RuleCondorcetAbsIRV
andRuleCondorcetVtbIRV
: before computing UM, we test whether IRV is CM. If not, then we can conclude that Condorcet-IRV is not CM, and in particular not UM.Minor acceleration for
RuleWoodall
when the IRV winner is in the Smith set.
0.6.11 (2021-07-28): Accelerate ProfileUM#
ProfileUM
: implement a dedicated implementation forplurality_scores_rk
andplurality_scores_ut
.
0.6.10 (2021-07-28): PluralityEliminationEngine#
Add
PluralityEliminationEngine
and its subclasses,PluralityEliminationEngineProfile
andPluralityEliminationEngineProfileUM
. This is used to speed up the computation of the winner forRuleExhaustiveBallot
,RuleICRV
,RuleIRVAverage
,IRVDuels
andRuleTideman
.
0.6.8 (2021-07-27): Accelerate Exhaustive Ballot and some related rules#
RuleExhaustiveBallot
,RuleCondorcetAbsIRV
andRuleCondorcetVtbIRV
: accelerate counting the ballots. This also speeds upRuleIRV
, which relies directly onRuleExhaustiveBallot
.
0.6.7 (2021-07-27): Accelerations#
The option
sort_voters
inProfile
and related classes (such asGeneratorProfile
and its subclasses) is now False by default.Rule
: accelerate exact IM, UM and CM (generic exact algorithms for ranking-based rules).RuleBaldwin
: accelerate counting the ballot and computing the winner (especially useful for exact UM).RuleSTAR
: accelerate TM.RuleICRV
,RuleIRVAverage
,RuleSmithIRV
,RuleTideman
,RuleWoodall
: accelerate CM.Improve the management of options in
RuleExhaustiveBallot
andRuleIRV
. In some (common) cases, it accelerates the computation of related voting rules (RuleCondorcetAbsIRV
, etc).
0.6.6 (2021-07-27): Fix bug in ProfileUM#
Fix bug:
preferences_rk
was an array of floats, it is now an array of integers.
0.6.5 (2021-07-27): Accelerations#
Accelerate
ProfileSubsetCandidates
(used for IIA but also for some voting rules such asRuleTideman
).Add
ProfileUM
. This is used to speed up the generic exact algorithm for UM in the case of voting rules based on rankings.RuleTideman
: accelerate counting the ballot and computing the winner (especially useful for exact UM).Accelerate
preferences_ut_to_matrix_duels_ut
.Accelerate
matrix_victories_to_smith_set
.
0.6.4 (2021-07-27): Option “faster” for Maximin#
RuleMaximin
: implementcm_option=faster
, which is as precise asfast
to computeis_cm_
, less precise to compute the boundsnecessary_coalition_size_cm_
andsufficient_coalition_size_cm_
, but a lot faster.
0.6.3 (2021-07-27): Accelerate ProfileSubsetCandidates#
Profile
now has a parameterpreferences_borda_rk
. At initialization, it can be given instead ofpreferences_rk
.ProfileSubsetCandidates
: accelerate the initialization method.
0.6.2 (2021-07-27): Accelerate Maximin#
Accelerate
RuleMaximin.necessary_coalition_size_cm_
andRuleMaximin.sufficient_coalition_size_cm_
.Add
RuleMaximin.sufficient_coalition_size_um_c_
: number of manipulators that are sufficient (and necessary) for UM.
0.6.1 (2021-07-27): Accelerate Profile#
Accelerate
Profile
: lazy evaluation of attributespreferences_rk
,preferences_ut
,preferences_borda_rk
andpreferences_borda_ut
. This leads to a very significant acceleration for many methods (typically TM, UM and IIA, but also CM and IM for some voting rules).
0.6.0 (2021-07-26): ExperimentsCompiler#
Add
ExperimentsCompiler
: draw plots and prepare tables based on the results computed byExperimentAnalyzer
on several experiments.Accelerate
RuleMajorityJudgment.necessary_coalition_size_cm_
andRuleMajorityJudgment.sufficient_coalition_size_cm_
.
0.5.1 (2021-07-24): Fix PyPI deployment#
Fix PyPI deployment.
0.5.0 (2021-07-24): Meta#
This release focuses on “meta” tools that make the simulations easier.
Add
StudyProfileCriteria
: a set of criteria to study for the simulator about the profiles.Add
StudyRuleCriteria
: a set of criteria to study for the simulator about one or several voting rules.Add
VotingRuleTasks
: a set of tasks for the simulator, i.e. which voting rules with which options and which criteria about them.Add
ExperimentAnalyzer
: a simulator designed to study small variations of a given profile.
New features for
Rule
:Add
check_option_allowed
: check whether a pair (option, value) is allowed.Add
cm_power_index_
: CM power index.Add
elects_condorcet_winner_rk_even_with_cm_
: True if there is a Condorcet winner, she is elected by sincere voting and it is not CM.Add
is_tm_or_um_
: True iff the profile is TM or UM.Add
log_
: log corresponding to a particular manipulation method.Add
nb_candidates_cm_
: number of candidates who can benefit from CM.Add
relative_social_welfare_w_
: relative social welfare of the winner.Add
worst_relative_welfare_with_cm_
: worst relative social welfare (sincere winner or candidate who can benefit from CM).Each rule now has two class attributes
full_name
(name of the rule) andabbreviation
(abbreviation of the name of the rule). For example, forRuleApproval
, it isApproval Voting
andAV
respectively.options_parameters
is now a class attribute.Accelerate the generic brute-force algorithm for exact UM when the rule is based on rankings.
New features for
Profile
:Add property
relative_social_welfare_c
: relative social welfare of each candidate.preferences_rk
,preferences_ut
,preferences_borda_rk
andpreferences_borda_ut
are now properties.
Minor changes:
GeneratorProfile
and all its subclasses now have a parametersort_voters
, which is simply passed toProfile
when creating each profile.ProfileGeneratorNoisedFile
is renamed toGeneratorProfileNoisedFile
, for the sake of consistency with other profile generators.RULE_CLASSES
is renamed toALL_RULE_CLASSES
.Add utility functions
indent
andpseudo_bool_not
.
0.4.3 (2021-07-21): Accelerations#
Rule
: accelerate trivial manipulation (TM) for rules based on rankings.Profile
: computepreferences_borda_ut
only when needed. In particular, if often accelerates trivial manipulation (which relies on examining an alternate Profile object, with trivial strategy for manipulators).RuleMajorityJudgment
,RuleRangeVoting
andRuleSTAR
: accelerate the computation of the ballots.
0.4.2 (2021-07-20): Accelerate plurality_scores_ut#
Accelerate
Profile.plurality_scores_ut
. As an example, for a profile with 65,000 voters and 5 candidates, the new version is approximately 10 times faster.
0.4.1 (2021-07-20): Fix Missing Subpackage in Deployment#
Fix bug: in some distributions, some subpackages of Svvamp were not included.
0.4.0 (2021-07-19): Black, Copeland, Split Cycle, STAR#
Add
RuleBlack
.Add
RuleCopeland
.Add
RuleSplitCycle
.Add
RuleSTAR
.In
RuleRangeVoting
andRuleMajorityJudgment
, add an attributeallowed_grades
: a list of the allowed grades.
0.3.0 (2021-07-16): New CM Algorithms for Smith-IRV-Like Rules#
New CM algorithms for Smith-IRV-like rules:
New CM algorithms for
RuleICRV
,RuleSmithIRV
,RuleTideman
,RuleWoodall
andRuleIRVAverage
.Add
RuleIRV.example_ballots_cm_c_
andRuleIRV.example_ballots_cm_w_against_
: examples of manipulating ballots (used as heuristic to manipulate Smith-IRV and similar rules).In
RuleCondorcetAbsIRV
andRuleCondorcetVtbIRV
, the former optionalmost_exact
is renamed tovery_slow
, for the sake of consistency with Smith-IRV and similar voting rules.
Improve imports/exports:
ProfileFromFile
can now import a CVR (cast vote record) file.ProfileFromFile
has a new parametersort_candidates
: sort the candidates from strongest to weakest (in a Black method sense).Add
Profile.to_csv
: export the utilities to a csv file.
Add
Rule.options
: a dictionary with all the options of a rule.Bug fixes:
Fix a major bug in
RuleTideman
: ballots were not counted correctly.Fix a bug in
RuleExhaustiveBallot
andRuleIRV
: applying a voting rule to a profile was able to change the options of another (related) rule.
0.2.0 (2021-07-13): Smith-IRV and Similar Voting Rules#
A
Profile
object can now compute its Smith set (also called “top cycle”):smith_set_rk
,smith_set_rk_ctb
,smith_set_ut_abs
,smith_set_ut_abs_ctb
,smith_set_ut_rel
,smith_set_ut_rel_ctb
.Add Smith-IRV.
Add Tideman’s rule.
Add Woodall’s rule.
Add constant
RULE_CLASSES
: list of all the rule classes.Tools that are mostly dedicated to developers:
A global option allows to throw an error when an uncovered portion of code is reached.
Add
Profile.to_doctest_string
.Add
Rule._set_random_options
.Add
Rule._random_instruction
.
0.1.2 (2021-07-12): Fix Release Number#
Fix release number.
0.1.1 (2021-07-12): Fix Deployment#
Fix deployment on PyPI.
0.1.0 (2021-07-12): Complete Refactoring#
Refactor the code completely. New architecture, especially for
Rule
(formerlyElection
), avoiding diamond inheritance. Rename most classes, properties and methods.Cover the code with tests. Print a message when execution reaches an uncovered part of the code.
Fix some minor bugs.
Documentation in numpy style.
Tutorials are now Jupyter notebooks.
New rules: Kim-Roush and IRV-Average.
0.0.4 (2015-03-10): Fix a Bug in Plurality#
Correct a minor bug in Plurality.IM (voters_IM is now updated).
0.0.3 (2015-02-28): Miscellaneous Minor Improvements#
Rename functions and attributes with suffix _vtb to _rk.
Allow to define a population by both utilities and rankings.
Add shift to Euclidean box model.
Range voting / Majority Judgment: with a discrete set of grades, send to closest authorized grades.
0.0.2 (2015-02-16): SVVAMP’s Core Features#
8 population models and 23 voting systems.
0.0.1 (2015-02-14): First Release#
First release on PyPI.