精确算法与启发式算法对比

目录

精确算法

启发式算法

选精确算法还是启发式算法?


       优化问题求解方法主要分为两种:精确算法与启发式算法。算法的种类很多,本文仅挑选部分进行对比。

精确算法

       精确算法是能够在有限的时间求出最优解的算法。对于小规模优化问题,通常可采用单纯形法、分支定界法、动态规划法等精确算法求最优解。然而随着优化问题的规模或者复杂度的增加,部分精确算法所需的求解时间与存储空间将呈指数增长,导致算法失效,因此催生了更复杂一些的精确求解算法,如拉格朗日松弛算法、分支定价算法、Bender's分解算法等。这些算法基本思路通常是采用某种方式将一个复杂问题转换为若干个容易求解的子问题。

        拉格朗日松弛算法一般通过拉格朗日乘子将复杂的耦合约束松弛后移到目标函数中,构造拉格朗日对偶问题;给定拉格朗日乘子并将对偶问题分解成多个简单的子问题求解,从而为原问题提供一个下界;然后通过解的可行化法得到原问题的一个上界;接着采用次梯度算法不断更新拉格朗日乘子和解的上、下界直至收敛。

        分支定价算法是将列生成算法嵌入分支定界算法的一种组合算法,常用于大规模整数规划问题,先将大规模整数规划问题松弛为线性规划问题;用列生成算法构造线性松弛问题的限制性主问题和价格子问题并求解,更新节点的上界或下界;再用分支定界算法对非整数解进行分支或剪支;继续调用列生成算法对分支形成的问题求解;不断迭代更新问题上下界直至收敛。

        Bender's分解算法通常通过拆分复杂问题的目标函数和约束,构造一个主问题、一个或多个个子问题,其中主问题由包含难变量的目标函数及约束条件组成,子问题由包含简单变量的目标函数、包含简单变量与难变量的约束条件组成,并构造子问题的对偶问题;求解主问题得到难变量的解和原问题的一个下界;将主问题的解带入子问题的对偶问题并求解,如果子问题的对偶问题无解,则在主问题中添加可行割平面,如果子问题的对偶问题有最优解,则在主问题中添加最优割平面,并得到原问题的一个上界;不断迭代更新问题上下界直至收敛。

启发式算法

        当优化问题规模过大导致精确算法无法求解时,通常采用启发式算法进行求解 。启发式算法是根据自然现象或者生活经验构造规则搜索可行解的算法,能够在较短时间内获取较优解。

        局部搜索算法是较早出现的启发式算法,该算法首先生成一个初始解作为当前解,然后通过一定的策略搜索当前解的邻域结构,如果搜索到的邻域解优于当前解,则用邻域解替换当前解,否则继续进行邻域搜索,直到搜索不到更好的邻域解时,则当前解为最优解,停止算法。局部搜索算法的好坏往往取决于解的邻域结构。

        由于局部搜索算法没有全局搜索策略,容易陷入局部最优陷阱,需要采取一些措施对其进行改进,由此衍生了兼顾局部搜索与全局搜索的禁忌搜索算法、模拟退火算法等启发式算法。禁忌搜索算法通过禁忌表存储近期已经搜索过的邻域解,防止后续一段时间内的邻域搜索中再次访问这些邻域解,从而跳出局部陷阱。模拟退火算法是受固体退火的启发而成的算法,该算法设置了两种接受邻域解的条件:若邻域解的评价函数小于当前解的评价函数,则接受邻域解,否则以一定的概率接受邻域解,后者即该算法的全局搜索策略。

        从解的数量上看,局部搜索算法是从单个解开始搜索的,这也是局部搜索算法容易陷入局部最优的原因之一,因此采用基于种群搜索的启发式算法同样有助于全局寻优,例如遗传算法与粒子群算法。遗传算法的思路为随机生成一个初始种群作为父代,通过选择、交叉、变异等操作生成子代,然后挑选出父代与子代中适应度较好的个体作为新的父代,继续进行上述操作,直到触发终止条件,选取适应度最好的解为最优解。

选精确算法还是启发式算法?

        精确算法与启发式算法各有各的优缺点。精确算法能够评价解的质量,容易得到最优解,但是对模型形式要求比启发式算法高,适用范围比启发式算法小,主要用于求解线性规划、整数规划、混合线性整数规划、组合优化等问题;启发式算法无法评价解的质量(所求较优解和最优解的相对差),对模型形式要求低,适用范围广,可用于求解大规模问题或复杂的非线性问题。

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值