当前位置:首页 > 科技  > 软件

Python用户宝典:了解并实现遗传算法

来源: 责编: 时间:2024-07-03 10:12:10 69观看
导读译者 | 布加迪审校 | 重楼遗传算法是一种基于自然选择的技术,用于解决复杂问题。由于问题很复杂,遗传算法(而不是其他方法)被用来得出解决问题的合理方案。本文介绍遗传算法的基础知识以及如何用Python来实现。遗传算法的

译者 | 布加迪9PK28资讯网——每日最新资讯28at.com

审校 | 重楼9PK28资讯网——每日最新资讯28at.com

9PK28资讯网——每日最新资讯28at.com

遗传算法是一种基于自然选择的技术,用于解决复杂问题。由于问题复杂,遗传算法(而不是其他方法)被用来得出解决问题的合理方案。本文介绍遗传算法的基础知识以及如何Python实现。9PK28资讯网——每日最新资讯28at.com

遗传算法的要

适应度函数

适应度函数衡量所考虑的解决方案与问题的最佳解决方案的接近程度。它为人中的每个人提供了适应度水平,描述了当前一代的质量或效率。这个分定义了选择,更高的适应度值是经过优化的解决方案。9PK28资讯网——每日最新资讯28at.com

比如说,假设我们在处理一个实际的函数f(x)其中x是一组参数。要找到的最优值是x,这样f(x)就取最大值。9PK28资讯网——每日最新资讯28at.com

选择

过程决定了当前一代中哪些个体受到青睐,从而繁殖为下一代做出贡献。可以确定许多选择方法,每种方法都有自己的特点和适合的上下文。9PK28资讯网——每日最新资讯28at.com

  • 盘选择

根据个体的适应度水平,选择个体的概率也是最大的。9PK28资讯网——每日最新资讯28at.com

  • 锦标赛选择

随机抽取一组,选其中最好的。9PK28资讯网——每日最新资讯28at.com

  • 基于排序的选择

根据适合度对人进行排序,选择机会根据适合度分数按比例分配。9PK28资讯网——每日最新资讯28at.com

交叉

交叉是遗传算法的一个基本概念,其目的是交换两个亲本的遗传信息,形成一个或多个后代。这个过程非常类似自然界中发生的生物的交叉和重组。运用遗传的基本原理,交叉试图产生具有双亲理想特征的后代,从而在下一代中有更好的适应性。交叉是一个比较宽泛的概念,可以分为几种类型,每种类型都有其特点和可以有效运用的领域。9PK28资讯网——每日最新资讯28at.com

  • 单点交叉在亲本染色体上选择一个交叉点,实际上只发生一次交叉。这个位置之前的所有基因都取自第一个亲本,而这个位置之后的所有基因都取自第二个亲本。
  • 两点交叉选择两个断点,它们之间的部分在两个亲本染色体之间交换。它也有利于遗传信息的交换,这与单点交叉不一样。

突变

在遗传算法中,突变之所以至关重要,是由于它提供了多样性,多样性是避免直接向最优解区收敛的关键因素。因此,获得单个突变基因随机变化,算法可以进入仅通过交叉操作无法企及最优空间的其他区域。这随机过程保证了无论怎样群都会进化,或者在遗传算法确定的搜索空间区域内移动其位置。9PK28资讯网——每日最新资讯28at.com

实现遗传算法的步骤

不妨用Python实现遗传算法。9PK28资讯网——每日最新资讯28at.com

问题定义

问题对具体函数进行计算;f (x) = x^2f(x) = x^2x取整9PK28资讯网——每日最新资讯28at.com

适应度函数对于染色体二进制为x的情况,适应度函数的一个例子可f(x)= x^29PK28资讯网——每日最新资讯28at.com

9PK28资讯网——每日最新资讯28at.com

def fitness(chromosome):  x = int(''.join(map(str, chromosome)), 2) return x ** 2

群初始化

生成一个给定长度的随机染色体。9PK28资讯网——每日最新资讯28at.com

def generate_chromosome(length): return [random.randint(0, 1) for _ in range(length)]def generate_population(size, chromosome_length): return [generate_chromosome(chromosome_length) for _ in range(size)]population_size = 10chromosome_length = 5population = generate_population(population_size, chromosome_length)

适应度评估

评估人群中每染色体的适应度。9PK28资讯网——每日最新资讯28at.com

fitnesses = [fitness(chromosome) for chromosome in population]

选择

使用轮盘选择根据适合度选择亲本染色体。9PK28资讯网——每日最新资讯28at.com

9PK28资讯网——每日最新资讯28at.com

def select_pair(population, fitnesses):   total_fitness = sum(fitnesses) selection_probs = [f / total_fitness for f in fitnesses]   parent1 = population[random.choices(range(len(population)), selection_probs)[0]] parent2 = population[random.choices(range(len(population)), selection_probs)[0]] return parent1, parent2

交叉

使用单点交叉,在父本基因串中选择一个随机的交叉位置,并在两个基因串之间交换这个位置之后的所有基因值。9PK28资讯网——每日最新资讯28at.com

def crossover(parent1, parent2): point = random.randint(1, len(parent1) - 1) offspring1 = parent1[:point] + parent2[point:] offspring2 = parent2[:point] + parent1[point:] return offspring1, offspring2

突变

通过以一定的概率翻转比特来实现突变。9PK28资讯网——每日最新资讯28at.com

def mutate(chromosome, mutation_rate): return [gene if random.random() > mutation_rate else 1 - gene for gene in chromosome]mutation_rate = 0.01

总之由于模拟物种进化遗传算法对于解决无法直接解决的优化问题具有一致性和有效性。因此,一旦掌握了遗传算法的基本要素了解了如何Python实现遗传算法,解决复杂任务就会容易得多。选择、交叉和突变使您能够对解决方案进行修改,并不断获得最佳或接近最佳的答案。但愿您已准备好将遗传算法运用到自己的任务中,从而在不同的任务和问题解决中得到改进。9PK28资讯网——每日最新资讯28at.com

原文标题:Understanding and Implementing Genetic Algorithms in Python,作者:Jayita Gulati9PK28资讯网——每日最新资讯28at.com


9PK28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-98420-0.htmlPython用户宝典:了解并实现遗传算法

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: .NET Core MVC 页面传值方式详解

下一篇: 高可用架构下 B 站、小红书崩了?对于阿里回应,网友认为裁员裁到大动脉

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 三言两语说透设计模式的艺术-单例模式

    三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 为什么你不应该使用Div作为可点击元素

    为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 腾讯盖楼,字节拆墙

    腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 东方甄选单飞:有些鸟注定是关不住的

    东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,“7
  • OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    7月20日消息,据外媒报道,研究机构的报告显示,在全球智能手机出货量同比仍在下滑的大背景下,印度这一有潜力的市场也未能幸免,出货量同比也有下滑,多家厂
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
  • AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    光影交错的镜像世界,虚实幻化的视觉奇观,虚拟偶像与真人共同主持,这些场景都出现在2019世界人工智能大会的舞台上。8月29日至31日,“AI艺术欣赏体验会”在上海
Top
Baidu
map