“程序的迭代”——复杂性度量随想

      编程的一个基本技巧是迭代:先有一个可运行的小程序,再加点修改,调试这些修改。依次迭代。程序逐渐越来越复杂,功能越来越多。
  思考一个问题:“   迭代像什么?  ” 
 
迭代——写文章
      迭代比较像写文章。我们先写一个大纲框架,然后再细化每个条目。大纲在某种程度上算一个完整的文章。越细化也就是越迭代深入。
  有1个区别是小程序一般只有目标任务里的一点点局部功能,而大纲包涵了文章的所有大致意思。也就是写文章是自上而下,而程序迭代是自下而上的。这个区别是因为迭代每一步都要保证一个程序是可运行的。可运行是一个很复杂的机制,需要很多智力活动才能形成。这个是编程需要迭代的根本原因:在每个时间节点,都要形成一个激活的小型复杂系统。
 
迭代——生物进化
  然后我想到一个更好的比喻,就是生物的进化。先有简单生物,能活着生孩子就行。
  生物会产生变异,这就像程序添加新功能。进化论说的适者生存,就像大自然在调试程序。这个比喻的契合度非常高。
  不能生存和繁衍的生物体是一个转瞬即逝的失败。必须有活性的生命体才有意义。生物在每个时间节点,都要形成一个激活的小型复杂系统。
 
复杂性度量
  复杂性度量,应该从“质”上分为两种:低级复杂和高级复杂。
  高级复杂系统的标准是形成了某种智能结构。智能是说针对某些输入,或仅以自身状态作为输入,该系统可以做出某些有意义的反馈。
  例如求最大值函数就是一个有意义的反馈。草履虫游向食物也是有意义的反馈。人类思考存在的意义也是有意义的反馈。而龙卷风就是低级复杂系统。他没有什么意义,或者说能把东西举起来的“意义”很弱,很有限。
  这里“意义”的定义很模糊,这需要更多的思考进行更详细的量化定义。其中一种“有意义”是非常容易定义的,那就是维持系统本身存在的意义。例如草履虫移向食物,这就是一种明显的“有意义”。
  还有个缺点是“意义”这个词略显主观,这点倒是不足为虑,因为量子力学也有所谓“观察者”的概念。
整体性——意义
  我比较关注复杂系统称之为“系统”所具有的层次性。如果这些东西没有组合起来,那么就不算什么系统,也就没有什么基础去研究他的复杂性。这种层次性,是因为他们组合起来形成了某种意义,所以人会认为他们是一个系统。
  从这个角度说,龙卷风确实是有意义的,因为他是“一股”龙卷风,而不是一堆堆一个个空气分子运动集合。这点是整体论的基础,研究对象要是一个整体。当然还原论其实研究的也是整体,不然也就没有分解的目标了。在这里看到,低级复杂和高级复杂直接的界限其实是模糊的。也许“自组织”是一个比较容易划分的界限。
  对于复杂性,关键是眼光要盯在他们为什么而成为一个整体,这应该是整体论区别于还原论的地方。我认为一堆东西是一个整体,是因为这个整体能够做有意义的反馈,反馈越有意义,说明这个整体的整体性越强。也许整体性和复杂性还是有一定区别,但是我认为说“大脑比地球大气复杂”是有一定的合理性的。
 
  这些说法看起来有点像是循环论证,用2个概念互相解释,但这也许是探索复杂性度量的一个很好的视角。对于这些学科我的了解还很浅薄,请大家多多指点。欢迎大家多多留言。
  
  
原文地址:https://www.cnblogs.com/Darwin2000/p/5622518.html