1 Python实现
1.1 源码实现
我在前面已经给出了模拟退火法的完整知识点和源码实现:智能优化算法—蚁群算法(Python实现)
模拟退火和蒙特卡洛实验一样,全局随机,由于没有自适应的过程(例如向最优靠近、权重梯度下降等),对于复杂函数寻优,很难会找到最优解,都是近似最优解;然而像蝙蝠算法、粒子群算法等有向最优逼近且通过最优最差调整参数的步骤,虽然对于下图函数易陷入局部最优,但是寻优精度相对较高。如果理解这段话应该就明白了为什么神经网络训练前如果初步寻优一组较好的网络参数,会使训练效果提高很多,也会更快达到误差精度。
1.2 sko.SA 实现
#=1导包======
import matplotlib.pyplot as plt
import pandas as pd
from sko.SA import SA
#2定义问题===
fun = lambda x: x[0] ** 2 + (x[1] - 0.05) ** 2 + x[2] ** 2
#=3运行模拟退火算法===
sa = SA(func=fun, x0=[1, 1, 1], T_max=1, T_min=1e-9, L=300, max_stay_counter=150)
best_x, best_y = sa.run()
print(‘best_x:’, best_x, ‘best_y’, best_y)
#=4画出结果=
plt.plot(pd.DataFrame(sa.best_y_history).cummin(axis=0))
plt.show()
#scikit-opt 还提供了三种模拟退火流派: Fast, Boltzmann, Cauchy.
#=1.1 Fast S