问题描述:一个财富分配游戏
房间里有100个人,每人都有100元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个
人,最后这100个人的财富分布是怎样的?
模型假设:
1. 每个人初始基金100元。
2. 从18岁到65岁,每天玩一次,简化运算按照一共玩18000轮
3. 每天拿出一元钱,并且随机分配给另一个人,即每轮有100元的现金流动。
4. 财富值可以为负值
要求:
1. 注意审题。
2. 构建模型模拟(这里需要跑18000轮)
3. 18000轮的数据都要保留。
4. 尽可能少的使用for循环。
5. 最后绘制柱状图,查看该轮财富情况。只需要绘制第9000次,第18000次时的财富分布结果,共2张图。
6. 最富有的人相比于初始财富,翻了多少倍?
7. 最富有的前10名财富增长曲线。
8. 10%的人掌握着多少的财富?30%的人掌握着多少的财富?又有百分之多少人财富缩水至100元以下?
补充:
1. 结果数据中记录下整个分配的完整流程,可不用数据,变量在内存中即可。
2. 整个模型运行的耗时不应超过10秒。建议能控制在5秒内。
3. 使用高级或者精巧的代码书写。
4. 模型代码简练高效。有效代码行数控制在100行内。
5. 请提供完整的可运行代码,及对应的书面报告。代码请加注释说明。
6. 开发语言限制为R或者Python。
代码:
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 30 10:32:24 2018
@author: D.henry
问题:房间里有100个人,每人都有100元钱,他们在玩一个游戏。
每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这100个人的财富分布是怎样的?
"""
import matplotlib.pyplot as plt #导入matplotlib.pyplot
import pandas as pd #导入pandas
import random #导入random
import heapq #导入heapq
import time #导入time
import copy
start = time.time() #记录程序开始的时间
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False #设置允许中文标签
person = 100