初识遗传算法

遗传算法的实现主要包含以下7个重要问题:

1、染色体的编码

2、群体初始化

3、适应值评估

4、选择种群

5、种群交配

6、种群变异

7、算法流程

下面分别简单的介绍

1、染色体编码

  解决问题解的表示就是染色体的编码方式,编码方式的选择会对后面的操作造成重要影响,常用的比较简单的编码方法

二进制编码方法(Binary Representation)和浮点数编码方法(Float Point Representation)

2、群体初始化

  采用随机数初始化的方法,对染色体的每一维变量进行初始化赋值。

3、适应值评价

  评估函数用于评估各个染色体的适应值,进而区分优劣,评估函数常常根据问题的优化目标来确定。

4、选择算子

  遗传算法的传统选择算子的作用 是根据适应值函数的值从种群中选出优秀的个体, 包括轮盘赌选择锦标赛选择

5、交配算子

  交配算子是获取新的优秀个体的重要手段,两个父体通过交配操作交换各自优秀的基因,从而获得更加优秀的个体。

交配算子有:部分匹配交配、顺序交配(OX交配)、循环交配和边重组等。

6、变异算子

   变异操作发生在某个染色体的某个基因上,它将可变性引入群体中,增强了群体的多样性,从而提供了从局部最优

中跳出来的一种手段。变异方法也是一个随机的、盲目的变异,因此需要使用比较小的变异概率(pm)来控制以避免造

成种群的破坏。经常使用的变异算子有“基于位置的变异”和“基于次序的变异”。

7、算法流程

  step1:初始化规模为N的群体,其中染色体的每个基因的值采用随机数产生。当前进化代数g=0

  step2:采用评估函数对群体所有染色体进行评价,计算每个染色体的适应值,保存适应值最大的染色体best。

  step3:采用合适的选择算法对群体的染色体进行选择操作,产生同规模的种群。

  step4:按给定的交配概率从种群中选择染色体进行交配,没有交配的染色体直接复制进入新的种群。

  step5:按给定的变异概率对新种群染色体的基因进行变异操作,变异后的染色体取代原有染色体进入新群体,未变异

的染色体直接进入新群体。

  step6:变异后的新种群取代原有群体,重新计算染色体的适应值,若群体最大适应值高于best的适应值,则群体最大

适应值对应的染色体替代best。

  step7:当前进化代数g加1,如果g达到规定的最大进化代数或者best达到规定的误差要求,算法结束,否则返回step3

在后面的博客中会写遗传算法的应用,初步决定是解方程和TSP问题。

时间: 2024-10-02 02:42:24

初识遗传算法的相关文章

初识遗传算法 蚁群算法

今天看这篇文章 Link 里面提到遗传算法.蚁群算法等. 遗传算法看这一篇: https://www.zealseeker.com/archives/python-genetic-algorithm/ 这篇文章比较了几种寻找最大值的方法: http://blog.csdn.net/emiyasstar__/article/details/6938608 爬山法.模拟退火和遗传算法 是解决寻找最大值问题的几种常见的算法 http://www.cnblogs.com/Leo_wl/p/5665715

遗传算法的简单应用-求解方程

上篇初识遗传算法讲述了遗传算法的基本思想,这篇博客就用遗传算法求解方程. 具体的如下: 求解方程 -x^3+7*x+13=0 在[3,4]区间的解,解精确到0.001,交叉概率0.7 变异概率0.01,迭代次数为100,字符编码长度为10(二进制编码) 首先简单的分析一下: 1.编码与解码 题目要求的是采用二进制的编码方式来实现,既然已经编码了,自然就需要解码,给定的10 位二进制编码表示的区间范围就是0~1023,题目的区间是[3,4]很自然的就能想到10位二进 制编码中的0表示是就是[3,4

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

初识数组排序!!!!

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

初识操作系统和linux

初识操作系统和linux 1.计算机系统由硬件系统和软件系统两大部分组成:是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动.高速地处理,然后把处理结果输出的现代化智能电子设备. 2.世界上第一台计算机是1946年诞生在美国宾州大学. 3.冯·诺依曼体系结构:1946年数学家冯·诺依曼于提出计算机硬件系统由运算器.控制器.存储器.输入设备.输出设备.摩根定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍.现在计算机技术进本很难遵

多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c

遗传算法中的交叉操作是 对NSGA-II  源码分析的  最后一部分, 这一部分也是我 从读该算法源代码和看该算法论文理解偏差最大的  函数模块. 这里,首先提一下,遗传算法的  交叉操作.变异操作都是需要设定概率的, 即交叉概率和变异概率. 假设种群个体 大小为  popsize ,  那么交叉操作需要进行 popsize/2 次 ,   变异操作需要进行 popsize 次, 其中每次操作的时候都需要随机生成一个随机数来与给定的概率进行判断,若小于给定的概率则继续执行否则退出该操作. 如果继

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

初识React

原文地址:北云软件-初识React 专注于UI 在MVC分层设计模式中,react常被拿来实现视图层(V).React不依赖于技术栈的其他部分,因此可以方便的在现有项目中尝试用它来实现一个小特性. 虚拟DOM React从DOM中抽象出来,给出一种更简洁的编程模型,且性能表现更好.能够通过NodeJS实现服务端渲染,通过React Native开发原生app. 数据流React实现单向.响应式数据流,减少boilerplate且比传统数据绑定更容易理解. 简洁的组件React的组件都实现了一个r

泛型的几种类型以及初识webform

今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧.首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法:最后简单的认识了webform,实现了一个简单的功能. 一.泛型 定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化.可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念.C#中提供了五种泛型,类,结构,接口,委托和方法.下面举例说明可能更容易理解, class MyStack<T>