本节书摘来异步社区《Java遗传算法编程》一书中的第1章,第1.5节,作者: 【英】Lee Jacobson(雅各布森) , 【美】Burak Kanber(坎贝尔),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.5 生物进化

生物通过自然选择的过程进化,这首先由达尔文(1859)在他的著作《物种起源》中提出。正是他的生物进化的概念,启发了早期的计算机科学家,转而用生物进化作为其优化技术的模型,并在进化计算的算法中实现。

因为在遗传算法中使用的许多思想和概念直接来自生物进化,对该主题有基本的了解,有利于深入了解这个领域。既然这样,在开始探索遗传算法之前,让我们先浏览一下生物进化的(有点简化)基础知识。

所有的生物都含有DNA,它编码了构成生物体的所有不同性状。DNA可以看成是生命的“说明书”,以便从头开始创建生物体。改变生物体的DNA会改变其性状,诸如眼睛和头发的颜色。DNA由单个基因组成,这些基因负责编码生物体的具体性状。

生物体的基因被分组放在染色体中,一套完整的染色体组成一个生物体的基因组。所有生物体至少具有一条染色体,但通常含有更多,例如人类有46条染色体,有些物种有超过1000条染色体。在遗传算法,我们通常将染色体称为候选解。这是因为遗传算法通常使用一条染色体来编码候选解。

对于特定性状的各种可能设置被称为“等位基因”,性状编码在染色体中的位置被称为“基因座”。我们将特定的基因组称为“基因型”,该基因型编码的物理生物体被称为“表现型”。

两个生物体交配时,来自两个生物体的DNA被带到一起,它们结合的方式导致产生的生物体(通常被称为的后代)从第一个亲代得到50%的DNA,并从第二个亲代得到另外50%的DNA。来自生物体DNA的基因偶尔会发生变异,为它提供双亲所没有的DNA。通过为种群增加以前没有的基因,这些变异为种群提供了遗传多样性。种群中的所有可能的遗传信息被称为种群的“基因库”。

如果产生的生物体对环境适应得足够好,能够生存,它自己很可能交配,让它的DNA继续留在未来种群中。然而,如果产生的生物体对环境适应得不够好,不能生存并最终交配,它的遗传物质将不会传播到未来种群中。这就是为什么进化偶尔被称为适者生存,因为只有适者才能达到个体生存并传递它们的DNA。正是这种选择性的压力,慢慢将进化导向发现越来越适应、越来越好的个体。

生物进化的一个实例
为了阐明这个过程如何逐渐导致进化出越来越适应的个体,请考虑下面的例子。

在一个遥远的星球上,存在一个物种,它的形状是白方块。

白方块的物种已经和平生活了几千年,直到最近,一个新的物种赶到,即黑圆圈。

黑圆圈物种是食肉动物,并开始以白方块种群为食。

白方块没有任何办法来保护自己并抵抗黑圆圈。直到有一天,一个幸存的白方块随机变异,从一个白方块变成一个黑方块。黑圆圈不再以新的黑方块为食,因为它的颜色和自己一样。

一些幸存的方块种群交配,造就了新一代方块。这些新方块继承了黑方块的颜色基因。

然而,白方块继续被吃掉......

最后,由于黑方块的进化优势,看起来类似黑圆圈,他们不再被吃了。现在,只剩下黑方块了。

黑方块不再畏惧黑圆圈,它们再一次自由地生活在和平之中。

《Java遗传算法编程》—— 1.5 生物进化相关推荐

  1. java遗传算法编程_遗传算法示例程序

    评论 # re: 遗传算法示例程序  回复  更多评论 2007-05-06 00:18 by 橙子的希望 我可不可以表示晕倒? # re: 遗传算法示例程序[未登录]  回复  更多评论 2007- ...

  2. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

  3. 【读书笔记】Java并发编程的艺术

    第一章 并发编程的挑战 上下文切换 上下文切换概述 切出:一个线程被剥夺处理器的使用权而暂定运行 切入:一个线程被选中占用处理器或者继续运行 上下文:在这种切入切出的过程中,操作系统需要保存和恢复相应 ...

  4. 《Java并发编程的艺术》读后笔记-Java中的并发工具类(第八章)

    文章目录 <Java并发编程的艺术>读后笔记-Java中的并发工具类(第八章) 1.等待多线程完成的CountDownLatch 2.同步屏障CyclicBarrier 2.1 Cycli ...

  5. [书]java并发编程的艺术笔记

    本文属于自己整理的读书笔记,便于回顾.内容绝大部分来自书籍:java并发编程的艺术,版权归原作者所有. 第1章 并发编程的挑战 1.多线程一定比单线程快? 不一定,如同在同时阅读两本书时的来回切换切换 ...

  6. java 密钥工厂 desede_20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...

  7. Java学习总结:52(Java网络编程)

    Java网络编程 开发第一个网络程序 java.net包提供了网络编程有关的开发工具类,在此包中有一下两个主要的核心操作类. ServerSocket类:是一个封装支持的TCP协议的操作类,主要工作在 ...

  8. Java并发编程71道面试题及答案

    Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...

  9. Java并发编程有多难?这几个核心技术你掌握了吗?

    本文主要内容索引 1.Java线程 2.线程模型 3.Java线程池 4.Future(各种Future) 5.Fork/Join框架 6.volatile 7.CAS(原子操作) 8.AQS(并发同 ...

最新文章

  1. 开启一个新的终端并执行特定的命令
  2. 首个波士顿动力机器狗买家秀:化身监工,确认路线后就能自动巡航
  3. windows 程序设计_Python 在windows环境简单搭建
  4. netty系列之:使用netty搭建websocket客户端
  5. [渝粤教育] 四川农业大学 宏观经济学 参考 资料
  6. 如何学习机器学习、看待算法竞赛?粉丝精选留言
  7. OSI参考模型和TCP/IP参考模型-详解
  8. Web框架简介+第一个例子(博主萌新,哪里写的不好希望大家指出,谢谢)
  9. ORACLE数据库的模式对象的管理与维护
  10. win10 win7 一键获取TrustedInstaller权限
  11. Android中OKHttp的基本用法(Get、Post、上传文件等)
  12. 有什么软件可以连接到linux系统升级,linux系统和应用程序升级方法
  13. 关于c4d默认渲染器的玻璃材质调试
  14. 折下我的翅膀,送你飞翔
  15. 再论VS.NET中的安装部署文件
  16. 台电平板teclast X16HD碎屏拆机更换日志
  17. 红牛农场JAVA_JAVA内部类与异常类
  18. 生鲜配送APP软件开发
  19. 倾城北栀:4.30日晚间行情分析以及操作策略
  20. 潜入浅出--通信中的频带利用率,以MASK.MPSK作为例子

热门文章

  1. php 去重_php求两数组交集的四种方法详解
  2. RxJava 2.x 入门
  3. Permission denied error: unable to index file .vs/Trip2015/v15/Server/sqlite3/db.lock fatal: adding
  4. 巧妙的 排序+去重——C语言
  5. 计算机专业i7 7500u,8550U比7500U提升多少 8550U和7500U的区别-太平洋电脑网
  6. python 模拟浏览器登录获取cookie_使用cookielib模拟浏览器在python中获取url
  7. hao123电脑版主页_生活小技巧003:电脑主页被恶意篡改怎么办?
  8. python怎样实现封装_大牛教你如何封装 Python 代码,实现自动发送邮件只需三行代码...
  9. matlab分类器设计,简单分类器的MATLAB实现.doc
  10. 魔兽世界怀旧服最新服务器开发时间,怀旧服开70最新消息汇总 魔兽怀旧服TBC开放时间几个阶段?...