MIP启发式算法:local branching
*本文主要是记录并分享最近学习到的知识,算不上原创
*参考文献见链接
本文主要是讲述local branching算法,主要以M. Fischetti的论文 “Local braching”和Pierre Hansen的论文“Variable neighborhood search and local branching”为参考文献。
https://link.springer.com/article/10.1007/s10107-003-0395-5
https://www.sciencedirect.com/science/article/pii/S0305054805000894
目录
引言
local branching 的过程
local braching 的伪代码
引言
local branching可以说的上集合了启发式算法和精确算法的特质,读者既可以从local search的角度去理解它,也可以从branch and bound的角度去认识它。
接下来,我会从local search的角度去认识local branching,也建议读者先用local search的思想去认识它。
local branching 以local search为核心框架,它的特色在于定义邻域结构的方式:借用variable fixing heuristic的思想,利用hamming distance概念构造不等式,从而确定了邻域。这些不等式可以被称为local branching cuts。local branching 的优点在于可以在求解早期就获得不错的解。
Hamming distance
首先,我们说一下hamming distance。
hamming distance是一种关于距离的定义。我们自然可以想到这种距离的定义不是唯一的,我们可以用其他的合适的距离公式来定义邻域结构。hamming distance用来判断两个字符串的差异(“距离”),指的是两个字符串中对应字符不相同的数目。
例如:
s1:1 0 1 0
s2:1 1 0 0
hamming distance为2。
所以说,如果当前解如s1, 我们将邻域结构定义为“hamming distance ≤1”,那么邻域就是{{0 0 1 0}, {1 1 1 0},{1 0 0 0}, {1 0 1 1}}。
对于0-1规划问题而言,由于变量只能取值0或1,所以用hamming distance来刻画两个解的“距离”,是很合适的,但是,对于一般的整数规划问题或者混合整数规划问题,用hamming distance来刻画两个解的“距离”,会有些不太贴切,做些调整是有必要的。所以,个人认为,利用hamming distance来构造不等式的local branching更适合于0-1规划问题,或者说大部分变量都是0-1变量的问题。
local branching 的过程
local braching 的特殊之处就在于定义邻域结构的方式,所以我们首先弄清楚local braching是如何定义邻域的。
定义邻域结构
basic local braching的过程
(1)生成初始解:生成初始解,比如通过Cplex求解获得初始解;
(2)定义邻域和候选解:将local braching cuts加到原问题中,调用Cplex求解新问题的最优解,求解后恢复成原问题(删掉刚加的local branching cuts);
(3)确定新解:如果Cplex求得的新问题的最优解优于当前解,就用最优解替代当前解,作为新解,并且将加入到原问题中,避免重复搜索;
(4)迭代:重复上述搜索过程,直到Cplex求得的新问题的最优解劣于当前解。此时,加入,调用Cplex求取最优解。
general local braching的过程
general local braching 相较于basic local braching,考虑到了:
(1)Time limit on left-branch nodes
(2)Diversification
general local braching的伪代码(local branching + Cplex)
参考文献
Fischetti, M. and Lodi, A., 2003. Local branching. Mathematical programming, 98(1-3), pp.23-47.
MIP启发式算法:local branching的更多相关文章
- MIP启发式算法:爬山算法 (Hill climbing)
本文主要记录和分享学习到的知识,算不上原创. *参考文献见链接. 本文讲述的是求解MIP问题的启发式算法中的爬山算法 (Hill climbing). 目录 前言 Hill climbing 的过程 ...
- MIP启发式算法:遗传算法 (Genetic algorithm)
*本文主要记录和分享学习到的知识,算不上原创 *参考文献见链接 本文主要讲述启发式算法中的遗传算法.遗传算法也是以local search为核心框架,但在表现形式上和hill climbing, ta ...
- MIP启发式算法:Variable neighborhood search
*本文主要记录和分享学习到的知识,算不上原创. *参考文章见链接. 本文主要讲述启发式算法中的变邻域搜索(Variable neighborhood search).变邻域搜索的特色在于邻域结构的可变 ...
- MIP启发式算法:Variable fixing heuristic
*本文主要记录及分享学习到的知识,算不上原创 *参考文章见链接. 本文简单介绍一下Variable fixing heuristic,这个算法同样以local search为核心框架,它的特点在于定义 ...
- MIP启发式算法:Variable Neighborhood Decomposition Search
*本文记录和分享学习到的知识,算不上原创. *参考文献见链接. 本文主要简述和VND VNS RINS很相关的vairable neighborhood decomposition search. 目 ...
- 如何从github下载项目的源代码,包含git客户端,直接下载,vs下载
有好多小伙伴可能刚刚接触github,还不知道如果和github下载项目,此处写个博客统一的声明.从多种方式下载源代码,加深对git的理解. 首先先解释下git的含义,git是一个源代码的管理工具,通 ...
- Developing
To work with the Android code, you will need to use both Git and Repo. In most situations, you can u ...
- Git 跟 GitHub 是什么关系?
Git 跟 GitHub 是什么关系? 大概就是「魔兽争霸」与「对战平台」的关系吧. git是一个版本控制工具github是一个用git做版本控制的项目托管平台. git是一个版本管理工具,githu ...
- Git学习笔记--配置(二)
由之前文章,总结得出Git的特点: 最优的存储能力: 非凡性能: 开源的: 管理成本低: 很容易做备份: 支持离线操作: 很容易定制工作流程: Git is a free and open sourc ...
随机推荐
- GIT主要用到的命令
git add . //添加到暂存盘 git commit -m ‘备注’//提交到本地仓库 git push //提交到远程仓库 fetch更新本地仓库两种方式: //方法一 $ git fetch ...
- java jmap
jmap : 命令用于生成堆转储快照.它还可以查询finalize执行队列.Java堆和永久代的详细信息,如空间使用率.当前用的是哪种收集器等. 命令格式: jmap [option] vmid op ...
- Selenium3+webdriver学习笔记4(css方式元素定位)
#!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriver import time,os # about:ad ...
- GoAccess自动分割Nginx日志
GoAccess 是一款开源的网站日志实时分析工具.GoAccess 的工作方式很容易理解,就是读取和解析 Apache/Nginx/Lighttpd 的访问日志文件 access log,然后以更友 ...
- 一款新型的EASY饼图数据统计Jquery插件
http://www.oschina.net/code/snippet_197014_12865 http://www.cnblogs.com/ada-zheng/p/3760947.html - ...
- Lodash.js常用拷贝
lodash.js 降低 array.number.objects.string 等等的使用难度从而让 JavaScript 变得更简单.非常适用于:遍历 array.object 和 string: ...
- python基础教程总结15——7 自定义电子公告板
1. Python进行SQLite数据库操作 简单的介绍 SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身.它是遵守ACID的关联式数据库 ...
- Failed to load property source from location 'classpath:/applica)
: 1.注释错误(application.yml用的是#注释) 2.缩进采用tab而不是空格引起的(不同配置之间也不能有tab出现,否则会报错) 3.冒号后面必须有空格否则会报错
- python_101_类方法
class Dog(object): n=333 name='小虎子' def __init__(self,name): self.name=name @classmethod def eat(sel ...
- GIT在团队中的最佳实践
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...