一种求解装箱问题的混合算法-最新文档

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

一种求解装箱问题的混合算法

: This paper presents a new hybrid algorithm based on genetic algorithm and tabu search for bin packing problem. It combines the advantage of global search ability of genetic algorithm with the adaptability of tabu search and has better convergence performance than simple genetic algorithm. At last, an practical example is applied to prove the efficiency of this algorithm.

0引言

装箱问题(Bin Packing Problem, BPP)是一类重要的组合优化问题,在现实生活中有着广泛的应用背景,特别在现代物流中,许多问题都抽象化为装箱问题或其变形,如货物如何装载,才能提高运载器具的利用率,从而降低运输成本;物流任务应如何调度,才能提高运行效率,等等。但在理论上,装箱问题是一个NP难题[1],很难精确求解。因此对其求解进行研究具有重要的理论价值和实际意义。

到目前为止,针对该问题人们提出了许多算法,但都有其局限性:枚举法和分支定界等精确算法在箱子数目稍大时,会出现“组合爆炸”;一些近似算法如下次适应NF、首次适应FF、降序首次适应FFD、最佳适应BF等,在解决复杂的装箱问题时结果与物品的体积数据有较大关系,在极端情况下很不理想;遗传

算法能在合理的时间内求得最优解或满意解,但易陷入局部最优。

本文针对以上算法的不足,提出一种混合算法,该算法结合遗传算法良好的全局搜索能力和禁忌搜索具有记忆能力的全局逐步优化特性,增强全局和局部意义下的搜索能力和效率。实例证明,在求解装箱问题时,该算法性能明显优于单纯遗传算法。

1问题描述

式(1)是装箱问题的目标函数;式(2)保证装入箱子的物体重量之和不超过其容量限制;式(3)保证每个物体都被放入箱子中;式(4)与式(5)是决策变量的整数约束。

2遗传禁忌混合策略

遗传算法(Genetic Algorithm, GA)是Holland教授于20世纪60年代受生物进化论的启发而提出的一种基于生存遗传和进化机制的随机优化方法。它将问题的求解表示成染色体适者生存的过程,通过染色体群的一代代不断进化,包括复制、交叉和变异等操作,最终收敛到最适应环境的个体,从而求得问题的最优解或满意解[2]。遗传算法开创了在解空间中从多出发点搜索问题的先河[4],能从概率的意义上以随机的方式寻求到问题的最优解,具有并行性,很强的通用性,良好的全局性和鲁棒性等特点。但是,在实际应用中,由于受选择压力、交叉和变异操作等因素的影响,容易出现早熟现象,局部搜索能力差。

禁忌搜索(Tabu Search,TS)最早是由Glover提出的,是

对局部邻域搜索的一种扩展,通过引入一个灵活的存储结构和相应的禁忌准则来避免迂回搜索,并通过藐视准则来赦免一些被禁忌的优良状态,进而保证多样化的有效探索以最终实现全局优化。但禁忌搜索时搜索效率低,并且禁忌搜索对初始解具有较强的依赖性[3]。

鉴于以上两种算法各自的优缺点,本文设计了一种混合算法,将遗传算法和禁忌搜索结合起来,相互取长补短,这样混合算法具有遗传算法多出发点和禁忌搜索的记忆功能及爬山能力强的特点[4]。混合算法结构如图1所示,具体来讲,就是将禁忌搜索作为遗传算法的变异算子,初始群体经过选择、交叉操作后产生的新个体作为禁忌搜索的初始解,然后禁忌搜索每一个参与变异的个体,搜索后的新个体与未变异的个体形成新的种群,再对新种群中的个体进行上述混合操作,直至算法终止。

3遗传禁忌混合算法设计

3.1算法步骤

步骤7如果t<T,令t=t+1,转步骤3,否则转步骤8。

步骤8输出最优解,终止算法。

禁忌搜索算法操作步骤如下:

(1)按照变异概率从当前代中随机选择部分个体进入禁忌搜索集合,给定算法参数。

(2)从禁忌搜索中随机选取一个个体作为当前解,置禁忌表为空。

(3)利用当前解的邻域函数产生所有(或若干)邻域解,并从中选择部分候选解。

(4)对候选解判断藐视准则是否满足? 若是,则用满足藐视准则的最佳状态y代替x成为新的当前解,即x=y,并用与y 对应的禁忌对象替换最早进入禁忌表的禁忌对象,修改禁忌表中各禁忌对象的任期,同时用y替换“best so far”状态,然后转步骤(6);否则,继续以下步骤。

(5)判断候选解对应的各对象的禁忌属性。将候选解集中非禁忌对象对应的最佳状态作为新的当前解,同时用与之对应的禁忌对象替换最早进入禁忌表的禁忌对象,并修改禁忌表中各禁忌对象的任期。

(6)判断对该解的禁忌搜索是否满足终止条件,若是,则结束搜索,转步骤(7);否则返回步骤(3)。

(7)判断禁忌搜索集合中的每个解是否都搜索完毕,若是结束该过程;否则转步骤(2)。

3.2参数设计

(1)编码方案。本文采用自然数编码。把所有物体按顺序进行编号,随机生成一个序列,从而组成一个染色体。例如有5个物体需要装箱,生成的染色体可能有(1,2,3,4,5)和

(2,5,4,1,3)等。用这种编码方法,没有把箱子编入染色体中,染色体的结构仅和物体有关[5]。

(2)适应度函数。因为本文中研究的装箱问题,是以所用

箱子数最少为目标函数,即目标函数是求问题的最小解。假设某一染色体对应的箱子数是Fx,则适应度函数可表示为fx=K-Fx,其中K是一足够大的正数。

Fx由下次适应法NF确定。具体步骤是依次从每个随机生成的染色体中按顺序取出每个基因(即物体)放入一个箱子中,如果该箱子放满了,则放入下一个箱子,直到所有物品放完为止,此时所用的箱子数即为Fx。

(3)选择算子。在这里使用轮盘赌选择算子,也叫比例选择算子,即个体被选中并遗传到下一代群体中的概率与该个体的适应度大小成正比。同时,在选择的过程中引入最优保存策略,用上一代适应值最大的染色体代替新一代适应值最低的染色体,可保证当前的最优个体不会被破坏,加速算法向最优解收敛。

(4)交叉算子。交叉是指对两个相互配对的染色体以某种方式相互交换部分基因,从而形成两个新的个体。本文选择最基本两点交叉算子,其具体执行过程如下:①群体中的个体进行两两配对。②对每一对相互配对的个体,随机设置两个位置为交叉点。③对每一对相互配对的个体,依设定的交叉概率的交叉点相互交换两个交叉点之间的染色体,从而产生出两个新的个体。

(5)变异算子。采用禁忌搜索算法作为变异算子,把一个要变异的染色体作为禁忌搜索的输入,把禁忌搜索得到的解作为变异的新个体,在这里以染色体本身为禁忌对象,采用两点互换操作构造邻域并从中选择部分个体作为候选解,以目标函数值作

相关文档
最新文档