Introduction : le jugement majoritaire
Le premier tour de l'élection présidentielle française de 2017
s'est joué de peu entre les 4 principaux candidats.
Il y a presque de 55% d'électeurs frustrés de ne pas voir leur candidat au second tour.
Ces électeurs peuvent penser que ce mode de scrutin à deux tour n'est pas juste.
On peut en effet montrer qu'il existe un meilleur mode de scrutin.
Je n'entrerai pas dans les détails des modes de scrutin. Par contre,
je vous invite à voir cette
vidéo de Science étonnante .
David y introduit plusieurs modes de scrutin et présente certains paradoxes qui en découlent.
Comme mentionné é la fin de la vidéo, il existe un mode de scrutin qui
évite tous les paradoxes (et frustrations) des autres modes de scrutin.
Cette manière de voter s'appelle le jugment majoritaire.
David a également écrit un
billet sur son blog à propos de ce mode de scrutin.
Vous pouvez aussi regarder
l'article sur Wikipedia sur ce sujet.
Avec le jugement majoritaire, l'électeur attribue une note à chaque candidat.
Cette note peut etre 'excellent', 'bien', 'passable', 'insuffisant', 'à rejeter'
(j'ignore pour simplifier les notes 'très bien' et 'assez bien').
Je propose ici de tester le mode de jugement majoritaire sur
l'élection présidentielle française de 2017.
Pour ce faire j'ai divisé les électeurs en 7 catégories.
Ces catégories correspondent aux électeurs des 6 principaux candidats :
Fillon, Le Pen, Macron, Mélenchon, Hamon et Dupont-Aignan.
La dernière catégorie représente les électeurs des 5 autres candidats.
Pour chaque catégorie, j'ai évalué comment les électeurs
voteraient lors d'un scrutin à jugement majoritaire.
Dans mon exemple ci-dessous, les électeurs de Fillon donnent les notes suivantes :
100% attribuent la note 'excellent' à Fillon.
33% attribuent la note 'passable' à Le Pen et 67% lui attribue la note 'à rejeter'.
33% attribuent la note 'passable' à Macron et 67% lui attribue la note 'à rejeter'.
100% attribuent la note 'à rejeter' à Mélenchon.
100% attribuent la note 'à rejeter' à Hamon.
100% attribuent la note 'bien' à Dupont-Aignan.
100% attribuent la note 'à rejeter' aux autres candidats.
Je fais la même chose pour chacune des catégorie. Ensuite je pondère chaque catégorie par le score
du candidat qu'elle représente. J'obtiens alors le résultat suivant :
Pour déterminer le président on cumule les résultats :
La note majoritaire d'un candidat est celle attribuée par plus de la moitié de la population.
Dans mon exemple, Hamon obtient le jugement majoritaire 'bien' (car plus de la moitié des électeurs
lui attribue la mention 'bien' ou supérieure).
Fillon et Mélenchon obtient le jugement majoritaire 'passable',
Dupont-Aignan obtient 'insuffisant' et
Le Pen, Macron et les autres candidats 'à rejeter'.
Hamon est nommé Président.
En cas d'égalite pour le jugement majoritaire on regarde le plus grand pourcentage.
Si, dans mon exemple, Hamon n'avait pas obtenu plus de 50% de mention 'bien' et supérieur,
Fillon, Mélenchon et Hamon aurait été à égalite (jugement majoritaire 'passable')
et Mélenchon aurait été président car il y le plus grand pourcentage (73.35%).
Mon exemple était motivé par les
sondages des reports des voix du premier tour .
Il est évidement très sujectif. Hamon était élu Président car,
dans mon exemple, les électeurs de Macron et de Mélenchon lui attribue la mention 'bien'.
Vous avez certainement un
autre avis sur les notes à attribuer à chaque candidat.
C'est pourquoi vous pouvez modifier mon exemple dans la section simulation.
Amusez-vous bien ! N'hésitez pas à m'envoyer vos commentaires à vincent POINT mathie AT gmx POINT com.
Mon exemple
Vous pouvez télécharger le code C et les fichiers contenant ma solution :resultats.txt , fillon.txt , lepen.txt , macron.txt , melenchon.txt , hamon.txt , dupont.txt , autres.txt , final.txt , finalcumules.txt , president.txt .
Choix des électeurs de Fillon :
Choix des électeurs de Le Pen :
Choix des électeurs de Macron :
Choix des électeurs de Mélenchon :
Choix des électeurs de Hamon :
Choix des électeurs de Dupont-Aignan :
Choix des électeurs des autres candidats :
Simulation
'; // print horizontal line echo 'Results
'; $rootPath = getcwd(); // change the directory chdir('elections'); // because the execution write files // in the current directory // pourcentage de chaque cat使orie $pour = array($_POST["pf"], " ",$_POST["pl"], " ",$_POST["pm"], " ", $_POST["px"], " ",$_POST["ph"]," ",$_POST["pd"]," ",$_POST["pa"]); file_put_contents('resultats.txt', $pour); // 四ecteurs de Fillon $f1 = array($_POST["f11"], " ",$_POST["f12"], " ",$_POST["f13"], " ",$_POST["f14"], " ",$_POST["f15"]); $f2 = array("\n",$_POST["f21"], " ",$_POST["f22"], " ",$_POST["f23"], " ",$_POST["f24"], " ",$_POST["f25"]); $f3 = array("\n",$_POST["f31"], " ",$_POST["f32"], " ",$_POST["f33"], " ",$_POST["f34"], " ",$_POST["f35"]); $f4 = array("\n",$_POST["f41"], " ",$_POST["f42"], " ",$_POST["f43"], " ",$_POST["f44"], " ",$_POST["f45"]); $f5 = array("\n",$_POST["f51"], " ",$_POST["f52"], " ",$_POST["f53"], " ",$_POST["f54"], " ",$_POST["f55"]); $f6 = array("\n",$_POST["f61"], " ",$_POST["f62"], " ",$_POST["f63"], " ",$_POST["f64"], " ",$_POST["f65"]); $f7 = array("\n",$_POST["f71"], " ",$_POST["f72"], " ",$_POST["f73"], " ",$_POST["f74"], " ",$_POST["f75"]); // print the parameters in file $name = "fillon.txt"; file_put_contents($name, $f1); file_put_contents($name, $f2, FILE_APPEND ); file_put_contents($name, $f3, FILE_APPEND ); file_put_contents($name, $f4, FILE_APPEND ); file_put_contents($name, $f5, FILE_APPEND ); file_put_contents($name, $f6, FILE_APPEND ); file_put_contents($name, $f7, FILE_APPEND ); // 四ecteurs de Le Pen $l1 = array( $_POST["l11"], " ",$_POST["l12"], " ",$_POST["l13"], " ",$_POST["l14"], " ",$_POST["l15"]); $l2 = array("\n",$_POST["l21"], " ",$_POST["l22"], " ",$_POST["l23"], " ",$_POST["l24"], " ",$_POST["l25"]); $l3 = array("\n",$_POST["l31"], " ",$_POST["l32"], " ",$_POST["l33"], " ",$_POST["l34"], " ",$_POST["l35"]); $l4 = array("\n",$_POST["l41"], " ",$_POST["l42"], " ",$_POST["l43"], " ",$_POST["l44"], " ",$_POST["l45"]); $l5 = array("\n",$_POST["l51"], " ",$_POST["l52"], " ",$_POST["l53"], " ",$_POST["l54"], " ",$_POST["l55"]); $l6 = array("\n",$_POST["l61"], " ",$_POST["l62"], " ",$_POST["l63"], " ",$_POST["l64"], " ",$_POST["l65"]); $l7 = array("\n",$_POST["l71"], " ",$_POST["l72"], " ",$_POST["l73"], " ",$_POST["l74"], " ",$_POST["l75"]); // print the parameters in file $name = "lepen.txt"; file_put_contents($name, $l1); file_put_contents($name, $l2, FILE_APPEND ); file_put_contents($name, $l3, FILE_APPEND ); file_put_contents($name, $l4, FILE_APPEND ); file_put_contents($name, $l5, FILE_APPEND ); file_put_contents($name, $l6, FILE_APPEND ); file_put_contents($name, $l7, FILE_APPEND ); // 四ecteurs de Macron $m1 = array( $_POST["m11"], " ",$_POST["m12"], " ",$_POST["m13"], " ",$_POST["m14"], " ",$_POST["m15"]); $m2 = array("\n",$_POST["m21"], " ",$_POST["m22"], " ",$_POST["m23"], " ",$_POST["m24"], " ",$_POST["m25"]); $m3 = array("\n",$_POST["m31"], " ",$_POST["m32"], " ",$_POST["m33"], " ",$_POST["m34"], " ",$_POST["m35"]); $m4 = array("\n",$_POST["m41"], " ",$_POST["m42"], " ",$_POST["m43"], " ",$_POST["m44"], " ",$_POST["m45"]); $m5 = array("\n",$_POST["m51"], " ",$_POST["m52"], " ",$_POST["m53"], " ",$_POST["m54"], " ",$_POST["m55"]); $m6 = array("\n",$_POST["m61"], " ",$_POST["m62"], " ",$_POST["m63"], " ",$_POST["m64"], " ",$_POST["m65"]); $m7 = array("\n",$_POST["m71"], " ",$_POST["m72"], " ",$_POST["m73"], " ",$_POST["m74"], " ",$_POST["m75"]); // print the parameters in file $name = "macron.txt"; file_put_contents($name, $m1); file_put_contents($name, $m2, FILE_APPEND ); file_put_contents($name, $m3, FILE_APPEND ); file_put_contents($name, $m4, FILE_APPEND ); file_put_contents($name, $m5, FILE_APPEND ); file_put_contents($name, $m6, FILE_APPEND ); file_put_contents($name, $m7, FILE_APPEND ); // 四ecteurs de M四enchon $x1 = array( $_POST["x11"], " ",$_POST["x12"], " ",$_POST["x13"], " ",$_POST["x14"], " ",$_POST["x15"]); $x2 = array("\n",$_POST["x21"], " ",$_POST["x22"], " ",$_POST["x23"], " ",$_POST["x24"], " ",$_POST["x25"]); $x3 = array("\n",$_POST["x31"], " ",$_POST["x32"], " ",$_POST["x33"], " ",$_POST["x34"], " ",$_POST["x35"]); $x4 = array("\n",$_POST["x41"], " ",$_POST["x42"], " ",$_POST["x43"], " ",$_POST["x44"], " ",$_POST["x45"]); $x5 = array("\n",$_POST["x51"], " ",$_POST["x52"], " ",$_POST["x53"], " ",$_POST["x54"], " ",$_POST["x55"]); $x6 = array("\n",$_POST["x61"], " ",$_POST["x62"], " ",$_POST["x63"], " ",$_POST["x64"], " ",$_POST["x65"]); $x7 = array("\n",$_POST["x71"], " ",$_POST["x72"], " ",$_POST["x73"], " ",$_POST["x74"], " ",$_POST["x75"]); // print the parameters in file $name = "melenchon.txt"; file_put_contents($name, $x1); file_put_contents($name, $x2, FILE_APPEND ); file_put_contents($name, $x3, FILE_APPEND ); file_put_contents($name, $x4, FILE_APPEND ); file_put_contents($name, $x5, FILE_APPEND ); file_put_contents($name, $x6, FILE_APPEND ); file_put_contents($name, $x7, FILE_APPEND ); // 四ecteurs de Hamon $h1 = array( $_POST["h11"], " ",$_POST["h12"], " ",$_POST["h13"], " ",$_POST["h14"], " ",$_POST["h15"]); $h2 = array("\n",$_POST["h21"], " ",$_POST["h22"], " ",$_POST["h23"], " ",$_POST["h24"], " ",$_POST["h25"]); $h3 = array("\n",$_POST["h31"], " ",$_POST["h32"], " ",$_POST["h33"], " ",$_POST["h34"], " ",$_POST["h35"]); $h4 = array("\n",$_POST["h41"], " ",$_POST["h42"], " ",$_POST["h43"], " ",$_POST["h44"], " ",$_POST["h45"]); $h5 = array("\n",$_POST["h51"], " ",$_POST["h52"], " ",$_POST["h53"], " ",$_POST["h54"], " ",$_POST["h55"]); $h6 = array("\n",$_POST["h61"], " ",$_POST["h62"], " ",$_POST["h63"], " ",$_POST["h64"], " ",$_POST["h65"]); $h7 = array("\n",$_POST["h71"], " ",$_POST["h72"], " ",$_POST["h73"], " ",$_POST["h74"], " ",$_POST["h75"]); // print the parameters in file $name = "hamon.txt"; file_put_contents($name, $h1); file_put_contents($name, $h2, FILE_APPEND ); file_put_contents($name, $h3, FILE_APPEND ); file_put_contents($name, $h4, FILE_APPEND ); file_put_contents($name, $h5, FILE_APPEND ); file_put_contents($name, $h6, FILE_APPEND ); file_put_contents($name, $h7, FILE_APPEND ); // 四ecteurs de Dupont-Aignan $d1 = array( $_POST["d11"], " ",$_POST["d12"], " ",$_POST["d13"], " ",$_POST["d14"], " ",$_POST["d15"]); $d2 = array("\n",$_POST["d21"], " ",$_POST["d22"], " ",$_POST["d23"], " ",$_POST["d24"], " ",$_POST["d25"]); $d3 = array("\n",$_POST["d31"], " ",$_POST["d32"], " ",$_POST["d33"], " ",$_POST["d34"], " ",$_POST["d35"]); $d4 = array("\n",$_POST["d41"], " ",$_POST["d42"], " ",$_POST["d43"], " ",$_POST["d44"], " ",$_POST["d45"]); $d5 = array("\n",$_POST["d51"], " ",$_POST["d52"], " ",$_POST["d53"], " ",$_POST["d54"], " ",$_POST["d55"]); $d6 = array("\n",$_POST["d61"], " ",$_POST["d62"], " ",$_POST["d63"], " ",$_POST["d64"], " ",$_POST["d65"]); $d7 = array("\n",$_POST["d71"], " ",$_POST["d72"], " ",$_POST["d73"], " ",$_POST["d74"], " ",$_POST["d75"]); // print the parameters in file $name = "dupont.txt"; file_put_contents($name, $d1); file_put_contents($name, $d2, FILE_APPEND ); file_put_contents($name, $d3, FILE_APPEND ); file_put_contents($name, $d4, FILE_APPEND ); file_put_contents($name, $d5, FILE_APPEND ); file_put_contents($name, $d6, FILE_APPEND ); file_put_contents($name, $d7, FILE_APPEND ); // 四ecteurs des autres candidats $a1 = array( $_POST["a11"], " ",$_POST["a12"], " ",$_POST["a13"], " ",$_POST["a14"], " ",$_POST["a15"]); $a2 = array("\n",$_POST["a21"], " ",$_POST["a22"], " ",$_POST["a23"], " ",$_POST["a24"], " ",$_POST["a25"]); $a3 = array("\n",$_POST["a31"], " ",$_POST["a32"], " ",$_POST["a33"], " ",$_POST["a34"], " ",$_POST["a35"]); $a4 = array("\n",$_POST["a41"], " ",$_POST["a42"], " ",$_POST["a43"], " ",$_POST["a44"], " ",$_POST["a45"]); $a5 = array("\n",$_POST["a51"], " ",$_POST["a52"], " ",$_POST["a53"], " ",$_POST["a54"], " ",$_POST["a55"]); $a6 = array("\n",$_POST["a61"], " ",$_POST["a62"], " ",$_POST["a63"], " ",$_POST["a64"], " ",$_POST["a65"]); $a7 = array("\n",$_POST["a71"], " ",$_POST["a72"], " ",$_POST["a73"], " ",$_POST["a74"], " ",$_POST["a75"]); // print the parameters in file $name = "autres.txt"; file_put_contents($name, $a1); file_put_contents($name, $a2, FILE_APPEND ); file_put_contents($name, $a3, FILE_APPEND ); file_put_contents($name, $a4, FILE_APPEND ); file_put_contents($name, $a5, FILE_APPEND ); file_put_contents($name, $a6, FILE_APPEND ); file_put_contents($name, $a7, FILE_APPEND ); exec('./election.exe'); // run the program chdir($rootPath); echo ' Voici les résultats de votre simulation :'; echo 'Les notes de chaque candidat (en pourcentage) :
'; displaytable(0,"final.txt"); echo '
Les notes cumulées de chaque candidat (en pourcentage) :
'; displaytable(0,"finalcumules.txt"); $han = fopen("elections/president.txt", "r") or die("Unable to open file!"); $president = fgets($han); echo "
"; echo "Le président est ".$president.""; } function displaytable($nom, $fichier) { $name = array(" ","Fillon", "Le Pen", "Macron", "Mélenchon", "Hamon", "Dupont-Aignan", "Autres"); $col = array("black", 'black',"black",'black','black','black','black','black','black'); $col[$nom] = "red"; $h = fopen("elections/".$fichier, "r") or die("Unable to open file!"); if($h) { while (($data = fgetcsv($h, 1000, " ")) !== FALSE) { foreach($data as $num) $numbers[] = $num; } fclose($h); } echo "
"; echo " | Excellent | Bien | Passable | Insuffisant | A rejeter | "; echo "
'.$name[$line++].' | ';
$row = 1;
while ($row<6){
echo "". $numbers[$i++] ." | "; $row++; } echo "