模拟退火算法例子


求解某一个方程fun(x)的极小值,很常见的以一种情况是当前的x不管增大还是减小,函数值fun(x)均是增大,这时x就是极值。这是一种完完全全的贪心算法。这样求出的极小值,并不一定整段函数的全局极小值,而极可能是局部极小值。

例如下图


 

可以看出,有三个点,均是极小值点,在这是三个点处,不管增大变量,或是减小变量,目标函数的值都会增大。而只有最左边的那个点,才是全局最优解。

从数学模型上来看,是一种全局极小值求解问题,扩展到物理意义上,举几个例子:

我们什么PID参数,才是最优秀的呢?我们什么PID参数,才能让控制达到快准狠?自己一个一个的去套吗,累死。当然也可以用计算机一个一个去套,但是这样仍然非常花时间。利用模拟退火算法,就可以很好的求出最优PID参数。

再比如我们的聚类算法,什么样的码本设计,才能使得矢量量化的误差减为最小,这仍然是一个全局最优搜索问题。

 

求解全局最优解,有很多方法,模拟退火法只是我们其中一个,

除此之外,还有遗传算法、禁忌搜索算法、蚁群算法、粒子群算法等等。各有优缺点。

 

模拟退火算法,显著的缺点是 相较其他算法,其稳定速度较慢,优点是在参数合适的情况下基本上可以100%得到全局最优解。

求解一个一维输入一维输出函数的全局最小解。这个思想也可以扩展到求解任意函数,输出point时,的输入应该为多少。

例如:已知函数F(x),我们想求输出3时的输入x为多少。我们可以将目标函数变换为

M(x) = (F(x)-3).^2 (平方或是求绝对值)

这样就转换为求解M(x)全局最小值0的问题。即当x满足F(x)=3 时,M(x)才能满足全局最小值。

 

我的vc代码里面是求解sin(x)+cos(0.3*x)这函数,x范围[-10 ,10]的全局极小值。


关于模拟退火,有一个有趣的比喻,帮助大家学习和理解:

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

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


模拟退火算法是用来求解最优化问题的算法。比如著名的TSP问题函数最大值最小值问题等等。接下来将以如下几个方面来详细介绍模拟退火算法。

   1. 模拟退火算法认识

   2. 模拟退火算法描述

   3. 费马点问题求解

   4. 最小包含球问题求解

   5. 函数最值问题求解

   6. TSP问题求解


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值