问题
min f ( x ) = ∑ i = 1 3 [ 100 ( x i + 1 − x i 2 ) 2 + ( x i − 1 ) 2 ] x i ∈ [ − 30 , 30 ] ( i = 1 , 2 , 3 , 4 ) \begin{aligned} \min f(\boldsymbol{x}) &=\sum_{i=1}^{3}\left[100\left(x_{i+1}-x_{i}^{2}\right)^{2}+\left(x_{i}-1\right)^{2}\right] \\ x_{i} & \in[-30,30](i=1,2,3,4) \end{aligned} minf(x)xi=i=1∑3[100(xi+1−xi2)2+(xi−1)2]∈[−30,30](i=1,2,3,4)
代码
import numpy as np
import geatpy as ea
class MyProblem(ea.Problem): # 继承Problem父类
def __init__(self):
name = 'MyProblem' # 初始化name(函数名称,可以随意设置)
M = 1 # 初始化M(目标维数)
maxormins = [1] # 初始化maxormins(目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标)
Dim = 4 # 初始化Dim(决策变量维数)
varTypes = [0] * Dim # 初始化varTypes(决策变量的类型,元素为0表示对应的变量是连续的;1表示是离散的)
lb = [-30,-30,-30,-30] # 决策变量下界
ub = [30,30,30,30] # 决策变量上界
lbin = [1, 1, 1,1] # 决策变量下边界(0表示不包含该变量的下边界,1表示包含)
ubin = [1, 1, 1,1] # 决策变量上边界(0表示不包含该变量的上边界,1表示包含)
# 调用父类构造方法完成实例化
ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin)
def aimFunc(self, pop): # 目标函数
Vars = pop.Phen # 得到决策变量矩阵
x1 = Vars[:, [0]]
x2 = Vars[:, [1]]
x3 = Vars[:, [2]]
x4 = Vars[:, [3]]
pop.ObjV = 100*(x2 - x1**2)**2 + (x1-1)**2 + 100*(x3 - x2**2)**2 + (x2-1)**2 +100*(x4 - x3**2)**2 + (x3-1)**2 # 计算目标函数值,赋值给pop种群对象的ObjV属性
# 采用可行性法则处理约束
pop.CV = np.hstack([x1+x2-60])
def calReferObjV(self): # 设定目标数参考值(本问题目标函数参考值设定为理论最优值)
referenceObjV = np.array([[1.0]])
return referenceObjV
# -*- coding: utf-8 -*-
import geatpy as ea # import geatpy
if __name__ == '__main__':
"""================================实例化问题对象==========================="""
problem = MyProblem() # 生成问题对象
"""==================================种群设置=============================="""
Encoding = 'RI' # 编码方式
NIND = 500 # 种群规模
Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges, problem.borders) # 创建区域描述器
population = ea.Population(Encoding, Field, NIND) # 实例化种群对象(此时种群还没被初始化,仅仅是完成种群对象的实例化)
"""================================算法参数设置============================="""
myAlgorithm = ea.soea_DE_rand_1_bin_templet(problem, population) # 实例化一个算法模板对象
myAlgorithm.MAXGEN = 100 # 最大进化代数
myAlgorithm.mutOper.F = 0.5 # 差分进化中的参数F
myAlgorithm.recOper.XOVR = 0.7 # 重组概率
myAlgorithm.logTras = 1 # 设置每隔多少代记录日志,若设置成0则表示不记录日志
myAlgorithm.verbose = True # 设置是否打印输出日志信息
myAlgorithm.drawing = 1 # 设置绘图方式(0:不绘图;1:绘制结果图;2:绘制目标空间过程动画;3:绘制决策空间过程动画)
"""===========================调用算法模板进行种群进化========================"""
[BestIndi, population] = myAlgorithm.run() # 执行算法模板,得到最优个体以及最后一代种群
BestIndi.save() # 把最优个体的信息保存到文件中
"""==================================输出结果=============================="""
print('评价次数:%s' % myAlgorithm.evalsNum)
print('时间已过 %s 秒' % myAlgorithm.passTime)
if BestIndi.sizes != 0:
print('最优的目标函数值为:%s' % BestIndi.ObjV[0][0])
print('最优的控制变量值为:')
for i in range(BestIndi.Phen.shape[1]):
print(BestIndi.Phen[0, i])
else:
print('没找到可行解。')
结果:
==================================================================================
gen| eval | f_opt | f_max | f_avg | f_min | f_std
----------------------------------------------------------------------------------
0 | 500 | 7.60983E+04 | 2.08416E+08 | 5.02434E+07 | 7.60983E+04 | 3.78372E+07
1 | 1000 | 6.27585E+04 | 1.46151E+08 | 3.55378E+07 | 6.27585E+04 | 3.11596E+07
2 | 1500 | 5.98217E+04 | 1.34662E+08 | 2.35780E+07 | 5.98217E+04 | 2.45688E+07
3 | 2000 | 1.72877E+04 | 1.34662E+08 | 1.60471E+07 | 1.72877E+04 | 2.08877E+07
4 | 2500 | 1.72360E+04 | 8.39297E+07 | 9.52609E+06 | 1.72360E+04 | 1.41160E+07
5 | 3000 | 1.37218E+03 | 8.16378E+07 | 5.73651E+06 | 1.37218E+03 | 1.00634E+07
6 | 3500 | 1.37218E+03 | 6.37475E+07 | 3.35658E+06 | 1.37218E+03 | 6.54894E+06
7 | 4000 | 1.23750E+03 | 5.53160E+07 | 1.93253E+06 | 1.23750E+03 | 3.96266E+06
8 | 4500 | 8.48969E+02 | 5.53160E+07 | 1.16972E+06 | 8.48969E+02 | 3.05484E+06
9 | 5000 | 5.49628E+02 | 1.62358E+07 | 5.86786E+05 | 5.49628E+02 | 1.23222E+06
10| 5500 | 5.49628E+02 | 5.79990E+06 | 3.19483E+05 | 5.49628E+02 | 6.03276E+05
11| 6000 | 5.49628E+02 | 5.69605E+06 | 1.93987E+05 | 5.49628E+02 | 4.57425E+05
12| 6500 | 1.05012E+02 | 5.69605E+06 | 1.17599E+05 | 1.05012E+02 | 3.08614E+05
13| 7000 | 1.05012E+02 | 5.69605E+06 | 7.30044E+04 | 1.05012E+02 | 2.64903E+05
14| 7500 | 1.05012E+02 | 4.70616E+05 | 4.06282E+04 | 1.05012E+02 | 5.46444E+04
15| 8000 | 1.05012E+02 | 1.91127E+05 | 2.60289E+04 | 1.05012E+02 | 3.12832E+04
16| 8500 | 1.05012E+02 | 1.74716E+05 | 1.78489E+04 | 1.05012E+02 | 2.04907E+04
17| 9000 | 1.05012E+02 | 1.41691E+05 | 1.29377E+04 | 1.05012E+02 | 1.53149E+04
18| 9500 | 1.05012E+02 | 7.25123E+04 | 9.51107E+03 | 1.05012E+02 | 9.98046E+03
19| 10000 | 8.44174E+01 | 4.85415E+04 | 7.54226E+03 | 8.44174E+01 | 8.04770E+03
20| 10500 | 3.14184E+01 | 4.49668E+04 | 5.72935E+03 | 3.14184E+01 | 6.47332E+03
21| 11000 | 3.14184E+01 | 4.36543E+04 | 4.55764E+03 | 3.14184E+01 | 5.02132E+03
22| 11500 | 3.14184E+01 | 4.36543E+04 | 3.63509E+03 | 3.14184E+01 | 4.11956E+03
23| 12000 | 3.14184E+01 | 2.92787E+04 | 2.91668E+03 | 3.14184E+01 | 3.20225E+03
24| 12500 | 3.14184E+01 | 2.92787E+04 | 2.42141E+03 | 3.14184E+01 | 2.90043E+03
25| 13000 | 3.14184E+01 | 2.45657E+04 | 2.00749E+03 | 3.14184E+01 | 2.37037E+03
26| 13500 | 3.14184E+01 | 1.67634E+04 | 1.63125E+03 | 3.14184E+01 | 1.80963E+03
27| 14000 | 3.14184E+01 | 1.52624E+04 | 1.40593E+03 | 3.14184E+01 | 1.50561E+03
28| 14500 | 3.02390E+01 | 1.52624E+04 | 1.18083E+03 | 3.02390E+01 | 1.34648E+03
29| 15000 | 3.02390E+01 | 6.93621E+03 | 9.64611E+02 | 3.02390E+01 | 9.86935E+02
30| 15500 | 3.02390E+01 | 4.85608E+03 | 7.83321E+02 | 3.02390E+01 | 7.83494E+02
31| 16000 | 3.02390E+01 | 3.95100E+03 | 6.40152E+02 | 3.02390E+01 | 6.09335E+02
32| 16500 | 1.26855E+01 | 3.68549E+03 | 5.39326E+02 | 1.26855E+01 | 5.25656E+02
33| 17000 | 1.26855E+01 | 2.78984E+03 | 4.64218E+02 | 1.26855E+01 | 4.28700E+02
34| 17500 | 1.25932E+01 | 2.50061E+03 | 3.92770E+02 | 1.25932E+01 | 3.49477E+02
35| 18000 | 8.65665E+00 | 2.04772E+03 | 3.31523E+02 | 8.65665E+00 | 2.87763E+02
36| 18500 | 8.65665E+00 | 2.04772E+03 | 2.97427E+02 | 8.65665E+00 | 2.62901E+02
37| 19000 | 8.65665E+00 | 2.04772E+03 | 2.65190E+02 | 8.65665E+00 | 2.43049E+02
38| 19500 | 8.65665E+00 | 1.76104E+03 | 2.32062E+02 | 8.65665E+00 | 2.12161E+02
39| 20000 | 4.99260E+00 | 1.55288E+03 | 2.02189E+02 | 4.99260E+00 | 1.84736E+02
40| 20500 | 4.99260E+00 | 1.55288E+03 | 1.77218E+02 | 4.99260E+00 | 1.66677E+02
41| 21000 | 4.99260E+00 | 1.02974E+03 | 1.50476E+02 | 4.99260E+00 | 1.34059E+02
42| 21500 | 4.99260E+00 | 1.02974E+03 | 1.30628E+02 | 4.99260E+00 | 1.15423E+02
43| 22000 | 4.99260E+00 | 6.43255E+02 | 1.11699E+02 | 4.99260E+00 | 9.68409E+01
44| 22500 | 4.99260E+00 | 5.67770E+02 | 9.85329E+01 | 4.99260E+00 | 8.01510E+01
45| 23000 | 4.99260E+00 | 4.46046E+02 | 8.82093E+01 | 4.99260E+00 | 7.07120E+01
46| 23500 | 1.96780E+00 | 4.46046E+02 | 7.64022E+01 | 1.96780E+00 | 6.34643E+01
47| 24000 | 1.96780E+00 | 4.46046E+02 | 6.75885E+01 | 1.96780E+00 | 5.59470E+01
48| 24500 | 1.96780E+00 | 3.25028E+02 | 6.02226E+01 | 1.96780E+00 | 4.79094E+01
49| 25000 | 1.96780E+00 | 3.25028E+02 | 5.36401E+01 | 1.96780E+00 | 4.44684E+01
50| 25500 | 1.96780E+00 | 3.25028E+02 | 4.78151E+01 | 1.96780E+00 | 4.17770E+01
51| 26000 | 1.96780E+00 | 3.15157E+02 | 4.28019E+01 | 1.96780E+00 | 3.65768E+01
52| 26500 | 1.96780E+00 | 3.15157E+02 | 3.78421E+01 | 1.96780E+00 | 3.31344E+01
53| 27000 | 1.96780E+00 | 2.47163E+02 | 3.28382E+01 | 1.96780E+00 | 2.77352E+01
54| 27500 | 1.96780E+00 | 2.47163E+02 | 2.96719E+01 | 1.96780E+00 | 2.64174E+01
55| 28000 | 1.96780E+00 | 2.47163E+02 | 2.65647E+01 | 1.96780E+00 | 2.50419E+01
56| 28500 | 1.00427E+00 | 2.14538E+02 | 2.27778E+01 | 1.00427E+00 | 2.09411E+01
57| 29000 | 1.00427E+00 | 1.84221E+02 | 2.03459E+01 | 1.00427E+00 | 1.77457E+01
58| 29500 | 7.89741E-01 | 1.84221E+02 | 1.83466E+01 | 7.89741E-01 | 1.67299E+01
59| 30000 | 7.89741E-01 | 1.84221E+02 | 1.63341E+01 | 7.89741E-01 | 1.48790E+01
60| 30500 | 7.89741E-01 | 1.33748E+02 | 1.46536E+01 | 7.89741E-01 | 1.27775E+01
61| 31000 | 7.89741E-01 | 1.33748E+02 | 1.31775E+01 | 7.89741E-01 | 1.06334E+01
62| 31500 | 7.89741E-01 | 9.72052E+01 | 1.19852E+01 | 7.89741E-01 | 8.63751E+00
63| 32000 | 7.89741E-01 | 9.72052E+01 | 1.09596E+01 | 7.89741E-01 | 8.09922E+00
64| 32500 | 7.89741E-01 | 5.07552E+01 | 9.93764E+00 | 7.89741E-01 | 6.49043E+00
65| 33000 | 7.89741E-01 | 3.51229E+01 | 9.05732E+00 | 7.89741E-01 | 5.55562E+00
66| 33500 | 7.89741E-01 | 3.51229E+01 | 8.37495E+00 | 7.89741E-01 | 4.99149E+00
67| 34000 | 7.89741E-01 | 2.61061E+01 | 7.56733E+00 | 7.89741E-01 | 4.20502E+00
68| 34500 | 7.89741E-01 | 2.61061E+01 | 7.06807E+00 | 7.89741E-01 | 4.02866E+00
69| 35000 | 7.89741E-01 | 2.61061E+01 | 6.58770E+00 | 7.89741E-01 | 3.69884E+00
70| 35500 | 7.89741E-01 | 2.10137E+01 | 6.12165E+00 | 7.89741E-01 | 3.33301E+00
71| 36000 | 6.21380E-01 | 1.98683E+01 | 5.66375E+00 | 6.21380E-01 | 3.08554E+00
72| 36500 | 6.21380E-01 | 1.98683E+01 | 5.29578E+00 | 6.21380E-01 | 2.88378E+00
73| 37000 | 6.21380E-01 | 1.98683E+01 | 4.94767E+00 | 6.21380E-01 | 2.67886E+00
74| 37500 | 6.21380E-01 | 1.98683E+01 | 4.61613E+00 | 6.21380E-01 | 2.42734E+00
75| 38000 | 6.21380E-01 | 1.51306E+01 | 4.25841E+00 | 6.21380E-01 | 2.00879E+00
76| 38500 | 6.21380E-01 | 1.25633E+01 | 3.98533E+00 | 6.21380E-01 | 1.84966E+00
77| 39000 | 6.21380E-01 | 1.25633E+01 | 3.74634E+00 | 6.21380E-01 | 1.74127E+00
78| 39500 | 5.34417E-01 | 1.13342E+01 | 3.53048E+00 | 5.34417E-01 | 1.63506E+00
79| 40000 | 5.34417E-01 | 1.10031E+01 | 3.31230E+00 | 5.34417E-01 | 1.53144E+00
80| 40500 | 5.34417E-01 | 1.10031E+01 | 3.10111E+00 | 5.34417E-01 | 1.41653E+00
81| 41000 | 5.34417E-01 | 1.10031E+01 | 2.90415E+00 | 5.34417E-01 | 1.29561E+00
82| 41500 | 5.34417E-01 | 1.10031E+01 | 2.77470E+00 | 5.34417E-01 | 1.25308E+00
83| 42000 | 4.50972E-01 | 1.10031E+01 | 2.60398E+00 | 4.50972E-01 | 1.20297E+00
84| 42500 | 4.50972E-01 | 1.10031E+01 | 2.45032E+00 | 4.50972E-01 | 1.10553E+00
85| 43000 | 4.50972E-01 | 1.10031E+01 | 2.31973E+00 | 4.50972E-01 | 1.05727E+00
86| 43500 | 4.50972E-01 | 1.10031E+01 | 2.18454E+00 | 4.50972E-01 | 1.00713E+00
87| 44000 | 4.50972E-01 | 1.10031E+01 | 2.00888E+00 | 4.50972E-01 | 9.01053E-01
88| 44500 | 4.03216E-01 | 1.10031E+01 | 1.86914E+00 | 4.03216E-01 | 8.51836E-01
89| 45000 | 4.03216E-01 | 1.10031E+01 | 1.73095E+00 | 4.03216E-01 | 7.59496E-01
90| 45500 | 2.80379E-01 | 1.10031E+01 | 1.63270E+00 | 2.80379E-01 | 7.43019E-01
91| 46000 | 2.80379E-01 | 3.22712E+00 | 1.53271E+00 | 2.80379E-01 | 5.73684E-01
92| 46500 | 2.80379E-01 | 3.10927E+00 | 1.45584E+00 | 2.80379E-01 | 5.61403E-01
93| 47000 | 2.80379E-01 | 3.10927E+00 | 1.36116E+00 | 2.80379E-01 | 5.45008E-01
94| 47500 | 2.80379E-01 | 3.10927E+00 | 1.27128E+00 | 2.80379E-01 | 5.13092E-01
95| 48000 | 2.80379E-01 | 3.10927E+00 | 1.18005E+00 | 2.80379E-01 | 4.58437E-01
96| 48500 | 2.69168E-01 | 2.73774E+00 | 1.11752E+00 | 2.69168E-01 | 4.27553E-01
97| 49000 | 2.69168E-01 | 2.73774E+00 | 1.05116E+00 | 2.69168E-01 | 4.01551E-01
98| 49500 | 2.16281E-01 | 2.52055E+00 | 9.63042E-01 | 2.16281E-01 | 3.62918E-01
99| 50000 | 2.16281E-01 | 2.52055E+00 | 8.99793E-01 | 2.16281E-01 | 3.48604E-01
种群信息导出完毕。
评价次数:50000
时间已过 0.1790473461151123 秒
最优的目标函数值为:0.21628085001204858
最优的控制变量值为:
0.9068665991676745
0.8254514881910531
0.683358839639309
0.439491878595913