Modélisation mathématique des inégalités - Page 3 — Les-mathematiques.net The most powerful custom community solution in the world

Modélisation mathématique des inégalités

13

Réponses

  • Je continue de flooder avec des simulations, en espérant noyer les interventions qui m'insupportent.

    Une nouvelle version de Evolutionplus, où l'augmentation uniforme de richesse ne se fait pas à chaque transaction, mais 100 fois au cours de l'histoire.
    def Evolutionplus(effectif,initial, nbtrans,gain, perte, creation):
        rich=effectif*[initial]
        periode=nbtrans//100
        for i in range(nbtrans) :
            if i%(periode)==0 :
                rich=[r+creation for r in rich]
            prem=randrange(effectif)
            sec=randrange(effectif)
            while sec==prem : sec=randrange(effectif)
            nouv=Transaction([rich[prem],rich[sec]],gain,perte)
            rich[prem]=nouv[0] ; rich[sec]=nouv[1]
            rich.sort()
        return rich
    

    La commande
    %time L=Evolutionplus(100,100,10000000,0.2,0.17,10)
    pourcent=sum(L[-10:])/1100
    print("Le dernier décile concentre {:0.1f}% de la richesse".format(pourcent))
    print("Le plus riche concentre {:0.1f}% de la richesse".format(L[-1]/1100))
    
    donne :

    CPU times: user 45.5 s, sys: 4 ms, total: 45.6 s
    Wall time: 45.6 s
    Le dernier décile concentre 97.0% de la richesse
    Le plus riche concentre 53.1% de la richesse

    Je rappelle qu'au cours de cette histoire, la richesse totale est passé de 10 000 à 110 000. La somme n'est pas très nulle. Et en plus, on a fait l'hypothèse que les 100 000 distribués au fur et à mesure l'ont été parfaitement équitablement !
  • Maintenant, supposons que la population soit constituée de
    * 50% d'individus très productifs (groupe A)
    * 50% d'individus peu productifs (groupe B).

    Les individus du groupe A produisent 2 fois plus de richesse que les individus du groupe B par unité de temps.

    Au bout d'un grand nombre d'itérations,
    * quel est le pourcentage d'individus du groupe B dans le dernier décile ?
    * quel est le ratio entre (patrimoine médian du groupe A)/(patrimoine médian du groupe B) ?
  • Merci pour les simulations GaBuZoMeu. Est-ce que tu pourrais nous donner un peu plus d'informations sur la courbe de répartition des richesses ? Préférablement pour le modèle ou tous les agents produisent la même richesse en permanence.

    Par exemple : Dans le premier modèle (pas de création de richesse) le décile le plus pauvre contenait (environ) autant d'argent que le 5-ième (environ 0), je suis curieux de savoir si dans le deuxième modèle le 5e décile est sensiblement plus riche que le décile le plus pauvre ou si la répartition est la même que dans le premier modèle.
  • GaBuZoMeu : http://www.les-mathematiques.net/phorum/read.php?9,1919230,1921276#msg-1921276
    Oui, lors de mon copier/coller de la commande, j'ai loupé le dernier chiffre du 0.17, il est donc resté 0.1. Je n'aurais pas modifié un paramètre aussi important sans le dire.

    Voici une petite évolution du code qui prend en compte l'idée de JLT exprimée ici (pour peu que je l'aie bien comprise), fait automatiquement $n$ simulations (dernier argument du programme) et trace les résultats sur un graphe dans un fichier désigné par le premier argument. Il faut avoir installé matplotlib pour pouvoir tracer le graphe. Avant la transaction à chaque étape, les deux individus choisis reçoivent une somme constante (YvesM ne va sans doute pas accepter une telle modélisation ; j'ai pris 0.1 au pif dans l'exemple ci-dessous, mais le paramètre est accessible via la ligne de commande, vous pouvez donc très facilement tester avec d'autres valeurs). La fonction évolution() devient donc :
    def évolution(effectif, initial, nbtrans, gain, perte, créationRichesse):
        fortunes = effectif*[initial]
        individus = range(effectif)
    
        for i in range(nbtrans):
            prem, sec = random.sample(individus, 2)
            fortunes[prem] += créationRichesse
            fortunes[sec] += créationRichesse
            fortunes[prem], fortunes[sec] = \
                transaction([fortunes[prem], fortunes[sec]], gain, perte)
    
        return fortunes
    
    Voici le code complet — où l'on voit que contrairement à ce que croient certaines personnes qui écrivent des comparatifs entre certains langages de programmation, on peut très bien utiliser des identifiants Unicode avec Python :
    #! /usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import matplotlib.pyplot as plt
    import random
    import sys
    
    
    def transaction(couple, gain, perte) :
        petit, gros = (0, 1) if couple[0] < couple[1] else (1, 0)
    
        if random.randrange(2) == 0:
            delta = couple[petit]*gain
            couple[petit] += delta
            couple[gros] -= delta
        else:
            delta = couple[petit]*perte
            couple[petit] -= delta
            couple[gros] += delta
    
        return couple
    
    
    def évolution(effectif, initial, nbtrans, gain, perte, créationRichesse):
        fortunes = effectif*[initial]
        individus = range(effectif)
    
        for i in range(nbtrans):
            # print("Itération {}".format(i+1))
            prem, sec = random.sample(individus, 2)
            fortunes[prem] += créationRichesse
            fortunes[sec] += créationRichesse
            fortunes[prem], fortunes[sec] = \
                transaction([fortunes[prem], fortunes[sec]], gain, perte)
    
        return fortunes
    
    
    def tracéGraphes(séquenceDeSéquences, titre, fichierSortie):
        for fortunes in séquenceDeSéquences:
            # for f in fortunes:
            #     print("{:50.38f}".format(f))
            plt.plot(fortunes)
    
        plt.title(titre)
        plt.ylabel("Montants des fortunes")
    
        if fichierSortie:
            plt.savefig(fichierSortie, dpi=200)
        else:
            plt.show() # affichage en direct
    
    
    def main():
        fichierSortie = sys.argv[1]
        effectif = int(sys.argv[2])
        fortuneInit = float(sys.argv[3])
        nbTransations = int(sys.argv[4])
        proportionGain = float(sys.argv[5])
        proportionPerte = float(sys.argv[6])
        créationRichesseConst = float(sys.argv[7])
        nbSims = int(sys.argv[8])
        res = [ sorted(évolution(effectif, fortuneInit, nbTransations,
                                 proportionGain, proportionPerte,
                                 créationRichesseConst))
                for i in range(nbSims) ]
    
        titre = ("fortune init : {fInit}, nb transations : {nbTrans}\n"
                 "pGain : {pGain}, pPerte : {pPerte}, créat. const : {créa}").format(
                    fInit=fortuneInit, nbTrans=nbTransations, pGain=proportionGain,
                    pPerte=proportionPerte, créa=créationRichesseConst)
        tracéGraphes(res, titre, fichierSortie)
    
        sys.exit(0)
    
    
    if __name__ == "__main__": main()
    
    Ci-joint, une sortie obtenue avec la commande suivante :
    python3 inégalités.py avec_création_0.1_chacun.png 100 100 1000000 0.2 0.17 0.1 5
    
    Ceci correspond à :
    • effectif : 100
    • fortune initiale de chaque individu : 100.0
    • nombre de transactions par simulation : un million
    • proportion du capital du plus pauvre transférée lorsqu'il gagne : 0.2
    • proportion du capital du plus pauvre transférée lorsqu'il perd : 0.17
    • création (absolue) de richesses à chaque étape pour chaque individu concerné par une transaction : 0.1
    • nombre de simulations : 5.
    Si l'on passe la chaîne vide en guise de nom de fichier de sortie :
    python3 "" 100 100 1000000 0.2 0.17 0.1 5
    
    le graphe s'affiche directement à l'écran au lieu d'être écrit dans un fichier image.

    Edits :
    • ajout du lien vers le message de JLT auquel je faisais référence — pas le plus récent, donc ;
    • code de transaction() un chouia plus rapide, court et lisible ;
    • documentation de ce qui se passe avec un nom de fichier de sortie vide ;
    • titre plus explicite pour l'axe des ordonnées.
    95322
  • Bien JLT, je te laisse modifier les procédures pour faire la simulation que tu souhaites. (Ce n'est pas trop difficile, il suffit de prendre pour A les 50 premiers et pour B les 50 derniers). (:D
  • Je l'aurais bien fait moi-même mais je ne connais pas bien Python, il faudrait que j'aie 1h devant moi.
  • J'avoue une grande frustration de ne pas voir pourquoi mon code qui me semble correct ne donne pas les bons résultats :-S
  • Je me demande pourquoi un petit pays comme Singapour n'est pas peuplé de un ou deux multimilliardaires qui possèdent presque toute l'île et le reste des gens qui vivent affamés et nus dans la jungle ou des bidonvilles. En tout cas c'est ce que ces modèles semblent suggérer.
    Ce pays est passé du tiers-monde à sa situation actuelle en quelques décennies avec quel genre de poltique redistributive?
    Singapore follows a progressive resident tax rate starting at 0% and ending at 22% above S$320,000. There is no capital gain or inheritance tax. Individuals are taxed only on the income earned in Singapore. The income earned by individuals while working overseas is not subject to taxation barring a few exceptions.
    https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=3&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwito9_JzojnAhUO1xoKHRSQBLwQFjACegQIDRAG&amp;url=https://www.guidemesingapore.com/business-guides/taxation-and-accounting/personal-tax/singapore-personal-income-tax-guide&amp;usg=AOvVaw1ldHcqbe1CqACYGXnFXFZo
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • La richesse d'une personne au cours de sa vie est-elle un mouvement brownien géométrique/une martingale exponentielle (à vue de nez les patrimoines des éléments des listes des modèles en python proposés semblent suivre ce type de comportement)?
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • @Foys oui la politique redistributive de Singapour s'est concentrée sur un système d'accès facile au logement, d'aides sociales pour les plus pauvres qui sont faites pour être sûr qu'ils puissent se loger décemment, ainsi que sur un système d'enseignement très performant. Sans ce système de redistribution les inégalités seraient effectivement démentielles, bien vu.

    Edit : j'ai trouvé un petit tpe http://tpe-singapour.e-monsite.com/pages/des-inegalites/singapour-une-inegalite-bien-reelle.html avec une phrase savoureuse : "Mais ce développement aurait été impossible sans l'appui d'un gouvernement se disant non-interventionniste. "
    À Singapour plus qu'ailleurs le pouvoir politique est très fort et très interventionniste. Le libéralisme on vous dit ... :-)
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Tiens, pour finir un article singulièrement à contre emploi éditorial :-) :
    pourquoi devenir riche a plus a voir avec la chance qu'avec le talent

    Ce qui est encore plus rigolo c'est l'analyse inattendue de Milton Friedman, parfaitement à contre courant de la libéral-béatitude comme dirait Raffarin.

    Bon bref, merci Nicolas de nous avoir indiqué cet article enthousiasmant !
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Attention aux erreurs de logique.
    Ce que montre le modèle, c'est qu'il n'est pas nécessaire de supposer que des agents ont des qualités particulières pour que ceux-ci accaparent toutes les richesses.
    Prétendre que le modèle capture la réalité, c'est une autre histoire -- exagération qu'on trouve parfois chez ceux qui se nomment "socio-physiciens".
  • Oui c'est exact. Dans la vraie vie je pense que les agents accaparant ont moins de qualités que les autres. Par contre le hasard les a placés au bon endroit et au bon moment.
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Bon je me suis suis emmêlé les pinceaux dans les pénalités:
    If draw > 0.5 Then
                If Agents(r1).wealth >= Agents(r2).wealth Then
                    sumInPlay = Agents(r2).wealth * invW
                Else
                    sumInPlay = Agents(r1).wealth * w
                End If
                Agents(r1).wealth = Agents(r1).wealth + sumInPlay
                Agents(r2).wealth = Agents(r2).wealth - sumInPlay
            Else
                If Agents(r1).wealth >= Agents(r2).wealth Then
                    sumInPlay = Agents(r2).wealth * w
                Else
                    sumInPlay = Agents(r1).wealth * invW
                End If
                Agents(r1).wealth = Agents(r1).wealth - sumInPlay
                Agents(r2).wealth = Agents(r2).wealth + sumInPlay
            End If
    
    est correct.
  • Toujours la même propagande néo-libérale.
    On qualifie l'exploitation du travailleur de talent et la redistribution des richesses de vol. On balance des contre-vérités, le capitalisme qui permettrait de réduire les inégalités alors que l'histoire du capitalisme prouve le contraire.
    Lorsque l'on parle de force physique, on refuse que ce soit la loi du plus fort qui s'applique et on fait des lois pour cela. En revanche, on n'a aucun problème à ce que la loi du plus fort s'applique au niveau économique. Qui serait suffisamment de mauvaise foi (ou débile comme dirait Yves M, qui au passage trouvait respectable dans un autre fl de penser comme un salopard) pour prétendre que si l'on met deux capitaux de poids non comparables en concurrence, le jeu est à somme nulle ? C'est ridicule.

    Et il faudrait aussi arrêter avec cette histoire de" risque ". Quel risque prend le capitaliste lorsqu'il met ses capitaux sur les marchés financiers ? Celui de plumer les plus faibles que lui ou de voler les plus pauvres en spéculant sur le prix du café ? Si la probabilité de perdre était plus élevée, il placerait son argent autre part.
    Je ne parle même pas du fait qu'il fait gérer son portefeuille par un professionnel et qu'il ne s'occupe donc même plus du risque.

    Quant'au talent, j'aimerais bien savoir quel talent ont les personnes qui n'ont fait que bien naître ? Puisque vous prêtez du talent à l'un de ses ancêtres, l'héritier doit-il bénéficier du talent de l'un de ses ancêtres alors qu'il n'aurait lui-même aucun talent et que vous prônez un classement économique basé sur le talent ?
    Si l'on regarde les choses de manière physique, ce que vous appelez talent n'est que la conséquence de bonnes conditions initiales. Je m'explique. Au niveau macroscopique, les modèles actuels de la physique sont déterministes. Si l'on se base sur eux, il n'est donc question que d'avoir un "bon" patrimoine génétique initial , un "bon" environnement (conditions initiales) et l'équation privilégiera mes conditions initiales. Ici "bon" signifie qu'il est privilégié par la l'équation.
    Même si vous pensez le monde de manière non-déterministe, est-il normal que ce que vous considérez comme "talent" (qui pour une majorité des personnes possédant les capitaux, ne signifie pas "être un virtuose du piano" mais "faire de la prédation sur les richesses créées par les travailleurs") détermine à vos yeux la possibilité de manger ou de se loger ? Parce que c'est de cela qu'il s'agit.

    Enfin, dans le postulat de base du libéralisme, la société humaine n'est modélisée que par des achats et des ventes. Je trouve cela déjà très symptomatique. Quel échange économique y-a-til entre une mère et son enfant ? Aucun. Pour palier à cela, les tenants de cette idéologie essaient de tout marchandiser pour que le monde n'échappe pas à leur modèle.
  • xax a écrit:
    Ce qui est encore plus rigolo c'est l'analyse inattendue de Milton Friedman, parfaitement à contre courant de la libéral-béatitude comme dirait Raffarin.
    Milton Friedman n'est connu en France que par des hommes de paille, des procès d'intention et des caricatures. Si on comprend l'anglais oral, ça vaut le coup de regarder la série "free to chose" sur youtube ou les conférences où il répond à des étudiants et autres émissions de télé.
    Quant à ses propos dans l'article, il s'agissait surtout de dénigrer la réserve fédérale américaine qu'il détestait et dont il prônait l'abolition, voir par exemple .
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • Je me suis moi aussi mis à faire quelques simulations. Je prend le deuxième modèle où à chaque échange entre deux agents tous les agents gagnent la même quantité d'argent (leur salaire).

    Dans mes simulations je prend $500$ agents, $5\cdot 10^6$ transactions et les mêmes valeurs de gain et pertes que dans le reste du fil (20% et 17%). Tous les agents démarrent avec un patrimoine de $1$. Seul le salaire varie d'une simulation à l'autre. À la fin de la simulation je range toutes les richesses par ordre décroissant, de la première à la centième, puis je mets tout ça dans un graphique avec échelle logarithmique pour plus de lisibilité. Voilà ce que j'obtiens.

    Salaire nul :

    salaire-nul.png

    Salaire de 0.000001 :

    salaire-1.png

    Salaire de 0.00001 :

    salaire-2.png

    Salaire de 0.0001 :

    salaire-3.png

    Salaire de 0.001 :

    salaire-4.png
  • Je me permets également de signaler cet article, qui ne modélise pas directement la formation des inégalités mais le rôle que jouent celles-ci sur l'évolution à long terme des sociétés. Il s'agit d'une variante du modèle proie-prédateur de Lotka-Volterra. On y tient également compte du fait que la création de richesses (tant vantée par YvesM comme la solution miracle) se fait au prix d'un épuisement des ressources naturelles. Les auteurs obtiennent notamment les résultats suivants :
    - La sur-exploitation des ressources naturelles finit par provoquer un effondrement. La solution de travailler plus pour créer davantage de richesses n'est donc pas viable à long terme.
    - Dans une société qui consomme plus que ce que la nature peut régénérer, les inégalités économiques sont un facteur aggravant qui risquent de précipiter la chute.
    - Même dans une société sans surconsommation, à long terme les inégalités économiques sont préjudiciables à tous, même aux plus riches.
  • @JLT
    Les individus <51 recoivent .2 les autres .1 après une transaction. Dans cette simulation les 2 plus riches ne sont pas les plus productifs95334
    95336
  • @obn : merci, intéressant.
  • @Foys j'ai bien conscience de la valeur intellectuelle de Friedman, comme théoricien libéral c'est lui qui a proposé les principales pistes pour invalider ses propres conceptions, attitude bien rare dans son courant et qui procède à mon sens d'un honnêteté indéniable. La question de l’individualisme méthodologique au centre de son travail est démolie par l'influence prépondérante du "hasard" chose dont il semblait avoir pris conscience à la fin de sa vie. C'est tout simplement le revers d'un positionnement assumé - il pensait que la validité et le réalisme des hypothèses de départ d'une théorie n'avaient qu'une importance secondaire - sur lequel je n'ai pas de critique puisqu'il est énoncé clairement.

    Ce qui est certain aussi, la remarque très pertinente d'olafgrossebaf m'y fait penser, c'est que Friedman donna une autre piste pour invalider ses conceptions dans la mesure où il avait parfaitement conscience que libéralisme et effondrement de l'environnement allaient de pair. Il préconise ainsi ... l'impôt et les taxes pour minimiser la catastrophe.
    Donc voilà, pour cette question vitale non seulement le libéralisme exhibe crûment ses contradictions, mais en plus il prône une solution dont l'efficacité (taxe carbone par exemple) est anecdotique.

    Dernière remarque, on associe libéralisme économique et libéralisme politique, mais de longues dictatures imposées par les USA en Amérique latine montre que cette association n'est pas forcément pertinente ni signifiante. Sur ce coup Friedman a été pris en défaut et il tenta tardivement de se disculper d'un soutien personnel pourtant manifeste.
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Bonjour,

    @xax : je ne vois aucun lien entre libéralisme et effondrement de l’environnement. Peux-tu choisir un exemple clair et je te montre la non contradiction.
  • @YvesM tu as raison, j'ai sous-estimé, il n'y a pas un lien, mais des liens. En fait en lisant ce que Milton Friedman proposait ou justifiait pour limiter les effets catastrophique du libéralisme, je me suis cantonné à la taxe carbone. Il s'agit explicitement de la recette libérale qui consiste à faire croire qu'en payant une taxe (à discrétion du gouvernement local ...) on va trouver la solution. En fait sur ce cas, en plus, la "solution libérale" de fait entérine l'empoisonnement de l’atmosphère, mais elle permet elle-même la constitution d'un autre domaine marchant lié aux transactions sur cette taxe carbone. L'honneur libéral est sauf : la catastrophe peut continuer.
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Bonjour,

    Tout ceci nous éloigne du sujet du fil...

    @xax : Que proposes-tu pour ne plus émettre de carbone dans l'atmosphère ?

    Essaie de répondre à la question. Ensuite, on pourra comparer ta* proposition à celle de la taxe carbone.

    Tu comprends, on ne peut pas rejeter une solution parce qu'elle n'est pas parfaite sauf si on a trouvé une autre solution parfaite. On peut mettre en lumière l'imperfection mais ce n'est pas rejeter la solution.

    *ou une autre proposée par les critiques de la taxe carbone
  • Oui, le sujet du fil est précisément de montrer que l'individualisme méthodologique, un des présupposés du libéralisme, est encore une fois inopérant, avec un modèle simple et élégant :-)

    Je ne doute pas de la sincérité de Friedman, ni même de la tienne, mais ça ne marche pas, c'est tout.

    Si tu tombes malade et que c'est potentiellement mortel, tu vas t'amuser à boursicoter sur les sociétés pharmaceutiques ou tu vas vraiment chercher à te soigner ?
    Voilà ce n'est pas une solution imparfaite, ce n'est pas une solution tout court.

    Il convient donc de minimiser les émissions de CO2, c'est tout.

    Après ce n'est pas si grave : même si le température moyenne monte à 50 °C avec une humidité de 100 % comme certains modèles plausibles le suggèrent d'ici 400 ans, ça n’empêchera pas la Terre de tourner, il y aura juste 100 fois moins de gens qu'aujourd'hui.
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • En réponse au message de Corto :

    Je trouve que les échelles logarithmiques ne permettent pas de bien se rendre compte de la répartition des richesses. Je réalise donc les mêmes simulations (à supposer que j'aie bien compris leur description), mais j'affiche tous les résultats sur le même graphe sans échelle logarithmique, après avoir normalisé les fortunes (= patrimoines) à la fin de chaque simulation. Autrement dit, pour une simulation donnée (c'est-à-dire une valeur fixe du revenu universel), les ordonnées des points (un par agent) sont les ratios $\frac{\text{fortune}}{\text{fortune du plus riche}}$ à la fin de la simulation.

    Le code nécessite Python 3, NumPy et matplotlib. Si l'on fournit un nom de fichier vide comme premier argument, comme ceci :
    python3 modèle2.py "" 500 1.0 5000000 0.2 0.17 "0.0, 0.000001, 0.00001, 0.0001, 0.001"
    
    le graphe s'affiche à l'écran en fin de programme et on peut zoomer, translater, etc. Si, en revanche, on fait :
    python3 modèle2.py /chemin/vers/fichier.png 500 1.0 5000000 0.2 0.17 "0.0, 0.000001, 0.00001, 0.0001, 0.001"
    
    le graphe est simplement écrit dans le fichier (de type image) indiqué.
    #! /usr/bin/env python3
    # -*- coding: utf-8 -*-
    #
    # Code de départ de GaBuZoMeu :
    #
    # http://www.les-mathematiques.net/phorum/read.php?9,1919230,1921232#msg-1921232
    
    import matplotlib.pyplot as plt
    import numpy as np
    import random
    import sys
    
    
    def transaction(couple, gain, perte) :
        petit, gros = (0, 1) if couple[0] < couple[1] else (1, 0)
    
        if random.randrange(2) == 0:
            delta = couple[petit]*gain
            couple[petit] += delta
            couple[gros] -= delta
        else:
            delta = couple[petit]*perte
            couple[petit] -= delta
            couple[gros] += delta
    
        return couple
    
    
    def évolution(effectif, initial, nbtrans, gain, perte, créationRichesse):
        fortunes = np.full(effectif, initial, dtype=np.float64)
        individus = range(effectif)
        salaires = np.full(effectif, créationRichesse, dtype=np.float64)
    
        for i in range(nbtrans):
            fortunes += salaires
            prem, sec = random.sample(individus, 2)
            fortunes[prem], fortunes[sec] = \
                transaction([fortunes[prem], fortunes[sec]], gain, perte)
    
        return fortunes / np.max(fortunes) # normalisation
    
    
    def tracéGraphes(séquenceDeDicos, titre, fichierSortie):
        for d in séquenceDeDicos:
            plt.plot(d["fortunes"],
                     label="{:.6f}".format(d["salaire"]))
    
        plt.title(titre)
        plt.ylabel("Montants normalisés des fortunes")
        plt.legend(title="Revenu par agent à chaque tour", loc="upper center",
                   bbox_to_anchor=(0.5, 0.85),
                   ncol=2, fancybox=True, shadow=True)
    
        if fichierSortie:
            plt.savefig(fichierSortie, dpi=200)
        else:
            plt.show() # affichage en direct
    
    
    def main():
        fichierSortie = sys.argv[1]
        effectif = int(sys.argv[2])
        fortuneInit = float(sys.argv[3])
        nbTransations = int(sys.argv[4])
        proportionGain = float(sys.argv[5])
        proportionPerte = float(sys.argv[6])
        salaires = map(float, sys.argv[7].split(','))
        res = [ { "salaire": salaire,
                  "fortunes": sorted(évolution(effectif, fortuneInit, nbTransations,
                                               proportionGain, proportionPerte,
                                               salaire)) }
                for salaire in salaires ]
    
        titre = ("fortune init : {fInit}, nb transations : {nbTrans}\n"
                 "pGain : {pGain}, pPerte : {pPerte}, revenu universel").format(
                    fInit=fortuneInit, nbTrans=nbTransations, pGain=proportionGain,
                    pPerte=proportionPerte)
        tracéGraphes(res, titre, fichierSortie)
    
        sys.exit(0)
    
    
    if __name__ == "__main__": main()
    
    L'allure générale des courbes est reproductible, mais pas toutes les positions relatives. Pour preuve, voici deux graphes obtenus avec la même commande, celle donnée ci-dessus.

    Edit : suppression d'un bout de code qui n'était plus utilisé.95356
    95358
  • brian a écrit:
    Je trouve que les échelles logarithmiques ne permettent pas de bien se rendre compte de la répartition des richesses
    En fait je m'intéressais surtout à la répartition des richesses dans la moitié pauvre, d'où l'échelle logarithmique. Mais ce n'est peut-être pas la meilleure solution.
  • En effet, la différence est mince entre avoir $10^{-17} €$ sur son compte en banque et avoir $10^{-5} €$.
    Ce que le modèle ne prévoit pas, c’est que certains acteurs peuvent avoir une fortune négative (des dettes).
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Bonjour,

    Une personne pourrait-elle décrire la modélisation ? Juste pour être sûr de bien comprendre ce que les paramètres représentent.
  • @YvesM Le code Python est très facile à lire (en plus que Corto et moi avons décrit ce que ça fait). Comme tu n'es pas débile...
  • Bonjour,

    Quand je lis vos descriptions j'ai l'impression que les pertes sont relatives : on perd x pour cent ou on gagne y pour cent de sa fortune à chaque transaction. Est-ce bien cela ?

    J'essaie de comprendre la modélisation avant de tenter de l'interpréter. J'ai du mal à voir un lien avec la modélisation de l'économie (si les gains sont relatifs à la fortune). Et le fait qu'un seul agent gagne tout et alors une évidence (effet boule le neige) : je ne comprends donc pas la surprise (apparente) du résultat final.

    Bref, les gains d'un agent à l'étape $n$ sont-ils relatifs à la fortune de cet agent à l'étape précédente ?
  • Ce n'est pas tout à fait ça ; ils sont relatifs à la fortune du plus pauvre des individus prenant part à la transaction. Le montant échangé entre deux individus lors d'une transaction est une proportion fixe de la fortune du plus pauvre : pGain si le plus pauvre gagne, pPerte s'il perd. J'ai repris cet élément de l'algorithme de GaBuZoMeu et simplement ajouté le revenu universel, le code NumPy pour aller un peu plus vite et la partie qui crée le graphe. Dans tous les exemples simulés ci-dessus, nous avons $\mathit{pGain} = 0.2$ et $\mathit{pPerte} = 0.17$.

    Tu as de la chance, j'avais décidé d'être charitable : voici une description détaillée de l'algorithme.
    def main():
        fichierSortie = sys.argv[1]
        effectif = int(sys.argv[2])
        fortuneInit = float(sys.argv[3])
        nbTransations = int(sys.argv[4])
        proportionGain = float(sys.argv[5])
        proportionPerte = float(sys.argv[6])
        salaires = map(float, sys.argv[7].split(','))
        res = [ { "salaire": salaire,
                  "fortunes": sorted(évolution(effectif, fortuneInit, nbTransations,
                                               proportionGain, proportionPerte,
                                               salaire)) }
                for salaire in salaires ]
    
    On collecte les arguments du programme et les transforme en le type adéquat (entier, flottant, etc.). Le dernier argument, sys.argv[7], est une liste de flottants séparés par des virgules, avec éventuellement des espaces autour de chaque virgule. Il détermine la liste des salaires : chaque élément donne lieu à une simulation au cours de laquelle chaque agent touche, au début de chaque tour, le même salaire (d'où ma formulation : « revenu universel »). Par exemple, lorsque j'appelle :
    python3 modèle2.py "" 500 1.0 5000 0.2 0.17 '0.0, 0.000001, 0.00001, 0.0001, 0.001'
    
    il y a 5 simulations. La première avec un revenu universel nul, la deuxième avec un revenu universel égal à 0.000001 par individu à chaque tour, la troisième avec un revenu universel égal à 0.00001 par individu à chaque tour, etc.

    La dernière instruction ci-dessus met dans la liste 'res' un récapitulatif des résultats de chacune de ces simulations. Notammment, pour chaque simulation, on trie par ordre croissant la liste (précisément, un np.array) des fortunes normalisées (chose que j'ai définie au message ci-dessus). Ici, fortune = patrimoine et comme l'a remarqué nicolas.patrois, rien ne peut rendre un patrimoine strictement négatif avec ce modèle, à partir du moment où le patrimoine initial est positif ou nul. Nous arrivons donc à évolution() :
    def évolution(effectif, initial, nbtrans, gain, perte, créationRichesse):
        fortunes = np.full(effectif, initial, dtype=np.float64)
        individus = range(effectif)
        salaires = np.full(effectif, créationRichesse, dtype=np.float64)
    
        for i in range(nbtrans):
            fortunes += salaires
            prem, sec = random.sample(individus, 2)
            fortunes[prem], fortunes[sec] = \
                transaction([fortunes[prem], fortunes[sec]], gain, perte)
    
        return fortunes / np.max(fortunes) # normalisation
    
    On initialise fortunes (un np.array à une dimension, donc assimilable à une liste) comme contenant effectif éléments égaux au paramètre initial (dans les tests ci-dessus, effectif = 500 et initial = 1.0).

    individus est la liste des agents : $[0, 1, \ldots, \mathit{effectif} - 1]$. Ce sont tous des numéros. :-(

    salaires est un np.array à une dimension contenant effectif éléments égaux au revenu universel choisi pour la simulation.

    On exécute ensuite nbtrans fois l'algorithme correspondant à un « tour de jeu » :
    • ajouter à chaque élément de fortunes le même salaire (le revenu universel) ;
    • choisir deux individus distincts au hasard dans la population, de manière équiprobable ;
    • effectuer une transaction entre ces deux individus (détails ci-dessous).
    Ceci terminé, on retourne la liste des fortunes normalisées : on récupère la valeur maximale de fortunes, puis on divise chacun de ses éléments par cette valeur. Le plus riche se retrouve donc avec une fortune normalisée égale à 1. Passons à la fonction transaction() qui est appellée à la fin de chaque tour :
    def transaction(couple, gain, perte) :
        petit, gros = (0, 1) if couple[0] < couple[1] else (1, 0)
    
        if random.randrange(2) == 0:
            delta = couple[petit]*gain
            couple[petit] += delta
            couple[gros] -= delta
        else:
            delta = couple[petit]*perte
            couple[petit] -= delta
            couple[gros] += delta
    
        return couple
    
    Au départ, couple contient les fortunes (non normalisées à ce stade) de deux individus sur le point d'effectuer une transaction. Appelons $p$ le plus petit d'entre eux (i.e., le plus petit élément de couple). On lance une pièce parfaitement équilibrée. Si le résultat est pile, le moins fortuné des deux individus prend $\mathit{gain} \times p$ au plus riche. À l'inverse, si c'est face, il donne $\mathit{perte} \times p$ au plus riche. La transaction est terminée. Dans tous les exemples simulés ci-dessus, nous avons $\mathit{gain} = 0.2$ et $\mathit{perte} = 0.17$.

    La fonction transaction() retourne le couple des fortunes modifiées suite à cette transaction (la nouvelle fortune de l'individu correspondant au premier élément de l'argument couple est le premier élément du résultat et celle de l'autre individu est le deuxième élément du résultat).

    Le reste du code consiste simplement à tracer les graphes représentant, pour chaque valeur de revenu universel choisie, la fortune normalisée de chaque individu à la fin de la simulation (il y a 5 millions de « tours de jeu » par simulation dans les exemples ci-dessus).
  • Tiens Yves, pour continuer à répondre à tes interrogations sur le rôle dramatique du libéralisme sur l'environnement, je te laisse à la lecture du rapport d'évaluation du dernier traité d'importance, le CETA. En conclusion d'un chapitre intitulé : "III.L’absence de traitement de questions substantielles relevant de l’indispensable partenariat économique pour le climat" tu pourras y lire : "Le CETA se veut un accord commercial se réclamant d’un nouveau type, liant des parties partageant les mêmes valeurs, visant non seulement à réduire les barrières tarifaires mais aussi les barrières non tarifaires au commerce, en respectant les enjeux de développement durable. S’agissant du climat, ces objectifs sont loin d’être atteints. Si on veut éviter de fermer les frontières au nom du climat, il est indispensable de mener des politiques beaucoup plus actives et coordonnées du carbone."

    En clair la situation climatique est si dramatique que les rédacteurs de ce rapport, qui sont sans doute bien plus libéraux que toi, envisagent un arrêt du libre-échange !
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Bonjour,

    Merci @brian pour les explications.

    Je me pose une question : si on commence le jeu avec un agent qui possède une somme 10 fois plus grande que les autres agents. Est-ce lui qui finit le plus riche ? Que est le minimum de surplus de richesse initiale qui garantit que cet agent finit le plus riche ?

    @xax : ce que les auteurs expliquent est que la réglementation sur l’environment diffère d’un pays à l’autre. Le pays le plus strict risque de fermer ces frontières aux autres sous prétexte qu’ils ne font pas assez d’effort. Ce n’est bon pour personne. Donc il faut coordonner les règlementations pour maintenir les échanges. Et en plus, l’environnement et le climat sont des problèmes mondiaux qui demandent une solution mondiale.
  • Dans cette économie casino il n'est pas inintéressant de suivre les évolutions de fortune au cours du cycle. Ici avec 300000 transactions les 3 trois plus grosses fortunes sont toutes passées par des très bas et seul 3 malheureux n'ont jamais vu leur fortune dépasser la somme initiale. En classant par ordre du maximum de fortune jamais atteint, le median est à 351. Bref il faut savoir stopper à temps!95360
    95362
    95364
    95366
    95368
  • @YvesM
    J'ai essayé avec tous les participants avec 100 sauf 1 avec 1000000 en initial et après 5000000 transactions l'heureux élu n'est pas le plus riche (et de loin)
  • Obn : j'ai tenté la même manip mais comme j'ai repris un bout du code d'Aléa qui échange l'agent $i$ et l'agent $j$ au besoin pour que le $i$ soit toujours le plus pauvre le nanti qui était l'agent 1 au départ se retrouve à d'autres positions, en tout cas dans ma simulation. Tu as vérifié que ce n'est pas ce qu'il se passe chez toi ? Bon vu que tes courbes d'évolution de richesse sont continues je suppose que tu n'as pas ce problème mais on sait jamais.
  • Bonjour,

    Merci. Les courbes d’évolution disent beaucoup sur le jeu.
    On peut en déduire facilement le résultat de l’expérience avec un agent privilégié.

    Quand tu dis qu’il faut savoir arrêter à temps, j’interprète que le gagnant au temps t n’est pas le gagnant au temps t+1. Un gagnant accapare toutes les richesses mais ce gagnant n’est pas stable.

    Ça rend la comparaison avec l’économie réelle plus difficile. Si le gagnant est instable, quelle leçon peut-on tirer de ce jeu ?

    Je suis preneur de vos interprétations.
  • @Corto J'ai le code (depuis corrigé) posté plus haut avec i et j séparés donc cela doit etre OK
    @YvesM Le gagnant fluctue au cours du temps mais reste stable apres un certain nombre de transactions. J'ai suivi l'evolution du maximum de richesse a condition que le gagnant change avec Max(richesse) > 2000. Au bout d'une dizaine de changement de "lider maximo" la situation est stable
  • @obn merci pour la simulation, c'est très intéressant cette stabilité.

    @YvesM je n'ai pas l'impression que tu as lu le document que j'ai indiqué et dont j'ai extrait la conclusion qui préconise l'arrêt du libre-échange en cas de défaillance des mesures à prendre, et pas pour un seul pays ! D'autre part ce n'est absolument pas un problème mondial : 12 pays (l'UE étant comptée comme une entité) représentent 80% des émissions, sur les 193 membres de l'ONU. À y réfléchir ça me parait maintenant tout à fait évident que les libéraux entraînent le monde à sa perte en jouant la pollution en bourse.
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Bonjour,

    @xax : bon, on ne lit pas la même chose... moi je lis qu’ils demandent une harmonisation des contraintes environnementales parmi les pays pour éviter les distortions de concurrence et permettre les échanges commerciaux.

    Le climat est un problème mondial car, par exemple, la montée des eaux affectent des îles bien loin de sources d’émissions de carbone.

    Et sache que ceux qui jouent en bourses, comme tu dis, ne sont pas ceux qui polluent. Il ne faudrait pas déplacer sur eux notre responsabilité de choix de consommation et de production. C’est aussi con que de rendre responsable les ouvriers automobiles des accidents de la route.

    @obn : après convergence, celui qui possède la plus haute fortune a un avantage : quand il perd, c’est une fraction de la fortune plus faible de l’opposant qui est perdue. Donc cette fraction est très faible relativement à sa propre fortune.

    Comment est justifiée économiquement ce modèle ou la perte/ le gain dépend de la fortune du seul joueur moins fortuné ? Dans la vie économique, quelles sont les transactions qui suivent ce modèle ?
  • Il y a un autre problème qui affecte les îles: la surexploitation du sable des fonds marins pour le ciment des constructions !
    N'étant plus soutenues, les îles s'effondrent littéralement ! Ce n'est pas directement lié aux émissions de carbone mais ça vient compléter le tableau des horreurs écologiques et ça accompagne la perte des modes de vie traditionnels. Il y a un peu plus d'un quart de siècle, les pêcheurs de ces îles ne savaient même pas ce que signifiait l'intégration à l'économie de marché.
    ...
  • Pardon d'arriver tardivement.
    YvesM a écrit:
    http://www.les-mathematiques.net/phorum/read.php?9,1919230,1919600#msg-1919600
    Donc oui, le patron tire profit du travail de l’employé. Et. Donc oui, l’employé tire profit du travail du patron.
    Et il y a des salariés actionnaires. Mais le profit d'un salarié actionnaire et celui d'un actionnaire majoritaire n'ont rien de commun. Le profit tiré d'une entreprise d'un patron d'une grande entreprise n'a rien de commun avec celui d'un de ses employés lambda. La propriété (lucrative) c'est du vol.
    L'économie est comme l'astrologie au moyen-âge. Tu fais cent prévisions il y en aura toujours une qui collera en partie avec la situation. De toute façon si une prévision ne se vérifie pas on pourra faire les poches de millions de gens qui n'ont pas ouvert de compte offshore dans les Iles Caïmans pour planquer leur argent.
  • @YvesM j'ai juste écris qu'il n'y a absolument aucune mesure concrète pour stopper un processus dangereux car les libéraux ont préféré organiser un marché supplémentaire plutôt que de prendre des dispositions, et ils en sont parfaitement conscients même s'ils mentent (1). C'est ta comparaison qui n'est pas vraiment pertinente car elle ne correspond strictement à rien, sauf un petit effet pour tenter de botter en touche, mais vu le niveau moyen des gens sur ce forum ça risque de ne pas marcher :-)
    Peut-être y aura t-il un espoir si quelques grands groupes commencent à comprendre qu'un basculement climatique avec quelques milliards de morts ne serait pas forcément bon pour les affaires. Mais je suis sceptique.

    Les modèles climatiques sont eux bien plus complexes, mais on commence à avoir de meilleures estimations semble-t-il, et elles ne sont pas rassurantes https://www.maxisciences.com/climat/rechauffement-climatique-l-onu-prevoit-une-hausse-des-phenomenes-meteorologiques-extremes-en-2020_art44234.html. Ce serait intéressant d'ouvrir un fil dédié un peu plus tard, car là on est HS, et j'arrête d'intervenir sur cette question en te remerciant Yves, car grâce à toi j'ai pris conscience que la situation est bien pire que ce que je pensais.

    (1) cf. Macron qui est allé jusqu'à raconter que le rapport dramatique sur le Ceta que j'ai cité décrivait un parfait modèle de responsabilité climatique alors qu'il indique précisément l'inverse : quatrième paragraphe de https://www.francetvinfo.fr/politique/emmanuel-macron/referendum-taxe-carbone-mecanisme-de-suivi-ceta-quatre-choses-a-retenir-de-l-intervention-d-emmanuel-macron-devant-la-convention-citoyenne-pour-le-climat_3779421.html
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • Bonjour,

    @FDP : Qu’un patron d’une entreprise privée gagne une fortune, qu’est-ce que tu en as à faire ? Ce n’est pas ton argent. Ou alors tu veux dicter aux autres comment ils doivent utiliser leur argent ? C’est ça ? C’est sans doute ça. Un besoin d’imposer son opinion aux autres.

    @xax : Tu mets la responsabilité de lutter contre le climat sur les grands groupes. C’est une folie. La responsabilité est la nôtre, les individus, citoyens et consommateurs. Il nous suffit de ne plus acheter de raisins du Peru en janvier, d’acheter un scooter électrique, etc.

    D’où vient cette faute morale de rejeter la faute sur autrui ? Toujours et encore, sans fin ?

    Sans déconner, je ne comprends pas cette disposition psychologique : elle est vaine.
    Ça permet aussi de faire semblant d’être vertueux : ‘tous les patrons sont méchants mais moi je suis gentil’.
    Le problème c’est que dés qu’il faut payer pour une bonne cause, on ne trouve plus personne. Il faut faire payer les plus riches que soi-même (quelque soit la richesse).
  • Il est certain que c'est une folie de compter sur les grands groupes pour lutter contre le réchauffement climatique.
    https://www.lemonde.fr/planete/article/2013/09/13/gaz-a-effet-de-serre-les-firmes-les-plus-polluantes-n-ont-pas-reduit-leurs-emissions_3477323_3244.html

    ...
  • @df merci, oui le problème est effectivement concentré sur un petit nombre de pays et sur un petit nombre de firmes, il n'a absolument pas un caractère "global" comme on cherche à nous le faire croire sur des exemples de mesure nulle. À ma connaissance Gates aurait marqué l'intention d'agir mais c'est un cas trop particulier.
    "J'appelle bourgeois quiconque pense bassement." Gustave Flaubert
  • @df Au contraire, si le monde se comportait comme ces grands groupes (et si ce rapport est correct ce dont je doute un peu) les choses iraient beaucoup mieux. 14% de baisse en 4 ans c'est bien. Pensez-vous avoir fait mieux?
  • YvesM a écrit:
    Qu’un patron d’une entreprise privée gagne une fortune, qu’est-ce que tu en as à faire ? Ce n’est pas ton argent. Ou alors tu veux dicter aux autres comment ils doivent utiliser leur argent ?

    On ne peut plus ignorer que la croissance économique impacte très négativement notre environnement.
    Je ne décide pas de ce qu'on produit, un patron, lui, a une responsabilité dans ce que son entreprise produit.
    Son enrichissement est en partie fonction des volumes produits et vendus.

    Si personne ne produit de SUV les gens n'en achètent pas.

    La situation va aller de mal en pis puisque il n'y a pas d'autorité à l'échelon mondial qui s'intéresse à ce qui doit être produit et ce qui ne doit pas l'être.

    Individuellement les gens se rendent compte que la situation est catastrophique mais leur comportement* collectif réel met en danger probablement la survie de l'espèce ou tout du moins les formes de civilisation que nous connaissons aujourd'hui et tout doucement on se rapproche de la barbarie (combats armés entre factions/clans pour s'approprier les ressources devenues rares mais nécessaires à la survie).

    Quand une personne tombe dans la rue, pourquoi j'irais m'enquérir de sa santé ou l'aider à se relever, ce n'est pas moi, je ne devrais pas me sentir concerné et continuer mon chemin pour reprendre ton crédo.

    Les actions des êtres humains impactent la vie d'autres êtres humains. La très grande richesse des uns est la pauvreté des autres (la richesse sous toutes ces formes n'est pas infinie)

    *: très probablement largement influencé par la publicité.
  • Bonjour,

    @FDP : Tu écris, en gros ; si personne ne produit de SUV, on en achète pas. Je réponds : si personne n'achète de SUV, on en produit pas. Ma formulation à l'avantage de mettre l'accent sur notre responsabilité au lieu de blâmer les autres.

    @obn : Tu as raison, les grands groupes font des progrès tangibles (et la plupart on décider de réduire leurs émissions totales* en accord avec l'Accord de Paris). Par exemple : Microsoft a annoncé avoir atteint la carbo-neutralité. Amazon n'est plus très loin. Google y est presque.

    * qui comprennent les émissions de la production et de la consommation de leurs produits et services par leurs clients.

    Par exemple pour Google : ils compensent les émissions carbones de leur facture d'électricité des data centers par la plantation d'arbres ou des investissements qui réduisent les émissions de carbones.
Cette discussion a été fermée.
Success message!