原文链接:
https://arxiv.org/abs/1710.10724arxiv.org算法实现:
首先,初始化参数
,分别代表初始解,初始的搜索范围,以及更新步长,且通过原文我们知道:
在迭代求解过程中,首先完全随机地确定一个搜索方向:
然后沿着该方向及其反方向进行试探:
沿着较好的解的方向更新一定的步长:
这样一次搜索过程就完成了。然后更新下一次迭代使用的搜索范围和步长:
算法流程:
天牛须算法设计思想分析:
首先给出关于下降方向的定义和定理[1]:定义1 若存在
,使得对任意的
和
有
,则称
为
在
处的一个
下降方向
定理1 设函数
在开集
上一阶连续可微,则
为
在
处的一个下降方向的充要条件是
推论1
和
至少有一个是下降方向。
证明:通过公式(1),我们随机生成了一个搜索方向
,若
是下降方向,则有
。否则有
,即
是一个下降方向。同时注意到,
的概率为0。
推论2 若
是下降方向,则存在
,使得
,有
,反之,有
成立。
证明:在
处做泰勒展开,得到
。当
充分小时,有
成立。
对比推论2和公式(4)(5),
会比
略大一点。
基于local search思想的迭代过程:
将上述两个公式统一书写,就可以得到公式(3)。
天牛须算法的创新点:
在有理论保证的 local search过程中, 要保证步长
足够小,才能收敛到局部极小点。如果允许
足够大,就有可能跳出局部极小点。天牛须算法破坏了这种步长限制,失去了理论保证,但是也因此具有了全局搜索能力。
天牛须算法可能的改进点:
- 收敛速度慢:因为下降方向是随机选取的,可以定义一个更高效的搜索的方向。
- 局部搜索能力不足:尤其是在最开始的迭代过程中,不断跳出局部极小,但是并没有对这些局部极小区域进行充分探索,会遗漏发现更好的解的可能性。
参考
- ^马昌凤 . 《最优化方法及其matlab程序设计》