【数学规划】模拟退火算法

一、要解决的问题:

某个目标函数的最值〔某一给定的函数、旅行的路程或费用、买书的花费、利润)

(最大值问题通过给目标函数添加负号可以转换为求最小值问题)。

(1)求一个给定函数的最值问题

(2)旅行商问题

(3)书店买书问题(假设有m个书店,n本书,那么买书的方案数就有m^n)

 (4)背包问题(如果有n件货物,那么可能性就有2^n)

 在matlab中有一个函数:intlinprog专门解决0-1规划问题。

二、求解的通用步骤

(1)蒙特卡罗模拟(这里用其求解最值问题)

        随机生成很多组解,验证这些解是否满足题目的约束条件,若满足则将其保存到一个"可行集"中,然后计算这个可行集内每个解对应的目标函数值,在里面找到最值即可。

        对比穷举法:穷举法是按照某一特定的规则来穷举整个空间,蒙特卡罗模拟是随机搜索,这是两者的区别。共同的缺点:如果解空间的可能性特别特别多,就不能用

求函数y= 11sinx +7cos(5x)在[-3,3]内的最大值

蒙特卡罗模拟:随机生成一万个x: [0.5245 2.2515 -1.0251 1.5441 -2.8954……]

穷举法:x每次增长一个固定的长度:[-3-2.9999 -2.9998 -2.9997……]

注意:当要求的函数中有30个自变量时,上面两种方法都不能做

(NP-Hard: TSP有38个城市时,对应的计算量是10^44次,假设我们的计算机每秒可进行10亿次计算,那么穷尽所有解的时间大于1“亿亿亿""年)﹒

启发式搜索

盲目搜索还是启发式搜索?

        按照预定的策略实行搜索.在搜索过程中获取的中间信息不用来改进策略,称为盲目搜索;反之,如果利用了中间信息来改进搜索策略则称为启发式搜索

        例如:蒙特卡罗模拟用来求解优化问题就是盲目搜索.还有大家熟悉的枚举法也是盲目搜索。

        关于“启发式”,可以简单总结为下面两点:

        1)任何有助于找到问题的最优解,但不能保证找到最优解的方法均是启发式方法;

        2)有助于加速求解过程和找到较优解的方法是启发式方法。

模拟退火算法就是启发式搜索算法(还有蚁群、遗传、粒子群等)中的一种。

(2)模拟退火算法

1、爬山法找函数的最大值

        怎么找到这个一元函数的最大值(只有一个上下界约束,即函数的定义域)?

 爬山法的缺陷:

        a.与初始值的选取有关

        b.特别容易找到局部最优解

假如我们现在站在上帝视角来看这个图,很明显我们要找的最大值在全局最大值处,但是我们可能找到的是位于局部最大值点。因为我们观察到该点左右两侧邻域的目标函数值都小于该点的目标函数值。若我们想要搜索到最大值处,就还需要往左走一段,因此爬山法实际上是一种“眼光狭隘"的搜索算法(贪心)

        我们马上要介绍的模拟退火算法就能克服这个问题。它在到达局部最大值处后,会以一定的概率接受一个比当前解要差的解(即该点处左右两侧的邻域),此时就有几率跳出局部最大值点,从而我们就有了找到蓝色点的可能性。

2、举个例子来说:求函数内的最大值

        求函数y= 11sinx +7cos(5x)在[-3,3]内的最大值

p的概率为0,对应爬山法,概率为1对应蒙特卡罗方法

还有sigmoid函数的值域也是[0,1]。

a.接受新解的概率p越大意味着在解空间中搜索的范围越大。

b.假设我们将搜索过程看作一个“工序”,那么搜索前期我们搜索的范围应该尽量的,这样能避免陷入局部最优解;搜索后期我们搜索的范围应该尽量的

c.

Ct可以看作一个和时间有关的系数,因此在搜索过程中,我们接受新解的概率p就和时间有关,搜索前期t较小,我们希望搜索的范围大,即更倾向于接受新解,那么对应的p就应该大一点,而Ct与p负相关,因此Ct,应该小一点;搜索后期我们希望p较小,那么Ct应该大一点,因此我们可以下结论:Ct关于t递增。﹒

问:如果这个优化问题有约束条件怎么办?

        答:在生成解B,就验证是否满足约束条件。

问:这个Ct怎么设置呀? 

         

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
退火算法是一种元启发式优化算法,常用于解决复杂的组合优化问题。它通过模拟固体物体退火过程中的分子热运动,来寻找问题的全局最优解或近似最优解。 在数学建模中,退火算法常用于求解旅行商问题、装箱问题、图着色问题等。下面以旅行商问题为例,简要介绍退火算法的应用步骤: 1. 定义问题:确定旅行商问题的具体形式,包括城市之间的距离、旅行商需要访问的城市数量等。 2. 初始化:随机生成一个初始解,即旅行商访问城市的顺序。可以使用贪心算法等简单方法生成一个初始解。 3. 目标函数:定义一个目标函数,用于评估当前解的质量。在旅行商问题中,可以使用总路径长度作为目标函数。 4. 邻域搜索:通过改变当前解的一个或多个元素,生成新的解。在旅行商问题中,可以通过交换两个城市的访问顺序来生成新的解。 5. 接受准则:根据目标函数值的变化情况,决定是否接受新的解。一般情况下,如果新解比当前解更优,则接受新解;如果新解比当前解差,则以一定概率接受新解,以避免陷入局部最优解。 6. 退火策略:通过不断降低退火温度来控制接受准则的严格程度。初始时温度较高,接受准则宽松,可以跳出局部最优解;随着迭代的进行,温度逐渐降低,接受准则逐渐变严格,收敛到全局最优解。 7. 终止条件:根据实际需求确定终止条件,如达到一定迭代次数、目标函数值不再改变等。 通过以上步骤的迭代,退火算法可以在有限时间内找到一个较优的解。当然,由于退火算法是一种启发式算法,无法保证找到全局最优解,但通常能找到很接近最优解的近似解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值