LocalSolver-全领域、超大规模混合变量数学规划介绍

 

“由于数学建模是主人,计算是仆人,任何计算方法都不应假定有自己的求解器。这意味着世界上本没有CP求解器,没有MIP求解器,也没有SAT求解器。

 

所有这些技术都应该在单个系统中可用,以解决手头的模型。它们应该能够利用问题结构无缝地结合起来。随着问题的扩大,精确的方法应该优雅地演变成不精确的和启发式方法。”

 

【John N. Hooker(2007)“约束规划未来之好与坏(和运筹学)”约束规划手札1,第21-32页】

 

混合整数线性规划(MILP)

 

混合整数线性规划(MILP)无疑是运筹学中最强大的工具之一。它的易用性在以下方面吸引着专业人士:

 

•用户将问题建模为一个简单而通用的整数线性程序

•MIP引擎使用分支&界定&切割方法求解此程序

 

这种“建模和运行”的方法,当有效时,它大大减少了优化软件的开发和维护难度,而其他基于树搜索的技术,如约束规划(CP)正在效仿它。

 

面对大规模、非线性优化问题等情况,OR从业者经常发现MIP或CP解决方案是无效的。

 

混合整数规划技术 (B&B, B&C, BCP等方法):

 

•设计用于证明最优性和不满足性

•不是为了寻找可行的解决方案而设计的

 

MIP求解器仍然无法为不超过20,000个二进制变量的规划实例找到可行的解决方案。树搜索能力是有限的。它们可通过实施“局部搜索启发式算法”来解决这个问题:纯树搜索(TS)技术在解决非常大规模的组合问题(数以百万计的二进制)时仍然无能为力。

 

1)放松通常是无用的,但在效率上代价很大。那么为什么要浪费运行时间来枚举部分解决方案呢?

 

2)不完整的“树搜索”为什么见得比“局部搜索”好? 此外,树搜索并不真正适合于随机探索一个搜索空间。

 

真相是:

最先进的IP求解器(整数规划)集成了越来越多的局部搜索成分(局部分支,松弛诱导邻域搜索等)。

 

局部搜索技术 (Local Search)

 

与树搜索技术相比,局部搜索(LS)涉及应用迭代变化(或称移动)来改进目标函数。这种技术允许操作人员在合理时间内(以分钟为单位)获得高质量解决方案。

 

  • LS在问题规模上只需要线性内存

  • LS能够很好地处理大型和过度约束的问题

  • LS适用于在线优化算法(动态变化的约束)

  • LS在短时间内提供高质量的解决方案

  • LS为实际问题提供实用的解决方案

  • LS是不完全和不确定性搜索,随机移动和“增量”计算,运行更快

  • LS并不是一般认为的元启发式方法

     

然而,用户自己设计和实现本地搜索算法并不简单,即使是使用旨在帮助程序员的算法框架,也会导致额外的成本(开发和维护)。

 

专门用于评估步法的算法层尤其难以设计,因为它需要算法和计算机编程方面的专业知识。它更多涉及算法层面,更少的数学层面 (分析方法)。

 

商业和工业需求是什么?

 

1)客户有优化问题,很少有满意度问题。

 

 “没有找到解决方案”对于用户来说很少是一个可以接受的答案。因此,一旦模型陈述得很好,找到一个可行的解决方案应该要很容易。

 

2)最优解决方案并不是客户真正想要的。(笔者注:最优解(上帝解)不是工业问题求解的首要目的)。

 

•证明最优性并不是他们最想要的。

•他们首先想要的是一个能够快速提供好的解决方案的好软件。

 

自主局部搜索的根本原则

 

LS求解器的工作方式必须与LS实践者的工作方式相同。这意味着LS求解器在每次迭代时执行结构化移动以保持解的可行性,并利用模型结构诱导出的不变量来加速求解。

 

最简单的通用移动是一个决策值的变化,如果我们想从一个可行的解移动到另一个,就像在大多数手工制作的局部搜索算法中一样,需要更结构化的移动。求解器通过分析模型的结构来建立这些动作。

 

更一般来说,在约束超图中(constraint hyper-graph),跟随弹射链或弹射循环会产生非常强大的移动。除了这些小的邻域,还可以通过将小邻域组合在一个破坏与修复(destroy&repair)机制中来探索大邻域。最后,特殊组合结构的识别可以触发特定邻域的激活。需要注意的是,用户可以随机探索周边邻域,或者瞄准具有更高成功几率的移动。

 

搜索空间的探索分布在几个具有周期性同步的线程上,通过具有再加热和重启机制的模拟退火保证了LS搜索的全局多样化。动态地利用对移动性能的统计来提高搜索的整体性能。

 

使LS算法高效的组件有:

 

•快速评估解决方案转换的影响的“增量机制”;

•利用多个自主移动模式组合结构,探索可行的小邻域解;

•全局自适应的搜索策略,指导寻找高质量的解决方案。

 

LS增量机制是将模型表示为一个有向无环图(DAG),其根是决策、叶是约束和目标。将移动应用到当前求解方案包括了修改决策(根)的当前值,并通过沿着DAG图传播这些修改来评估约束和目标(叶)。设计一个高度优化的传播算法可以在真实LS模型上每分钟评估数百万次移动。

 

这个观察激发了LocalSolver商品化开发,这是基于本地搜索技术的数学规划求解器(笔者注:目前业界唯一一款基于LOCAL SEARCH核心技术和其他组合技术的高性能数学优化器)

 

 LocalSolver开发历史

 

LocalSolver项目始于2007年。它的长期目标:

 

1. 定义一个适用于LS(模型)的简单、通用的描述形式

 

2. 开发一个有效的基于LS的求解器,并遵循以下基本原则:«做专家会做的事»(运行) *(笔者注:localsolver是唯一一款无需用户调参的优化器)

 

该项目始于2007年,旨在将简单易用的“建模并运行”求解器和强大的本地搜索技术结合起来进行组合优化。因此,它使OR实践者能够使用简单的形式来关注问题的建模,并将其实际解决方案留给基于高效和可靠的局部搜索技术的求解器来运算,即LocalSolver求解器。

 

2009年,第一版软件LocalSolver 1.0面世并免费发布

 

  • 允许处理大规模的通用0-1程序

  • 用于声明约束和目标的数学运算符(算术、逻辑、条件、关系)

  • 词典的多重目标优化

     

LocalSolver主要功能是与传统的树搜索求解器相比进行延展(如复杂性图中所述)。包含数百万个0-1决策的优化模型可以在几分钟内完美解决。注意,只有决策变量必须为0-1;当然,所有中间变量都可以是整数(64位平台,甚至x86上)。

 

2011年,LocalSolver 1.1发布,(多线程、增强的移动和退火技术)。

 

LocalSolver求解器背后的主要原则:

 

1. 多线程、自适应、模拟退火;

2. 在每个迭代中都保持可行性的自主移动操作(这是主要创新);

3. 高度优化的“增量评估”,每分钟的运行时间内探索数百万个解。

 

2012年,LocalSolver 2.0已经足够成熟,可以从一个研究项目转变为一个商业产品。2015年引入高层次决策变量,灵感来源于约束规划中引入的“集合变量”。这种新变量类型允许为许多优化问题建立非常简单和非常有效的数学模型,涉及排序或顺序概念,包括调度,路由,网络设计问题。这样一个变量的值不是一个数字,而是一个数字的集合。更准确地说,列表变量list(n)表示集合{0,1,2,…, n - 1}。而不是仅仅基于数值决策变量(二进制、整数或连续)。

 

LocalSolver软件

 

LocalSolver是一个用于大规模优化问题的自治局部搜索求解器。在使用常见的数学运算符对优化问题进行建模后,LocalSolver在短时间内为我们提供了高质量的解决方案。结合不同的优化技术,LocalSolver可扩展到数百万个变量,可在基础的计算机上运行。

 

LocalSolver包括一种创新的数学建模和脚本语言用于快速原型开发,称为LSP语言。LocalSolver建模语言接近于经典数学规划语言,但它使用了更大的通用数学运算符集合,使得它对OR从业者来说更直观,更容易学习。

 

它是一个丰富而简单的建模框架。事实上,大多数常用的数学运算符都是可用的,包括算术表达式(和、乘积、三角函数...)或逻辑表达式(比较、条件项、数组索引)。

 

因此,没有必要将考虑的问题线性化:用户可以直接自然地建模。轻量级的面向对象api也可用于完全的系统集成(c++、Java、。net)。

 

笔者注:LOCALSOLVER不是传统MIP求解器,新用户经常使用其他软件沿袭过来的思路使用LOCALSOLVER,这个是最大的误区之一。

 

结 论

 

最后,任何问题都可以使用任何语言/技术、求解器、算法或任何类型的组合来解决。主要是关注我们开发的优化解决方案的总体拥有成本(TCO)。

 

所以,我们应该通过一个解算器来降低成本,而Local Solver就是这样一个选择:

 

1. 使我们的问题建模起来更容易

 

2. 快速提供高质量可行的解决方案

 

3. 流畅的可延展性,解决行业中遇到的大规模问题