关于代码需要注意:
1、画图后有一个震荡点,按照FA的定义,应该是一定收敛的,因此问题可能出来代码里。
2、α在集成后,应该尽可能的小,因为在前面局部探索中,最优解已经聚集起来了。
3、考虑β的变化,看RAFA的论文,及算法实现
4、我还是觉得画图有问题,不知道是深拷贝还是从函数内部取值出错了。
关于FA的一些思考:
1、它的最优值应该来源于局部探索,也就是说,如果前期局部探索没有探索到最优值附近,那么算法就不可能找到最优值,因此前期的局部探索非常重要,我觉得我的方向应该是正确的,因此我的算法在最优解不在零点附近的问题上表现良好。
2、在前期充分探索后,后期的alpha值应该更小,甚至我觉得可以考虑做一个全局alpha函数以此来更新alpha,使得局部探索可以顺滑的过度到全局探索。
# Python 折线图
def plot3(X, Y1, Y2, Y3, legend1, legend2, legend3):
Y1 = np.log(Y1)
Y2 = np.log(Y2)
Y3 = np.log(Y3)
X = np.array(range(int(X / 100) + 1))
plt.plot(X,Y1,marker='o',ls='-',mec='r',mfc='w',label=legend1)
plt.plot(X,Y2,marker='*',ls='-',ms=10,label=legend2)
plt.plot(X,Y3,marker='^',ls='-',mec='b',label=legend3)
plt.legend()
plt.xlabel('FEs/1000')
plt.ylabel('Best Fitness Value(log)')
plt.show()