求解器一般用来解决大规模现实问题中的最优解,基于深度学习和运筹优化技术的发展,求解器可以在数秒内给出决策答案。作为重要的工业软件之一,目前已经应用到能源电力、航空航天、轨道交通等各领域。
目前,Gurobi、CPLEX和Xpress被视为三大主流求解器,占据90%的国际市场份额。针对任何约束条件下的问题最优解,它都可以在数秒内给出答案,大大地提升了决策效率。而这一技术的发展,也要从一个饮食优化问题说起。
斯蒂格勒饮食和旅行商问题
单纯形法是求解线性规划(LP)问题最为常见的算法之一,也是当前很多求解器的算法框架之一。线性规划作为数学规划的一个重要的分支,可以追溯到1945年George Stigler提出的饮食问题。而针对这一问题的求解,也是单纯形法问世的开始。
“斯蒂格勒饮食”是以 1982 年诺贝尔经济学奖得主George Stigler命名的优化问题,“对于一个体重154磅(70 公斤)的适度运动的人来说,为了满足9种不同营养素的摄入量达到国家研究委员会在 1943 年建议的推荐膳食摄入量(RDA),每天应该摄入77种食物中的哪些品类,且成本最低?”
这一问题包含9个约束条件,77个变量。这一问题提出之际,线性规划算法尚未出现,但他使用了启发式方法进行求解,从最初的77种食物中剔除62种(这些食物被剔除是因为它们与其余15种相比缺乏营养),通过计算出剩余的15种食物中,每种食物所需的数量,得出成本最小化解决方案,每年成本是39美元。
George Stigler 1939年的饮食方案
他的求解,被视为线性规划的早期工作。直到1947年,经济学家Jack Laderman使用了单纯形算法解决了这一问题。据报道,求解过程需要120个工作日,最终得到的结果是39.69美元,与George Stigler的结果仅仅相差0.24美元。
同一时间段,George Dantzig 发表了单纯形算法。彼时,他作为美国空军参谋人员,面临着制定后勤计划的困难。由此,他开发了线性规划公式和单纯形算法,使得无需依赖启发式方法,即可解决诸如“斯蒂格勒饮食”等LP问题。
简单来说,单纯形算法就是从可行域的各顶点出发,判断该顶点是否为最优解,若是最优解则问题求解结束;否则寻找新的基可行解,直到使目标函数值达到最大为止。
求解线性规划问题的单纯形法的工作原理。
不仅如此,Dantzig在1954 年与Ray Fulkerson和Selmer Johnson,通过对问题的LP松弛引入附加约束,得出了TSP的49个城市(48个州加上DC)实例的解决方案。
TSP即旅行商问题,通用化描述:“假设有一个旅行商人要拜访N个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求路径路程为所有路径之中的最小值。”
Dantzig对TSP问题的求解标志着一般整数规划(IP)的割平面法的诞生。1958年,它被 Gomory发展成系统的和可证明的终止算法。如今,Gomory切割几乎成为每个MIP(混合整数规划)代码的一部分。
算法代码化
求解算法不断创造和优化的同时,基于算法的计算机方程部署也在同步发展。
最早可以求解方程的计算机可以追溯到1939年,阿塔纳索夫(John Vincent Atanasoff)和贝利(Clifford Berry)开发并成功测试了电子数字计算机的粗略原型。1942年,Atanasoff和 Berry已经构建了一个可以求解多达29个联立线性方程的版本。
20世纪40年代后期,Dantzig担任美国空军项目 SCOOP(最优程序的科学计算)的首席数学家,该项目旨在将空军人员和设备的调度和部署过程机械化。通过与国家标准局的合作,Dantzig率先开发了东部标准自动计算机(SEAC)。1951年,在SEAC上构建的第一个单纯形法的存储程序被实现,该方法在18小时内通过71个变量的空军部署模型求解了48个方程。
算法代码的商用可以追溯到IBM 701,它是IBM第一台真正的科学计算机,可以处理具有100个约束的LP模型的单纯形法的改进版本。根据Robert Bixby的说法,Manne与Orchard-Hays 在1990年一起使用此代码计算汽油混合问题,这可能是单纯形法的第一个主要应用。
之后,Orchard-Hays等人继续对MIP代码进行改进,最终产生了具有里程碑意义的“LP 90/94”代码,它第一个商业使用的基于分支定界的混合整数程序 (MIP) 代码。即使是现在,分支定界方法也是所有整数规划代码中的主力。
求解器的商业化
早期的商业代码包括LP/90/94、MPSX(IBM)、MPS III(Management Science Systems/Ketron)、APEX(Control Data Corporation)和XMP(Roy Marsten)等。到了20世纪70年代,备受关注的MIP代码包括 SCICONIC、MPSX/370 和带有Whizard的MPS III。尽管计算代码取得了进步,但早期MIP运行时间减少的主要进展是机器硬件的改进。
彼时,Robert Bixby设想在旧机器上运行新的MIP代码,在新机器上运行旧的MIP代码,以区分软件和硬件的相对贡献。但他因无法获得拨款来研究MIP代码现代化与计算能力变化(例如有效使用大型廉价核心内存)的想法,为此成立了公司,名为CPLEX Optimization。
1988年,CPLEX LP/MIP代码作为LP求解器首次发布,并于1991年添加了MIP功能。1997年,公司被ILOG 收购。这一年前后,独立于机器硬件的 MIP 计算能力有了大幅度的飞跃,从 CPLEX 6.0 到 6.5,求解速度几乎提高了十倍。
2009年,ILOG被IBM收购,CPLEX由此变成了 IBM 的求解器。Bixby也彻底离开公司,与同僚Zonghau Gu、Edward Rothberg ,成立了Gurobi Optimization,并于2009年首次发布代码。2017 年,Thompson Street Capital Partners 收购了Gurobi的控股权。
如今,Gurobi、CPLEX,连同Xpress被视为主流的三大求解器,凭借丰富的商业开发经验,以及较好的性能,在国际市场上占了超过90%的份额。在国内,Gurobi求解器也已经在石油石化、钢铁冶金、物流快递、电商仓储、生产制造、金融投资、媒体管理、网络通讯、航空运输、电力市场等等行业得到广泛应用。
最初的利用单纯算法人力求解斯蒂格勒饮食的120个工作日,到现在几秒钟就给出答案,求解器在各领域发挥着举足轻重的作用。
作为典型的底层技术领域,因技术门槛高、研发难度大、投入时间长且风险较高,求解器被视为运筹优化技术领域的“皇冠”。而其作为工业软件之一,也遭遇购买使用成本高,因没有自研软件依赖进口,很容易受制于他人的困境。
由此,近几年,国产求解器的研发正在崛起,一场关于国产求解器的逆袭正在发生。