Agent-Based Model有关

Discussion in 'Behaviour and Cognition' started by konit, Dec 18, 2010.

  1. 呵呵~
    1.JS,Python之类的当然不是FP了~偶只是开玩笑的~
    不过其实也有人用JS,Python之类的写FP。说穿了FP只是一种思想,语言只是用来实现这个思想的工具。

    2.MAC,Win之类的问题就不多说了,离题了~~不过win95不是壳,win3.1是壳~

    3.我简单谈谈我对FP缺陷的理解。FP最大的问题是缺乏有效的实现。计算机发展至今都是基于布尔电路的,本质上是按照图灵机的模型工作,FP的实现都是通过模拟达到的,并不是真正的运用了物理规律。我觉得比较有潜力的,真正的FP实现,可能需要等待DNA分子计算这样的生物计算机才行。在此之前,FP的性能问题是无解的。

    4.我觉得Agent用来模拟人的思维还有所欠缺。记得以前有哪个大家说过,本来大家都认为当晶体管的数量超过人脑的时候,就能真正的模拟出人的能力。后来才发现远远不够,因为人脑的一个神经元并不等于一个晶体管,而是等于一台计算机~

    5.其实循环和分支都是命令式的东西,FP可以模拟但这些并不是FP的本质。FP对数学函数的描述更贴近人类的自然描述,可读性和可描述性的确很舒服。但是如3所说,FP慢啊...

    贴个benchmark吧:
    http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=gpp&lang2=ghc&box=1

    根据这个benchmark,Haskell比C++要慢2到10倍,并且多用3倍的内存。
    这个benchmark是综合9项不同的micro benchmark的结果。

    不过可惜这里面没有跟RPython的全面对比测试。据RPython的作者所说,RPython在这里的某项测试中可以比C快40%~~非常给力的速度~
     
  2. 3. 说点题外话。生物计算机象是一种数学猜想很虚,实现起来还很遥远。至少在我们的有生之年是看不到的啦。

    4. 说点题外话。无论计算机发展到何种程度(包括生物计算机),计算机的智能永远不会达到或超过人类。当前对人类的智能方面的研究,我认为连门都没入。有的专家认为是用语言思考,我不赞同;有的专家认为人的思维是逻辑式的,我也不赞同。人类的智能还是个迷,可能永远解不开。人类的思考过程太复杂。至于那种计算机赢了人类的象棋程序,更是一点智能都没有,纯粹是糊弄人的。研究人的智能就象去发明永动机,就象去研究上帝的存在,可能结果白费力。仅是个人浅显之见。

    5. 减少循环与拷贝是避免程序变慢的两大法定(个人之见)。看看现在的程序,哪个不是在那里傻傻地循环一遍又一遍。现在的标准是谁不会编这种傻程序就不是好程序员。但FP就不一样了。你说haskell慢我认同。但并不是所有的FP都慢。你看到KDB数据库的实现了吧?速度很快,就是用Q语言实现的。haskell没有较多工程化的实例。我这里提出来haskell并不是说用它实现一些东西,而仅仅是学习它的一些概念。因为它是目前最PURE最严谨的FP。例如想了解monad的概念,那可是大部分人认为难上又难的概念。如果从HASKELL中真正学到了这个概念,再学习其它的FP那就轻松多了。要想用FP实现实用的项目,我还是推荐MICROSOFT的F#,也是本人一直在钻的东西。F#既支持命令式语言,还支持函数式语言,同时支持DOT NET环境,还能与其它DOT NET下的语言集成,象MATLAB。真是太好了。如果你怕程序慢,那完全可以用此语言减少循环与拷贝,慢不慢就靠程序员的设计了。另外,未来的网络计算(如云计算),并行计算,多线程方面的难题,设计模式的简化,本人对FP大为看好。以上本人也仅是一知半解,见笑了。:p

     
  3. 减少循环与拷贝是避免程序变慢的两大法 . sorry, 笔误,改一字。
     
  4. 偶覺得要提高程序運行速度只能是向底層硬件邏輯耦合,這樣會讓算法代碼變得瑣碎難以閱讀。
    而FP是相反方向的,是向上層的數學抽象靠攏,他們喜歡強調用最簡單的遞歸,這適合簡化一些特定問題的思考,但并不一定就能提高運行速度,有可能相反。而且在大部分處理現實問題的場合,并沒有過多復雜的數學關系,遞歸未必好用,不如命令式IFTHEN來得直接。
     
  5. 呵呵,那就说点体外话吧。以目前的理论体系而言,是不可能产生真正的智能的。目前的体系如何打破?目前大家都知道得靠生物计算机,量子计算机这类东西。但是无论是技术上的进展还是新理论上的建立,目前都还虚无飘渺的很,连人类是否有这个能力都值得怀疑。

    FP的本质是lambda演算,与图灵机等价,因此并没有突破目前的困境。FP与命令式编程,本质上互相等价,只是在具体的细节实现上各有优劣。对FP寄予过大的希望,其实本身就是造永动机的行为。

    具体的来说,决定程序运行速度的并不是循环,而是算法,而且算法是首要的占支配地位的决定因素。其他因素,诸如机器的快慢,不同的语言实现等等,只能起很有限的作用。比如KDB是基于内存的数据库,比基于磁盘的数据库肯定要快,而且就算快10倍也不稀奇,哪怕后者是用高度优化的C写的。
    但是,如果KDB的检索算法是简单的顺序查找,后者是B+树。哪怕前者用C写,基于纯内存跑,后者用最慢的语言写,基于很慢的硬盘跑,在数据规模上升到一定程度之后,前者一样会被后者迅速的甩开。这就是算法的作用。

    FP最大的优势,就是具备天然的并行化能力。没有变量的概念,自然而然的消除了命令式编程中常见而且烦人的临界区问题。然而如我前面强调的,FP的意义在于其思想一样,在命令式编程中一样可以运用这个思想来复制其并行化能力。既然你提到了云计算,那你应该知道这方面最为典型的例子就是Google提出的MapReduce算法,以及开源实现hadoop。前者包括BigTable一起,都是Google自己的私有C++实现,后者包括分布式文件系统HDFS,也是基于Java的实现。以上两者都有超大规模的工程运用(所谓超大规模,指部署超过1W个节点),这些都是目前最热门的话题。其实你既然知道haskell,就清楚MapReduce实在是再简单不过的东西了。然而Google就能借用FP的思想,用C++做出足够健壮足够高效的实现,并用它作为自己整个系统的基础设施,并没有因为haskell有这个语言特性就非得用haskell来做。所以我之前一再强调,语言只是工具,重要的是背后的思想。理解了思想,用啥语言完全不重要,这就像是,对内功深厚的人来说,万物皆为剑,用树枝也可以杀人一样的道理。
     
  6. 我简单的看了一下lz贴出来的csdn上的Agent的介绍文章,确实开阔了视野。感觉Agent可以拿来模拟一堆交易者互相作用造就的市场波动景象,但是用它来自动生成交易方法不是它的长处?它只能模拟出景象不能告诉你为什么这样或者将来会怎么样吧?



    大家有点跑题了哈,我们假设,用Agent的方法制作了一套系统,看起来可以反映出大家相互作用造成的风起云涌,so what?去研究这个自己模拟的小市场的走势吗?那还不如研究真的市场带劲?


    至于语言的性能跟优化问题,大家让自己的圣杯交易系统跑6个月,然后用赚到的钱去换个cpu加根内存就可以了
    :)
     
    song likes this.
  7. 神贴