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

Simulez votre résultat d'une élection à suffrage majoritaire !
Précisez le pourcentage obtenu par chaque catégorie
Pour chaque catégorie d'électeurs, précisez la note de chaque candidat.

Pourcentage de chaque catégorie:

Fillon Le Pen Macron Mélenchon
Hamon Dupont-Aignan Autres

Notez que la somme des pourcentages soit faire 100% pour que le résultat aie un sens.
Le programme ne vérifie pas cet consigne !

Notez que la somme des pourcentages de chaque ligne soit faire 100% pour que le résultat aie un sens.

Excellent Bien Passable Insuffisant A rejeter
Fillon :
Le Pen :
Macron :
Mélenchon :
Hamon :
Dupont-Aignan :
Autres :

Notez que la somme des pourcentages de chaque ligne soit faire 100% pour que le résultat aie un sens.

Excellent Bien Passable Insuffisant A rejeter
Fillon :
Le Pen :
Macron :
Mélenchon :
Hamon :
Dupont-Aignan :
Autres :

Notez que la somme des pourcentages de chaque ligne soit faire 100% pour que le résultat aie un sens.

Excellent Bien Passable Insuffisant A rejeter
Fillon :
Le Pen :
Macron :
Mélenchon :
Hamon :
Dupont-Aignan :
Autres :

Notez que la somme des pourcentages de chaque ligne soit faire 100% pour que le résultat aie un sens.

Excellent Bien Passable Insuffisant A rejeter
Fillon :
Le Pen :
Macron :
Mélenchon :
Hamon :
Dupont-Aignan :
Autres :

Notez que la somme des pourcentages de chaque ligne soit faire 100% pour que le résultat aie un sens.

Excellent Bien Passable Insuffisant A rejeter
Fillon :
Le Pen :
Macron :
Mélenchon :
Hamon :
Dupont-Aignan :
Autres :

Notez que la somme des pourcentages de chaque ligne soit faire 100% pour que le résultat aie un sens.

Excellent Bien Passable Insuffisant A rejeter
Fillon :
Le Pen :
Macron :
Mélenchon :
Hamon :
Dupont-Aignan :
Autres :

Notez que la somme des pourcentages de chaque ligne soit faire 100% pour que le résultat aie un sens.

Excellent Bien Passable Insuffisant A rejeter
Fillon :
Le Pen :
Macron :
Mélenchon :
Hamon :
Dupont-Aignan :
Autres :

'; // 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 " "; echo ""; echo ""; $line = 1; $i=0; while($line<8){ echo ''; $row = 1; while ($row<6){ echo ""; $row++; } echo ""; } echo "
Excellent Bien Passable Insuffisant A rejeter
'.$name[$line++].'
". $numbers[$i++] ."
"; } if(isset($_POST['submit'])) // call the function display if something is submitted { display(); } ?>

This page has been accessed $counterVal times.
Designed by Vincent Mathieu

"; ?>