局部搜索算法
算法描述:
概括:
一种启发式优化算法,从某个初始解出发,通过在解空间中搜索邻域来寻找更好的解,直到满足终止条件。侧重寻找局部最优解,可能不会遍历整个解空间。
术语解释:
初始解:搜索过程的起始点,在该算法中是随机生成的
邻域:由给定转化规则对给定的问题域上每结点进行转化所得到的问题域上结点的集合。
邻域函数:作用在一个解从而产生一个新的解的函数。分为函数优化和组合优化的邻域函数。
邻域动作:一个函数,通过该函数,对当前解A,产生其相应的邻居解集合。
目标函数:用于评价解的质量的函数。通常要求最大化或者最小化。
基本思想:
基于贪婪思想利用邻域函数进行搜索。
贪婪思想:求解问题时,每一步都采取当前情况下最优的选择,希望这一系列的局部最优能够导致最终的全局最优解。
算法步骤:
初始化
1.定义问题的解空间
2.随机生成一个初始解x0,T=f(x0)
3.设置算法的参数,如迭代次数,终止条件(达到最大迭代次数或算法运行时间超过求解时间等),邻域大小等
选择邻域解
在当前解的基础上进行局部搜索,选择一个相邻的解作为候选解。通常采用交换,翻转等操作。
评估候选解
选择候选解中的最优解x1,若目标函数f(x1)>=f(x0),则更新最优解x=x1,T=f(x1)
终止条件判断
如果满足算法的终止条件,则输出计算结果,否则回到“选择邻域解”这一步
优点:
局部搜索通常比较简单,易于实现,运行效率高。
缺点:
不保证最优解(可能会因为早期做出的局部最优选择而错过全局最优解)
解的质量与邻域的结构密切相关。
算法改进:
初始解的优化:用更复杂的启发式方法来生成初始解,而不是随机选择
接受准则的改进:设计基于概率的接受准则(类比遗传算法)或者采用模拟退火或禁忌搜索算法中的接受准则,允许算法接受劣解,跳出局部最优等等
可以解决的问题:
旅行商问题:寻找最短的遍历一系列城市的路径
背包问题:在不超过背包重量限制的情况下,选择价值最大的物品组合
装箱问题:将不同形状和大小的物品放入有限空间内,以最大化空间利用率
作业调度问题:安排一系列任务在若干处理器上的执行顺序,以最小化总完成时间或总成本
着色问题等等
禁忌搜索算法:
算法描述:
概括:
在局部搜索的基础上,该算法通过引入禁忌表来防止搜索过程陷入局部最优解,从而能够跳出局部最优,继续寻找全局最优。
术语解释:
禁忌表——禁忌对象:由于需要避免一些操作的重复进行,就要将一些元素放到禁忌表中以禁止对这些元素进行操作,这些元素就是禁忌对象。
禁忌表——禁忌长度:被禁对象不允许迭代的次数,一般是给被禁对象x一个数(禁忌长度)t,要求x在t步迭代内被禁,在禁忌表中采用tabu(x)=t记忆,每迭代一步就减一,直到tabu(x)=0时解禁。
藐视准则:在禁忌搜索算法的迭代过程中,会出现候选集中的全部对象都被禁忌,或者存在一个优于最佳状态的禁忌候选解,此时藐视准则将某些状态解禁,以实现更高的优化性能。
算法步骤:
(1)给定算法参数,随机产生初始解x,置禁忌表为空。
(2)判断算法终止条件是否满足,若是,则结束算法并输出优化结果;否则,继续以下步骤。
(3)利用当前解x的邻域函数产生其所有(或若干)邻域解,并从中确定若干候选解。
(4)对候选解判断藐视准则是否满足,若成立,则用满足藐视准则的最佳状态v替代x成为新的当前解,即x=y,并用与v对应的禁忌对象替换最早进人禁忌表的禁忌对象,同时用v替换最佳状态,然后转步骤(6);否则,继续以下步骤。
(5)判断候选解对应的各对象的禁忌属性,选择候选解集中非禁忌对象对应的最佳状态为新的当前解,同时用与之对应的禁忌对象替换最早进入禁忌表的禁忌对象元素。
(6)转步骤(2)。
优点:
禁忌表的使用可以避免搜索过程陷入局部最优,具有全局搜索能力。
具有灵活性和适应性。可以根据问题特点改变禁忌长度,邻域结构等,以适应不同的优化问题。
缺点:
对初始解有较强的依赖性。较差的初始解可能导致算法效率低下或无法找到全局最优解。
迭代搜索过程是串行的,仅是单一状态的移动,而非并行搜索。
算法改进:
对禁忌搜索算法本身的操作和参数选取进行改进。
将该算法与模拟退火,遗传算法,蚁群算法等结合,形成混合算法,以利用各自的优势。
可以解决的问题:
旅行商问题
作业调度问题
车辆路径问题:类似于TSP问题,但涉及多个车辆和多配送中心,目标是找到成本最低的车辆路径集合。
背包问题,着色问题等等。
算法示例(解决TSP问题):
假设我们有5个城市A、B、C、D和E,以及它们之间的距离矩阵如下:
A B C D E
A 0 10 15 20 25
B 10 0 14 18 22
C 15 14 0 10 15
D 20 18 10 0 10
E 25 22 15 10 0
初始化
初始解:随机选择一个路径,比如 A -> B -> C -> D -> E -> A。
禁忌表:初始化为空。
禁忌长度:设为2,意味着被禁忌的操作在接下来的两次迭代中不能被执行。
设定最大迭代次数为50。
迭代1
当前解:A -> B -> C -> D -> E -> A,总距离为 94。
邻域搜索:生成所有可能的邻域解,例如通过交换城市顺序。
最佳邻域解:A -> C -> B -> D -> E -> A,总距离为 90(交换B和C)。
更新禁忌表,将交换操作(B,C)加入禁忌表。
迭代2
当前解:A -> C -> B -> D -> E -> A。
邻域搜索:再次生成邻域解,但这次不能使用交换(B,C)的操作.
最佳邻域解:A -> C -> D -> B -> E -> A,总距离为 88(交换B和D)。
更新禁忌表,将交换操作(B,D)加入禁忌表,同时移除禁忌时间最长的操作(B,C)。
迭代3
当前解:A -> C -> D -> B -> E -> A。
邻域搜索:继续搜索,考虑禁忌表中的操作。
最佳邻域解:A -> C -> D -> E -> B -> A,总距离为 86(交换B和E)。
更新禁忌表,将交换操作(B,E)加入禁忌表。
......
假设在迭代50次后,我们找到了路径 A -> C -> D -> E -> B -> A,总距离为86,这是目前为止找到的最佳路径。那么,这个路径将被作为算法的输出结果。
模拟退火算法
算法描述:
概括:
一种启发式算法,其灵感来源于固体材料的退火过程。在固体退火过程中,物体被加热到一定温度,然后允许其温度逐渐下降,最终达到低温的平衡状态,物质的内部结构能量也达到最低。模拟退火算法借鉴了这一物理过程,用于求解最优问题。
术语解释:
温度:控制算法接受新解概率的参数。温度越高,算法接受比当前解更差的解的可能性越大。
冷却调度:用于确定温度是如何随时间降低。常见的方法包括线性冷却,指数冷却和慢冷却。
Metropolis准则:一种根据一定概率选择是否接受恶化解的方法。当得到的新解为恶化解时,使用Metropolis准则决定是否要接受新解(将计算出来的概率P与一个随机概率作比较,若大于随机概率,则接受劣解,反之不接受)。温度与差值对概率均有影响。在极小化问题中,目标函数差值越大,概率越小。P=1或者
算法步骤:
(1)初始化:随机生成一个解x0作为当前最优解,设定一个较高的温度T0,设置每个温度下的迭代次数n,确定目标函数。
(2)设置冷却步长a,T=T-a(0<a<T)或者T=T*a(0<a<1)或者T=T/(1+aT) (0<=a)
(3)从x的临近解中找到一个解x1,计算新解的目标函数值和原来解的目标函数值的差值=f(x1)-f(x0)
(4)若新解优于原解,则百分百接受新解,将当前最优解替换,否则以Metropolis准则来确定是否接受新解。
(5)执行步骤3和4n次
(6)判断是否达到终止条件,若没有,按照设定的冷却步长降低温度T,回到步骤3,否则算法结束,输出最优解
ps:终止准则常用方法:
设置终止温度的阙值;
设置外循环迭代次数;
算法搜索到的最优值连续若干步保持不变;
概率分析方法
优点:
简单易实现:只需要确定邻域结构,初始温度,冷却步长和终止条件等。
灵活性:该算法可以根据不同的优化问题调整邻域搜索策略和冷却步长,以适应特定问题的特性
缺点:
参数设置敏感且耗时长:算法的性能很大程度上取决于 初始温度,降温速率等参数的选择,往往要求较高的初始温度,较慢的降温速率,降低的终止温度和足够多次的迭代,使得优化过程耗时长。
难以得到精确解:由于模拟退火算法是一种随机算法,是否转移向劣解取决于随机概率,因此,每次执行算法时,执行过程转移到的解可能不一样,导致最终解可能不一样。
注意事项:
(1)温度T的初始值设置:初始温度越高,搜索到全局最优解的概率越大,但是耗时越长。
(2)模拟退火速度(迭代次数):同一温度下的充分搜索是必须要保证的,但是迭代次数的增加,也会使计算开销的增大。
(3)温度管理问题:为了保证较大的搜索空间,a一般取接近1的值。
可以解决的问题:
旅行商问题,作业调度问题,背包问题,着色问题等组合优化问题,装箱问题,车辆路径问题等等。
模拟退火与禁忌搜索算法比较:
相同点:
都是启发式全局优化算法,用于解决组合优化问题,都旨在避免陷入局部最优解,并寻找全局最优解。但是它们的操作机制和搜索策略有显著差异。
不同点:
模拟退火算法
采取基于概率的接受准则(Metropolis准则),温度控制(高温更易接受劣解),没有显式的记忆结构(不能避免重复访问)。
禁忌搜索算法
藐视准则(允许优解被解禁),禁忌表(可以避免重复访问,探索新的搜索区域),通常结合局部搜索来改进当前解。