元启发式如何跳出局部最优?

        在使用启发式算法的时候,一个常见的问题是融入陷入局部最优,导致很长时间内算法的解难以得到改进,现总结一下几种常见的元启发式如何跳出局部最优。

一、跟算法内部设计无关: 使用多个初始解搜索;

二、跟算法内部设计有关:接受较差的解/扰动/交叉变异

        SA: 若新解优于原解,接受,否,以一定概率/接受标准 exp((sol.Cost-newsol.Cost)/ck)接受较差解。

        VND:纯静态算法,邻域只有一个的话,跟爬山无异;跟爬山相比多了邻域的个数。

        VNS:shake策略,扰动初始解,shaking本质上来说也是邻域搜索的一种,但需要注意的是,shake强度不能太小,不然很容易被局部搜索拉回,且shake对解的扰动程度比local search要强;同时shake的强度不能太大,不然与random search无异。

        GA:通过交叉/变异跳出局部最优;

  •  交叉:需要两个父代的基因进行互换产生新的个体,改动程度比较大,类似于VNS当中的扰动,常见算子(OX、PMX、CX)
  • 变异:针对单个个体按照一定概率对某些基因进行swap、insert等操作得到新的个体,类似于local search中的邻域算子;

        ILS:同时使用shaking+SA的接受标准,使得算法的探索性更强,跳出局部最优的可能性更大。

        Tabu:通过禁忌列表的设置保证跳出局部最优。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
免疫算法(Immune Algorithm)是一种模拟免疫系统行为的化算法,可以用于求解最化问题。在Matlab中,我们可以通过编写代码来实现免疫算法求解最值。 首先,我们需要定义适应度函数,该函数用于评价候选解的适应程度。适应度函数要根据具体问题进行定义,通常是目标函数的化指标。 接下来,我们需要定义免疫算法的相关参数,包括种群规模、资源利用率等。种群规模是指生成的候选解的数量,资源利用率是指候选解在局部搜索和全局搜索中所占的比例。 然后,我们需要初始化种群,可以采用随机生成的方。每个候选解可以表示为一个向量,其中包含问题的变量和取值范围。 在每次迭代中,免疫算法会根据适应度函数对当前的种群进行排序。接着,算法会选择一部分适应度较好的个体进行克隆和变异操作,以生成新的个体。克隆操作会生成与原个体相似的个体,变异操作会对个体的某些值进行微调。 最后,通过不断迭代更新种群,免疫算法会逐渐化,直到找到最值或满足停止条件为止。停止条件可以是达到最大迭代次数或找到满足问题约束条件的候选解。 总之,免疫算法是一种用于求解最值的化算法,通过模拟免疫系统的行为来实现。在Matlab中,我们可以定义适应度函数、设置算法参数,并利用循环迭代和操作生成新的个体,最终找到最解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhugby

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

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

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

打赏作者

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

抵扣说明:

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

余额充值