第四章经典的搜索算法

经典的搜索算法

1. 爬山算法

image-20211114161407025 image-20211014083506451

大概的思想就是:不断的向相邻的最优节点移动。

这就会出现一个问题,就是当前节点是周围节点中最优的,但却不是全局最优的节点。所以爬山算法不完备

接近这个问题的方法之一是采用随机爬山算法,即到达这种极值点后随机指定开始状态,重新进行搜索过程。

随机爬上算法是完备的,但是效率极低。

2. 模拟退火算法

模拟退火算法是对爬山算法的改进,主要改动在于,如果到达局部最优,就会有一定几率走下坡路,跳出当前局部最优的状态。

image-20211114163236242

模拟退火算法描述

  1. 初始化:初始温度T(充分大),温度下限Tmin(充分小),初始解状态x(是算法迭代的起点),每个T值的迭代次数L;
  2. 对l=1,2,…,L做第3至第6步;
  3. 产生新解x_new: (x_new=x+Δx)
  4. 利计算增量Δf=f(x_new)−f(x),其中f(x)为优化目标;
  5. 若Δf<0(若寻找最大值,Δf>0)则接受x_new作为新的当前解,否则以概率exp(−Δf/(kT))接受x_new作为新的当前解;其中k是波尔兹曼常数,值为k=1.3806488(13)×10−23,exp表示自然指数,p(dE)函数的取值范围是(0,1)。
  6. 如果满足终止条件则输出当前解作为最优解,结束程序。(终止条件通常取为连续若干个新解都没有被接受时终止算法。);
  7. T逐渐减少,且T>Tmin,然后转第2步。

这里写图片描述

退火算法的优缺点

模拟退火算法的应用很广泛,可以高效地求解NP完全问题,如货郎担问题(Travelling Salesman Problem,简记为TSP)、最大截问题(Max Cut Problem)、0-1背包问题(Zero One Knapsack Problem)、图着色问题(Graph Colouring Problem)等等,但其参数难以控制,不能保证一次就收敛到最优值,一般需要多次尝试才能获得(大部分情况下还是会陷入局部最优值)。观察模拟退火算法的过程,发现其主要存在如下三个参数问题:

(1) 温度T的初始值设置问题
  温度TT的初始值设置是影响模拟退火算法全局搜索性能的重要因素之一、初始温度高,则搜索到全局最优解的可能性大,但因此要花费大量的计算时间;反之,则可节约计算时间,但全局搜索性能可能受到影响。

(2) 退火速度问题,即每个T值的迭代次数
  模拟退火算法的全局搜索性能也与退火速度密切相关。一般来说,同一温度下的“充分”搜索是相当必要的,但这也需要计算时间。循环次数增加必定带来计算开销的增大。

(3) 温度管理问题
  温度管理问题也是模拟退火算法难以处理的问题之一。实际应用中,由于必须考虑计算复杂度的切实可行性等问题,常采用如下所示的降温方式: T=α×T , α∈(0,1).注:为了保证较大的搜索空间,α一般取接近于1的值,如0.95、0.9。

退火算法总结

模拟退火算法是一种随机算法,并不一定能找到全局的最优解,可以比较快的找到问题的近似最优解。 如果参数设置得当,模拟退火算法搜索效率比穷举法要高。

爬山算法和模拟退火算法的区别

爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。

模拟退火:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。

3. 遗传算法

概述

遗传算法是模仿生物遗传学自然选择机理,遗传算法以适者生存的生物进化理论为基础的一种智能优化算法。
适者生存:最适合自然环境的群体往往产生了更大的后代群体。

生物进化的基本过程image-20211014100622642

遗传算法的研究主要集中在以下几个方面:函数优化、组合优化、生产调度、自动控制、机器人学、
图像处理、人工生命、演化编程和机器学习。

基本思想

image-20211014100826133 image-20211014100951984

遗传算法的基本组成

  • 编码方案: 怎样把优化问题的解进行编码。
  • 适应度函数: 怎样根据目标函数构建适应度函数。
  • 选择策略: 优胜劣汰、适者生存。
  • 控制参数: 种群的规模、算法执行的最大代数、执行不同遗传操作的概率等。
  • 遗传算子: 选择、交叉、变异。
  • 算法终止准则: 规定一个最大的演化代数,或算法在连续多少代以后解的适应值没有改进。

遗传算法的设计

  1. 确定编码方案
    选择何种编码表示对算法的性能、效率等产生很大的影响。将问题结构变换为位串形式编码表示的过程叫编码;而相反将位串形式编码表示变换为原问题结构的过程叫解码或译码。把位串形式编码表示叫染色体(个体),
    即问题的一个解。遗传算法的编码方法有二进制编码、浮点数编码方法、格雷码、符号编码方法、多参数编码方法等。

  2. 定义适应度函数
    解的适应度是演化过程中进行选择的唯一依据。

  3. 选择策略的确定
    优胜劣汰的选择机制使得适应值大的解有较高的存活率,这是遗传算法与一般搜索算法的主要区别之一。

  4. 遗传操作通常包括:

    选择、交叉、变异。

image-20211014101719126

是否进行交叉和变异需要一个概率值Pc,Pm,变异的概率值Pm远小于交叉的概率值Pc

例:用遗传算法求解8皇后问题

image-20211014102044379
  1. 编码方案为每列棋子所在的行数
  2. 适应度函数为棋子冲突的对数(最大combine(2,8) = 28,最小为0)。
  3. 选择策略,个体n的适应度函数f(n), 整个群体的适应度为∑f(i), 个体n被选择的概率为f(n)/∑f(i)
  4. 参数控制可以不用管,当种群中出现了目标解就结束即可(8皇后一定有解,如果无解就需要规定遗传的多少代)
  5. 遗传算法:
    • 选择: 根据选择策略进行选择
    • 交叉: 选择交叉点,随机交换交叉两个个体中被交叉点分割出的判断
    • 变异: 随机选取0个或者多个编码点,修改其值。
  6. 终止规则:出现目标状态
image-20211014103106663 image-20211014103131323

遗传的大概过程

image-20211014103218856

-20211014103131323.png" alt=“image-20211014103131323” style=“zoom:50%;” />

遗传的大概过程

[外链图片转存中…(img-eoXR3kJM-1641793584902)]

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuming先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值