思维运筹学导论(实践篇 · 组块化 · 上)

思维运筹学导论(实践篇 · 组块化 · 上)

人类的知识就像珊瑚礁,是前人思维组块化后的历史沉积。

在数学中从算术到方程的进化,就是把「数」组块成「变量」的结果,当然,这只是数学海洋中最初级的一种组块化。

在编程领域中,面向对象的思想,更是组块化思想的系统性实践,一个类显然就是一个组块,这种思想在编程领域是划时代的。

在投资领域,最基本的图形K线图,就是分时图的组块化:分时图里面有大量的实时交易信息,而在K线图里却只保留了开盘价、收盘价、最高价和最低价这四种信息,但是这种信息的省略却可帮助投资者看到全貌。

在汉语里,成语就是一种沉积,很多成语的背后是历史典故,一个含义隽永的故事被压缩在四个字里。

因此,当我们运用知识时,就是使用组块,经由这些既有组块的中介,我们得以理解和调用前人的大量经验,然后组织成更加复杂的事物,比如一本长篇小说、一部电影、一台iPhone、一架航天飞机……但是仅仅依赖这些知识就够了吗?不够,因为知识只能反映已明确的、模式化的经验,而当我们处理一个新的问题时,在知识之外,我们还要面对这个问题下新的复杂性、模糊性和不确定性。这个时候,我们就需要运用自己的智慧,创造性地构建组块,来解决问题。所以下文中所指的组块化特指思考者自己构思出组块的过程,而不包括调用已有知识组块的过程。

那么到底怎样才算是「组块化」?「组块化」的特征有哪些呢?

  1. 组块化一般是同质信息的合并。
  2. 组块化一般会屏蔽掉部分细节信息。
  3. 由于部分信息的合并和屏蔽,问题的复杂性得到降低,同时更多的信息(通常是在一个更大的背景下)可能会被考虑进来。

组块化在认知心理学中是一个很简单的基础概念,但在思维实践中,用好组块化并不容易。思维实践中组块化的关键是对思维过程的反思。在思考问题时,我们常常会拘泥于问题的某些细节或者具体的进程中,但缺少对思考过程本身的回顾和评估,因此常常陷到一个点就跳不出来。而组块化方法则需要你进行回顾和审思,然后策略性地避开你正陷入的泥潭。组块化思考的步骤大致如下:

  1. 在思考受阻时反思你的思考过程,找出受阻点,即确定是在思考哪些内容时无法继续下去。
  2. 对受阻点中的信息或逻辑关系进行组块化尝试,这一过程可能是反复多次的,通过变换不同的组块方式来进行。
  3. 找到有效的组块化方式,使问题得以简化并找到解决方案,问题基本被解决或局部解决(此时需要循环进入下一个组块化过程)。

现在我们试一下解解下面这道智力题(智力题虽然是虚构的,复杂度比不上现实中的问题,但是我们可以那它们来作模拟思维训练,这对我们提供解决现实问题也是很有好处的):

题一:为了得到 20 张 30cm 见方的木板,决定在家居中心购买 120cm*150cm 的板材,并当场截断。截断的费用与截断长度无关,每次10元。尤其注意,不可以将两片板材并排或者重叠在一起放置后再截断。那么要截成 20 张 30cm 见方的木板,最少要花多少截断费?


大家先自己想一想怎么解,再看我的答案。

……

好,说一下我是怎么解这道题的。首先考虑第一刀怎么截,那无非是沿与长边平行的虚线裁和沿宽边平行的虚线裁,那两种截法有什么差别呢?不清楚。而且长虚线有两种:一种是中间线,还有一种是靠边的;宽虚线也有两种:一种是靠边的,一种是靠中心的。各自有什么区别呢?目前也无法判断。那我们考虑第二刀试试:先假设我截的第一刀是靠边长虚线,那么接下来理想的第二刀怎么下?是先截窄的那条还是先截宽的那条?如果是先截窄的那条,那么就要截四刀才能截出五块 30cm 见方的木板,如果截宽的,那么就更复杂了,比如第三刀可是……这个时候我已经感到我的脑子已经不够用了,这么多可能的情况,这么多截断的路径,我怎么可能想得清楚!

在这个思维受阻的时候,不如来反思一下我的受阻点吧:当前的思路,就像一棵树分出枝桠一样,不断地分解出越来越多的可能情况,然后我们有限的可怜的工作记忆就要不断地对这些分出的路径作出标记并且记下当前的刀数……这就成了一个巨大的工程,超出了我的工作记忆容量。

那么有没有可能,把这些不同的截断法进行组块化处理呢?事实上,我一开始考虑的,把截断法分为长虚线截断和宽虚线截断,本身就是一种组块,这种组块是基于截断方式中显而易见的特征——虚线的长度——来判定的。可是这种组块化,似乎并没有起到简化问题的作用,反而让问题显得很复杂。那么有没有其他的组块方法呢?有没有可能,在所有的截断方式背后,都有某个全都符合的特征,来概括所有的截断操作呢?有的!事实上,不过我们的截断是沿着哪一条虚线进行,是长是短,是朝哪个方向,其结果都是「一分为二」,就是从一块板变成两块板(注意「不可以将两片板材并排或者重叠在一起放置后再截断」这个条件),也就是说要最终截出20块小木板,就一定需要截29次!所以答案是19*10=190 元。


解开这道题的关键,在于「抽象」:抛开对各种各样截断方法的细节纠缠,把这些方法抽象出一个共同点——每一次截断结果必定是一分为二——从而把所有的截断操作组块为一类,使问题大幅度简化。所以我们可以这样说:

一个成功的组块化,往往要把某些信息抽象到一个更高的层次。

当然,这不是说,所有的组块化都需要抽象到一个更高的层次。在有些问题下,仅仅是归纳式组块也能发挥有效简化问题的作用。所以我们可以把组块化分为两种,easy chunking和hard chunking,前者是基于对显而易见特征的归纳,后者基于对深层共性的抽象

我们再看一题:


题二:小镇上有一所大学,拉维尼娅在那里读书。镇上有一条林荫大道,名叫大学路,由下图的直线来代表。路上有11幢房子(自A至K,原点的颜色表示房子外墙的颜色,靠路东段的房子为蓝色,靠路西段的房子为绿色),她的11位好朋友分别居住在那里。拉维尼娅以前一直同父母住在附近的城镇,但她现在想搬到大学路上来住,打算在街上的L处找一间公寓,L的所在位置必须使她到11个好朋友家的距离之和为最小。假设在合适的地点确实有房可租,试问,拉维尼娅应搬到何处居住?

这道题的解法,似乎可以这么做,在大学路的大约中点位置,假设一个L,然后计算这个L和各点的距离,比如和大学路西段各点的间距可以标记为L-A L-B L-C L-D L-E L-F LG,加和后求得L-West,L和东段的距离为L-H L-I L-J L-K,然后求得L-East,然后我们想办法让L-West和L-East之和最小。可这种组块真的有效吗?似乎毫无用处。

事实上,真正有效的组块化,是从两端开始配对,即A、K一对,B、J一对,以此类推,然后我们考虑,L-A和L-K之和如何最小化,那么显然,如果L点在A、K之间则其和为AK间距,如果L在A、K之外则一定大于A、K间距,所以L必须在A、K之间。以此类推,L点也必须在B、J之间,在C、I之间,最后剩下一个点F,那么只有F点本身离F点最近,所以正确答案就是F。

回顾本题的思考过程,这道题中包含了误导信息(不同的颜色、东西段以及东段的点看上去更远),而实际上现实中的问题,常常包含了各种各样的误导信息。这些误导信息很可能诱导你做出错误的组块,比如在本题中,因为颜色、远近等显而易见的因素进行了easy chunking,却不知道如何进行基于抽象特征的hard chunking,导致无法顺利解题。

因此一个组块化思考者,应该有意识地去区分诱导信息和有效信息,不只是基于表层信息进行组块化思考,而是更多地通过深层的抽象组块化来从根本上化解问题的复杂性。


参考文献:

题一出处:胜间和代 著《胜间和代教你提升思考力》,中华工商联合出版社。

题二出处:马丁 · 加德纳 《最后的消遣》(「拉维尼娅租房问题」,在原题基础上改编 ),上海科技教育出版社

34 条评论