增强精英保留策略的遗传算法SEGA

 

import geatpy as ea
import numpy as np

# 构建问题
r = 1  # 目标函数需要用到的额外数据
@ea.Problem.single
def evalVars(Vars):  # 定义目标函数(含约束)
    f = np.sum((Vars - r) ** 2)  # 计算目标函数值
    x1 = Vars[0]
    x2 = Vars[1]
    CV = np.array([(x1 - 0.5)**2 - 0.25,
                    (x2 - 1)**2 - 1])  # 约束
    return f, CV

problem = ea.Problem(name='增强精英保留策略的遗传算法',
                        M=1,  # 目标维数
                        maxormins=[1],  # 目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标
                        Dim=5,  # 决策变量维数(个数为5)
                        varTypes=[0, 0, 1, 1, 1],  # 决策变量的类型列表,0:实数;1:整数。0表示对应的决策变量是连续型变量;为1表示对应的是离散型变量。
                        lb=[-1, 1, 2, 1, 0],  # 决策变量下界
                        ub=[1, 4, 5, 2, 1],  # 决策变量上界
                        evalVars=evalVars)
# 构建算法
algorithm = ea.soea_SEGA_templet(problem,
                                 # Encoding='RI实整数编,NIND=20设定了种群有20个个体。
                                    ea.Population(Encoding='RI', NIND=20),
                                    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')
  •  上述代码中 Encoding=‘RI’ 表示改种群的染色体是’RI’编码,即“实数整数混合编码”,简称“实整数编码”。类似的还有’P’编码(排列编码,可以让对应的变量互不相同)、'BG’编码(二进制/格雷码编码)。

这段代码使用了Geatpy库来构建一个遗传算法,并应用于一个特定的优化问题。下面是代码的解释:

首先,使用Geatpy库中的@ea.Problem.single装饰器定义了一个目标函数evalVars,该函数接受一个决策变量向量作为输入,并计算目标函数值和约束条件的值。在这个例子中,目标函数是将决策变量与参数r进行计算,并将结果的平方和作为目标函数值。同时,还定义了两个约束条件CV,用于限制决策变量的取值范围。

然后,通过ea.Problem类创建了一个问题实例problem,其中指定了问题的名称、目标维数、最小最大化标记、决策变量维数、决策变量类型、决策变量的上下界以及目标函数的计算方式。

接下来,使用ea.soea_SEGA_templet函数构建了一个增强精英保留策略的遗传算法实例algorithm。该算法采用了RI编码方式(实整数编码),种群规模为20个个体。设定了最大进化代数为50,表示算法将进行50代的进化。同时,还设置了日志记录的频率为每隔一代记录一次日志信息。通过设置trappedValuemaxTrappedCount参数,指定了单目标优化陷入停滞的判断阈值和进化停滞计数器的最大上限值。

最后,通过调用ea.optimize函数,使用前面构建的算法实例对问题进行求解。seed=1设置了随机种子,verbose=TrueoutputMsg=True表示开启详细的输出信息和输出消息。drawing=1表示开启绘图功能,drawLog=False表示不保存绘图日志。saveFlag=True表示保存结果,结果将保存在名为'result'的目录中。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值