用NSGAII、NSGAIII、MOEA/D优化ZDT1模型,调用geatpy

在这里插入图片描述
NSGAII

# -*- coding: utf-8 -*-
import numpy as np
import geatpy as ea  # import geatpy

if __name__ == '__main__':
    problem = ea.benchmarks.ZDT1()  # 生成问题对象
    # 构建算法
    algorithm = ea.moea_NSGA2_templet(problem,
                                      ea.Population(Encoding='RI', NIND=100),
                                      MAXGEN=500,  # 最大进化代数。
                                      logTras=0)  # 表示每隔多少代记录一次日志信息,0表示不记录。
    # 求解
    res = ea.optimize(algorithm, verbose=False, drawing=1, outputMsg=True, drawLog=False, saveFlag=False, dirName='result')

在这里插入图片描述使用Geatpy时可以更加专注于待优化模型的建立,即在做进化算法的应用时,不用管进化算法的细节,而专注于把待优化模型写成一个自定义问题类。

NSGAIII优化ZDT1模型

# -*- coding: utf-8 -*-
import numpy as np
import geatpy as ea  # import geatpy

if __name__ == '__main__':
    problem = ea.benchmarks.DTLZ1()  # 生成问题对象
    # 构建算法
    algorithm = ea.moea_NSGA3_templet(problem,
                                      ea.Population(Encoding='RI', NIND=91),
                                      MAXGEN=500,  # 最大进化代数。种群个体数91,进化代数500。
                                      logTras=0)  # 表示每隔多少代记录一次日志信息,0表示不记录。
    # 求解
    res = ea.optimize(algorithm, verbose=False, drawing=1, outputMsg=True, drawLog=False, saveFlag=False, dirName='result')

在这里插入图片描述理论上MOEA/D会比NSGA2快,但由于python语言的限制,MOEA/D的算法设计在python上的执行效率会大打折扣。这种情况同样存在于Matlab中。如果是纯C/C++或者Java等,MOEA/D的高效率才能够真正展现出来。当然,假如在C/C++或Java中采用细粒度的并行来执行进化,那么MOEA/D的执行效率是远远比不上NSGA2的,这是因为MOEA/D的算法设计天然地不支持细粒度的并行。

# -*- coding: utf-8 -*-
import numpy as np
import geatpy as ea  # import geatpy

if __name__ == '__main__':
    problem = ea.benchmarks.ZDT1()  # 生成问题对象
    # 构建算法
    algorithm = ea.moea_MOEAD_templet(problem,
                                      ea.Population(Encoding='RI', NIND=40),
                                      MAXGEN=300,  # 最大进化代数。种群个体数40,进化代数300
                                      logTras=0)  # 表示每隔多少代记录一次日志信息,0表示不记录。
    # 求解
    res = ea.optimize(algorithm, verbose=False, drawing=1, outputMsg=True, drawLog=False, saveFlag=False, dirName='result')

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值