Pymoo学习 (11):有偏随机密匙遗传算法 (BRKGA: Biased Random Key Genetic Algorithm) 的使用
文章目录
- 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) 的使用相关推荐
- 深度学习11个实用技巧
深度学习11个实用技巧 深度学习工程师George Seif发表了一篇博文,总结了7个深度学习的技巧,本文增加了几个技巧,总结了11个深度学习的技巧,主要从提高深度学习模型的准确性和速度两个角度来分析 ...
- RxJava学习 - 11. Switching, Throttling, Windowing, and Buffering
RxJava学习 - 11. Switching, Throttling, Windowing, and Buffering Buffering Fixed-size buffering Time-b ...
- 深度学习-11:神经元、神经网络、人脑和卷积神网络
深度学习-11:神经元.神经网络.人脑和卷积神网络 深度学习原理与实践(开源图书)-总目录 在生物神经网络中,学习源自于大脑中无数神经元之间的连接.大脑接触到新的刺激后,这些神经元之间的连接改变了配置 ...
- 蓝桥杯单片机学习11——PCF8591A/DD/A转换芯片
上期我们学习了DS1302实时时钟的基本使用,现在我们来学习PCF8591A/D&D/A转换芯片的相关内容 蓝桥杯单片机学习11--PCF8591A/D&D/A转换芯片 PCF8591 ...
- STM32单片机学习(11) DS18B20温度传感器实验
STM32单片机学习(11) DS18B20温度传感器实验 本程序主要实现 DS18B20温度传感器数据获取,并利用串口通信把温度数据传至计算机 注:使用普中科技开发板测试时,需要拔掉Boot1插口, ...
- 动手学深度学习 - 11.7. d2lzh 包索引
动手学深度学习 - 11.7. d2lzh 包索引 动手学深度学习 - Dive into Deep Learning Aston Zhang, Zachary C. Lipton, Mu Li, a ...
- Java学习-11 XML与JSON
Java学习-11 XML与JSON 1.XML 1.1.简介 可扩展标记语言(eXtensible Markup Language). 特性:1. xml具有平台无关性, 是一门独立的标记语言.2. ...
- python 命名实体识别_Python NLTK学习11(命名实体识别和关系抽取)
Python NLTK学习11(命名实体识别和关系抽取) 发表于: 2017年7月27日 阅读: 18262 除特别注明外,本站所有文章均为小杰Code原创 本系列博客为学习<用Python进 ...
- 微信小程序学习11:iconfont 网络字体图标使用(阿里巴巴)
微信小程序学习11:iconfont 网络字体图标使用(阿里巴巴) 使用方法 [1] 是直接下载图片,使用<image src="/static/images/v2.jpg" ...
最新文章
- JMS规范、ActiveMQ Broker和ActiveMQ传输协议
- mysql修改配置文件内存后无法启动_记一次Oracle实例在修改内存大小后无法启动的惊悚经历...
- 来自 IsayNo (@IsayNooo) 的推文
- Oracle中的Raw类型解释
- linux下解压 cpio.gz格式文件
- Struts2中EL表达式的取值范围问题
- jQuery中的视图样式和动画效果
- html文字自适应屏幕居中显示,DIV+CSS经典布局[宽度自适应][自动屏幕居中]的实现...
- PyTorch载入图片ToTensor,PIL和OpenCV读取图片plt.imread和PIL.Image.open
- php项目代码交接文档,接手项目担当运维,前技术团队应该提供哪些正当规范的交接文档和技术支持...
- 警告记录 - [Timing 38-316] Clock period ‘10.000‘
- 【Tools】XD_Laser安装教程详解
- 投屏电脑怎么操作?投屏电脑最常用的4种方式
- Python怎样提高视频清晰度和对比度?通过这篇直接学会。
- python 抓包秒杀_Python 爬虫,推荐一款简单的抓包工具(续)
- 03、集合之ArrayList
- 解决idea集成maven在使用骨架构建项目报错问题
- 【linux find命令】在目录中查找文件并删除文件
- 创造与魔法游戏最新的服务器,创造与魔法MOD服务器
- 在线问答未来会朝什么趋势发展?