NSGA2算法求解双目标优化问题

 

import geatpy as ea
import numpy as np

class MyProblem(ea.Problem):  # 继承Problem父类
    def __init__(self):
        name = 'NSGA2算法'  # 初始化name(函数名称,可以随意设置)
        M = 2  # 优化目标个数(两个x)
        maxormins = [1] * M  # 初始化maxormins(目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标)
        Dim = 1  # 初始化Dim(决策变量维数)
        varTypes = [0]  # 初始化varTypes(决策变量的类型,0:实数;1:整数)
        lb = [-10]  # 决策变量下界(自定义个上下界搜索)
        ub = [10]  # 决策变量上界
        lbin = [1]  # 决策变量下边界(0表示不包含该变量的下边界,1表示包含)
        ubin = [1]  # 决策变量上边界(0表示不包含该变量的上边界,1表示包含)
        # 调用父类构造方法完成实例化
        ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin)

    def evalVars(self, Vars):  # 目标函数
        f1 = Vars ** 2 # 第一个目标函数
        f2 = (Vars - 2) ** 2 # 第二个目标函数
        ObjV = np.hstack([f1, f2])  # 计算目标函数值矩阵
        CV = -Vars ** 2 + 2.5 * Vars - 1.5  # 构建违反约束程度矩阵(需要转换为小于,反转一下)
        return ObjV, CV

# 实例化问题对象
problem = MyProblem()
# 构建算法
algorithm = ea.moea_NSGA2_templet(problem,
                                  # RI编码,种群个体50
                                    ea.Population(Encoding='RI', NIND=50),
                                    MAXGEN=200,  # 最大进化代数
                                    logTras=1)  # 表示每隔多少代记录一次日志信息,0表示不记录。
# 求解
res = ea.optimize(algorithm, seed=1, verbose=False, drawing=1, outputMsg=True, drawLog=False, saveFlag=False, dirName='result')

 

 运行结果:

Execution time: 0.12531709671020508 s
Evaluation number: 10000
The number of non-dominated solutions is: 50
hv: 0.83020
spacing: 0.03503
  • Execution time: 0.12531709671020508 s:代码的执行时间为0.125秒,表示运行该段代码所花费的时间。
  • Evaluation number: 10000:评估次数为10000次,表示优化算法在优化过程中对问题进行了10000次的评估。
  • The number of non-dominated solutions is: 50:非支配解的数量为50,表示在优化过程中找到了50个非支配解。非支配解是指在多目标优化中,没有其他解能够同时优于它们的解。
  • hv: 0.83020:hv值为0.83020,可能是指用于衡量多目标优化算法性能的指标之一,即超体积指标(hypervolume indicator)。较高的hv值表示算法找到的解更好。
  • spacing: 0.03503:spacing值为0.03503,可能是另一个用于衡量多目标优化算法性能的指标,即分布度指标(spacing indicator)。较高的spacing值表示算法找到的解更均匀分布。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值