启发式算法阅读材料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Ravindra K. Ahuja

工业与系统工程系

佛罗里达大学Gainesville,佛罗里达 32611,美国

ahuja@

Özlem Ergun

运筹学研究中心

麻省理工学院

剑桥,马萨诸塞州 02139,美国

ozie@

James B. Orlin

斯隆管理学院

麻省理工学院

剑桥,马萨诸塞州 02139,美国

jorlin@

Abraham P. Punnen

数学,统计与计算机科学系

新不伦瑞克大学

圣约翰,新不伦瑞克,加拿大 E2L 4L5

punnen@unbsj.ca

(1999年7月22日)

(2000年10月11日修订)

Ravindra K. Ahuja, Özlem Ergun,James B. Orlin,Abraham P. Punnen

摘要

很多实际的最优化问题是计算复杂的。因此,解决这样问题的实际方法是运用启发式算法(近似值),这样可以在合理的计算时间内找到一个近似最优解。改进型算法通常是一个启发式算法,它通常是从一个可行解开始,并重复寻找更好的解。邻域搜索算法(又叫局部搜索算法)是一类改进型算法,算法的每一步迭代是通过搜索当前解的邻域得到一个改进的解。设计邻域搜索算法的一个关键是邻域结构的选择,即邻域的定义方式。根据经验,邻域越大,局部最优解的质量越好,最后得到的解越精确。同时,邻域越大,每一步迭代的时间越长。因此,除非可以用很有效的方法搜索很大的邻域,大规模邻域搜索技术不一定能产生一个有效的启发式算法。本文关注于输入数据和有效搜索邻域很大的大规模邻域的搜索技术。我们调查了3大类大规模邻域搜索技术:(1)深度变量法:应用启发式算法搜索大规模邻域;(2)大规模邻域搜索:应用网络流技术或动态规划搜索邻域;(3)通过限制在多项式时间解决原问题引入大规模邻域。

1.简介

很多实际的最优化问题是计算复杂的。因此,解决这样问题的实际方法是运用启发式算法(近似值),这样可以在合理的计算时间内找到一个近似最优解。研究启发式算法的文献可以分成两大类:构造型算法与改进型算法。构造型算法是通过给一个或多个决策变量赋值试凑构建一个解。改进型算法通常是从一个可行解开始,并重复寻找更好的解。邻域搜索算法(又叫局部搜索算法)是一类改进型算法,算法的每一步迭代是通过搜索当前解的邻域得到一个改进的解。本文关注于相对输入数据的邻域很大的大规模邻域的搜索技术。对于大规模邻域问题的例子,精确搜索邻域是不现实的,只能搜索邻域的一小部分或开发有效的模糊邻域搜索算法。

邻域搜索算法设计中的一个关键问题是邻域结构的选择,即邻域是如何确定的。选择方式大体上就确定了这个邻域搜索算法是否能得到高精度的解,还是仅仅得到比较差的局部最优解。据粗略的计算,邻域越大,得到的局部最优解越好,而得到的最终解的精确度越高。同时,邻域越大,每步迭代的时间越长。由于人们常常从不同的起始点多次运行邻域搜索算法,较长的执行时间将使单位时间的运行次数降低。因此除非可以以一种更加有效的方法进行搜索,一个较大的邻域不一定能够产生一个更有效的启发式算法。

运筹学领域中的很多成功和被广泛应用的方法可以被看作是很大规模的邻域搜索技术。例如,若将解线性规划问题的单纯型法视为一种邻域搜索算法,则列变换就是一种很大规模邻域的搜索方法。同样的,用于解决网络流问题的增量技术也可以归于很大规模邻域的搜索方法。解决最小费用流问题取消负费用回路的算法,以及解决指派问题的增广路径技术就是两例。

在本调查中我们将很大规模邻域搜索算法分成互相重叠的3种。我们研究的第一种邻域搜索算法是深度变量方法。该方法邻域成指数级增大,并利用启发式算法局部搜索这些邻域。第二类包括基于改进算法的网络流理论。该邻域搜索算法使用网络流技术确定改善的相邻解。最后,在第三类中我们将要讨论由子类或者在多项式时间内可解问题的约束引起的NP 难题。尽管我们通过解线性规划问题的单纯型法,以及解决网络流问题的增量技术介绍了大

规模邻域搜索算法的概念,我们将不再论述线性规划问题。我们的问卷调查是将重点放在应用很大规模邻域搜索算法解决NP 难题的优化问题上。

本文结构如下。在第2部分,简要介绍局部搜索。第3部分讨论深度变量方法。第4部分讨论基于网络流技术的很大规模邻域搜索算法。第5部分,给出一些可有效解决的NP 难题的组合优化问题特例,以及基于这些特例的很大规模邻域搜索算法。第6部分,将描述对给定邻域进行局部搜索算法可能有所帮助的邻域指标。最后第7部分,介绍前面部分中一些算法的计算性能。

2.局部搜索:简述

首先,我们介绍一个组合优化问题以及邻域的概念。组合优化问题有不同的表述方式,这都依靠可行解集的表示方法。这里,我们将可行解集表示为一个有限集的子集。形式化表述如下:

令E={1,2,…,m}表示一个有限集合。一般地,对于集合S ,令|S|表示集S 的势。令F 2E ,

其中2E 表示集合E 的全部子集的集合。F 的元素叫做可行解。令f: 。函数 f 叫做目标函数。那么一个组合优化问题(COP)的例子可以表示为:

⊆R F → Minimize {f (S): F S ∈}

假定F 族没有将其元素完全列举出来,而是通过m 次多项式的形式表示的。一个组合优化问题的例子可用(F ,f )表示。对于我们考虑的大多数问题,费用函数为线性,即有一个向量f 1,f 2,…f m 使所有可行集S ,f (S)=∑∈S i i f 。

假定是(F ,f )表示一个组合优化问题。邻域函数是建立映射N: 的点。在该函数下,每个都有对应的E 的子集N(S)。不失一般性,假定E F 2→F S ∈)(S N S ∈,那么集合N (S )叫做解S 的邻域。解叫做对于邻域函数N 的局部最优解,若对于所有都有。若| N(S)|随着m 的增加呈指数增长,邻域N(S)为指数邻域。在本文中,我们将把重点放在指数邻域上,同时我们也讨论由于太大实际中不能精确搜索的邻域。例如,随着m 的增加(如大于100万),实际上并不能搜索有m 3个元素的全部邻域。我们将应用很大规模邻域搜索算法等邻域搜索技术。

F S ∈*)(*S N S ∈)()(*S f S f ≤对于两个解集S 和T ,令S-T 表示在S 而不在T 中的元素的集合。定义距离d(S ,T)=|S-T|+|T-S|,即E 中仅仅属于S 或者T 中的元素个数。有时,我们允许邻域含有不可行解。例如,对于旅行销售员问题,可以允许邻域中含有删除一条边的路径。为了强调邻域中比实际路径数量更多,我们常常在搜索中给出不可行解的一个组合描述。我们将这些不可行组合结构叫做参考结构。例如,一条Hamiltonian 路径可能就是一个参考结构。

邻域搜索算法(最小费用问题)可以用下面的3部分概念组成:

1) 根据具体问题定义的一个邻域图NG ,NG 为有向图,其每个节点对应于一个可行解

(并且/或者是非可行参考结构的例子),图的一条弧(S ,T)满足T ∈N(S)。

2) 每步迭代搜索邻域图的方法。

3) 确定在步骤2中选择邻域图中下一个节点的方法。我们称该节点为基解。

相关文档
最新文档