import geatpy as ea
import numpy as np
# 构建问题
cost = np.array([
[8, 13, 12, 3, 14],
[10, 6, 7, 3, 9],
[4, 9, 6, 5, 4],
[7, 5, 9, 12, 10]
]).flatten()
@ea.Problem.single
def evalVars(Vars): # 定义目标函数(含约束)
# f = # 计算目标函数值
x = Vars[0:20]
v1 = np.sum(x * cost)
p = Vars[20:24]
v2 = np.sum(p)
f = v1 + v2
CV = np.array([
p[0] - 220,
p[1] - 380,
p[2] - 250,
p[3] - 400,
0.8 * p[0] - 140,
0.8 * p[1] - 200,
0.8 * p[2] - 240,
0.8 * p[3] - 360,
abs(np.sum(Vars[0:5]) - p[0]),
abs(np.sum(Vars[5:10]) - p[1]),
abs(np.sum(Vars[10:15]) - p[2]),
abs(np.sum(Vars[15:20]) - p[3]),
abs(np.sum(Vars[[x for x in range(0, 20, 5)]]) - 110),
abs(np.sum(Vars[[x for x in range(1, 20, 5)]]) - 160),
abs(np.sum(Vars[[x for x in range(2, 20, 5)]]) - 80),
abs(np.sum(Vars[[x for x in range(3, 20, 5)]]) - 200),
abs(np.sum(Vars[[x for x in range(4, 20, 5)]]) - 100)
]) # 计算违反约束程度
return f, CV
# dim = 24
problem = ea.Problem(name='soea quick start demo',
M=1, # 目标维数
maxormins=[1], # 目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标
Dim=24, # 决策变量维数
varTypes=[0]*24, # 决策变量的类型列表,0:实数;1:整数
lb=[0] * 24, # 决策变量下界
ub=[200] * 24, # 决策变量上界
evalVars=evalVars,
)
# # 构建算法
algorithm = ea.soea_EGA_templet(problem,
ea.Population(Encoding='BG', NIND=100),
MAXGEN=200, # 最大进化代数
logTras=1) # 表示每隔多少代记录一次日志信息
# algorithm = ea.soea_SEGA_templet(problem,
# ea.Population(Encoding='BG', NIND=2000),
# MAXGEN=500, # 最大进化代数。
# logTras=1, # 表示每隔多少代记录一次日志信息,0表示不记录。
# trappedValue=1e-6, # 单目标优化陷入停滞的判断阈值。
# maxTrappedCount=10) # 进化停滞计数器最大上限值。
# 求解
# algorithm =ea.soea_DE_best_1_bin_templet(problem,
# ea.Population(Encoding='RI', NIND=2000),
# MAXGEN=50, # 最大进化代数。
# logTras=1, # 表示每隔多少代记录一次日志信息,0表示不记录。
# trappedValue=1e-6, # 单目标优化陷入停滞的判断阈值。
# maxTrappedCount=10)
res = ea.optimize(algorithm, seed=1, verbose=True, drawing=1, outputMsg=True, drawLog=False, saveFlag=True, dirName='result')
无法求解出答案,请问是式子出问题还是遗传出了问题?