遗传算法

实例讲解遗传算法——基于遗传算法的自动组卷系统【理论篇】

百般思念 提交于 2019-12-20 23:25:52
一、遗传算法介绍 1.1 遗传算法概要 遗传算法(Genetic Algorithm,简称GA)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法,由美国的J.Holland教授1975年首先提出。遗传算法是一种模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,通过模拟自然进化过程搜索最优解,它常用来解决多约束条件下的最优问题。 遗传算法是从代表问题可能潜在的解集的一个种群开始的,而一个种群则由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,它决定了个体的形状的外部表现。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,往往进行简化,如二进制编码,初始种群产生之后,按照适者生存和优胜劣汰的原理,逐代演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度大小挑选个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。 遗传算法提供了一种求解复杂系统优化问题的通用框架。它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于很多学科。遗传算法的主要应用领域有:函数优化、组合优化

MATLAB遗传算法学习 Sheffield的gatbx (1)

爱⌒轻易说出口 提交于 2019-12-20 10:02:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 入门matlab遗传算法的时候,如果你找来一本书,例如雷英杰的《matlab遗传算法工具箱及其应用》,先看概念,看数学原理,看懂了,看例子,再开始写程序,将是一个“漫长”的过程。个人认为最快的方法是从例子开始,先简单粗略地扫过几个重要的概念、算法流程图,然后找一本书,跟着书敲出例子,在命令窗口下一行一行地看每一句代码出来什么结果。 matlab遗传算法方面好像没有什么好书,中文的书好像最流行 《matlab遗传算法工具箱及其应用》,我看的就是这一本。书中的第一个例子是一元函数和优化,因为是扫描版,只能自己慢慢敲,贴在这里,需要的直接复制粘贴吧 注意你复制粘贴后,可能引号、逗号会变成中文格式,在matlab中显示为红色,你要改一下。 Figure(1);%(注:原文F大写,应该小写figure(1),下面的figure(2)也一样。) fplot(‘variable .* sin(10 * pi * variable) + 2.0’,[-1, 2]);%画出目标函数图 %定义遗传算法参数 NIND = 40;%个体数目 MAXGEN = 25;%最大遗传代数 PRECI = 20;%变量的二进制位数(注:也就是精度) GGAP = 0.9;%代沟 trace = zeros(2, MAXGEN);%寻优结果

实例讲解遗传算法——基于遗传算法的自动组卷系统【理论篇】

穿精又带淫゛_ 提交于 2019-12-20 09:59:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、遗传算法介绍 1.1 遗传算法概要 遗传算法(Genetic Algorithm,简称GA)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法,由美国的J.Holland教授1975年首先提出。遗传算法是一种模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,通过模拟自然进化过程搜索最优解,它常用来解决多约束条件下的最优问题。 遗传算法是从代表问题可能潜在的解集的一个种群开始的,而一个种群则由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,它决定了个体的形状的外部表现。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,往往进行简化,如二进制编码,初始种群产生之后,按照适者生存和优胜劣汰的原理,逐代演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度大小挑选个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。 遗传算法提供了一种求解复杂系统优化问题的通用框架。它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性

标准遗传算法(二进制编码 python实现)

≯℡__Kan透↙ 提交于 2019-12-20 00:20:57
代码地址:https://github.com/guojun007/binary_sga 种群初始化: binary_sga / population_init / population_init.py #种群初始化函数 def population_init(population, N, V, nbits): #自变量个数V并没有用到 del population[:] for i in xrange(N): tempIndividual=[] for j in nbits: tempVal=[] for k in xrange(j): tempVal.append(random.randint(0, 1)) tempIndividual.append(tempVal) population.append(tempIndividual) 选择操作:(轮盘赌选择) binary_sga / selection / selection.py #!/usr/bin/env python #encoding:UTF-8 import copy import random #轮盘赌选择法 def selection(population, xbin): s=sum(xbin) temp=[k*1.0/s for k in xbin] temp2=[] s2=0 for k in temp:

曼孚科技:AI算法领域常用的39个术语(上)

若如初见. 提交于 2019-12-11 17:54:20
​算法是人工智能(AI)核心领域之一。 本文整理了算法领域常用的39个术语,希望可以帮助大家更好地理解这门学科。 Attention 机制 Attention的本质是从关注全部到关注重点。将有限的注意力集中在重点信息上,从而节省资源,快速获得最有效的信息。 Encoder-Decoder 和 Seq2Seq Encoder-Decoder 模型主要是 NLP 领域里的概念。它并不特指某种具体的算法,而是一类算法的统称。Encoder-Decoder 算是一个通用的框架,在这个框架下可以使用不同的算法来解决不同的任务。 Encoder-Decoder 这个框架很好的诠释了机器学习的核心思路: 将现实问题转化为数学问题,通过求解数学问题,从而解决现实问题。 Seq2Seq(是 Sequence-to-Sequence 的缩写),就如字面意思,输入一个序列,输出另一个序列。这种结构最重要的地方在于输入序列和输出序列的长度是可变的。 Q-Learning Q学习是强化学习中基于价值的学习算法。 AdaBoost AdaBoost是Adaptive Boosting的缩写。 AdaBoost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。 随机森林(Random Forest)

《基于遗传算法的自动组卷系统设计与实现 》17

拈花ヽ惹草 提交于 2019-12-07 18:45:41
一、基本信息 标题:《基于遗传算法的自动组卷系统设计与实现 》 时间:2016 来源:西北农林科技大学 关键字:自动组卷;遗传算法;早熟;收敛 二、研究内容 问题定义:针对传统的组卷算法组卷速度慢、成功率较低、试卷质量不高的问题,本文提出结合BP算法对遗传算法中遗传因子进行学习训练,提高染色体的适应度,采用目标试卷的题数进行实数编码替代传统的二进制编码方式,对染色体长度进行优化,解决传统遗传算法出现早熟、收敛慢的现象。利用优化的遗传算法设计并实现一个自动组卷系统。 三、流程图 四、总结 通过阅文献《基于遗传算法的自动组卷系统设计与实现 》资料,对自动组卷系统进行需求分析,对其功能 进行了详细设计,遗传算法组卷。其算法采用试卷总数和试题数目对应 关系映射(编码)成染色体,大大缩短染色体长度,充分利用传统遗传算法的全局搜索, 再结合 BP 算法的优势,解决了传统遗传算法的早熟和收敛慢的问题。以 B/S 架构技术为依托,设计了基于遗传算法的自动组卷系统。 来源: https://www.cnblogs.com/q1w2e3r4/p/12002862.html

《基于遗传算法的智能组卷在线考试系统设计与实现》18

余生颓废 提交于 2019-12-07 18:31:27
一、基本信息 标题:《基于遗传算法的智能组卷在线考试系统设计与实现》 时间:2014 来源:中国科学院大学 关键字:智能组卷 、遗传 算法 ,在线考试 ,算子,适应度函 数 二、研究内容 问题定义:随着对智能组卷系统研宄的不断深入 , 人们已经初见将遗传算法等人工智能算法与组卷问题相结合 , 并应用与智能组卷策略中 , 并取得了一系列的研宄成果 ,以计算机智能组卷及在线考试系统为研宄背景 , 着眼于提高智能组卷系统的组卷速度与组卷质量等 问题 , 深入研宄遗传算法在智能组卷系统中的应用 。 三、流程图 四、总结 计算机在线考试系统是计算机辅 助教育系统中的重要核心 , 而考试系统的核心即为智能组卷 , 一个科学 、 完善 、安全的智能组卷在线考试系统可以有效地对学生的成绩进行测试 , 科学地评价教师的教学效果 , 本文即针对智能组卷算法以及在线考试系统的设计与实现展开研宄 。 来源: https://www.cnblogs.com/q1w2e3r4/p/12002885.html

是AI就躲个飞机-纯Python实现人工智能

半腔热情 提交于 2019-12-06 16:23:16
你要的答案或许都在这里: 小鹏的博客目录 MachineLP的Github(欢迎follow): https://github.com/MachineLP 代码下载: Here 。 很久以前微信流行过一个小游戏:打飞机,这个游戏简单又无聊。在2017年来临之际,我就实现一个超级弱智的人工智能(AI),这货可以躲避从屏幕上方飞来的飞机。本帖只使用纯Python实现,不依赖任何高级库。 本文的AI基于 neuro-evolution ,首先简单科普一下neuro-evolution。从neuro-evolution这个名字就可以看出它由两部分组成-neuro and evolution,它是使用进化算法(遗传算法是进化算法的一种)提升人工神经网络的机器学习技术,其实就是用进化算法改进并选出最优的神经网络。 neuro-evolution 定义一些变量: import math import random # 神经网络3层, 1个隐藏层; 4个input和1个output network = [4, [16], 1] # 遗传算法相关 population = 50 elitism = 0.2 random_behaviour = 0.1 mutation_rate = 0.5 mutation_range = 2 historic = 0 low_historic = False

《基于改进遗传算法智能组卷系统的研究 》

ε祈祈猫儿з 提交于 2019-12-06 10:52:56
一、基本信息 标题:《基于改进遗传算法智能组卷系统的研究 》 时间:2013 来源: 电子科技大学硕学位论文 关键字:智能组卷,遗传算法,收敛性,算子,适应度函数 二、研究内容 内容:基于对组卷问题约束条件的分析,建立试卷矩阵数学模型,进而提出可以 存储试卷各种属性指标和适应值的编码方法,可以较好的避免重复计算适应值, 同时,为避免解码过程和提高运算效率,将试题转换为遗传算法的基因。为避免组卷过程中的知识点冲突,改进了遗传算法,提出了针对变异算子 的分段多点变异策略和针对杂交算子的一种分段多点杂交策略。为保持种群的多样性,本文也提出了一种以知识点为基本依据,产生答题 时间、题型分布、知识点等基本要求的试卷初始群体的办法。该方法利用大比率 杂交和变异,可提高遗传算法收敛速度,从而提高组卷速度。论文在上述方法基础上,设计并实现了一个智能组卷系统,通过实验的验 证,本文的算法在试卷的各项指标方面得到了较好的满足。 思路: 三:总结: 首先在对现代测试理论进行深入分析的基础上,对试卷以及试题的约束 条件进行深入的探讨,根据试卷目标和试卷的核心属性和限制,建立一个新的试 卷矩阵数学模型。改进了遗传算法,采用矩阵编码对编码方法进了改进,该编码可以存储 组成的试卷个体的各种属性指标和适应值,可以提高运算速度。对遗传算子进行 改进,提出一种用于变异算子的分段多点变异策略,利用变异和大比率杂交保持

遗传算法与Java代码简单实现

丶灬走出姿态 提交于 2019-12-06 04:17:39
参阅地址: https://www.jianshu.com/p/ae5157c26af9 代码实现: public class GA { private int ChrNum = 10; //染色体数量 private String[] ipop = new String[ChrNum]; //一个种群中染色体总数 private int generation = 0; //染色体代号 public static final int GENE = 46; //基因数 private double bestfitness = Double.MAX_VALUE; //函数最优解 private int bestgenerations; //所有子代与父代中最好的染色体 private String beststr; //最优解的染色体的二进制码 /** * 初始化一条染色体(用二进制字符串表示) */ private String initChr() { String res = ""; for (int i = 0; i < GENE; i++) { if (Math.random() > 0.5) { res += "0"; } else { res += "1"; } } return res; } /** * 初始化一个种群(10条染色体) */ private String[