文章目录

  • 1 引入
  • 2 BRKGA的调用
  • 参考文献

1 引入

  BRKGA是非常著名的用于处理组合问题的遗传算法,其流程如下:

2 BRKGA的调用

import numpy as np
from pymoo.core.problem import ElementwiseProblem
from pymoo.core.duplicate import ElementwiseDuplicateElimination
from pymoo.algorithms.soo.nonconvex.brkga import BRKGA
from pymoo.optimize import minimizeclass MyProblem(ElementwiseProblem):def __init__(self, my_list):"""一个实值排序问题:param my_list:     待排序序列"""# 正确的顺序self.correct = np.argsort(my_list)super().__init__(n_var=len(my_list), n_obj=1, n_constr=0, xl=0, xu=1)def _evaluate(self, x, out, *args, **kwargs):# 对arg_x = np.argsort(x)# 优化目标为排序后与用argsort排序结果的相似程度out["F"] = - float((self.correct == arg_x).sum())# 记录当前个体的排序结果out["arg_x"] = arg_x# 生成当前个体的hash值out["hash"] = hash(str(arg_x))class MyElementwiseDuplicateElimination(ElementwiseDuplicateElimination):"""用于消除相同的苹果,通过哈希值来判断"""def is_equal(self, a, b):return a.get("hash")[0] == b.get("hash")[0]if __name__ == '__main__':np.random.seed(2)list_to_sort = np.random.random(20)print("待排序序列", list_to_sort.tolist())problem = MyProblem(list_to_sort)algorithm = BRKGA(# 精英个体的数量n_elites=200,# 精英与非精英产生的后代数量n_offsprings=700,# 每一代中引入的突变数量n_mutants=100,# 遗传其精英父母等位基因的后代的偏差bias=0.7,# 如果使用解码,则重复消除更为重要,这需要对解码的变量而非实际值执行重复检查# 因此,DuplicateElimination对象被传递# 而如果直接将Elimination_duplicates设置为True,那么所有目标值想等的个体都会被过滤掉eliminate_duplicates=MyElementwiseDuplicateElimination())res = minimize(problem,algorithm,("n_gen", 75),seed=1,verbose=False)print("最优序列及目标值: \nX = %s\nF = %s" % (res.X.tolist(), res.F))print("由BRKGA排序", res.opt.get("arg_x")[0])print("由Numpy排序", np.argsort(list_to_sort))

  输出如下:

待排序序列 [0.43599490214200376, 0.025926231827891333, 0.5496624778787091, 0.4353223926182769, 0.42036780208748903, 0.3303348210038741, 0.2046486340378425, 0.6192709663506637, 0.29965467367452314, 0.26682727510286663, 0.6211338327692949, 0.5291420942770391, 0.13457994534493356, 0.5135781212657464, 0.18443986564691528, 0.7853351478166735, 0.8539752926394888, 0.4942368373819278, 0.846561485357468, 0.079645477009061]
最优序列及目标值:
X = [0.5120610275239188, 0.0022496480936280427, 0.7900213711976847, 0.4723714561598946, 0.38661698163112523, 0.3848559560862125, 0.23421553339010626, 0.8453995656893651, 0.3156307187934797, 0.2496178506492982, 0.911031403605239, 0.6662883250733934, 0.18519365164165535, 0.6465499357511519, 0.18658354638979957, 0.9281090785007262, 0.9769161619458502, 0.6155747510509424, 0.9281298639521487, 0.043860437087330784]
F = [-20.]
由BRKGA排序 [ 1 19 12 14  6  9  8  5  4  3  0 17 13 11  2  7 10 15 18 16]
由Numpy排序 [ 1 19 12 14  6  9  8  5  4  3  0 17 13 11  2  7 10 15 18 16]

参考文献

【1】https://pymoo.org/algorithms/soo/brkga.html

Pymoo学习 (11):有偏随机密匙遗传算法 (BRKGA: Biased Random Key Genetic Algorithm) 的使用相关推荐

  1. 深度学习11个实用技巧

    深度学习11个实用技巧 深度学习工程师George Seif发表了一篇博文,总结了7个深度学习的技巧,本文增加了几个技巧,总结了11个深度学习的技巧,主要从提高深度学习模型的准确性和速度两个角度来分析 ...

  2. RxJava学习 - 11. Switching, Throttling, Windowing, and Buffering

    RxJava学习 - 11. Switching, Throttling, Windowing, and Buffering Buffering Fixed-size buffering Time-b ...

  3. 深度学习-11:神经元、神经网络、人脑和卷积神网络

    深度学习-11:神经元.神经网络.人脑和卷积神网络 深度学习原理与实践(开源图书)-总目录 在生物神经网络中,学习源自于大脑中无数神经元之间的连接.大脑接触到新的刺激后,这些神经元之间的连接改变了配置 ...

  4. 蓝桥杯单片机学习11——PCF8591A/DD/A转换芯片

    上期我们学习了DS1302实时时钟的基本使用,现在我们来学习PCF8591A/D&D/A转换芯片的相关内容 蓝桥杯单片机学习11--PCF8591A/D&D/A转换芯片 PCF8591 ...

  5. STM32单片机学习(11) DS18B20温度传感器实验

    STM32单片机学习(11) DS18B20温度传感器实验 本程序主要实现 DS18B20温度传感器数据获取,并利用串口通信把温度数据传至计算机 注:使用普中科技开发板测试时,需要拔掉Boot1插口, ...

  6. 动手学深度学习 - 11.7. d2lzh 包索引

    动手学深度学习 - 11.7. d2lzh 包索引 动手学深度学习 - Dive into Deep Learning Aston Zhang, Zachary C. Lipton, Mu Li, a ...

  7. Java学习-11 XML与JSON

    Java学习-11 XML与JSON 1.XML 1.1.简介 可扩展标记语言(eXtensible Markup Language). 特性:1. xml具有平台无关性, 是一门独立的标记语言.2. ...

  8. python 命名实体识别_Python NLTK学习11(命名实体识别和关系抽取)

    Python NLTK学习11(命名实体识别和关系抽取) 发表于: 2017年7月27日  阅读: 18262 除特别注明外,本站所有文章均为小杰Code原创 本系列博客为学习<用Python进 ...

  9. 微信小程序学习11:iconfont 网络字体图标使用(阿里巴巴)

    微信小程序学习11:iconfont 网络字体图标使用(阿里巴巴) 使用方法 [1] 是直接下载图片,使用<image src="/static/images/v2.jpg" ...

最新文章

  1. JMS规范、ActiveMQ Broker和ActiveMQ传输协议
  2. mysql修改配置文件内存后无法启动_记一次Oracle实例在修改内存大小后无法启动的惊悚经历...
  3. 来自 IsayNo (@IsayNooo) 的推文
  4. Oracle中的Raw类型解释
  5. linux下解压 cpio.gz格式文件
  6. Struts2中EL表达式的取值范围问题
  7. jQuery中的视图样式和动画效果
  8. html文字自适应屏幕居中显示,DIV+CSS经典布局[宽度自适应][自动屏幕居中]的实现...
  9. PyTorch载入图片ToTensor,PIL和OpenCV读取图片plt.imread和PIL.Image.open
  10. php项目代码交接文档,接手项目担当运维,前技术团队应该提供哪些正当规范的交接文档和技术支持...
  11. 警告记录 - [Timing 38-316] Clock period ‘10.000‘
  12. 【Tools】XD_Laser安装教程详解
  13. 投屏电脑怎么操作?投屏电脑最常用的4种方式
  14. Python怎样提高视频清晰度和对比度?通过这篇直接学会。
  15. python 抓包秒杀_Python 爬虫,推荐一款简单的抓包工具(续)
  16. 03、集合之ArrayList
  17. 解决idea集成maven在使用骨架构建项目报错问题
  18. 【linux find命令】在目录中查找文件并删除文件
  19. 创造与魔法游戏最新的服务器,创造与魔法MOD服务器
  20. 在线问答未来会朝什么趋势发展?

热门文章

  1. 网易纯直播 SDK 基本操作
  2. Java:Mac+VScode自学笔记|基础部分(一)
  3. 这个 'ip' 竟然把我搞蒙圈了……
  4. 用户admin的密码忘记
  5. Git原理及应用(学习笔记)
  6. IDEA使用Git上log解析
  7. 关于微信学习之微信公众号支付开发
  8. 吴恩达深度学习笔记(四)——深度学习的实践层面
  9. gumbo库应用与按装
  10. 核密度估计(细节拿捏,到底怎么算告诉你)