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. 认识 android-job

    简评: Android 实现后台任务的最佳实践. 对于现在的应用来说,在应用生命周期之外运行一些后台任务可以说已经是一项必不可少的需求了.这些任务可能是在某个时间点提醒用户什么事情或同步本地数据到服务 ...

  2. @Autowired与@Resource的区别(转载)

    原文地址:http://bhdweb.iteye.com/blog/1663907 1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上.  ...

  3. Redis数据类型之列表操作

    redis 目录: 1.自动分配(redis) - 批量导入 2.微信自动绑定 3.django的ORM做不了的操作,怎么自定义操作数据库 extra ’ 4.报表 公司每个月销售的业绩 5.权限 = ...

  4. 详解javaweb中jstl如何循环List中的Map数据_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 详解javaweb中jstl如何循环List中的Map数据 第一种方式: 1:后台代码(测试) List<Map& ...

  5. AngularJS的目录结构

    templates/ _login.html _feed.html app/ app.js controllers/ LoginController.js FeedController.js dire ...

  6. js 页面 保持状态 的方法

    A -> B 带参数进去B页面, 刷新B页面还  保持状态 单机下一页, 改变请求参数, A->B 不带参数进去B页面 (不存在)当前状态保存在cookies中, 刷新页面,判断cooki ...

  7. msyql 优化之五不要

    1.尽量不要有空判断的语句,因为空判断将导致全表扫描,而不是索引扫描. 对于空判断这种情况,可以考虑对这个列创建数据库默认值 //空判断将导致全表扫描 select small_id from sma ...

  8. vue学习-day01(vue指令)

    目录: 1.什么是vue.js    2.为什么要学习前端的流行框架    3.框架和库的区别    4.后端MVC和前端的MVVM的区别    5.vue.js的基本代码--hollo world代 ...

  9. asp.net 如何实现大文件断点上传功能?

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  10. CDOJ 203 并查集+优先队列 好题

    题目链接 Islands Time Limit: 30000/10000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) S ...