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

用NSGAII、NSGAIII、MOEA/D优化ZDT1模型,调用geatpy_第1张图片
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')

用NSGAII、NSGAIII、MOEA/D优化ZDT1模型,调用geatpy_第2张图片使用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')

用NSGAII、NSGAIII、MOEA/D优化ZDT1模型,调用geatpy_第3张图片理论上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')

用NSGAII、NSGAIII、MOEA/D优化ZDT1模型,调用geatpy_第4张图片

你可能感兴趣的:(元启发式算法,数学建模,python,启发式算法)