Le but de ce travail est de permettre à nos concitoyens de mieux appréhender certains concepts de la science économique (qui n'est pas une science exacte mais une science de l'homme) par le calcul de modèles simplistes présentés sous forme de jeux. En effet, le jeu et l'expérimentation exacte, en plus de constituer une excellente pédagogie, constituent un vecteur de propagande efficace via l'Internet.
L'expérimentation est exacte. L'interprétation que l'on en fait sur le monde réel ne l'est pas. Les modèles sont décrits dans un langage formel facilement compréhensible. Les modèles se perfectionnent pour introduire de nouveaux indicateurs, de nouveaux objets, de nouveaux concepts économiques. L'utilisateur fixe des paramètres puis lance le modèle, procédant ainsi à une expérimentation exacte.
La physique statistique a pour but de déterminer les lois macroscopiques d'un système composé d'un grand nombre de particules, à partir des lois microscopiques régissants les interactions entre ces particules. Elle démontre les propriétés macroscopiques du système à partir de la statistique sur les propriétés microscopiques. Elle constitue maintenant la base théorique de la thermodynamique, et peut s'appliquer à beaucoup d'autres domaines. On l'applique ici pour étudier nos modèles dans lequel le rôle de la particule est remplacé par celui de l'entité libérale consommatrice et productrice.
Le modèle décrit de façon simpliste l'évolution économique d'une société. Les modèles vont mettre en avant certains indicateurs, et il y aura toujours plusieurs critères concurrents à optimiser, tel que ceux garantissant la fortune à tous, et à toutes les époques de la vie. Le modèle tourne avec le navigateur Mozilla Firefox :
Simulateur : mod-economie-liberale.htm
Puis au delà du jeu, une résolution par tâtonnement en appliquant la méthode de Newton est envisageable, et pourra donner des solutions pour chaque ensemble choisi de critères à optimiser. Ce projet informatique fait suite d'une première discution sur l'économie libérale, auquel on peut ajouter les contributions du groupe d'étude sur les monnaies.
Commençons par le simplifier en supprimant le travail, un modèle sans travailleur, l'écologie, sans contrainte écologique ni limitation des ressources, l'espace, pas de transport nécessaire, en usant d'une monnaie, en unifiant le bien, une seule sorte de bien, en unifiant l'outils de production, une seule sorte d'usine, en unifiant l'unité de temp, un bien périssable en une unité de temps, une usine périssable en 800 unités de temps, en supprimant les delais de construction d'usine, la construction d'usine demande seulement une quantité de biens et non de temps, mais elle peut accumuler dans le temps les biens nécessaires sachant que l'obsolescence programmée de l'usine commence dès le premier bien mis à sa construction, en unifiant la personne et le foyer en une entité consommatrice et propriétaire d'usines et de monnaie, en donnant la liberté de fixer le prix de vente, en instaurant un seul marché et une règle de mise en concurrence simple.
Le modèle se définit en deux chapitres de nature bien différente. Un premier chapitre matérielle qui définit les règles régissant les flux et transformations des biens et des usines ainsi que les règles du marché. Puis un second chapitre qui définit le comportement plus ou moins irrationnel des entités, qui dans le modèle le plus simple est au hasard.
Le modèle met en place un revenu universel pour permettre aux entitées non-productrice de subvenir à leur besoin. Mais cela ne suffit pas pour rendre cohérent le système, car les aléats du marché peuvent ne pas satisfaire les besoins minimums. Il y a alors deux façon de procéder. Soit on agit avant le marché ou après le marché. Si on agit après le marché, on pioche dans les invendus pour satisfaire les démunis. faut-il encore qu'il y ait assez d'invendus et de façon assez diversifiée, sinon c'est "Game over". Néanmoins cette solution n'est pas vraiment satisfaisante en laissant en quelque sorte les démunis se servir dans les poubelles. Dans l'histoire de l'économie française, les biens nécessaires par principe sont préalablement préemptés par le pouvoir régalien. On agit avant le marché. On met en oeuvre un second fonctionnement économique, pour satisfaire les démunis, en procédant par une préemption c'est à dire un achat par l'Etat avant tout le monde. Les acheteurs n'étant pas mis en concurrence, cette préemption peut être définie sans fausser le modèle économique libérale. Elle est mise en oeuvre en vue de satisfaire les besoins des entitées démunis, et si elle échoue c'est "Game over".
On crée un langage de programmation de modèle, en même temps que l'on définit notre premier modèle et qui doit être le plus simple de tous. On utilise JavaScript. On utilise une programmation orienté objet. Toutes les variables et paramètres qui définissent l'état du modèle à un instant et qui permettent de calculer son état à l'instant suivant, sont contenues dans un unique objet M qui représente le modèle à un instant donné.
La chose la plus importante et qu'il faut faire en premier dans la conception d'un programme informatique, est de bien nommer les variables selon une nomenclature pertinente. Il y a 6 catégories de variables :
L'interface web du jeu se présente sous la forme de 7 tableaux :
Du fait d'une composante aléatoire dans le comportement des entitées, la simulation s'apparente à un calcul statistique. Le résultat est d'autant plus stable que l'on augmente le nombre d'entitées. Il constitue alors une expérience exacte qui est répétable. Chaque telle expérience est caractérisée par près d'une vingtaines de variables réparties dans les trois catégories (Initialisation, Paramètres et Règles).
Toutes les variables du noyaux ainsi que les paramètres sont regroupés dans une arborescence d'objets de racine M. La première variable à considérer est le temps T qui est un entier. Par soucis de simplicité, on nomme l'unité de temps, le jour, noté j, qui correspondra à un centième d'années réel c'est à dire à environ une demi-semaine dans le monde réel. Ainsi dans le modèle le mois vaudra 10 jours et l'année vaudra 100 jours. On utilise l'opérateur "." pour définir les attributs d'un objet. Ainsi le nom complet du paramètre désignant le temps du modèle sera M.T
M.T Date en jours
On définit 3 caractéristiques de l'usine regroupés dans le sous-objet M.Us ; son coût de construction C en nombre de biens, sa durée de vie V en jours, et sa puissance de production W en nombre de biens par jours.
M.Us.C Coût de construction en nombre de biens. M.Us.V Durée de vie en jours. M.Us.W Puissance de production en nombre de biens par jour.
On définit la liste des entités M.L. L'entité n° i est désigné par M.L[i]. Une entité représente une personne ou un foyer. Chaque entité possède de la monnaie F et une liste d'usines caractérisées uniquement par leur date de début de construction U. Les comptes étant rarement entier, l'entité possède en plus une usine en cours de construction caractérisée par la date de début de construction D et le nombre de biens E déjà utilisés pour sa construction. L'entité fixe le prix P du bien qu'il produit :
M.L[i].F Stock de monnaie. M.L[i].U Liste des usines. M.L[i].D Usine en construction. M.L[i].E Nombre de bien déjà utilisés. M.L[i].P Prix de mise en vente du bien. M.L[i].I Nombre de biens invendus. M.L[i].A Somme allouée pour l'achat. M.L[i].B Nombre de bien achetés. M.L[i].C Nombre de biens attribués à la construction.
On définit le nombre d'entités M.N, une consommation personnelle par entité de O biens par jour. Si cette condition n'est pas respecter alors c'est "Game over" :
M.N Nombre d'entités. M.O Nombre de biens nécessaires par jours et par entité
On définit le prix moyen d'achat d'un bien Bm et l'inflation Im :
M.Bm Prix moyen d'achat d'un bien. M.Im Inflation.
On effectue avant tout-le-monde une préemption, l'achat de Rb biens avec Rf Francs :
M.Rf Dépense en préemption de l'Etat. M.Rb Nombre de biens préemptés par l'Etat.
On définit une première taxe qu'est la TVA et un revenu universel :
M.Tv Taxe à la vente. M.Ru Revenu universel
On définit deux paramètres régissant le marché qu'est le nombre de mise en concurrence Z et le nombre de diversité nécessaire Y :
M.Z Nombre de concurrents M.Y Diversité nécessaire
On regroupe les règles de gestion du pays sous forme d'équation dans la variable R :
M.R Règles de gestion
Tous les paramètres décrivant l'état initial sont mémorisé dans un sous-objet M.I.
On définit l'état initial le plus simple composé comme suit :
M.I.F = 400 F Stock de monnaie. M.I.U = 50 u Nombre d'usines. M.I.Uc = 50 u Nb de bien pour la construction. M.I.Bm =10 F Prix moyen d'achat d'un bien. M.I.Im =0 Inflation sur un jour.
Il y a un certains nombres de paramètres fixes. On les supposes pouvant varier, de telle sorte qu'il est judicieux de distinguer leurs valeurs initiales de leur valeurs actuelles comme les autres variables. On a besoin des caractéristiques de l'usine, du nombre d'entités et du nombre de biens nécessaire par jour et par entité. On définit aussi deux paramètres régissant le marché qu'est le nombre de mises en concurrence Z et le nombre de diversité nécessaire Y :
M.I.Us.C = 800 b Coût de construction en nombre de biens. M.I.Us.V = 1000 j Durée de vie en jours. M.I.Us.W = 10 b/j Puissance de production en nombre de biens par jour. M.I.N =200 e Nombre d'entités. M.I.O =5 b/(ej) Nombre de biens nécessaires par jours et par entité. M.I.Z =3 e Nombre de concurrents. M.I.Y =10 e Diversité nécessaire.
On définit les dépenses en préemption de l'Etat Rf pour répondre au besoin des nécessiteux, le nombre de bien préempté Rb, puis la taxe à la vente Tv, et le revenu universel R.
M.I.Rf =2000 F Dépense en préemption de l'Etat. M.I.Rb =200 b/j Nombre de biens préemptés par l'Etat. M.I.Tv =0.1 Taxe à la vente. M.I.Ru =15 F/j Revenu universel
On fixe comme règles journalière de gestion du pays, l'indexation du revenu universel sur l'inflation :
M.I.R = « M.Ru = 1.5 * M.Bm * M.O » Règles journalière de gestion du pays
On regroupe les paramètres secondaires utilisés pour la vue du modèle dans un sous-objet M.V. La masse monétaire en circulation notée M.V.F est la somme des stocks de monnaie de chaque entité. Le nombre total d'usines en fonctionnement est noté M.V.U. La puissance totale de construction notée M.V.C est le nombre de biens aloués à la construction d'usine de chaque entité.
M.V.F Stock de monnaie. M.V.U Nombre d'usines. M.V.C Puissance de construction. M.V.I Nombre de biens invendus. M.V.Tv Taxe récolté
On affiche un graphique présentant les entités dans l'ordre de leur richesse en monnaies, et un graphique présentant les entités dans l'ordre de leur richesse en usines pondéré par leur durée de vie. Ainsi une usine nouvellement construite comptera pour 1 tandis qu'une usine ayant déjà vécu la moitiée de sa vie comptera pour 1/2.
L'entité productrice n'a qu'un seul comptoire, et propose librement chaque jour un prix de vente pour les biens qu'elle produit.
Toutes les entités sont consomatrices. L'entité ne peut pas utiliser ses propres biens qu'elle produit. Elle doit les acquérir sur le marché, traduisant la diversité nécessaire des biens prévus pour la consommation domestique et pour la construction d'usines. L'entité vend au marché sa production, et les invendus étant périssables sont détruits. Et elle achète des biens sur le marché en Y demandes. On part du principe simple qu'il y a une nécessité de diversitée des biens pour la consommation et la construction d'usines, que l'on évalue par Y. Ainsi l'entité consomatrice recours au marché Y fois. Il divise la somme allouée pour l'achat A par Y pour formuler Y demandes avec une somme d'achat A/Y. Néanmoins il faut que les sommes allouées soit chacune au moins supérieur à 2 fois le prix moyen d'un bien pour garantire au moins l'achat d'un bien. C'est pourquoi lorsque la somme allouée pour l'achat est faible, le nombre de fois que l'entité recourera au marché sera plus petit que Y. Ce nombre Y traduit la nécessité de passer par le marché pour acquérire une variété de biens de Y natures différentes. Ce facteur que l'on nomme "Diversité nécessaire" fait partie de l'aspect matériel de l'économie.
On établit la liste des offres et la liste des demandes où chaque entité peut être amenée à proposer jusqu'à Y demandes. Le marché se résout en répétant l'opération suivante : On prend au hasard une demande et on prend au hasard Z offfres. On retient l'offre la moins chère et on résout la vente. Si la demande est comblée on la retire de la liste des démande, et si l'offre est comblée on la retire de la liste des offres. Et si l'offre propose un prix d'un bien supérieur à la somme allouée de la demande alors la demande est impossible à satisfaire et est annulée. Le facteur Z que l'on nomme "Nombre de concurrents" fait partie de l'aspect comportemental de l'entité :
M.Y Diversité necessaire. M.Z Nombre de concurents.
Cet achat en Y lots de biens traduit la nécessité de diversité des biens achetés pour la consommation ou la construction d'usine. Le processus capitaliste entrainant une croissance exponentielle, on va vite arriver à des échange de grande quantité de biens toujours en au plus Y*N lots, ce qui permet de ne pas saturer la capacité de calcul du simulateur. Ainsi, même si le nombres de biens crois exponentiellement, cela n'augmentera pas la charge de calcul, et cela respectera le principe d'une demande d'une grande variété de bien précisé par le facteur "Diversité nécessaire", nécessitant le passage obligé Y fois par le marché
Afficher des courbes en javascript voir jsCourbe.html
On conçoit un constructeur d'application épuré qui va standardiser complètement notre programmation la rendant de ce faite beaucoup plus facile à déchiffrer et à modifier. Dans la programmation, le nommage des variables est un choix essentiel qui doit être murement réfléchi pour intégrer une nomenclature lisible, évocatrice, simple, peu verbeuse et pratique, susceptible pour ces raisons d'abonder un langage universel. Et pour cela, elle doit pouvoir évoluer, se corriger facilement. Puis on donne aux variables des noms courts, voir si possible composés d'un seul caractère ou bien d'un caractère majuscule suivi d'un caractère minuscule, comme il est de coutûme dans les équations physique ou mathématique.
On crée l'objets M, ses sous-objets et ses listes comme suit :
var M=new Object(); // L'objet racine. M.Us=new Object(); // Les caractéristiques de l'usine. M.L=[]; // La liste des entitées. M.I=new Object(); // Les paramètres initiaux. M.I.Us=new Object(); // Les caractéristiques initiales de l'usine. M.V=new Object(); // Les paramètres secondaires pour la vue.
On choisit qu'un seul type d'élément graphique pour l'entrée/sorties des paramètres numériques que l'on regroupe dans des tables à quatre colonnes, la première colonne pour le nom complet de la variable avec en gras la dernière composante du nom, la seconde colonne pour le label, la troisième colonne pour la donnée placée dans un élément "input", la quatrième colonne pour l'unitée, et avec éventuellement une description détaillée dans une bulle pop-up placée sur la ligne du tableau correspondante. L'affichage des nom de variable est essentiel pour que le développeur ait continuellement ce dictionnaire sous les yeux, et puisse éventuellement proposer un meilleur nom pour la variable.
Les tables sont titrées et mise en mode table {display: inline-block;} et devront avoir grosso modo un même nombre de lignes pour se présenter agréablement sur la page web. Aussi, les tables n'ayant qu'un petit nombre de lignes seront regroupées dans d'une table enveloppante à une colonne. On conçoit quatres types de table :
La macro µ créé une table enveloppante qui contient les tables spécifiés dans son bloc de code :
µ{
...
...
...
}
Cela va générer dans le fichier html le code suivant, et chaque table µC, µP ou µR mentionnés dans son bloc de code ajoute une ligne :
<table class="ti"> <tr><td> ... </td></tr> <tr><td> ... </td></tr> <tr><td> ... </td></tr>
</table>
La macro µC crée une table comprenant une liste de commandes. Elle prend un argument qui est son Titre, et elle prend un bloc de code qui contiendra les boutons de commandes :
µC("Titre"){
...
...
...
}
Cela génère dans le fichier html le code suivant :
<table class="tg">
<caption>Titre</caption> ...
...
...
</table>
On conçoit qu'un seul type de commande (macro µc). La macro µc doit être placée dans le bloc de code d'une macron µC, elle crée une ligne contenant un bouton de commande. Elle prend trois argument que sont le Programme exécuté par la commande, le Label de la commande, et une Description optionnelle qui s'affichera dans une bulle pop-up associé au bouton :
µc("Programme", "Label", "Description")
Cela génére dans le fichier html le code suivant :
<tr><td> <button onClick="Programme" title="Description">
<div align="center">
<strong>Label</strong><br>
<span class="indice">Programme</span>
</div>
</button> </td><tr>
La macro µP crée une table. Elle prend un argument qu'est son Titre, et elle prend un bloc de code qui contiendra les entrées/sorties de paramètres numériques.
µP("Titre"){
...
...
...
}
Cela va générer dans le fichier html le code suivant :
<table class="tg"> <caption>Titre</caption> <thead> <tr> <td><div align="center">Paramètre</div></td> <td><div align="center">Label</div></td> <td><div align="center">Valeur</div></td> <td><div align="center">Unité</div></td> </tr> </thead>
...
...
... </table>
On conçoit deux sortes d'entrée/sortie numérique de donnée texte, celle d'un entier (macro µf), et celle d'un réel (macro µf). Elles doivent être placées dans le bloc de code d'une macron µP, la macro µi ou µf crée une ligne d'entré/sortie.
µf("Objet", "Nom", "Label", "Unité", Précision, "Valeur", "Description")
µi("Objet", "Nom", "Label", "Unité", "Valeur", "Description")
Objet est l'objet contenant la variable, Nom est le nom de la variable, Label est la description courte, Unité est l'unité, Précision est optionnel et sera un entier indiquant le nombre de chiffres après la virgule devant être affiché, Valeur est optionnel et sera sa valeur par défaut, et Description est optionnel et sera sa description affichée dans un pop-up associé à la ligne correspondante dans le tableau. La macro va générer dans le fichier html dans le tableau le code suivant :
<tr title="Description">
<td class="var">Objet.<strong>Nom</strong></td>
<td>Label</td>
<td><input id="Objet.Nom" type="text" value="Valeur"></td>
<td class="unite">Unité</td>
</tr>
Les macros µi et µf vont également ajouter du code dans le script javascript dans différentes fonctions et endroits.
On conçoit une troisième sorte d'entrée/sortie pour les données textes pouvant tenir sur plusieurs lignes (macro µR) et qui crée une table contenant une area. On l'utilise pour saisire les règles de gestions sous forme d'équations. La macron µR crée une table contenant une area.
µR("Titre", "Objet", "Nom", "Text", "Description")
Titre est le titre de la table, Objet est l'objet contenant la variable, Nom est le nom de la variable, Text est le texte par défaut contenue, et Description est optionnel et sera la description affiché dans un pop-up associé au tableau. La macro va générer le code suivant :
<table class="tg" title="Description"> <caption>Objet.<strong>Nom</strong> Titre</caption> <tr><td><textarea id="Objet.Nom">Valeur</textarea></td></tr> </table>
La macro µR va ajouter du code dans le script javascript dans différentes fonctions et endroits.
L'entête de la page web (Voir HTML5 : structure global du document) est la suivante :
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Simulation économie liberale</title>
<script src="courbe.js"></script> <script> ... </script> <style>
@import url(../styles.css); ... </style>
</head>
<body>
...
</body>
</html>
Les macros µf, µi et µR vont ajouter dans le debut du script javascript le code suivant :
var Objet.Nom // Label var Objet.$Nom // Elément du DOM associé
Le script comprend 6 fonctions principales : BOOT(), INIT(), READ(), PAS(), WRITE(). La phase de préinititialisation qui se produit juste-après le chargement de la page web correspond à la fonction BOOT(). Il faut lancer cette fonction BOOT juste après le chargement de la page web, cela se fait en programmant un gestionnaire d'évènement comme suit :
window.addEventListener("load", BOOT, false)
La phase d'initialisation du modèle correspond à la fonction "INIT()". Elle lance la fonction "READ()" qui lit les variables selon ce qui est saisie dans les input. Puis elle procède au calcul de l'état initial. Puis elle lance la fonction "WRITE()" qui écrit les variable dans les input corrospondantes. La fonction "PAS()" procède au calcul d'une itération. Les macros µi, µf, µR vont compléter le code de ces 5 fonctions :
function BOOT(){ Objet.$Nom = document.getElementById("Objet.Nom") ...
... INIT() }function INIT(){ READ() M.Us.C = M.I.Us.C
M.Us.V = M.I.Us.V M.Us.W = M.I.Us.W
M.N = M.I.N M.O = M.I.O M.Z = M.I.Z M.Y = M.I.Y M.Bm = M.I.Bm
M.Im = M.I.Im M.Rf = M.I.Rf M.Tv = M.I.Tv M.R = M.I.R for (let i=0; i<M.N; i++){ M.L[i]= new Object(); M.L[i].F = M.I.Fe M.L[i].U = M.I.Ue M.L[i].D = M.I.De M.L[i].E = M.I.Ee M.L[i].A = M.I.Ee M.L[i].P = M.I.Pe M.L[i].B = M.I.Be M.L[i].C = M.I.Ce }
WRITE() }function READ()
Objet.Nom = ParseInt(Objet.$Nom.value) Objet.Nom = ParseFloat(Objet.$Nom.value) ...
... }function WRITE(){
$Nom.value=Nom
$Nom.value=Nom.toFixed(Précision) ...
... }
---- 8 avril 2024 ----
On définit le comportement journalier au hasard des entités. Chaque entité dépense une partie de sa trésorerie, un pourcentage au hasard, pour l'achat de biens, et après avoir acquis les biens, en utilise une partie aléatoire mais au minimum M.Min biens pour son train de vie, le reste étant consacré à la construction d'usines. Puis elle fixe le prix du bien produits par ses usines. Elle choisit un prix au hasard compris entre 1/2 et 2 fois le prix moyen du bien le jour d'avant. Noter que le seul hasard ainsi défini ne modifira pas le prix moyen d'un jour à l'autre.
Entite.A = 0 // Nombre de francs engagés pour l'achat de bien. Entite.C = 0 // Nombre de biens utilisés pour la construction d'usines. Entite.P = 0 // Prix de vente des biens qu'il produit.
A ce stade, le prix moyen du bien est de tendance constante en toute circonstance.
Néanmoins dans ce premier modèle un perfectionnement est encore nécessaire. Il convient de redresser les entités productrices hors jeu, c'est à dire ayant recours au "restau du coeur". Cela se produit lorsque l'entité propose un prix de mise en vente vraiment trops faible, ou bien un prix de mise en vente vraiment trop fort entrainant trops d'invendus. La règle de gestion est alors la suivante : L'entité demunis est redressé en lui imposant un prix de mise en vente égale au prix moyen d'achat.
Chaque objet possède un ensemble d'attributs formant un espace de noms :
|
|
L'initialisation doit se rapprocher à ce qu'aurait produit une évolution du modèle pendant une dixaine d'années. On le fait aproximativement en respectant certaine règles :
L'itération, c'est à dire le calcul de l'état du modèle à l'instant suivant, se fait en 6 phases :
1- Capture des paramètres.
2- Pour chaque entité :
3- Tant qu'aucune des deux listes n'est vides
4- Vérifier que les invendus et que leur diversités suffisent à satisafaire les démunis, sinon "Game over".
5- Fixation de la quantité de biens prévus pour la construction d'usine.
6- Construction d'usine.
Ce premier modèle n'est pas capitaliste dans le sens où les entités ne se comportent pas dans le but d'accroitre leur capital, mais de façon irrationnelle au hasard. Pour le rendre capitaliste, on introduit une logique de recherche de profit maximum. L'entité décide du prix de vente selon un critère d'optimisation des gains, qui peut s'établir de manière empirique comme suit : Il calcule sur les derniers jours le rapport entre le prix donné et le gain, pondéré par le nombre de bien mise à la vente, et calcul l'optimum par prolongation selon la méthode des différences finies. L'introduction de ce comportement parmi les entités va modifier l'évolution du modèle, et va déterminer une tendance du prix moyen du bien dépendant de la situation économique, il va donc changer le sens des notions économiques, passant du mode comportemental non-capitaliste au mode comportemental capitaliste. Et il va ainsi leur donner un sens plus proche de la réalité.