简言
机器学习的项目,不可避免的需要补充一些优化算法,对于优化算法,爬山算法还是比较重要的.鉴于此,花了些时间仔细阅读了些爬山算法的paper.基于这些,做一些总结.
目录
1. 爬山算法简单描述
2. 爬山算法的主要算法
2.1 首选爬山算法
2.2 最陡爬山算法
2.3 随机重新开始爬山算法
2.4 模拟退火算法(也是爬山算法)
3. 实例求解
正文
爬山算法,是一种局部贪心的最优算法. 该算法的主要思想是:每次拿相邻点与当前点进行比对,取两者中较优者,作为爬坡的下一步.
举一个例子,求解下面表达式
的最大值. 且假设 x,y均按为0.1间隔递增.
为了更好的描述,我们先使用pyhton画出该函数的图像:
图像的python代码:
1 # encoding:utf8 2 from matplotlib import pyplot as plt 3 import numpy as np 4 from mpl_toolkits.mplot3d import Axes3D 5 6 7 def func(X, Y, x_move=0, y_move=0): 8 def mul(X, Y, alis=1): 9 return alis * np.exp(-(X * X + Y * Y)) 10 11 return mul(X, Y) + mul(X - x_move, Y - y_move, 2) 12 13 14 def show(X, Y): 15 fig = plt.figure() 16 ax = Axes3D(fig) 17 X, Y = np.meshgrid(X, Y) 18 Z = func(X, Y, 1.7, 1.7) 19 plt.title("demo_hill_climbing") 20 ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow', ) 21 ax.set_xlabel('x label', color='r') 22 ax.set_ylabel('y label', color='g') 23 ax.set_zlabel('z label', color='b') 24 # 具体函数方法可用 help(function) 查看,如:help(ax.plot_surface) 25 # ax.scatter(X,Y,Z,c='r') #绘点 26 plt.show() 27 28 if __name__ == '__main__': 29 X = np.arange(-2, 4, 0.1) 30 Y = np.arange(-2, 4, 0.1) 31 32 show(X,Y)