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. Stanford CS229 Machine Learning by Andrew Ng

    CS229 Machine Learning Stanford Course by Andrew Ng Course material, problem set Matlab code written ...

  2. php扩展安装,指定新的openssl

    1 自己从源码编译一个新的openssl 下载源码下来解压到 /mnt/soft/openssl-1.0.2m (openssl 安装到) ./config -h /usr/bin/perl ./Co ...

  3. Java并发编程实战 第5章 构建基础模块

    同步容器类 Vector和HashTable和Collections.synchronizedXXX 都是使用监视器模式实现的. 暂且不考虑性能问题,使用同步容器类要注意: 只能保证单个操作的同步. ...

  4. 对url给后台传数据的时候特殊字符需要转义

    URL中的字符只能是ASCII字符,但是ASCII字符比较少,而URL则常常包含ASCII字符集以外的字符,如非英语字符,汉字,特殊符号等等,所以要对URL进行转换.这个过程就叫做URL编码,或者叫U ...

  5. 对vue的solt的理解

    //父 <children> <span>12345</span>//这边不会显示 </children> //子 components: { chil ...

  6. DOM自定义属性操作

        DOM标准     (一)核心DOM 可以操作一切结构化文档的API,包括HTML和XML,核心DOM是万能的,但又是繁琐的. (二)HTML DOM 专门操作HTML文档的简化版DOM AP ...

  7. 1.端口被占用问题:Embedded servlet container failed to start. Port 8097 was already in use.

    1.端口被占用问题:Embedded servlet container failed to start. Port 8097 was already in use.netstat -anonetst ...

  8. PHP基础教程 10款人气暴涨的PHP开源工具

    若想创建动态而又新颖的Web应用程序,PHP便是理想的选择.不用说,在Web开发世界里,PHP是最流行的语言之一.一些非常好用的PHP开源工具着实拯救了不少开发任务繁重的PHP开发 人员,减轻他们的开 ...

  9. new/delete和malloc/free区别与联系

    1.基本概念 malloc/free (1).函数原型及说明 void *malloc(long NumBytes): 该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则 ...

  10. sh_10_分隔线模块

    sh_10_分隔线模块 def print_line(char, times): """打印单行分隔线 :param char: 分隔字符 :param times: 重 ...