** 带约束的多目标优化问题**

继承 Problem 问题类完成对问题模型的描述
对于多目标的问题,依旧是先编写目标规划问题。

import numpy as np
import geatpy as ea
class MyProblem(ea.Problem): # 继承Problem父类def __init__(self):name = 'BNH' # 初始化name(函数名称,可以随意设置)M = 2 # 初始化M(目标维数)maxormins = [1] * M # 初始化maxorminsDim = 2 # 初始化Dim(决策变量维数)varTypes = [0] * Dim # 初始化varTypes(决策变量的类型,0:实数;1:整数)lb = [0] * Dim # 决策变量下界ub = [5, 3] # 决策变量上界lbin = [1] * Dim # 决策变量下边界ubin = [1] * Dim # 决策变量上边界 # 调用父类构造方法完成实例化ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb,ub, lbin, ubin)def aimFunc(self, pop): # 目标函数Vars = pop.Phen # 得到决策变量矩阵x1 = Vars[:, [0]] # 注意这样得到的x1是一个列向量,表示所有个体的x1x2 = Vars[:, [1]]f1 = 4*x1**2 + 4*x2**2f2 = (x1 - 5)**2 + (x2 - 5)**2# 采用可行性法则处理约束pop.CV = np.hstack([(x1 - 5)**2 + x2**2 - 25,-(x1 - 8)**2 - (x2 - 3)**2 + 7.7])# 把求得的目标函数值赋值给种群pop的ObjVpop.ObjV = np.hstack([f1, f2])## 目标函数主要需要计算出CV和ObjV

调用算法模板进行求解
模板求解,和单目标规划类似。

import geatpy as ea # import geatpy
from ga_more_aim import MyProblem # 导入自定义问题接口
import numpy as np
"""=======================实例化问题对象==========================="""
problem = MyProblem() # 实例化问题对象
"""=========================种群设置=============================="""
Encoding = 'RI' # 编码方式
NIND = 100 # 种群规模
Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges,problem.borders) # 创建区域描述器
population = ea.Population(Encoding, Field, NIND) # 实例化种群对象(此时种群还没被真正初始化,仅仅是生成一个种群对象)
"""=========================算法参数设置============================"""
myAlgorithm = ea.moea_NSGA2_templet(problem, population) # 实例化一个算法模板对象
myAlgorithm.mutOper.Pm = 0.2 # 修改变异算子的变异概率
myAlgorithm.recOper.XOVR = 0.9 # 修改交叉算子的交叉概率
myAlgorithm.MAXGEN = 200 # 最大进化代数
myAlgorithm.logTras = 1 # 设置每多少代记录日志,若设置成0则表示不记录日志
myAlgorithm.verbose = False # 设置是否打印输出日志信息
myAlgorithm.drawing = 1 # 设置绘图方式(0:不绘图;1:绘制结果图;2:绘制目标空间过程动画;3:绘制决策空间过程动画)
"""==========================调用算法模板进行种群进化==============
调用run执行算法模板,得到帕累托最优解集NDSet以及最后一代种群。
NDSet是一个种群类Population的对象。
NDSet.ObjV为最优解个体的目标函数值;NDSet.Phen为对应的决策变量值。
详见Population.py中关于种群类的定义。
"""
[NDSet, population] = myAlgorithm.run() # 执行算法模板,得到非支配种群以及最后一代种群
NDSet.save() # 把非支配种群的信息保存到文件中
"""===========================输出结果========================"""
print('用时:%s 秒' % myAlgorithm.passTime)
print('非支配个体数:%d 个' % NDSet.sizes) if NDSet.sizes != 0 else print('没有找到可行解!')
if myAlgorithm.log is not None and NDSet.sizes != 0:print('GD', myAlgorithm.log['gd'][-1])print('IGD', myAlgorithm.log['igd'][-1])print('HV', myAlgorithm.log['hv'][-1])print('Spacing', myAlgorithm.log['spacing'][-1])
"""======================进化过程指标追踪分析=================="""
metricName = [['igd'], ['hv']]
Metrics = np.array([myAlgorithm.log[metricName[i][0]] for i in range(len(metricName))]).T
# 绘制指标追踪分析图
ea.trcplot(Metrics, labels=metricName, titles=metricName)

** 结果**

帕累托前沿结果:在这里插入图片描述
hv的趋势:

最后结果:

python --遗传算法之多目标规划问题相关推荐

  1. Python 遗传算法实现字符串

    Python 遗传算法实现字符串 流程 1. 初始化 2. 适应度函数 3. 选择 4. 交叉 5. 变异 适应度函数计算方法 计算个体间的差:分别计算每个元素与目标元素的差取平方和 种群:计算总体均 ...

  2. Python遗传算法求一元函数最大值

    Python遗传算法求一元函数最大值 前言 代码 后记 参考文献 前言 最近接触遗传算法,参考了众多例子,有些又不尽然对,所以自己边理解边修改,然后写出了下面这堆传说中的屎山... PS1:遗传算法原 ...

  3. python遗传算法_带有Python的AI –遗传算法

    python遗传算法 带有Python的AI –遗传算法 (AI with Python – Genetic Algorithms) This chapter discusses Genetic Al ...

  4. python遗传算法之单/多目标规划问题

  5. python遗传算法工具箱的使用_遗传算法的python实现,非常值得看的一篇文章

    遗传算法是一种智能优化算法,通常用于求解复杂的数学问题.相比于传统方法,遗传算法摒弃了盲目的穷举或完全随机的求解策略,借鉴了自然界优胜劣汰.自然进化的思想,快速逼近最优解.上文对遗传算法的基本内容进行 ...

  6. 一个易用、易部署的Python遗传算法库

    简介: # [scikit-opt](https://github.com/guofei9987/scikit-opt) [![PyPI](https://img.shields.io/pypi/v/ ...

  7. python遗传算法_基于Python的遗传算法特征约简(附代码)

    导言 在某些情况下,使用原始数据训练机器学习算法可能不是合适的选择.该算法在接受原始数据训练时,必须进行特征挖掘,以检测不同组之间的差异.但这需要大量的数据来自动执行特征挖掘.对于小数据集,数据科学家 ...

  8. python遗传算法有多慢_遗传算法框架GAFT优化小记

    前言 前段时间一直在用自己写的遗传算法框架测试算法在优化力场参数的效果,但是跑起来效率很慢,因为适应度函数需要调用多次力场程序计算能量,但是还是比我预想中的慢我也没有及时对程序进行profiling和 ...

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

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

最新文章

  1. Python Qt GUI设计:QPrinter打印图片类(基础篇—21)
  2. asp:DropDownList用法
  3. VC命令行编译参数介绍
  4. 【移植驱动到Linux3.4.2内核之二】LCD,触摸屏,按键,USB等驱动程序的移植心得总结
  5. mongodb mongod 参数解释
  6. asp定时生成静态HTML的代码
  7. 【图像分割】基于matlab随机游走算法图像分割【含Matlab源码 149期】
  8. 跑路了,在国外当程序员有多爽?
  9. 关于如何取消萤石云视频加密
  10. Python无法打开.xlsx文件:xlrd.biffh.XLRDError: Excel xlsx file; not supported
  11. 如何申请屏蔽垃圾短信
  12. java8新特性之stream
  13. 没“硬货”!不卖手机的苹果做起了信用卡和脱口秀
  14. aix的ps命令详解
  15. 自定义模块:根据光导的导光条件计算光栅周期
  16. uniapp去掉返回键
  17. Bootrap 项目实战(微金所前端首页)第三部分(CSS,js源码)
  18. 追觅慧目F9、戴森360 Heurist、石头T7三款扫地机器人哪个更好
  19. ThreadPoolTaskExecutor @Async调用方法
  20. 2022年浙江省人民医院--互联网医院出线小报

热门文章

  1. python turtle库绘画_利用turtle库来画画
  2. 精耕数字化,将成为互联网科技企业的「新蓝海」
  3. c语言的一维数组的定义,C语言一维数组的定义
  4. 计算机中阶符,阶码,数符,尾数是什么?
  5. Python3,好看的外(shen)表(cai)千篇一律,炫彩的日志万里挑一。
  6. kafka-rest和schema registry服务注册
  7. Centos部署ewomail
  8. SAP 人力资源工资配置项2---工资类型配置
  9. 支付宝支付 - 申请APP支付
  10. 【MBSE】MBSE驱动的E/E架构开发的优势