很多教科书讨论问题时,往往都符合一个套路:首先提出问题,接着建立数学模型,最后对这个数学模型给出完美的理论解。然而自己做科研项目的时候,却遗憾地发现:模型往往找不到理论解。
后来才意识到:教科书中的套路,其实是一种幸存者偏差:如果模型或方程没有解,就不可能写在教科书上。所以,教科书中的方程都有解,但遇到实际问题时就不一定了。
我讲创新课的目的之一,就是告诉大家看透幸存者偏差。我想,许多人写论文的时候也会遇到方程不可解的情况。但他们会修改问题或模型,直到它们有解为止。这时就能发表论文了。当然,这样的论文有没有用处,是另外一码事了。
现实中的问题往往比教科书和论文上复杂。我们往往遇到的往往是多变量、非线性、不确定性问题。这些问题往往找不到优美的理论解。进入计算机时代,有个比较通用的办法可以应对这类问题:这就是迭代优化:从一个初始点开始迭代,直到找到基本理想的解为止。迭代算法虽然不是那么优美,却总能找到办法。人工智能算法中,也大量应用了迭代算法。
迭代优化有很多技巧。我读研究生时,遇到过一个特别难的题目。一般的数值方法根本解不出来。后来我做了个变换,找到一种特殊的迭代求解方法,非常快就计算出来了。
迭代优化不仅是一种算法,还可以看成一般的方法 论。人们从事产品开发、商业模式创新、组织建设等工作时,往往都会采用迭代优化的方法。我称这种方法为“先做成、后做好”。
我在宝钢做了十多年性能预报模型,其实也是用迭代求解的思路。不过,做迭代的不是计算机,而是我这个人。我先后花了十多年的时间,不断去修正和优化模型当中的参数直到对大量的案例都合适为止。人工参与迭代很麻烦。有时候,为了修改一个参数,要花费1~2个月的时间。
我当时也想过,希望能找到一个自动迭代的办法。但现实中很难实现。这是因为,在“迭代”过程中会遇到各种个性化问题,需要我来判断和解决。从业务流程上看,这些需要人来做的事情就是“断点”,大大影响了做事效率。
现实中,非线性多变量的问题几乎没办法找到理论解,只能通过不断迭代求解。生产过程中许多需要优化的事情,本质上都是迭代求解。
比方说设计一个产品时,先要设计出来再计算性能、判断可制造性等;如果其中发现有问题,就修改设计,直到得到好的设计为止。再如,工厂安排生产计划时,需要多个工序相互协同。常见的做法往往是:各工序首先自己安排自己的计划,然后大家碰一下;出现矛盾的时候修改一下自己的做法,再看看能不能生产,直到找到大家可以接受的做法。
在现代工业中,分工越来越细,需要协同的事情就越多、越来越复杂。做一件事时,如果能把相关的工作都拿进来综合优化(端到端),往往能得到更好的效果。这时,问题的复杂性就增加了,迭代优化的机会也就多了。
如果这种综合优化需要人类来做,并且做一次要花很大的功夫,优化效果往往就不太理想。这是因为人性是懒惰的:只要找到一个可以接受的做法,往往就不愿意继续优化了。孙子说:多算胜,少算不胜。迭代次数多了、参与迭代的内容多了,就容易找到更好办法。而解决这种问题的办法就是让计算机去做。因为计算机不怕麻烦。
所以,如果某件事的迭代优化可以全在计算机里面进行,迭代效率就可以大大升高、迭代次数可以极大增加。这时,就可能从成千上万种做法中找到最好的,优化效果也可能会有量变到质变的变化。
我们要采集更多的数据、要做做信息集成、全数字化设计、提高计算机的容量和算力,其实都是为这类工作奠定条件。这些工作做好以后,数字化技术的作用就大了。