Comme je n'ai pas envie de dormir et que ce que tu dis est très intéressant j'ai écrit ton programme en Common Lisp – utilisable abec sbcl par exemple. Cela ressemble à ça:
(defparameter*population-size*500"The number of persons in our modelisation.")(defparameter*initial-fortune*2000"The initial fortune of each person in the modelisation.")(defparameter*transaction-rate*20/100"The proportion of their fortune a person will engage in a transaction.")(defparameter*regulatory-advantage*5/100"The correction introduces by the regulator to alleviate the poor.")(defunfortune-simulation(number-of-iterations)"Run the Boghosian model for NUMBER-OF-ITERATIONS."(declare(optimize(speed3)))(labels((make-initial-state()(make-array*population-size*:initial-element(float*initial-fortune*)))(transaction(state)(let*((payer(random*population-size*))(receiver(random*population-size*))(fortune-payer(arefstatepayer))(fortune-receiver(arefstatereceiver))(transaction-base(minfortune-payerfortune-receiver))(transaction-rate(float(if(>fortune-payerfortune-receiver)(+*transaction-rate**regulatory-advantage*)*transaction-rate*)))(transaction-amount(*transaction-basetransaction-rate)))(decf(arefstatepayer)transaction-amount)(incf(arefstatereceiver)transaction-amount))))(let((state(make-initial-state)))(dotimes(_number-of-iterationsstate)(transactionstate)))))
La fonction calcule l'état final du modèle après tant et tant d'itérations. Cet état est juste le vecteur des fortunes. (Pourquoi ne pas donner 1 EUR à tout le monde au début au lieu de 2000 ? :-) )
Pour interpréter les résultats plus facilement j'ai aussi écrit la fonction suivante
(defunfortune-repartition(fortune-vector&restquery)"Analyse fortune repartition according to request QUERY.The QUERY is a list of percentages to break down the fortune repartition. The answeris a list whose elements have the form (P N AMOUNT)which reads like "In FORTUNE-VECTOR the N-th first people own together AMOUNT of money, which is more than P of the total amount of money.""(let*((total-fortune(**population-size**initial-fortune*))(decreasing-fortune(sortfortune-vector#'>=))(detailed-query(mapcar#'(lambda(p)(cons(floatp)(float(*ptotal-fortune))))(sortquery#'<=))))(loopwithcurrent-query=detailed-querywithanswer=nilforifrom1upto*population-size*forax=(arefdecreasing-fortune0)then(+ax(arefdecreasing-fortune(1-i)))when(nullcurrent-query)do(returnanswer)when(>=ax(cdr(firstcurrent-query)))do(progn(push(list(car(firstcurrent-query))iax)answer)(setfcurrent-query(restcurrent-query)))finally(returnanswer))))
Au final avec les nombres que tu utilises mais seulement 100000 simulations, on trouve:
Ce qui signifie que les 53 personnes les plus riches(sur les 500 de départ) possèdent à elles seules plus de 95% de la fortune totale du système, et ainsi de suite jusqu'au terme final qui dit que les 9 personnes possèdent plus de la moitié des richesses totales.
Si on annule *regulatory-advantage* on voit cet effet s'accentuer:
# Common Lisp
Posté par Michaël (site web personnel) . En réponse au journal Un article de "Pour la science" m'ayant amené à coder pour une petite vérification perso.... Évalué à 6. Dernière modification le 21 juillet 2021 à 02:56.
Comme je n'ai pas envie de dormir et que ce que tu dis est très intéressant j'ai écrit ton programme en Common Lisp – utilisable abec
sbclpar exemple. Cela ressemble à ça:La fonction calcule l'état final du modèle après tant et tant d'itérations. Cet état est juste le vecteur des fortunes. (Pourquoi ne pas donner 1 EUR à tout le monde au début au lieu de 2000 ? :-) )
Pour interpréter les résultats plus facilement j'ai aussi écrit la fonction suivante
Au final avec les nombres que tu utilises mais seulement 100000 simulations, on trouve:
Ce qui signifie que les 53 personnes les plus riches(sur les 500 de départ) possèdent à elles seules plus de 95% de la fortune totale du système, et ainsi de suite jusqu'au terme final qui dit que les 9 personnes possèdent plus de la moitié des richesses totales.
Si on annule
*regulatory-advantage*on voit cet effet s'accentuer:et les seules 4 personnes les plus riches concentrent 50% des richesses totales.