做最好的机械设备
全国咨询热线:400-123-4567

优化算法

发布时间:2024-03-11 13:26:56 人气:

最近在帮一些研究生朋友搭建他们再制造领域论文的模型,来安利一些优化算法

首先,所谓优化算法,是指对算法的有关性能进行优化,如时间复杂度、 空间复杂度 、正确性、 健壮性 由于算法应用情景变化很大,算法优化可以使算法具有更好泛化能力。 算法优化是指对算法的有关性能进行优化,如时间复杂度、 空间复杂度 、正确性、健壮性。 大数据时代到来,算法要处理数据的数量级也越来越大以及处理问题的场景千变万化。 为了增强算法的处理问题的能力,对算法进行优化是必不可少的。对一些流程比如加工行业、旅游行业等,进行优化,其中最为典型的问题就是旅行商问题(TSP)。总而言之,优化算法的总目的就是将整个过程的成本(比如金钱、时间、各种消耗等)最低,典型的优化算法包括:遗传算法(GA)、禁忌算法(TS)、模拟退火算法(SA)、粒子群算法(PSO)、差分算法(DE)、生物地理算法(BBO)等,下面我会对这些算法都或多或少做一些代码方面的讲解,每篇讲解后面我都会附上代码(BBO因为网上找不到较为满意的代码,所以我自己写了一份,以图片的形式放在下面),这些算法在CSDN社区或者GitHub里也都应该可以找到源码和讲解。


一、遗传算法

遗传算法可以说是最基本的优化算法,它是根据人类生殖过程中染色体的变化而产生的,原理是对于父代数据进行编译,在通过一系列操作对它进行“遗传和变异”,不断淘汰适应度(Fitness)低的个体数据,从而跳出局部最优解,产全局最优解,当然在过程中对学习率(Learning Rate)也有严格的控制。现在比较通俗好懂的讲解方式是用袋鼠爬山来比喻这个算法,下面链接是遗传算法的源码,里面也包含了一些使用遗传算法解决问题的操作。

遗传算法


二、禁忌算法

禁忌算法是比较出名的搜寻全局最优解的算法,为了跳出局部最优解就必须跳出有限的区域,“禁忌”的意思就是不断去搜寻未知的区域,所以禁忌算法也被叫做禁忌搜索算法,流程如下:

1、在搜索中,构造一个短期循环记忆表-禁忌表,禁忌表中存放刚刚进行过的 |T|(T称为禁忌表)个邻居的移动,这种移动即解的简单变化。

2、禁忌表中的移动称为禁忌移动。对于进入禁忌表中的移动, 在以后的 |T| 次循环内是禁止的,以避免回到原来的解,从而避免陷入循环。|T| 次循环后禁忌解除。

3、禁忌表是一个循环表,在搜索过程中被循环的修改,使禁忌表始终保持 |T| 个移动。

4、即使引入了禁忌表,禁忌搜索仍可能出现循环。因此,必须给定停止准则以避免出现循环。当迭代内所发现的最好解无法改进或无法离开它时,算法停止。

禁忌算法


三、模拟退火算法

模拟退火算法是通过赋予搜索过程一种时变且最终趋于零的概率突跳性,从而可有效避免陷入局部极小并最终趋于全局最优的串行结构的优化算法。模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度T时趋于平衡的概率为e(-ΔE/(kT)),其中E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭代求解法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件S。其模型步骤可分为以下四个步骤:

1、第一步是由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,减少算法耗时,通常选择由当前新解经过简单地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有一定的影响。

2、第二步是计算与新解所对应的目标函数差。因为目标函数差仅由变换部分产生,所以目标函数差的计算最好按增量计算。事实表明,对大多数应用而言,这是计算目标函数差的最快方法。

3、第三步是判断新解是否被接受,判断的依据是一个接受准则,最常用的接受准则是Metropolis准则: 若ΔT<0则接受S′作为新的当前解S,否则以概率exp(-ΔT/T)接受S′作为新的当前解S。

4、第四步是当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可。此时,当前解实现了一次迭代。可在此基础上开始下一轮试验。而当新解被判定为舍弃时,则在原当前解的基础上继续下一轮试验。模拟退火算法与初始值无关,算法求得的解与初始解状态S(是算法迭代的起点)无关;模拟退火算法具有渐近收敛性,已在理论上被证明是一种以概率l 收敛于全局最优解的全局优化算法;模拟退火算法具有并行性。

模拟退火算法


四、粒子群算法

粒子群算法模拟鸟群的捕食行为。一群鸟在随机搜索食物,在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻离食物最近的鸟的周围区域。PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。

粒子群算法


五、差分算法

和遗传算法一样,差分进化算法也是一种基于现代智能理论的优化算法,通过群体内个体之间的相互合作与竞争产生的群体智能来指导优化搜索的方向。该算法的基本思想是:从一个随机产生的初始种群开始,通过把种群中任意两个个体的向量差与第三个个体求和来产生新个体,然后将新个体与当代种群中相应的个体相比较,如果新个体的适应度优于当前个体的适应度,则在下一代中就用新个体取代旧个体,否则仍保存旧个体。通过不断地进化,保留优良个体,淘汰劣质个体,引导搜索向最优解逼近。DE算法通过采用浮点矢量进行编码生成种群个体。在DE算法寻优的过程中,首先,从父代个体间选择两个个体进行向量做差生成差分矢量;其次,选择另外一个个体与差分矢量求和生成实验个体;然后,对父代个体与相应的实验个体进行交叉操作,生成新的子代个体;最后在父代个体和子代个体之间进行选择操作,将符合要求的个体保存到下一代群体中去。流程如下:

1、确定差分进化算法控制参数,确定适应度函数。差分进化算法控制参数包括:种群大小NP、缩放因子F与杂交概率CR。

2、随机产生初始种群。

3、对初始种群进行评价,即计算初始种群中每个个体的适应度值。

4、判断是否达到终止条件或进化代数达到最大。若是,则终止进化,将得到最佳个体作为最优解输出;若否,继续。

5、进行变异和交叉操作,得到中间种群。

6、在原种群和中间种群中选择个体,得到新一代种群。

7、进化代数g=g+1,转步骤4

差分进化算法


六、生物地理算法

生物地理优化算法是相对其他算法出现的比较晚的,对于该算法的研究也远不如其他几个算法。

BBO算法将优化问题的每个解看成一个栖息地。解的适应度越高,表示栖息地拥有的物种越多,其迁出率就越高、迁入率就越低:反之,解的适应度越低,其对应的迁出率越低、迁入率越高。迁移操作的目的就是在不同的解之间进行信息分享,其中好的解倾向于把自身的信息传播给其他解,而差的解更倾向于从其他解中接收信息。在具体实现时,BBO算法的每次迭代都会考察种群中的每个解H(i),设其迁入率和迁出率分别为:λ(i)和μ(i),则其每个分量都有λi的概率被修改(即进行迁入);如果要迁入,则以迁出率为概率从种群中选择一个迁出解H(j),再将H(i)的当前分量替换为Hj的对应分量。对H(i)的所有分量都执行完上述操作后,就产生了一个新解H’(i)。算法比较H(i)和H’(i)的适应度,将适应度更高的一个保留在种群中。上述迁移操作的过程可用算法过程下面所示的伪代码来描述,其中D表示问题的维度即解向量的长度,rand()用于生成一个[0,1]内的随机数。

在CSDN和GitHub上并没有找到理想的代码,于是我自己写了一份代码,使用的是Python3,截图后放在下面,包括代码源码以及运行结果,有意者可以自行保存。





运行结果:


?

产品名称二十二
产品名称十九
产品名称十五

在线留言

平台注册入口