浅谈“优化界”这个武林

如果把优化界比作一个金庸武侠小说中的武林,那么优化界的学者们也就可以看做这个“武林”中的江湖人士。

武林中常常分为几个大门派和一些小门派,每个大门派都有一个在整个武林都非常有威望的掌门人。在优化界其实你也隐隐约约感受到有类似于武林门派的东西,大的门派弟子众多,常常一个学术会议出现一大帮子的学者师承同一个导师,他们的导师常常是学术大牛,引领着一个门派。

门派之间有很多理念其实都不太一样,存在门派之争,这种现象在学术界也一样。往往一个问题可以通过好几种途径解决,很难说哪一种思路是最好的,所以每个学术门派都会努力去想方设法得宣扬自己的思路是最好的。也不乏有这样一些人,他属于江湖隐士,默默潜心研究自己的路子。他不参与门派之争,也从不做无谓的抛头露面。但是跟他们交过手的门派大佬或者江湖高手心里都知道这样的人的存在,心里由衷地佩服和欣赏,而江湖之外人士往往会忽略这样一些人。如果非得给这个武林找个盟主的话,那就是优化界的院士袁老师了。如果把学术界比如江湖之内,那么业界或者普通社会就是江湖之外了。

每个门派都有一门核心功夫,在学术界来说,就是每个学术门派都会有自己的研究套路和研究思想体系。虽然学术界的“功夫”门类众多,我们也可以大致将其共性归结出来。首先,功夫由内功和外功组成。优化界功夫的内功就是优化理论系统,其内功心法都是由数学来表达和传递的。优化界功夫的外功就是计算机编程实现能力,涉及计算机硬件和软件各个层面,而且计算机的硬件和软件都是在实时更新的,更新速度还非常快,其内容又不断丰富,所以给人的感觉是非常散和杂。其次,功夫又可从修炼的等级来划分,以此来大概看出哪些是江湖高手,哪些是花架子。

功夫等级大致可以分为以下几成:

**第一层:**具备“寻优”愿望,但是算法优化功夫底子几乎为零。这些人通常会给要“寻优”的对象定义一个指标,然后通过粗鲁暴力的“枚举”来实现“寻优”。这种问题通常规模非常小,但是通过人工手头筛选又太麻烦,所以借助于计算机计算速度的优势,还是可以有所成效的。在企业待过一段时间,我发现:很少人真正具备“寻优”愿望,很多人只是给出一些基于公司给出一些文件所规定规则的“可行解”。稍微有点“寻优”愿望的人,也只是基于自己的实际经验,在“可行解”的基础上稍作修改给出一个“满意解”,然后就此大力鼓吹自己会大数据优化,做工作报告侃侃而谈,大吹特吹。

**第二层:**会针对中小规模的问题进行数学建模,然后通过调用现成的算法包来求解。现成的算法包目前知道的有matlab工具箱集合、R语言工具箱集合、Python工具包、Cplex、Gurobi等。而且,数学模型的编程也不需要自己实现。很多算法软件都提供模型搭建平台,如matlab有搭建数据拟合、分类、神经网络等模型的框架,你只要把你的模型超参数告诉这个平台,或者直接通过可视化拖拽的方式(比如搭建神经网络模型),然后直接可以把数据输入进行模型训练,还可以把训练完的模型整个代码导出来,作为一个黑箱子类型的函数保存起来。
想要达到这一层,只要疯狂参加各种数学建模竞赛,不断磨练,熟悉各个领域常用模型,知道调用哪个算法包求解,知道求解出来的结果的实际含义就可以了。

**第三层:**建立超大规模的整数线性规划模型并求解。这一层相对于前两层的难度有明显加大。虽然还不需要你自己去编写求解算法,只要知道调用Cplex或者Gorubi的包就行了,但是你需要了解很多算法的实现的基本原理以及对各种算法的算法复杂度有个大致的了解。据我所知,航空优化类模型中大多数都是这类问题,因为大多问题都是基于航线网络提出的,而且都是研究航线网络中的各种“流”。对于这类问题,建模非常关键。为什么呢?因为当前所有算法包对于大规模线性规划求解性能已经非常不错了,一旦求解大规模非线性问题,时间就一下子串上去了,在实际中就行不通。实际求解大规模线性整数规划,都是先求一个松弛后的大规模线性规划问题,得到一个最优解后。将此作为后一阶段的一个好的初始点,再基于这个解通过分支定界的方式进行寻优。主要通过对偶线性规划算法来实现,因为这样的模型因为规模太大,内存受不了,为了缓解内存压力,采用“列生成”算法。基于算法包只是在大规模线性规划问题上有较好的性能,就促使我们建模的时候尽量把非线性目标转化为线性目标,把非线性约束转化为线性约束,尽量将一般的整数规划问题写成0-1整数规划问题,如果把一个离散条件松弛为连续条件不银影响模型的最优解的话,尽量这样去做。这几句话虽然说起来容易,但实际去做的时候其实还挺难的,因为这里面的转化需要很强的技巧,只有“内功”(数学)练得足够好,才玩得起来。

我曾在一家公司的算法班接受培训,说是算法班,实质上就是“模型班”。学的都是第三层的内容,不过之前的基础也算是打得还可以,上这个班没什么压力就是了。

**第四层:**超大规划非线性整数规划模型的建立及设计定制化算法求解。这一层绝对属于宗师级的了。为什么呢?我们前面也已经提到过,Cplex和Gurobi对于大规模非线性规划问题是无能为力的。那怎么办?这就必须自己根据模型的特点设计定制化算法来求解,基本没有现成的材料可以参考。就凭一点,很多优化界人士都会望而却步。再加上如果问题的工业背景非常复杂,也会导致在建模的时候出现很多的困难。因为如果将模型建成一个非常复杂的非线性混合整数规划问题,后面设计算法时,你可能会疯。所以这一层对于模型的构建技巧、构建求解这种大规模复杂问题的算法能力、以及最后的计算机编写实现都需要很雄厚的数学功底、莫大的自信和勇气、还有超常的毅力。如果有优化界人士想挑战自己,将自己的优化能力提升到顶层,不妨可以去试试超大规模集成电路的计算机辅助设计,非常具有挑战性。

虽然当下大数据技术如火如荼,但是从优化算法难度等级上看,大数据分析里面的问题算法设计难度主要停留在第二层和第三层,但是不会超过第三层。大数据的问题其实就是通过统计模型找规律,难的其实不在模型和算法,难在样本。虽然到处都是“大数据”,其实数据并不大。很多数据容量大,但是信息浓度非常小。有的样本非常难以采集。比如一个地方性银行,他要建立一个反欺诈模型来找目标客户、来预测如果我把款贷给这个人,其违约可能性是多大,能否召回等等。不像四大行有那么大的样本量,中小型银行数据非常少,如果再将范围缩小到某个区,再客户特性细分一下,那有些情况基本就没样本了。除此之外,样本被污染的程度通常非常高。这些样本的问题使得模型最后训练出来的效果往往很不理想。

写得很乱,都是随心乱写。聊聊自己吧,就我现在的基础,估计很难练到第四层。希望若干年后,我能是练到第三层的佼佼者。

猜你喜欢

转载自blog.csdn.net/qq_25733951/article/details/88706781