遗传算法(Genetic Algorithm,GA)实现数据排序,python
遗传算法(Genetic Algorithm,GA)实现数据排序,python
遗传算法是一种比较广泛、通用的算法体系,为了说明遗传算法的原理和实现,现在用GA解决一个计算机科学最基本、最古老的问题:排序问题。
需要特别说明的是,遗传算法虽然可以用来解决排序问题,但与熟知的排序算法(快排、选择排序、冒泡等等经典排序算法)相比较,遗传算法解决排序问题效率低、且不稳定(耗时)。用遗传算法排序,只是开拓了一个解决问题的思路,并演示、说明其运作原理。遗传算法的特点是利用强大的算力,不断试错,直至找出接近最佳解的最优解。
import random
import timedef get_fitness(genes):fitness = 1for i in range(1, len(genes)):# 如果这里是 > ,则是逆序结果。if genes[i] < genes[i - 1]:fitness += 1return fitnessdef mutate(parent):child = parent[:]while True:# 从0到N中随机选择两个数作为数组下标idx1, idx2 = random.sample(list(range(len(child))), 2)if child[idx1] < child[idx2]:continueelse:# 相当于交叉child[idx1], child[idx2] = child[idx2], child[idx1]breakreturn childdef sorted(data):print("原始数据", data)parent = dataseq = 0start_time = (int(round(time.time() * 1000))) # 毫秒级时间戳while True:# print('第', seq, '轮', child)child = mutate(parent)fitness = get_fitness(child)# 适应度1为进化目标if fitness <= 1:breakelse:# 进化到下一代parent = childseq = seq + 1end_time = (int(round(time.time() * 1000))) # 毫秒级时间戳print('总计', seq, '轮')print('算法耗时', end_time - start_time, '毫秒')print('排序结果', child)if __name__ == '__main__':data = [1, 2, 3, 4, 5, 6, 7, 8]for i in range(10):print('-----')random.shuffle(data)sorted(data)
代码运行输出:
-----
原始数据 [1, 5, 3, 7, 8, 6, 2, 4]
总计 9187 轮
算法耗时 47 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
-----
原始数据 [8, 7, 3, 1, 6, 4, 5, 2]
总计 11847 轮
算法耗时 63 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
-----
原始数据 [8, 6, 7, 1, 2, 4, 3, 5]
总计 127271 轮
算法耗时 627 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
-----
原始数据 [1, 6, 8, 7, 5, 4, 3, 2]
总计 19282 轮
算法耗时 95 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
-----
原始数据 [1, 3, 8, 5, 7, 4, 2, 6]
总计 200925 轮
算法耗时 1077 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
-----
原始数据 [2, 6, 4, 7, 1, 3, 5, 8]
总计 18535 轮
算法耗时 95 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
-----
原始数据 [8, 4, 3, 7, 5, 1, 2, 6]
总计 22467 轮
算法耗时 94 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
-----
原始数据 [3, 8, 7, 5, 1, 6, 4, 2]
总计 71436 轮
算法耗时 377 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
-----
原始数据 [5, 8, 2, 1, 3, 7, 4, 6]
总计 82190 轮
算法耗时 392 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
-----
原始数据 [2, 5, 4, 8, 3, 1, 6, 7]
总计 18916 轮
算法耗时 110 毫秒
排序结果 [1, 2, 3, 4, 5, 6, 7, 8]
把12345678这8个数字打乱顺序,排序,跑10轮。
遗传算法完成排序:
(1)在mutate函数里面对传递过来的亲代染色体进行“变异”。具体方法是随机选择数组长度范围内的两个下标,然后比较下标对应的两个值大小关系,如果第1个小于第2个,跳过;否则,交换这两个数值。
(2)在sorted函数里面,循环迭代的对亲代数组变异,因为进化的目标适应度是1,所以,当变异后的子代染色体适应度为1时候,退出循环,也即排序结束。若适应度不为1,那么将子代染色体放回亲代,继续变异,直到适应度为1。
遗传算法(Genetic Algorithm,GA)的轮盘赌选择,python_zhangphil的博客-CSDN博客程序跑了10次,每一次在rws()函数中产生一个随机概率数值r,然后在rws()函数内部比较r与累积概率的大小,确定被选中的概率是p[?输出结果证实了我们的猜想,p[1]=0.49被选中的概率最高,在10次的随机筛选中,p[1]=0.49被选中了4次(4/10)。显然,p(s2)=0.49概率最大,被选中的概率最高。遗传算法(Genetic Algorithm,GA)的轮盘赌选择,python。一个简单的例子说明在遗传算法中使用的轮盘赌方法。https://blog.csdn.net/zhangphil/article/details/128906624
遗传算法(Genetic Algorithm,GA)实现数据排序,python相关推荐
- uniform crossover(均匀交叉),遗传算法(Genetic Algorithm,GA),python
uniform crossover(均匀交叉),遗传算法(Genetic Algorithm,GA),python 假设有双亲p1和p2的二进制基因染色体表达,子代的基因以等概率(50%)来自双亲中之 ...
- 遗传算法 python 简书_遗传算法(Genetic Algorithm ,GA)学习笔记
1 遗传算法的概念 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA) 是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程 ...
- 路径算法:遗传算法 (Genetic Algorithm, GA)
遗传算法简介 遗传算法是受自然进化理论启发的一系列搜索算法.通过模仿自然选择和繁殖的过程,遗传算法可以为涉及搜索,优化和学习的各种问题提供高质量的解决方案.同时,它们类似于自然进化,因此可以克服传统搜 ...
- 优化算法之遗传算法(Genetic Algorithm, GA)
目录 概述 相关术语 遗传算法的实现过程 遗传算法的一般步骤 代码描述 解码 相关问题 适应度函数 选择函数 小问题: 交叉.变异 相关问题 完整代码 疑惑点(感谢大佬解答) 个人修改代码(类形式) ...
- 遗传算法 python 简书_【算法】超详细的遗传算法(Genetic Algorithm)解析
00 目录 遗传算法定义 生物学术语 问题导入 大体实现 具体细节 代码实现 01 什么是遗传算法? 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物 ...
- 遗传算法(Genetic Algorithm)从了解到实例运用(上)(python)
前言 本文主要介绍了数学建模常用模型遗传算法,从原理出发到编程实现再到实例运用.笔者参与过大大小小五次数学建模,个人觉得该优化算法值得一学. 提示:以下是本篇文章正文内容 一.遗传算法由来 遗传算法的 ...
- (二)遗传算法(Genetic Algorithm, GA)流程
(二)遗传算法(Genetic Algorithm, GA)流程 1. 遗传算法流程 2. 关键参数说明 1. 遗传算法流程 一点说明: 在遗传算法中,将nnn维决策向量X\bf{X}X=[x ...
- 遗传算法 python包_遗传算法 (Genetic Algorithm)
遗传算法( Genetic Algorithm )又叫基因进化算法,或进化算法.属于启发式搜索算法一种,这个算法比较有趣,并且弄明白后很简单,写个 100-200 行代码就可以实现.在某些场合下简单有 ...
- 算法高级(4)-遗传算法(Genetic Algorithm)简介
01 什么是遗传算法? 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过 ...
最新文章
- dw8与mysql的连接,VS2019连接mysql8.0数据库的教程图文详解
- 脑植入芯片实现脑机交互,脑神经链会如星链般放大马斯克的光环吗
- 《上海市数据中心建设导则(2021版)》
- html自定义工具条,为Autodesk Viewer添加自定义工具条的更好方法
- RHEL5.7下iptabels防火墙配置(下)
- 初中计算机课教什么时候,初中计算机教学课程教学方法探讨
- 【转载】谷歌是如何做代码审查的
- gitlab和jenkins发布代码
- rest-framework之版本控制
- 计算机科学常见工具书清单、项目开发清单
- ubuntu 启动进入initramfs错误解决办法
- 国人项目,上Github全球热榜了!! 来瞅瞅,你会发现相见恨晚
- RK3288 查看时钟树
- excel 第六次人口普查_第六次全国人口普查表短表
- 盘点:光通信的五个发展趋势
- 软件测试职业目标具体计划范文,关于测试的工作计划
- 伪标签Web2.0?
- Ubuntu常用软件安装与问题解决(持续更新)
- 数据管理-数据质量检测
- html5在线客服源码 websocket c# socket 实现,可扩展 im 即时通讯 完整的源代码,在线聊天