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. 流畅的可延展性,解决行业中遇到的大规模问题

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

  1. python 全栈开发,Day1(python介绍,变量,if,while)

    python 全栈开发,Day1(python介绍,变量,if,while) python基础一 一,Python介绍 python的出生与应用 python的创始人为吉多·范罗苏姆(Guido va ...

  2. 天翼云推出全栈政务混合云 支持私有化运行

    9月29日,"5G+天翼云+AI 与城市共成长"天翼云全栈政务混合云交流会在安徽合肥开幕,中国电信云计算分公司副总经理李云庄,中国电信安徽公司副总经理郑家升等出席本次大会并参加&q ...

  3. python 全栈开发,Day45(html介绍和head标签,body标签中相关标签)

    python 全栈开发,Day45(html介绍和head标签,body标签中相关标签) 一.html介绍 1.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) ...

  4. C++中的变量作用域介绍

    1.Cpp的变量作用域 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 局部变量:在函数或一个代码块内部声明的变量 形式参数:在函数参数的定义中声明的变量(稍后介绍) 全局变量:在所有函数外 ...

  5. splunk 提取字段_全面的Splunk应用日志分析介绍

    全面的Splunk应用日志分析介绍 Splunk 是一款顶级的日志分析软件,如果你经常用 grep.awk.sed.sort.uniq.tail.head 来分析日志,那么你需要 Splunk.能处理 ...

  6. 最全的盲埋孔板工艺介绍与设计原则​​​​​​​

    3层机械盲孔结构 开料(L2/3或L1/2层).烘板.机械钻盲孔.沉铜.全板电镀.内层图形.镀孔电镀.内层图形.内层蚀刻.内层AOI.棕化.层压.烘板.铣边.除胶.钻孔.正常流程 3层HDI结构 开料 ...

  7. 张小军详解华为区块链政务应用,指出区块链的应用领域正从金融向全领域拓展...

    文丨互链脉搏 在华为区块链负责人张小军看来,2019-2020年,政企和医疗行业会成为区块链的一个较大的市场机会,其对数据共享和溯源的诉求强烈. 12月14日,在互链脉搏主办的"2019 I ...

  8. (13)UVM 史上最全TLM单向/双向/多向通信介绍

    UVM 史上最全TLM单向/双向/多向通信介绍 文章目录 UVM 史上最全TLM单向/双向/多向通信介绍 一.TLM单向通信 1.概述 2.类型 3.方法 4.单向通信例子 二.TLM双向通信 1.概 ...

  9. 你最崇拜谁?IT领域10大技术天才介绍

    你最崇拜谁?IT领域10大技术天才介绍 <script language="JavaScript" src="http://z.csdn.net/adx.js&qu ...

最新文章

  1. 《防患未然:实施情报先导的信息安全方法与实践》——3.3 攻击剖析
  2. SIP穿越NATFireWall解决方案
  3. 160个Crackme016
  4. Android 中MVC实例之Activity,Window和View
  5. Hash-哈希/散列
  6. GDAL更新至1.8.1后,通过属性查询矢量出错问题的解决方式
  7. 《麦肯锡方法》第10章 演示汇报-思维导图
  8. 文献写作:学术研究论文
  9. linux内核函数之 blk_plug
  10. 100种运营人必备工具(网站搜集)
  11. 删除文件夹显示找不到该项目,也无法改名、移动等
  12. python logging配置时间或大小轮转
  13. mysql查找语句报错_MYSQL报错注入-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....
  14. IAR 配置ICF跟项目走
  15. 2015MCM/ICM总结
  16. 阿里微服务大牛奉命总结出500页Spring微服务架构笔记
  17. 图片传输中的转码问题
  18. linux下双击执行.sh脚本文件
  19. java 一键签到功能案例
  20. html5 strongeaseinout,html5杯子里萤火虫发光动画特效

热门文章

  1. CCleaner 4.07中文版下载 绿色精简
  2. python——利用nmap进行端口扫描,爆破ftp密码,上传wellshell.
  3. 程序员完全没时间提升自己该怎么办?
  4. 笔记本连接投影仪全屏调试
  5. 命令反查dns,命令ip地址dns反查
  6. 网页多种版心适应多屏幕技巧
  7. C语言练习 | 实现四则运算和单位换算的简易计算器
  8. 使用 Python 对股票数据分析预测
  9. python往数据库批量插入多条数据
  10. 程序养身:初学者如何学瑜伽