optimization method (理论)

来源:互联网 发布:电脑软件不见了怎么办 编辑:程序博客网 时间:2024/06/05 03:37

最优化方法在很多领域都特别有用,目的就是要求:最大值或者最小值,优化算法有很多中,不同的优化问题(离散的/连续的,有约束的/没约束的,线性的/非线性)有不一样的优化算法的。对于连续和线性等简单的问题,可以选择一些经典算法:梯度、Hessian矩阵、拉格朗日乘数、单纯形法、牛顿法、梯度下降等等;对于更为复杂的问题,可能需要考虑一些智能优化算法,如遗传算法、蚁群算法、模拟退火、禁忌搜索、粒子群算法、蛙跳算法、人工鱼群算法、细菌觅食算法、果蝇算法、神经网络等等。

优化算法的分类

1.传统优化算法

   大多数利用目标函数的梯度(或导数)信息实现单可行解的惯序、确定性搜索。


2.启发式算法:

   神奇的大自然,它造就了很多巧妙的手段和运行机制。受大自然的启发,人们从大自然的运行规律中找到了许多解决实际问题的方法。对于那些受大自然的运行规律或者面向具体问题的经验、规则启发出来的方法,人们常常称之为启发式算法(Heuristic Algorithm)。启发式算法也不是全部来自然的规律,也有来自人类积累的工作经验。按百科的定义是:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度不一定事先可以预计。

   启发式算法的难点是建立符合实际问题的一系列启发式规则。下面是网上转来的:


 

   智能优化算法,其实也就是现代启发式算法。它们都是通过模拟自然界生物群体行为从而寻求全局最优的仿生优化算法

遗传算法(GA)、蚁群算法、模拟退火(SA)、禁忌搜索(TS)、粒子群算法、蛙跳算法、人工鱼群算法、细菌觅食算法、果蝇算法、神经网络、杂草优化算法、差分进化算法等等。(感觉不可思议,大自然给人的启示太多了)

   启发式方法以仿生算法为主,通过启发式搜索策略,实现多可行解的并行、随机化。另外,启发式搜索算法不要求目标函数连续、可微等信息,具有较好的全局寻优能力、因而成为最优化领域的一个研究热点。


下面我们将进行一个小小的总结:

一、无约束极值(最大值和最小值)问题

1.牛顿法

以爬山为例子:

如果你在山脚,看到了山顶(这意味着这种算法得到的是一个全局最优解,当然是条件的,函数需要满足一定的条件),你就不管三七二十一了,直接就往山顶那个方向不要命的冲,直到到达山顶。这个就是牛顿法






2.最速上升(下降)法

例子:如果你去爬山,一开始站在山脚下,一抬头见不到山顶,你怎么知道山顶在哪(这么说,这种算法得到的是一个局部最优解咯)?你只知道如果我每一步都往高处爬,那么我肯定能爬上山顶。所以你是一步步往上爬,每爬一小段(步长)的时候,停下来,看看四周哪个方向上山最快,也就是坡度最陡(也就是性能曲面的梯度了),然后你就沿着这个方向再爬一小段,再停下来观测最快的上山方向,一直这样直到你爬上山顶。这个就是最速上升法




举例:



3.最小二乘法

4.随机搜索算法

例子: 如果你在山脚开始,每爬一小段,然后下一步的方向你就随便蒙,听天由命,因为你相信,上帝会把你带到山顶的(上帝就是那个操纵概率的手),这个就是随机搜索算法。

二、现代优化算法

5.模拟退火

例子:在爬山的时候,如图1,当你历经千辛万苦爬上一个山顶A(局部最优解)的时候,发现还有更高的山顶(B),但没办法啊,如果想到那个更高的山顶,你就得先下坡,然后再爬上那个山顶。这时候,有些人就满足了,看到了他想看到的美景,乐于他的局部最大值,不想折腾了。但有些人就不满足,你渴望那种“山登绝顶我为峰,一览众山小”的心境,所以你就纵身一跳,滚到了山脚,如果你好运,那你就滚到了那个最高山顶的山脚,这时候,你再往上爬,就可以到达最高峰了。这个就是避免陷于局部最大值,寻找全局最大值的算法,叫模拟退火。


图1

   模拟退火(Simulated Annealing 简称 SA)算法是基于蒙特卡罗迭代算法求解的一种启发式随机搜索算法,算法思想最早在 1953 年由 NMetropolis 等人提出的,但是把它用于组合优化和 VLSI 设计却是在 1983 年由 S Kirkpatrick 等人和 V. Cemy分别提出来的。算法将组合优化问题和统计学中的热平衡问题类比,另辟了组合优化问题的新途径。其出发点是物理学中的退火过程,即对固体物质进行退火处理时,通常是先将它加温,使其粒子可自由运动,然后降温,粒子逐渐形成低能态的晶体,若在凝结点附近温度下得足够慢,则固体物质一定会形成最低能量的基态。 

   模拟退火算法的基本思想是从一给定解开始,从邻域中随机产生另一个解,接受Metropolis 准则允许目标函数在有限范围内变坏,它由一控制参数t决定,其作用类似于物理过程中的温度T ,对于控制参数的每一取值,算法持续进行“产生—判断—接受或舍去”的迭代过程,对应着固体在某一恒定温度下的趋于热平衡的过程,当控制参数逐渐减小并趋于 0 时,系统越来越趋于平衡态,最后系统状态对应于优化问题的全局最优解,该过程也称为冷却过程(降温退火),由于固体退火必须缓慢降温,才能使得固体在每一温度下都达到热平衡,最终趋于平衡状态,因此控制参数t经缓慢衰减,才能确保模拟退火算法最终优化问题的整体最优解。

   算法的具体步骤:

   

模拟退火的实例


6.遗传算法

 遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。

   作为遗传算法生物背景的介绍,下面内容了解即可:

  种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群。

  个体:组成种群的单个生物。

  基因 ( Gene ) :一个遗传因子。 

  染色体 ( Chromosome ) :包含一组的基因。

  生存竞争,适者生存:对环境适应度高的、牛B的个体参与繁殖的机会比较多,后代就会越来越多。适应度低的个体参与繁殖的机会比较少,后代就会越来越少。

  遗传与变异:新个体会遗传父母双方各一部分的基因,同时有一定的概率发生基因变异。

    简单说来就是:繁殖过程,会发生基因交叉( Crossover ) ,基因突变 ( Mutation ) 。适应度( Fitness )低的个体会被逐步淘汰,而适应度高的个体会越来越多。那么经过N代的自然选择后,保存下来的个体都是适应度很高的,其中很可能包含史上产生的适应度最高的那个个体。

    借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。这样进化N代后就很有可能会进化出适应度函数值很高的个体。

     举个例子,使用遗传算法解决“0-1 背包问题”的思路:0-1背包的解可以编码为一串0-1字符串(0:不取,1:取) ;首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后,随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,而且较优的解被选中的概率要比较高。这样经过G代的进化后就可能会产生出0-1背包问题的一个“近似最优解”。 

     编码:需要将问题的解编码成字符串的形式才能使用遗传算法。最简单的一种编码方式是二进制编码,即将问题的解编码成二进制位数组的形式。例如,问题的解是整数,那么可以将其编码成二进制位数组的形式。将0-1字符串作为0-1背包问题的解就属于二进制编码,当然也可以编码为其他进制,如十进制。

   遗传算法有3个最基本的操作:选择,交叉,变异。

   (1)选择(Select):选择一些染色体来产生下一代。一种常用的选择策略是 “比例选择”,也就是个体被选中的概率与其适应度函数值成正比。假设群体的个体总数是M,那么那么一个体Xi被选中的概率为f(Xi)/( f(X1) + f(X2) + …….. + f(Xn) ) ,其中,f(Xi)是个体Xi的适应度函数。比例选择实现算法就是所谓的“轮盘赌算法”( Roulette Wheel Selection ) 。

    (2)交叉(交配)(Crossover):2条染色体交换部分基因,来构造下一代的2条新的染色体。例如:

交叉前:

                  

 

         交叉后:

                   

          染色体交叉是以一定的概率发生的,这个概率记为Pc 。

(3)变异(Mutation):在繁殖过程,新产生的染色体中的基因会以一定的概率出错,称为变异。变异发生的概率记为Pm 。例如:

变异前:

000001110000000010000

变异后:

000001110000100010000

 

(4)适应度函数 ( Fitness Function ):用于评价某个染色体的适应度,用f(x)表示。有时需要区分染色体的适应度函数与问题的目标函数。例如:0-1背包问题的目标函数是所取得物品价值,但将物品价值作为染色体的适应度函数可能并不一定适合。适应度函数与目标函数是正相关的,可对目标函数作一些变形来得到适应度函数。

       遗传算法实例

7.禁忌搜索算法

   禁忌搜索算法是组合优化算法的一种,是局部搜索算法的扩展。禁忌搜索算法是人工智能在组合优化算法中的一个成功应用。禁忌搜索算法的特点是采用了禁忌技术。所谓禁忌就是禁止重复前面的工作。禁忌搜索算法用一个禁忌表记录下已经到达过的局部最优点,在下一次搜索中,利用禁忌表中的信息不再或有选择地搜索这些点。

   禁忌搜索算法涉及侯选集合、禁忌对象、评价函数、特赦规则、记忆频率信息等概念。

   首先,我们需要弄清楚一些概念:

   (1) 领域

   在组合优化中,距离的概念通常不再适用,但是在一点附近搜索另一个下降的点仍然是组合优化数值求解的基本思想。

   我们定义:


   (2)候选集合

    侯选集合由邻域中的邻居组成。常规的方法是从邻域中选择若干个目标值或评价值最佳的邻居入选。

   (3)禁忌对象和禁忌长度


   (4)平均函数

   评价函数是侯选集合元素选取的一个评价公式,侯选集合的元素通过评价函数值来选取。以目标函数作为评价函数是比较容易理解的。目标值是一个非常直观的指标,
但有时为了方便或易于计算,会采用其他函数来取代目标函数。

   (5)特赦规则

  在禁忌搜索算法的迭代过程中,会出现侯选集中的全部对象都被禁忌,或有一对象被禁,但若解禁则其目标值将有非常大的下降情况。在这样的情况下,为了达到全局最优,我们会让一些禁忌对象重新可选。这种方法称为特赦,相应的规则称为特赦规则。

   (6)记忆频率

  在计算的过程中,记忆一些信息对解决问题是有利的。如一个最好的目标值出现的频率很高,这使我们有理由推测:现有参数的算法可能无法再得到更好的解。根据解决问题的需要,我们可以记忆解集合、被禁对象组、目标值集合等的出现频率。频率信息有助于进一步加强禁忌搜索的效率。我们可以根据频率信息动态控制禁忌的长度。一个最佳的目标值出现的频率很高,有理由终止计算而将此值认为是最优值。

   禁忌搜索算法实例

8.蚁群算法

9.蛙跳算法

10.粒子群算法(PSO)


参考文献:

1.浅说机器学习中“迭代法”

 

2.数学建模算法大全

3.三江小渡
4.惩罚函数法在模拟退火算法求解非线性约束优化问题中的应用

5.遗传算法入门


0 0
原创粉丝点击