参考文献:
[1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem definitions and evaluation criteria for the CEC2017 special session and competition on single objective real-parameter numerical optimization,” Technical Report. Nanyang Technological University, Singapore.
import cec2017.functions as functions
import numpy as np
import matplotlib.pyplot as plt
from SSA import SSA
from RFO import RFO
from OOA import OOA
from PSO import PSO
from GWO import GWO
plt.rcParams['font.sans-serif']=['Microsoft YaHei']
#主程序
function_name =12 #CEC2017 测试函数 1-29
SearchAgents_no = 50#种群大小
Max_iter = 100#最大迭代次数
dim=30;#维度只能是 10/30/50/100
lb = -100*np.ones(dim)#下界
ub = 100*np.ones(dim)#上界
fobj= functions.all_functions[function_name-1]
BestX1,BestF1,curve1 = SSA(SearchAgents_no, Max_iter,lb,ub,dim,fobj)#问题求解
BestX2,BestF2,curve2 = RFO(SearchAgents_no, Max_iter,lb,ub,dim,fobj)#问题求解
BestX3,BestF3,curve3 = OOA(SearchAgents_no, Max_iter,lb,ub,dim,fobj)#问题求解
BestX4,BestF4,curve4 = PSO(SearchAgents_no, Max_iter,lb,ub,dim,fobj)#问题求解
BestX5,BestF5,curve5 = GWO(SearchAgents_no, Max_iter,lb,ub,dim,fobj)#问题求解
#画收敛曲线图
Labelstr=['SSA','RFO','OOA','PSO','GWO']
Colorstr=['r','g','b','k','c']
if BestF1>0:
plt.semilogy(curve1,color=Colorstr[0],linewidth=2,label=Labelstr[0])
plt.semilogy(curve2,color=Colorstr[1],linewidth=2,label=Labelstr[1])
plt.semilogy(curve3,color=Colorstr[2],linewidth=2,label=Labelstr[2])
plt.semilogy(curve4,color=Colorstr[3],linewidth=2,label=Labelstr[3])
plt.semilogy(curve5,color=Colorstr[4],linewidth=2,label=Labelstr[4])
else:
plt.plot(curve1,color=Colorstr[0],linewidth=2,label=Labelstr[0])
plt.plot(curve2,color=Colorstr[1],linewidth=2,label=Labelstr[1])
plt.plot(curve3,color=Colorstr[2],linewidth=2,label=Labelstr[2])
plt.plot(curve4,color=Colorstr[3],linewidth=2,label=Labelstr[3])
plt.plot(curve5,color=Colorstr[4],linewidth=2,label=Labelstr[4])
plt.xlabel("Iteration")
plt.ylabel("Fitness")
plt.xlim(0,Max_iter)
plt.title("CEC2017-F"+str(function_name))
plt.legend()
plt.savefig(str(function_name)+'.png')
plt.show()
#