启发式演算法:这类演算法算是演算法在实际应用过程中的技术性演算法,因为在实际计算过程中,很有可能第一:无确定的目标函数;第二:无法找到真实的最优解;第三:计算代价非常大,现有的计算机技术都无法解决此类问题。所以人们就找到另一种情况,使得在可接受的计算成本内去搜寻最好的解,但不一定能保证所得的可行解和最优解,甚至在多数情况下,无法阐述所得解同最优解的近似程度。 通熟点讲就是求出来的解可能不是最好的,只能说是相对较好的,但是这个相对程度就不敢保证了。虽然是这样,但是在工程应用上来说已经非常好了。
后面讲的时候可能会让你怀疑人生,这是演算法吗?不过它们在工程上来讲确实就是。第一个要讲的是模拟退火演算法,这个当年是俺对它进行了几次改造的,结合(SPSA)随机扰动演算法,来在一定程度上解决此山最优的局限(测试过几次,解决低维问题还行,还有一定的局限,就是初值的选取非常重要,必须在初值选取的时候就要接近真实值,这其实是很扯淡的,在自动历史拟合中,很多时候我们都是要进行初值的筛选的,不过这个时候初值的筛选过程就一定得有一定的依据,什么灰色关联啊什么的都出来了,反正非常大的系统知识)——扯远了。
模拟退火是什么意思呢?它不管你什么梯度啊什么步长,给定一个最低温度Tmin(这个值无限小)他只管其中一个事情,就是我们在求解的过程中,新迭代出来的函数结果与旧的函数的差值结果f(x_new)-f(x)>0时就无条件接受这个值,但是如果f(x_new)-f(x)<0,则以一定的概率(exp((f(xnew)-f(x))/k*T))来接受这个值,然后对温度T进行一次更新,这个降温方法为T= a*T (0<a<1),一般a取接近1的值。最后如果当前温度<Tmin时就退出循环了。 看根本就和什么梯度什么步长没关系。那么为什么要这样呢?我用通熟的方法给你们解释一下: