1,问题引入:

  房间里有100个人,每人都有100元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这100个人的财富分布是怎样的?

2,问题思考:

  今天有幸看到这道题目,起初没有任何想法,于是打算采用计算机模拟的解决,模拟出的结果大出乎我意料,引发了我对人生的思考。

  我们不妨把这场游戏视作社会财富分配的简化模型,从而模拟这个世界的运行规律。我们假设:每个人都在同一起跑线上,初始财富都相同,姑且就是100元。而“每天拿出一元钱给别人”可理解为基本的日常消费,这已经是再正常不过的社会生活了。我们来模拟若干时间之后,社会的财富分配,是趋向于平衡,还是形成了贫富差距。

3,说明:

  1,本次模拟方法为纯计算机随机模拟,关于本题的所蕴含的数学原理作者尚未明晰,有兴趣的读者欢迎在评论区探讨。

  2,本次计算机模拟采用的编程语言是Java,版本为JDK1.8,采用的开发工具为IntelliJ IDEA 2018.2.4 x64,程序运行的操作系统是64 位的Windows 10系统 。

  3,关于本次模拟采用的框架是基于java swing 进行二次封装的图形化框架,考虑到本文的很大部分读者都不是从事于计算机的专业人员,加之本文主要也是对社会财富分配的思考。因此,本文尽可能的少涉及代码的编写和展示,如果需要该模板和程序源码的读者,可以在评论区留下联系方式。

4,问题求解:

4.1 财富分配开始时每个人的财富数量(如下图所示)

  图中每个钜形就代表一个人,其高度代表金钱数量,由于现在是游戏尚未开始时刻,每个玩家的财富数量相同,都为100,故现在每个矩形的高度都为100。

4.2 财富分配开始后每个人的财富数量变化情况(如下图所示)

  从图中可以看到,在这随机分钱的操作中,每个玩家财富值的变动是极为剧烈的,并且形成了贫富差距,且距离越来越大。为了方便描述整个社会财富的分配状况,我们按照财富值的增加一个排序算法、,等到的社会财富分布如下图。

  从图中可以看出,初始时所有人的财富值相等,随着游戏的进行,财富值差距越来越大,财富的分配接近于幂律分布。最后,社会将有很少的富人和很多的穷人。让程序循环10000次,可以大致看出:

  • 最富有的人的财富值约为初始财富的3.5倍。

  • top10%的富人掌握着大约30%的财富,top20%的富人掌握着大约50%的财富;60%的人的财富将缩水到100元以下。

  大部分人的钱跑进了少部分人的口袋里。即使在最公平的规则下,世界依然展现出了残酷的一面。

4.3 如果允许借贷,世界的财富分布又将如何?

  允许借债会让世界变得好一点吗?

  在现实社会中,情境会更复杂一些。比如说,当我们没钱了,还可以找亲友、找银行、找投资人借债,说不定哪天就东山再起了呢。在允许借债的情况下,游戏结果如下图所示(排序后结果):

同样,我们让程序循环10000次,可以大致得到下述结论(红色表示负债):

  • 游戏结束时,最富有的人的财富值约为初始财富的4倍。

  • top10%的富人掌握着大约33%的财富,top20%的富人掌握着大约56%的财富;大约25%的人背负着债务,最高负债约为200元。

  实验表明,借债虽然能让我们在走投无路时多一些周转余地,但最终会让穷人变得更穷。

4.4 面对这个残酷的世界,努力真的有用吗?

努力的人生会更好吗?

我们中的绝大多数人,并没有一飞冲天的发财运气,想要改变命运,我们只能选择自己更努力,去争取更好的生活。

我们假设每个玩家的初始财富仍然为100元,但有10人比别人加倍努力,从而获得了1%的竞争优势,即赢得收益的概率比别人高出1%,模拟结果如何呢?

(说明:上图中的绿色柱子为更努力的玩家)

  可以看到,社会财富的总体分布形态没有什么变化。但是,这10位努力的玩家都没有亏本,其中有8人都远高于初始财富,甚至有一人挤进了财富榜的top10。

  实验表明,尽管努力的玩家不一定都是成功的一个,但是努力的人大都混的还不错。感谢这个残酷世界还给我们留下一条生路。  

5,结论

  1,在这随机分钱的游戏中,最后的结果是形成了贫富差距,且差距越来越大。最终,形成了较少富人,较多穷人的社会财富格局。我们大多数人可能都没有这么好的运气,但还是要怀有梦想,万一这概率就是你呢?

  2,结合社会现状,每个人的初始财富应不尽相同。俗话说的好,条条大路通罗马,但有的人出身就在罗马。在相同起点上,贫富差距越来越大,而那些初始财富远高于起点的富人和远低于起点的穷人,岂不是穷人越穷,富人越富,屌丝越难成功逆袭富二代。

  3,在允许借贷的情况下,社会的财富分布并没用显著变化,但社会的贫富差距却越来越大,富人越富,穷人越穷,最终穷人负债累累,达到远还不起的程度。联系现实社会,各种借贷平台,校园贷平台,虽在一定程度上短时间内解决了你的问题,但是最终却是让你负债更多。

  4,这个世界如此残酷,不过天无绝人之路。从模拟情况可得:尽管努力的玩家不一定都是成功的一个,但是努力的人大都混的还不错。因此,就是想要平凡的生活,我们也需要努力,才不会被社会淘汰。

如何面对这个残酷的世界?——Java模拟的更多相关文章

  1. java模拟post请求发送json

    java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求, 方法一: package main ...

  2. java 模拟qq源码

    java 模拟qq源码: http://files.cnblogs.com/files/hujunzheng/QQ--hjzgg.zip

  3. java模拟开锁

    java模拟开锁 service qq:928900200 Introduction to Computer Science II: CSCI142Fall 2014Lab #1Instructor: ...

  4. Jsoup实现java模拟登陆

    Jsoup实现java模拟登陆 2013-10-29 14:52:05|  分类: web开发|举报|字号 订阅     下载LOFTER我的照片书  |     1:如何获取cookies. 1.1 ...

  5. [Java] 模拟HTTP的Get和Post请求

    在之前,写了篇Java模拟HTTP的Get和Post请求的文章,这篇文章起源与和一个朋友砍飞信诈骗网站的问题,于是动用了Apache的comments-net包,也实现了get和post的http请求 ...

  6. Java模拟登录系统抓取内容【转载】

    没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下....     为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...

  7. Java模拟登陆02【转载】

    在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢?     方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...

  8. java模拟浏览器包selenium整合了htmlunit,火狐浏览器,IE浏览器,opare浏览器驱

    //如果网页源码中有些内容是js渲染过来的,那你通过HttpClient直接取肯定取不到,但是这些数据一般都是通过异步请求传过来的(一般都是通过ajax的get或者post方式).那么你可以通过火狐浏 ...

  9. 上curl java 模拟http请求

    最近,我的项目要求java模拟http请求,获得dns解决 tcp处理过的信息特定的连接. java api提供urlConnection apache提供的httpClient都不能胜任该需求,二次 ...

随机推荐

  1. Fiddler抓包的简单使用

    Fiddler抓包的简单使用 参考的博客文章:玲虫师的<Fiddler抓包[5]_Fiddler过滤>. (1)使用fiddler进行过滤,只抓取需要的网络请求. 点击右侧菜单中的[Fil ...

  2. u-boot v2018.01 启动流程分析

    https://blog.csdn.net/weixin_39655765/article/details/80058644#jump1 make smdkc100_defconfig     以被默 ...

  3. 解决 i18n properties文件中文必须是unicode的问题

    解决 i18n properties文件中文必须是unicode的问题 i18n  unicode  UTF-8  目前产品需要做国际化,但 java 的 I18N 资源文件中中文必须转换成 unic ...

  4. 修改vue-cli脚手架顶部图标

    1. 将ico图标放到static目录下 2. 在 build/webpack.dev.conf.js 文件修改   new HtmlWebpackPlugin({ ... favicon: './s ...

  5. 'gbk' codec can't decode byte 0xad in position 12: illegal multibyte sequence

    原文链接:https://blog.csdn.net/shijing_0214/article/details/51971734 使用python的时候,经常会遇到文本编码的问题,其中最常见的就是“' ...

  6. 【JZOJ1282】打工

    题目 分析 显然,有一个结论, 在有效的方案中,第i位的数一定小于等于i. 所以,设\(f_{i,j,k}\)表示,做到第i位,前i位的最大值为j,前i位是否与输入的序列的前i位相等. 转移方程随便搞 ...

  7. 设置HTML的TextArea标记跟随文本内容自动设置高度

    写内容的时候用的是textarea来写,可以换行,然后预览页面也要显示是换行才行,所以预览页面还是要用textarea来显示, 样式去掉边框,不可以拉伸,不可编辑 // html <textar ...

  8. Mapnik使用postgres中的栅格数据

    XML: <?xml version="1.0" encoding="utf-8"?> <Map background-color=" ...

  9. TypeScript作为前端开发你必须学习的技能二)

    TypeScript 变量声明 变量是一种使用方便的占位符,用于引用计算机内存地址.我们可以把变量看做存储数据的容器. TypeScript 变量的命名规则:和javascript一样.除了下划线 _ ...

  10. shell练习--PAT题目1005:继续(3n+1)猜想(全绿失败喜加一)

    卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n=3 进行验证的时 ...