• 如何模拟世界 一个奇怪的想法


         过年在家休息,脑袋里面冒出一个奇怪的想法。如何使用程序来模拟整个世界。

         从小就是模拟经营类游戏的粉丝,所以对于模拟程序特别感兴趣。玩过很多模拟城市类似的东西,总是觉得游戏虽然好,但是不过瘾。大部分游戏都是围绕着建筑物展开的,物理特性的模拟为主,我希望看到一个以模拟人物为主,以人为中心的,人文的模拟类程序。如果可以的话,希望给每个人物设定独特的性格,每个人物都可以有自己独立的行为和思想。如果允许的话,为每个人物开一个独立的线程。

        当然,产生这个念头的另一个原因是,很多网络游戏和网页游戏,到后期都容易变成死服。既然是死服了,我们能不能设计这样一个单机游戏,依靠模拟人的行为,将一个单机游戏模拟成为一个多人游戏呢?如果能够做到模拟每个用户的行为,加上一些AI的元素,理论上可以做到模拟一个多用户的环境。

        实现这样的一个东西,难度很大,不过,真的可以实现出来,用处也很多。当这个模型做到高度成熟的时候,可以模拟和预测很多东西: 如果一个商品涨价后,多少用户还会继续购买商品;电影的主角选择谁,会具有最多的票房。当然,这个系统和天气预报一样,由于复杂度太高,精确度很难得到保障。

         如何来建立这样的一个模型,这个模型是建立在海量统计数据上的。有很多统计数据,用户倾向,都沉睡在Facebook,开心,人人的历史数据里面。每年调查公司都会做很多问卷调查。这些数据如果可以用到这个模型中,将会起很大作用。例如,18-35岁的人,每周会看多少部电影,分别喜欢看什么题材的电影,天气对于出门看电影的影响等等,每个独立的调查可能不能产生很大的作用,不过,当几万个这样的调查结果用于模型的时候,我认为可以在某些方面模拟出真实的用户行为了。

        这个模型,如果要做到极致,出路只有一条,将所有的东西,所有的对象都模拟出来。虚拟的人,喝了一瓶虚拟的可乐,增加了快乐度,同时增加了卡路里。可乐又增加了饮料公司的销售额,同时增加了垃圾量,增加了可回收的垃圾数目。只有将小到一瓶可乐都定义为一个Object(里面的可乐,外面的瓶子其实也可以是两个对象),都仔细的去管理,才能将模拟做到极致。

        真的动手写这样的东西,其实已经超出了程序员的能力了。就算做一个大粒度的模拟,牵涉到的类,模型的数量就很惊人。然后就是为了真实性,还需要大量的统计数据作为随机函数的支持。生成1000个Person对象,性别的话,0.5/0.5这样的比例就可以了。但是血型呢?全世界人,A,B,AB,O,其他血型的比例是多少,这个必须要查资料,平均化处理肯定不对。每个人的生日可以平均分布在365天里面,不过每个人喜欢的颜色,每种颜色的比例也必须查资料。

        做这个东西的另一个意义是挑战思维。这个东西比大部分人在工作中写的代码难上很多很多。

       1.多线程:如果有1000个人,都要进行一些社交活动,线程是必须使用的。

       2.海量数据的处理,1000个人将生成很多数据,模拟越复杂,数据越多

       3.模型的设计,UML等等的功力的挑战。

       4.另外的一些编程的Sense

       5.将资料,信息转化为代码的能力。怎么将手头上的文字转化为代码。怎么将现实生活中的行为,转化为代码。

       6.耐性:这个东西,在没有成型前,一点都不好玩,一点都看不到前途和钱途。但是一旦完成后,将会产生巨大的效果。这个东西在中国开源,按照过去的经验,基本上没有人肯贡献代码,一定要有单打独斗的准备。

       

        不知道这个东西能够做到什么程度,不过,真的能够在开发这个东西的时候,收集到很多资料,有很多想法,也是不错的。

       

  • 相关阅读:
    PowerDesigner16 破解
    双向链表的实现与操作(C语言实现)
    【HDOJ 2063】过山车
    gcc 源代码分析-前端篇2
    Android4.0.4-在build.prop中添加属性的方法【转】
    安卓系统手动添加虚拟按键教程【转】
    android 添加新的键值,自定义按键-2【转】
    android 添加新的键值,自定义按键【转】
    Android下添加新的自定义键值和按键处理流程【转】
    android监听虚拟按键的显示与隐藏【转】
  • 原文地址:https://www.cnblogs.com/TextEditor/p/2330829.html
Copyright © 2020-2023  润新知