Voting-Systems-Simulation

Simulation de diverses systèmes de votes

Check out on GitHub

Voting-Systems-Simulation

Read in English

Documentation :


Sommaire

Ce que c’est

Ce dépôt contient un script qui réalise des simulations de diverses méthodes de scrutin sur des données générées aléatoirement.

Les opinions sur le sujet de votre choix sont représentées comme des points dans un espace vectoriel de dimension finie. Cela signifie que les positions des électeurs et des candidats sont représentées comme des coordonnées dans un espace vectoriel qui peut être un plan, un espace en trois dimensions, ou plus.

Voici une image de ce à quoi ça ressemble

Elector and candidate positions illustration

Les buts de cette simulaiton sont de voir s’il existe des différences entre les méthodes de vote, et si ces différences existent, déterminer lesquelles sont les meilleures.

Si vous êtes juste intéressés par les résultats et que vous avez entièrement confiance, vous pouvez lire la section Travaux connexes puis passer directement à la section Interprétation des résultats.

Travaux connexes

Vous pourriez également être intéressé par cet article qui compare de nombreuses méthodes de vote, en expliquant comment elles fonctionnent et quels sont leurs défauts.d their flaws.

Voting-Systems-Comparison

Cette simulation est inspirée par diverses vidéos

Comment exécuter

Si vous voulez lancer la simulation, vous pouvez faire comme suit

git clone https://github.com/Relex12/Voting-Systems-Simulation.git
cd Voting-Systems-Simulation
python3 simulation.py

Ce qui vous donnera quelque chose de similaire à ceci

plurality:               6
two round:               9
instant runoff:          9
condorcet:               3
borda:                   3
approval:                3
majority judgement:      3

et produira une image dans img/position.png de la position des électeurs et des candidats.

Arguments de la ligne de commande

Vous pouvez afficher le message d’erreur en lançant la commande : python3 simulation.py -h

usage: simulation.py [-h] [-v] [-d DIMENSION] [-e ELECTORS] [-c CANDIDATES]
                     [-t THRESHOLD] [--noplot] [-r REPEAT] [-o OUTPUT]
                     [--test TEST]

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -d DIMENSION, --dimension DIMENSION
                        number of dimensions to use
  -e ELECTORS, --electors ELECTORS
                        number of electors for the simulation
  -c CANDIDATES, --candidates CANDIDATES
                        number of candidates for the simulation
  -t THRESHOLD, --threshold THRESHOLD
                        rejection threshold for scoring methods
  --noplot              creates the positions image
  -r REPEAT, --repeat REPEAT
                        number of repetitions of the simulation
  -o OUTPUT, --output OUTPUT
                        output file to write the results
  --test TEST           number of times to test the method given in the test()
                        function

Introduction au code

Le code est séparé en deux modules

Documentation

La documentation des modules simulation.py et voting.py est construite avec pdoc3. Elle est disponible dans le dossier doc/ du dépôt. Vous pouvez la consulter en ligne

Pour générer la documentation, lancez la commande pdoc --html -o doc/ *.py . Vous pouvez aussi la regarder dans votre navigateur à l’adresse localhost:8080 en exécutant pdoc --http : *.py.

Taux d’indécidabilité

Parfois, certaines méthodes ne sont juste pas capable de sélectionner un vainqueur, à cause du paradoxe de Condorcet ou à cause de cas d’égalité. Quand cela arrive, un objet None est retourné par la méthode correspondante. Pour estimer ce taux, les méthodes ont été testées 100000 (cent mille) fois chacune, en utilisant l’argument de ligne de commande --test, avec les valeurs par défaut de 2 dimensions, 50 électeurs et 10 candidats.

Voici les résultats

Méthode Nom français Taux estimé (%)
Plurality Scrutin majoritaire à un tour 0.0
Two rounds Scrutin majoritaire à deux tours 0.0
Instant Runoff Vote alternatif 0.0
Condorcet Méthode de Condorcet 2.11
Borda Méthode de Borda 0.002
Approval Vote par approbation 11.235
Majority jugement Jugement majoritaire 2.01

Notes :

Défauts de la modélisation

Avant de lire l’interprétation des résultats, il y a quelques défauts que vous pourriez avoir envie de connaître. Ces défauts de signifient pas que la simulation est mauvaise, simplement que dans une problématique du monde réel, une telle approche ne pourrait être utilisée que par une entité omnisciente, ou alors va probablement produire des écarts significatifs avec les résultats observés.

Note : Pour certains de ces défauts, vous pourriez avoir envie de considérer que les variables utilisées dans la simulation sont données par une régression logistique réalisée sur les vraies variables utilisées pour évaluer la position de chacun. Ceci implique qu’il faut évaluer les positions sur encore plus de variables, ce qui est incompatible avec le défaut évaluation omnisciente des positions. De plus, une régression logistique va induire au mieux une légère approximation, ce qui va accentuer le défaut représentation dimensionnelle.

Interprétation des résultats

Afin de mieux comprendre les résultats, vous pouvez lancer quelques fois la simulation et tenter de comprendre ce qu’il se passe entre les différents résultats des méthodes et l’ensemble des positions générées.

La première chose que l’on peut observer est que les résultats sont assez différents d’une méthode à l’autre. On peut voir que certaines méthodes donnent souvent des résultats similaires, ce qui peut ressembler à des correlations, mais la correspondance n’est pas systématique. Une analyse statistique est nécessaire pour établir de plus fortes corrélations. On peut remarquer que plusieurs de ces méthodes donne un vainqueur proche de la position moyenne des électeurs, pendant que d’autres favorisent les candidats sans trop d’autres adversaires dans leur zone.

S’il y a une seule question que vous devez retenir, c’est celle-ci :

Préféreriez-vous choisir comme vainqueur un candidat pour lequel personne n’était vraiment contre, ou un candidat qui possède plus de partisans que d’opposants, par rapport à ses concurrents ?

Interprétation personnelle : Dans ce paragraphe et dans le prochain, et uniquement dans ceux-ci, je donne mon opinion sur l’interprétation des résultats : je pense que les méthodes qui promeut des candidats isolés des autres ne sont pas les meilleures, car les résultats dépendent plus de la position des candidats que de celle des électeurs. Or, c’est bien la position de l’électorat que le vote est censé refléter. Dans ce sens, les meilleurs méthodes de vote sont, selon moi, celles qui permettent aux électeurs de juger les candidats indépendamment.

Dans un système qui favorise les candidats isolés, les candidats qui pourraient mieux représenter la position des électeurs doivent lutter les uns contre les autres, et c’est cette compétition qui permet aux candidats isolés de gagner.

Travail restant

Pour améliorer la simulation, la première chose à faire est d’ajouter d’autres méthodes de vote. Seulement sept ont été implémentées ici, mais de nombreuses autres existent, en plus de diverses variantes possibles, donnant des résultats différents.

Une fois que plus de méthodes de vote auront été implémentées, il serait bien de réaliser une étude statistique de corrélation entre les méthodes. L’idée serait de lancer la simulation un grand nombre de fois en stockant les résultats dans un fichier, puis d’estimer entre chaque paire de méthodes le taux d’accord, c’est-à-dire la fréquence à laquelle les méthodes donnent le même résultat.

Enfin, pour compléter cette analyse, d’autres variables telles que des indicateurs de distribution (médiane, moyenne et écart-type) et des indicateurs de densité (pour les électeurs et les candidats) pourraient aussi être utilisés pour trouuver des corrélations et être capable de conclure de manière rigoureuse sur le sujet des méthodes de vote.

Licence

Ce projet est un petit projet. Le code source est donné librement à la communauté GitHub, sous la seule licence MIT, qui n’est pas trop restrictive.