元启发式算法库MEALPY初体验遗传算法为例songjiefa

MEALPY的用途广泛,你可以使用它来分析算法参数、进行算法的定性和定量分析、分析算法的收敛速率、测试和分析算法的可扩展性和健壮性。该库目前的版本为3.0.1,共包含215种算法,其中包括190种官方算法(原始算法、混合算法、变体算法)和25种开发算法。

MEALPY的特点在于支持解决连续和离散问题,并且在新版本中,所有功能都被封装在类和对象之中,使得定义模型一次后,就可以解决多个问题。

二话不说,先上一个简单代码:

我想说,是的,你说的对,这不是为了举简单例子嘛(比官网例子还简单一点),如果我拿出下面公式,阁下如何应对?\(f(x)=\sqrt[3]{x^3-x^2-x+1+y^3-xy^2}\)所以现在我们假装不知道\(y=x^2\)的极值公式和图像,求一下x等于多少的时候,y的最小值。

problem_dict={"obj_func":objective_func,"bounds":FloatVar(lb=[-10000],ub=[10000]),"minmax":"min",}在mealpy库中,problem_dict是一个字典,它定义了优化问题的所有必要信息。这个字典通常包含下列关键字:

optimizer=GA.BaseGA(epoch=100,pop_size=50,pc=0.85,pm=0.1)optimizer.solve(problem_dict)这段代码做了以下两件主要事情:

让我们解释这段代码之前,先说一下什么是遗传算法

遗传算法的基本概念包括个体、种群、适应度、选择、交叉(或称为杂交,英文为crossover)、变异等,以下是这些概念的详细介绍:

在遗传算法中,每一个可能的解都称为一个“个体”,通常表示为一串“基因”,这可以是二进制值、实数或其他编码形式。我们上面例子里,因为输入只有一个,那么个体就是那个公式里的\(x\)浮点本身,或者是代码里目标方法(objective_func)的solution参数本身。

种群是一组个体的集合,算法从这个种群中选择个体来进行遗传操作并产生新一代种群。我们上面例子里,pop_size=50就是一开始有50个x(一般初始化,都是随机的,[-10000,10000]范围内随机生成50个x)

适应度是评价个体优劣的标准,它是一个函数,用于衡量个体解决问题的能力。个体的适应度越高,它被选中并遗传到下一代的机会就越大。因为我们设置了求最小值"minmax":"min",,可以认为Fitness等价于例子里的objective_func。

选择是根据个体的适应度从当前种群中选出一部分个体,用于生成下一代。常见的选择方法有轮盘赌选择、锦标赛选择,随机选择等。BaseGA类通过selection_process__方法实现了几种不同的选择策略:

classBaseGA(Optimizer): def__init__(self,epoch:int=10000,pop_size:int=100,pc:float=0.95,pm:float=0.025,**kwargs:object)->None: #...初始化代码 self.selection="tournament" if"selection"inkwargs: self.selection=self.validator.check_str("selection",kwargs["selection"],["tournament","random","roulette"]) #...初始化代码选择策略,如果不指定selection参数,则会使用默认的锦标赛选择。如果你想使用轮盘赌选择或随机选择,需要在创建BaseGA实例时通过selection参数明确指定。

例子使用方式,例如:

model=BaseGA(epoch=100,pop_size=50,pc=0.85,pm=0.1,selection="roulette")交叉(Crossover):交叉是遗传算法中产生新个体的主要方式。它模拟生物学中的杂交现象,通过组合两个“父母”个体的部分基因来产生“子代”个体。例子中pc=0.85表示交叉概率是85%,意味着每一代中有85%的个体将通过交叉来产生新的后代。在BaseGA类中,交叉(Crossover)是通过crossover_process__方法实现的。该方法定义了几种不同的交叉策略:

defcrossover_process__(self,dad,mom): ifself.crossover=="arithmetic": w1,w2=self.crossover_arithmetic(dad,mom) elifself.crossover=="one_point": cut=self.generator.integers(1,self.problem.n_dims-1) w1=np.concatenate([dad[:cut],mom[cut:]]) w2=np.concatenate([mom[:cut],dad[cut:]]) elifself.crossover=="multi_points": idxs=self.generator.choice(range(1,self.problem.n_dims-1),2,replace=False) cut1,cut2=np.min(idxs),np.max(idxs) w1=np.concatenate([dad[:cut1],mom[cut1:cut2],dad[cut2:]]) w2=np.concatenate([mom[:cut1],dad[cut1:cut2],mom[cut2:]]) else:#uniform flip=self.generator.integers(0,2,self.problem.n_dims) w1=dad*flip+mom*(1-flip) w2=mom*flip+dad*(1-flip) returnw1,w2在这个方法中,dad和mom参数表示两个父代的基因串。根据self.crossover的值,它决定使用哪种交叉策略。每种策略都会计算并返回两个子代w1和w2的基因串。

注意,实际的交叉操作是否发生是由交叉概率self.pc控制的,这个概率决定了在种群中有多少比例的个体会经历交叉过程。如果随机数小于self.pc,那么调用crossover_process__方法进行交叉;否则,子代直接继承父代的基因。

简单来说,BaseGA类中的交叉是通过拼接两个父代的某些部分来产生子代,具体的拼接方式取决于所选的交叉策略。BaseGA默认使用均匀交叉uniform,对于浮点数的均匀交叉(UniformCrossover),方法与处理二进制串或整数串的方式类似,但是要考虑到浮点数的连续性。在均匀交叉中,每个基因位点都有一个独立的概率决定是从父代1继承还是从父代2继承。

对于浮点数列表的均匀交叉,可以按如下方式进行:

因为在上面例子中,每个个体只包含一个浮点数,所以均匀交叉将简化为以下步骤:

变异是在个体的基因序列中随机改变某些基因的过程,这增加了种群的多样性,有助于算法跳出局部最优解,探索更广泛的搜索空间。在BaseGA类中,变异(Mutation)是通过mutation_process__方法实现的。该方法根据所选的变异策略来对子代进行变异操作。变异操作的目的是在遗传算法的演化过程中引入一些随机性,以避免算法过早收敛到局部最优解,并增加搜索全局最优解的可能性。

BaseGA类提供了以下几种变异策略:

在BaseGA类的mutation_process__方法中,根据变异概率self.pm来决定是否对子代进行变异操作(默认是翻转变异Flip)。以下是mutation_process__方法的代码实现(部分):

defmutation_process__(self,child):ifself.mutation_multipoints:ifself.mutation=="swap":#...Swapmutationlogic...else:#"flip"mutation_child=self.problem.generate_solution()flag_child=self.generator.uniform(0,1,self.problem.n_dims)

对于例子里单浮点数的个体,翻转变异将简化为在给定的值范围内重新生成一个随机浮点数。如果变异策略是swap、scramble或inversion,由于只有一个浮点数,这些策略将不适用或不产生任何效果。

optimizer=GA.BaseGA(epoch=100,pop_size=50,pc=0.85,pm=0.1)这行代码创建了一个遗传算法优化器的实例,并设置了几个重要的参数:

optimizer.solve(problem_dict)这行代码调用优化器的solve方法,并传递之前定义的problem_dict作为参数。solve方法将使用遗传算法来寻找最优解或者尽可能接近最优解的解决方案。

problem_dict包含了目标函数obj_func(用于评估解的质量)、解的边界bounds(定义了解的搜索空间),以及优化目标minmax(指明是最小化问题还是最大化问题)。

通过执行这两行代码,遗传算法将运行指定的迭代次数(在本例中为100代),并在每一代中使用遗传操作(选择、交叉、变异)来改进解,最终返回找到的最佳解。这个最佳解将是根据目标函数评估得到的最优质的解,同时受到解空间边界的约束。

就看结果的最后两行,不要看中间过程,中间过程可以拿来分析,如果不想看到中间过程,可以在问题字典里添加"log_to":None,键值对。

#定义问题字典problem_dict={"obj_func":objective_func,"bounds":FloatVar(lb=[-10000],ub=[10000]),"minmax":"min","log_to":None,}迭代100代,从-10000到10000实数里,最终结果算出来,当\(x=35.09989745\)时,\(f(x)\)最小,且等于1232.002800987481然后,第一次接触遗传算法的,不禁会发出大大的疑问:搞了半天,就这????!!!!我一秒钟都得出是\(x=0\)了。

我知道你困了累了,但请别困,别累。从结果来看,那说明咱们上面说的原理没错,确实是一步一步的遗传变异,得到的结果。至于结果不如意,那肯定是需要继续调优的。不然那些调包侠,调参侠的称呼怎么来的?

GA.BaseGA它在寻找全局最优解的过程中可能会找到局部最优解或者近似解。遗传算法的性能(即能否找到全局最优解以及找到解的速度)取决于多个因素,包括:

例子中目标函数是一个简单的单变量平方函数,它的全局最小值在x=0处(假装不知道)。遗传算法应该能够找到这个全局最小值,或者至少是一个非常接近的近似值。结果不尽如人意,可能有几个原因:

要改进结果,可以尝试以下方法:

根据上面的分析,我们可以挑一两个参数试试

代码其他不变,代数从100代变成10000代

optimizer=GA.BaseGA(epoch=10000,pop_size=50,pc=0.85,pm=0.1)结果:[-0.20769044]0.04313531784135752

看来结果是-0.2,还是不太能接受,继续努力优化。

从结果来看,\(x\)越来越小,那么,\(x\)边界值就可以不用从[-10000,10000]这么大范围筛选了,直接[-10,10]

problem_dict={"obj_func":objective_func,"bounds":FloatVar(lb=[-10],ub=[10]),"minmax":"min",}optimizer=GA.BaseGA(epoch=10000,pop_size=50,pc=0.85,pm=0.1)结果:[7.35480744e-05]5.409319244888902e-09

$x=7.35480744\times10^{-5},f(x)=5.409319244888902\times10^{-9}$第二次结果看起来非常不错。运气不错哈。(不要脸!)

THE END
1.九章算法九章算法致力于让顶尖的工程师在线传授最优质的计算机课程,帮助更多程序员找到好工作https://www.jiuzhang.com/
2.Algorithms,4thEditionbyRobertSedgewickandKevinWayneThe textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today. The broad perspective taken makes it an appropriate introduction to the field.https://algs4.cs.princeton.edu/
3.9个免费学习算法的网站(2023年最新推荐)学吧导航学习算法是计算机科学的一个关键部分,也是任何程序员应该掌握的重要技能。随着技术的发展和计算机的广泛使用,对熟悉算法的专业人员的需求越来越多。如果你对学习算法很感兴趣,互联网上有很多资源可以免费学习算法。在本文中,学吧君将为大家介绍9个免费学习算法的网站,这些网站提供高质量的教育内容和资源,帮助你理解和掌https://www.xue8nav.com/1620.html
4.盘点几个程序员实用的算法网站,你都用过吗算法博客推荐算法面试都是从简单的问题开始,中级问题则是用于评估你的个人能力,困难问题则是为Facebook/谷歌面试而准备的,这个网站还有一个优秀的地方是它可评估你代码的性能,看看你的代码运行的快还是慢,是否可以进行优化等。 官网:https://leetcode.com/ 5、Daily Coding Problem https://blog.csdn.net/xishining/article/details/133745043
5.july七月算法七月在线北理工校外导师,微软AI MVP,Github上2万余star,CSDN 2000万PV博客『结构之法 算法之道』博主,去过近百所985/211高校分享算法,亦是华为云等数十个大会的演讲嘉宾。2015年创办七月在线,并于2018年获得好未来千万投资,到2022年平台上聚集了350+的大厂专家讲师团队,和150+的全球TOP高校研究员的学术导师团队。2023年https://www.julyedu.com/
6.Hello算法Hello 算法官网 开源、免费、对手友好的数据结构与算法入门教程 服务:IT技术类,IT技术网,Hello算法,学习,IT技术类,IT技术网,Hello算法。 Hello 算法简介 《Hello 算法》是一本面向数据结构与算法初学者的开源、免费电子书,由靳宇栋(Krahets)编写并发布在GitHub上。这本书通过动画图解和一键运行的方式,使读者能够更https://openi.cn/sites/282705.html
7.深圳未来算法科技有限公司官网未来算法 数据驱动,洞见未来https://www.aithenext.com/
8.算法助手官网版下载算法助手最新版下载算法助手官网版版本:Beta 2.1.3 类型:系统工具 平台:安卓 语言:中文 大小:55.4MB 更新:2024-11-26下载APK 关于算法助手官网版 算法助手官网版版是一款功能强大的系统工具,专为需要辅助进行算法设计与优化的用户打造。它提供了丰富的算法库和可视化界面,帮助用户高效地完成算法实现和测试。 算法助手官网版版软件http://app.redshu.com/azrj/v143930.html
9.这些算法可视化网站助你轻松学算法腾讯云开发者社区无疑,数据结构与算法学习最大的难点之一就是如何在脑中形象化其抽象的逻辑步骤。而图像在很多时候能够大大帮助我们理解其对应的抽象化的东西,而如果这个图像还是我们自己一点点画出来的,那么无疑这个印象是最深刻的了。没错,今天给大家分享的就是算法可视化的网站。 https://cloud.tencent.com/developer/article/1462038
10.互联网信息服务算法推荐管理规定第一条为了规范互联网信息服务算法推荐活动,弘扬社会主义核心价值观,维护国家安全和社会公共利益,保护公民、法人和其他组织的合法权益,促进互联网信息服务健康有序发展,根据《中华人民共和国网络安全法》、《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》、《互联网信息服务管理办法》等法律、行政法规,制https://www.moj.gov.cn/pub/sfbgw/flfggz/flfggzbmgz/202305/t20230509_478388.html
11.算法平台Evomotion进化动力官网面向AIoT与边缘人工智能业务场景,进化动力以自主设计的Evo-NPU芯片架构的EvoSense芯片平台,与进化动力核心机器学习云与模型数据管理平台EvoCloud为算法运行承载基础,开发出了面向AIoT训练与边缘推理的一站式算法工具平台EvoThink。 目前,EvoThink已经针对AIoT赋能场景下的数据安全,快速小样本学习、端云协同边缘推理、非标品https://www.evomotion.com/?page_id=16920
12.raft一致性算法Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. We hope Rafhttp://raft.github.io/
13.算法(第4版)最新章节在线阅读本书作为算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述。第4版具体给出了每位程序员应知应会的50个算法,提供了实际代码,而且这些Java代码实现采用了模块化的编程风格,读者可以方便地加以改造。本书配套网站提供了书中内容的摘要及更多的代码实现、https://chuangshi.qq.com/detail/26211947
14.数据挖掘的常见算法有哪些?数据挖掘是一种通过从大量数据中提取知识和信息的方法,以支持业务决策、市场分析和科学研究等领域。在数据挖掘过程中,算法是最重要的组成部分之一。以下是常见的数据挖掘算法。 1.分类算法 分类算法是一类用于将数据样本分为不同类别的算法。这些算法通常使用监督学习方法,其中模型基于已标记的训练数据进行训练。几个常见https://www.cda.cn/bigdata/202782.html
15.算法在线活动报名 FOI2022算法夏令营基础班 2022年6月15日—7月10日 外地营员: 2850/人本地营员: 2580/人 FOI2022算法夏令营提高班 2022年6月15日—7月10日 外地营员: 2850/人本地营员: 2580/人 FOI2022算法夏令营泉州班(线上) 2022年6月15日—7月10日 http://www.algorithms2019.com/
16.天敏智造内置的商汤人脸识别算法,在全球权威人脸识别大赛NIST FRVT 2020中获得五项第一,在识别精度,速度,通过率等各个指标中均遥遥领先。 设备支持5W本地人脸库,不用联网即可准确识别。同时支持离线识别和在线识别两种模式,设备管理员可以根据实际情况决定联网使用还是离线使用。 https://ai.10moons.com/
17.如何配置算法任务物联网边缘计算(IoTEdge)步骤一:配置预加载算法 LE-V-B015型号边缘一体机,在首次使用算法应用功能时,需要配置预加载算法。更多信息,请参见预加载算法。 登录边缘计算控制台。 左侧导航栏选择节点管理 > 算法任务管理。 在算法任务管理页面,选择已激活的LE-V-B015型号边缘一体机后,单击最大开启任务数右侧的设置。 在设置最大开启任务数https://help.aliyun.com/zh/iot-edge/getting-started/configure-algorithm-tasks
18.力扣(LeetCode)全球极客挚爱的技术成长平台海量技术面试题库,拥有算法、数据结构、系统设计等 1000+题目,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.com/
19.实现技制共治新格局构建人机命运共同体《算法社会:技术权力和王延川教授、粟鹏飞博士的译著《算法社会:技术、权力和知识》主要由荷兰学者马克·舒伦伯格和里克·彼得斯编撰,共有16名作者参与了写作。 著作从技术、权力和知识三个理论维度解读公共管理、刑事司法和城市治理三个学术领域。著作分为三个部分共十一章。第一章作者对算法、算法权力进行了介绍,同时分析了算法治理弊端以http://www.legalweekly.cn/whlh/2024-01/04/content_8946710.html
20.百度AIStudio算法大赛官网,人工智能学习与实训社区百度AI Studio算法大赛官网,人工智能学习与实训社区 汇聚人才精英, 使您脱颖而出. 比赛从不间断, 奖金越来越多. 优秀者还会获得百度招聘绿色通道机会 – 百度AI Studio – 人工智能学习与实训社区近年来随着AI人工智能的快速发展,人工智能的比赛也越来越多,在这里,馆主将对国内的一些AI行业比赛做一些AI汇总,若挑战https://feizhuke.com/sites/baidu-ai-studio-dasai.html
21.算法科技所有技术信息以实机性能为准,算法科技保留最终解释权。 鼠标能力解析 语音交互 >400字/Min的语音打字速度 >180个国家的语言翻译 >25地区的方言识别 划词翻译 一键截图 语音搜索 了解更多 内置微软AzureGPT解析 正版授权 毫秒级响应回复 一键呼出聊天框 https://www.proai.com.cn/
22.吴师兄学算法五分钟学算法吴师兄学算法官网浏览人数已经达到365,如你需要查询该站的相关权重信息,可以点击"5118数据""爱站数据""Chinaz数据"进入;以目前的网站数据参考,建议大家请以爱站数据为准,更多网站价值评估因素如:吴师兄学算法的访问速度、搜索引擎收录以及索引量、用户体验等;当然要评估一个站的价值,最主要还是需要根据您自身的需求以https://pidoutv.com/sites/27782.html
23.芒果TV“马栏山杯”国际音视频算法大赛从2020年启动至今已经成功连续举办了四届,打造了全球音视频文化行业AI巅峰赛事,推动人工智能时代媒体行业变革新发展。 本届“马栏山杯”国际音视频算法大赛从多个维度实现大赛的全面升级。算法赛聚焦AIGC、大模型等音视频和人工智能领域热点技术,三道赛题均加入了CCF A类国际顶尖会议ACM https://challenge.ai.mgtv.com/
24.算法展2025深圳国际算法展览会「官网」AI与算力、算法、存储、CPO共封装展区 人工智能芯片、方案、算力芯片及方案、算法方案、数据存储、光电共封装模块及技术和设备等 数据IT与存储设备: 服务器、路由器、交换机、存储/闪存、分布式存储、数据管理、数据保护、数据备份、网络安全、防火墙、数据库、光端机等;SCSI、SAS、磁带机、NAS网络存储器、磁带库、https://www.globalimporter.net/gzhd/2/289581.htm
25.Hello算法Home 简体中文 繁體中文 English krahets/hello-algo 1.2.0 103.8k 13k 动画图解、一键运行的数据结构与算法教程 开始阅读 代码仓库 获取纸质书 在线阅读 下载PDF 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读。” https://hello-algo.com/
26.飞桨AIStudio官网飞桨是由百度推出的深度学习平台,旨在将AI科技实现普惠,让技术更加普及化与可持续发展。而在该平台中,飞桨AIStudio官网则是其中的重要组成部分,提供了开源算法、详尽的学习资源、高精度的模型和便捷的开发环境,成为机器学习领域的瑰宝。 一、开源算法库 飞桨AIStudio官网在开源算法库方面非常强大,拥有涵盖自然语言处理、https://www.aigc.cn/12446.html