用于一般指派问题的禁忌搜索算法

窦晖 兰州交通大学交通运输学院,甘肃兰州 (730070) E-mail : huihui5027@163.com

摘要:本文研究了日常生活中常遇到的指派问题,并针对其特点,建立指派问题的数学模

型。运用禁忌搜索算法来求解模型的最优解,通过对具体指派问题算例的仿真实现,说明禁 忌搜索算法是可行和有效的。

关键词:禁忌搜索;指派问题;禁忌表;全局优化 中图分类号:C93

1.引 言

指派问题是将若干个体分配到若干位置,并求一个线性费用函数的最小值。在生产管理 中,决策者总是希望能够把人员进行最佳分配。由于任务的性质和每个人的知识、能力、经 验等各不相同,各人去完成各项不同任务的效益(所费时间或所花费用)就有差别。那么这 m 项任务究竟该如何分配给 n 个人去完成使最后的总花费最少,所有任务的总效益最大呢? 这就是标准的指派问题。这类问题的效率矩阵中的元素均为确定的量。针对这类组合优化问 题,解决方法可有许多种启发式方法。其中,禁忌搜索(tabu search)是局部领域搜索算法的推 广,是人工智能在组合最优化算法中的一个成功应用,其特点是采用了禁忌技术,能够避免 陷入局部最优,在短时间内找到全局最优解[1]。

2.指派问题描述

在生活中,一般的指派问题是指,有 n 个人,m 项工作(m ≤ n),一个人最多只能干

一项工作,一项工作只能一个人干,找任务的最优分配方案,使总费用最小[2]。

一般指派问题可以表示为以下形式的 0-1 整数线性规划问题:

nm
min ∑∑ cij xij
(1)
i =1
n
j =1
s.t.
∑ xij
i =1
m
∑ xij
j =1
= 1, j = 1,2,L, m
≤ 1, i = 1,2,L, n
(2)
(3)
xij ∈ {0,1}, i = 1,2,L, n,
m ≤ n
j = 1,2,L , m
(4) (5)
cij

——第 i 个人干第 j 项工作的费用

当且仅当 xij

= 1 时,表示第 i 个人被分配做第 j 项工作,否则, xij

= 0 。方程(1)即为

目标函数,求最小的费用;方程(2)表示的是每个人只能做一项工作;方程(3)表示的是每项 工作最多由一个人来完成;方程(4)、(5)则表示的是对决策变量的 0-1 整数约束,并说明人

数要多于工作的数目。

3.禁忌搜索算法

3.1 算法的基本思想

禁忌搜索(TS)是一种模仿人类智力过程的亚启发式(meta-heuristic)搜索技术,由 Glover 教授在 1986 年首先提出,进而形成一套完整算法,并成功应用于复杂组合优化问题的求解 [3]。

禁忌搜索算法中充分体现了集中和扩散两个策略。它的集中策略体现在局部搜索,即从 一点出发,在这点的领域内寻求更好的解,以达到局部最优解而结束。为了跳出局部最优解, 扩散策略通过禁忌表的功能来实现。禁忌表中记录下已经到达点的某些信息,算法通过对禁 忌表中点的禁忌,而达到一些没有搜索的点,从而实现更大区域的搜索。因此,在求解一些 最优化问题时,在获得解的所需时间及解的准确性方面,禁忌搜索算法的性能都优于一些算 法。

构造禁忌搜索算法的一些基本要素:

(1)目标函数:明确所要解决的问题,构造对应的函数。

(2)邻域(候选集合):当前解可以搜索取值的范围。

(3)禁忌表:计算过程中用于记忆的一张表,被禁忌的活动放在这张表中。

(4)特赦规则:在禁忌搜索算法的迭代过程中,会出现候选集中的全部对象被禁,或 一对象被禁但若解禁后其当前最优值将更优的情况。在这样的情况下,为了达到全局的最优, 我们制定一些优先的规则,让一些禁忌对象重新可选。

3.2 算法的基本步骤

禁忌搜索算法的一般步骤如下[4]:

STEP 1 给以禁忌表 H= ? ,并选定一个初始解 xnow ;

now

STEP 2 满足停止规则时,停止计算,输出结果;否则,在 x 的邻域 N ( x now ) 中选出

满足不受禁忌的候选集 Can _ N ( xnow ) ;在 Can _ N ( xnow ) 中选一个评价值最佳的解 xnext ,

xnow := xnext 更新历史记录 H,重复 STEP2 。

4.对于指派问题的禁忌搜索求解

4.1 算法实现

对于指派问题的禁忌搜索算法实现流程如图 1 所示。

图 1 禁忌搜索算法流程

4.2 仿真实验

利用下面一个具体的简单例子来说明禁忌搜索算法对于指派问题的求解。 现有四个人,三项工作,且一个人最多只能干一项工作,一项工作只能由一个人来干,

找其最优的任务分配方案使总费用最小。对应的费用矩阵为:

D=( cij
?2
)= ?3
32