在前面几篇文章中,我们已经介绍了高性能Python遗传和进化算法框架——Geatpy的使用及一些案例。

https://blog.csdn.net/qq_33353186/article/details/82014986

https://blog.csdn.net/qq_33353186/article/details/82020507

https://blog.csdn.net/qq_33353186/article/details/82047692

详细的Geatpy官方教程文档在官网可以查看:

http://geatpy.com/index.php/geatpy%E6%95%99%E7%A8%8B/

本篇就一个多目标优化实例进行展开讲述,并且与使用Matlab工具箱进行对比:

回顾一下更新方法:

pip install --upgrade --user geatpy

下面对一个两个目标的最小化问题进行求解:

先用Geatpy尝试求解,先定义问题类MyProblem,然后编写执行代码直接套用内置的moea_nsga2_templet进化算法模板对问题进行求解:

# -*- coding: utf-8 -*-

import numpy as np

import geatpy as ea

"""

问题类定义

"""

class MyProblem(ea.Problem): # 继承Problem父类

def __init__(self):

name = 'MyProblem' # 初始化name(函数名称,可以随意设置)

# 定义需要匹配的句子

M = 2 # 初始化M(目标维数)

maxormins = [1] * M # 初始化maxormins(目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标)

Dim = 2 # 初始化Dim(决策变量维数)

varTypes = [0] * Dim # 初始化varTypes(决策变量的类型,元素为0表示对应的变量是连续的;1表示是离散的)

lb = [-5] * Dim # 决策变量下界

ub = [5] * Dim # 决策变量上界

lbin = [1] * Dim # 决策变量下边界

ubin = [1] * Dim # 决策变量上边界

# 调用父类构造方法完成实例化

ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin)

def aimFunc(self, pop): # 目标函数

x1 = pop.Phen[:, [0]]

x2 = pop.Phen[:, [1]]

pop.ObjV = np.zeros((pop.Phen.shape[0], self.M))

pop.ObjV[:,[0]] = x1**4-10*x1**2+x1*x2+x2**4-x1**2*x2**2

pop.ObjV[:,[1]] = x2**4-x1**2*x2**2+x1**4+x1*x2

"""

执行脚本

"""

if __name__ == "__main__":

"""================================实例化问题对象============================="""

problem = MyProblem() # 生成问题对象

"""==================================种群设置================================"""

Encoding = 'RI' # 编码方式

NIND = 1000 # 种群规模

Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges, problem.borders) # 创建区域描述器

population = ea.Population(Encoding, Field, NIND) # 实例化种群对象(此时种群还没被初始化,仅仅是完成种群对象的实例化)

"""=================================算法参数设置=============================="""

myAlgorithm = ea.moea_NSGA2_templet(problem, population) # 实例化一个算法模板对象

myAlgorithm.MAXGEN = 100 # 最大进化代数

"""============================调用算法模板进行种群进化========================="""

NDSet = myAlgorithm.run() # 执行算法模板,得到帕累托最优解集NDSet

NDSet.save() # 把结果保存到文件中

# 输出

print('用时:%s 秒'%(myAlgorithm.passTime))

print('非支配个体数:%s 个'%(NDSet.sizes))

print('单位时间找到帕累托前沿点个数:%s 个'%(int(NDSet.sizes // myAlgorithm.passTime)))

执行结果如下:

其中moea_nsga2_templet的算法模板源代码可以参见:

https://github.com/geatpy-dev/geatpy/blob/master/geatpy/templates/moeas/nsga2/moea_NSGA2_templet.py

代码有详细注释,可以清晰看到多目标优化NSGAII算法的详细流程。

下面将用Matlab的遗传算法工具箱进行对比实验:

clc,clear

% 定义目标函数

fun1 = @(x) x(1)^4-10*x(1)^2+x(1)*x(2)+x(2)^4-x(1)^2*x(2)^2; %min f1(x1,x2)

fun2 = @(x) x(2)^4-x(1)^2*x(2)^2+x(1)^4+x(1)*x(2); %min f2(x1,x2)

aimfuc = @(x) [fun1(x) fun2(x)]; %获取目标函数句柄

nvars=2; %变量个数

lb=[-5,-5]; %下限

ub=[5,5]; %上限

A=[];b=[]; %线性不等式约束

Aeq=[];beq=[];%线性等式约束

tic %开始计时

options=gaoptimset('paretoFraction',1,'populationsize',1000,'generations',100,'stallGenLimit',1,'TolFun',1e-100);

[x,fval] = gamultiobj(aimfuc,nvars,A,b,Aeq,beq,lb,ub,options);

time = toc %结束计时

plot(fval(:,1),fval(:,2),'k.') %绘图

fprintf('找到的前沿点数: %d\n', size(fval,1));

fprintf('平均每秒找到的前沿点数: %f\n', size(fval,1)/time);

执行结果如下:

对比发现Geatpy的效率比Matlab高出了一个数量级。尝试增大所需要搜索的帕累托前沿点的数量,Matlab变慢了一个数量级,而Geatpy的耗时基本稳定。如果把上面的1000个个体改为1万,则Python耗时13.3秒,Matlab耗时55.25秒:

除了NSGA-II算法外,Geatpy还支持适应性权法重法(awGA)、随机权重法(rwGA)、NSGA-III、RVEA等。除了多目标优化,Geatpy还支持单目标优化、差分进化、组合优化、复杂约束优化、混合编码优化等。相应的算法均整合在算法模板内,源代码参见:

https://github.com/geatpy-dev/geatpy/tree/master/geatpy/templates

欢迎继续跟进,感谢!

遗传算法多目标优化 python_Python遗传算法框架使用实例(二)多目标优化问题Geatpy for Python与Matlab的对比学习...相关推荐

  1. H5游戏框架phaser实例二(附上传到服务器的教程)

    由于最近有事,先贴出来游戏地址,之后会补发教程:http://139.9.200.70:8080/myGame/index.html(由于域名还在备案过程中,现在只能通过ip访问) 先贴出源码: &l ...

  2. 【三维目标检测】Complex-Yolov4详解(二):模型结构

    Complex-Yolo网络模型的核心思想是用鸟瞰图BEV替换Yolo网络输入的RGB图像.因此,在完成BEV处理之后,模型的训练和推理过程基本和Yolo完全一致.Yolov4中输入的RGB图片的尺寸 ...

  3. AR学习笔记(七):阈值二值化优化与颜色分割的优化

    AR学习笔记(七):阈值二值化优化与颜色分割的优化 阈值二值化的优化 当前方案 图像预处理 阈值二值化 优化方案 otsu法 顶帽变换 分块阈值法 颜色分割的优化 当前方案 优化方案 HSV模型分割 ...

  4. 多目标优化-Pareto遗传算法

    多目标优化的应用背景 工程实际中的许多优化问题是多目标的优化设计问题.通常情况下多个目标是处于冲突状态的,不存在一个最优设计使所有的目标同时达到最优,一个目标性能的改善,往往以其它一个或多个目标性能的 ...

  5. 求解多目标旅行商问题的遗传算法参数研究(2017的ieee)

    摘要 本文的目的是利用遗传算法(GA)解决多目标优化问题.通常,多目标问题的目标(最小化成本.最大化性能.减少碳排放.最大化利润)相互冲突,阻碍了每个目标的并行优化.将旅行商问题的双目标传统组合优化称 ...

  6. python遗传算法有多慢_python遗传算法的优化过程是什么?

    对于题目中的算法,相信大家最喜欢,或者最常见的就是在优化领域吧,小编就看到很多大神,利用python的算法去做一些项目的优化,而大家在足够了解这个算法以后,也需要去完成这个算法的优化,这样才是真正可以 ...

  7. matlab遗传算法配送路径,基于Matlab物流配送路径优化问题遗传算法的实现

    维普资讯 http://doc.docsou.com 第2 9卷总第 1 1 3期 物流商坛 物流配送路径优化问题遗传算法的实现 The Re lz to f Ge tc Al o ih o a ia ...

  8. 数学建模——智能优化之遗传算法详解Python代码

    数学建模--智能优化之遗传算法详解Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib import ...

  9. 多目标优化算法_阿里提出多目标优化全新算法框架,同时提升电商GMV和CTR

    论文作者| Xiao Lin,Hongjie Chen 等 编译 | 吴少杰 编辑 | Natalie AI 前线导读: 在推荐系统中,多目标优化一直是热门话题,阿里针对推荐中的多目标优化问题提出了一 ...

  10. matlab物流配送最优路径,基于Matlab物流配送路径优化问题遗传算法的实现

    第 29 卷总第 131 期 ·物流商坛· 收稿日期: 2005-12-22 作者简介: 弓晋丽(1983- ), 女, 山西文水人, 长安大学汽车学院硕士研究生, 研究方向: 物流系统, 道路运输与 ...

最新文章

  1. 第一次使用51cto博客
  2. 前沿|Google AI提新型神经网络,对神经元进行高精度自动重建
  3. python计算生态的命名_Python计算生态之random库
  4. Mach-O 二进制文件解析
  5. 自然语言处理在医学领域的应用
  6. MySQL高级 - 内存优化 - MyISAM内存优化
  7. 当 Flutter 遇见 Web,会有怎样的秘密?
  8. 锐捷EG易网关远程命令执行漏洞-1
  9. 计算机常用数制转换说课稿,进制与进制转换说课稿
  10. Go语言实战 - 网站性能优化第一弹“七牛云存储”
  11. Centos 6 编译安装 Apache 2.4
  12. 3月第2周易盾业务风控关注 | 新版个人信息安全规范正式发布
  13. java实验——设计圆柱体类和圆锥体类,继承圆类Circle并实现Volume接口,计算体积。
  14. WIN7、WIN8、WIN10家庭组共享
  15. 学了一年php感觉什么都不会,php自学要多久_一个学了1年php后选择放弃
  16. JavaScript网页购物车
  17. 计算机的rom是内存的意思,电脑ram和rom是什么意思 电脑内存条是rom还是ram
  18. 【编程实践】Python编程手册 《Python极简教程》
  19. [计算机视觉] 什么是齐次坐标?为什么要引入齐次坐标?
  20. SAP GUI 登录语言设置

热门文章

  1. git设置如何设置自己的用户名密码
  2. matlab dot()函数求矩阵内积,三维 ,多维 详解
  3. earthworm系列-earthworm介绍
  4. SSD算法理解(2)
  5. 在线激活PHPSTORM 2016.2
  6. C# 调用API接口,有Json传参
  7. 关于数据库中的Job
  8. Java job interview:数据库Date设计与操作查询建立修改删除
  9. SQL 拼接字符串,拆分字符串,截取字符串
  10. LeetCode三数之和问题