《Java遗传算法编程》—— 第1章 简介 1.1 什么是人工智能

第1章 简介

Java遗传算法编程
数字计算机和信息时代的崛起,已经彻底改变了现代的生活方式。数字计算机的发明,使我们能够让生活的许多领域数字化。这种数字化让我们将许多繁琐的日常任务外包给计算机,而这些任务以前可能需要人来完成。这方面的一个日常例子是字处理应用程序,它们内置拼写检查功能,可以自动检查文档的拼写和语法错误。

随着计算机变得越来越快,计算能力越来越强,我们已经能够用它们来执行越来越复杂的任务,如理解人类语言,甚至比较准确地预测天气。这种不断的创新,让我们能够将越来越多的任务外包给计算机。今天的计算常常能够每秒执行数十亿次操作,尽管它们在技术上能力很强,除非它们能够学习,让自己更好地适应提交给它们的问题,它们将永远只限于执行人类为它们写下的各种规则或代码。

人工智能及其子集遗传算法的领域,正开始解决今天的数字世界所面临的一些更复杂的问题。通过在真实世界应用程序中实现遗传算法,人们有可能解决较传统的计算方法几乎不能解决问题。

1.1 什么是人工智能

1950年,阿兰·图灵(数学家和早期计算机科学家)写了一篇著名的论文,题为“Computing Machinery and Intelligence(计算机器和智能)”,其中他提出问题:“计算机能思考吗”?他的问题导致了许多争论:智能到底是什么?计算机的根本局限是什么?

许多早期计算机科学家相信,计算机不仅能够展示类似智能的行为,而且通过短短几十年的发展,它们将达到人类的智力水平。这一观点由司马贺(Herbert A. Simon)在1965年提出,他宣称,“机器将有能力,在20年内,做任何人能做的工作”。当然,现在,在50年后的今天,我们知道司马贺的预测远离现实,但在当时,许多计算机科学家同意他的立场,并确立他们的目标是建立一个“强AI”机。一个强AI机就是一个机器,在面对给它的任何任务时,它至少像人类一样智能。

今天,在阿兰·图灵的著名问题被提出50多年之后,机器是否最终能够像人类一样思考,基本上仍然悬而未决。直到今天,他关于“思考”意味着什么的论文和思想,仍然引得哲学家和计算机科学家争论不休。

虽然我们还远远未能创造可以复制人类智能的机器,但在过去几十年里,我们无疑在人工智能上取得了显著的进步。自20世纪50年代以来,对“强AI”和发展媲美人类的人工智能的关注,已经开始转向对“弱AI”的偏爱。弱AI是发展更狭窄领域的智能机,这在短期内更容易实现。这种较窄的关注点让计算机科学家创造实用的、貌似智能的系统,例如苹果公司的Siri和谷歌公司的自动驾驶汽车。

在创建弱AI系统时,研究人员通常会专注于建造一个系统或机器,它只拥有解决一个较小问题所需的“智能”。这意味着我们可以使用更简单的算法,使用更少的计算能力,同时还取得成果。相比较而言,强AI研究专注于建造一个智能机器,足以能够解决人类所能解决的任何问题。由于问题的范围很广,这使得构建强AI的最终产品的可能性小很多。

仅在几十年里,弱AI系统已经常见于我们的现代生活方式中。从下棋到帮助人类驾驶喷气式战斗机,弱AI系统已经证明,它们在解决问题时非常有用,这些问题一度被认为只有人类能解决。随着数字计算机变得越来越小、计算能力越来越强,这些系统的可用性很可能随时间推移而增加。

时间: 2024-08-04 05:23:12

《Java遗传算法编程》—— 第1章 简介 1.1 什么是人工智能的相关文章

《Java遗传算法编程》—— 第2章 实现一个基本遗传算法 2.1 实现之前

第2章 实现一个基本遗传算法 Java遗传算法编程 在本章中,我们将开始探索实现基本遗传算法的技术.本章开发的程序,将在后面的章节中进行修改,加入功能.同时,我们也将探讨基于遗传算法的参数和配置,以及它的性能会如何变化. 要尝试运行本节中的代码,需要先在计算机上安装Java JDK.你可以从Oracle的网站上免费下载并安装Java JDK: oracle.com/technetwork/java/javase/downloads/index.html 除了安装Java JDK,你也可以选择安装

《Java遗传算法编程》—— 导读

目录 第1章 简介1.1 什么是人工智能1.2 生物学类比1.3 进化计算的历史1.4 进化计算的优势1.5 生物进化1.6 基本术语1.7 搜索空间1.8 参数1.9 基因表示1.10 终止1.11 搜索过程1.12 参考文献 第2章 实现一个基本遗传算法2.1 实现之前2.2 基本遗传算法的伪代码2.3 关于本书的代码示例2.4 基本实现2.5 轮盘赌选择2.6 交叉方法2.7 交叉伪代码2.8 交叉实现2.9 小结2.10 练习 第3章 机器人控制器 第4章 旅行商 第5章 排课 第6章

《Java遗传算法编程》—— 2.4 基本实现

2.4 基本实现 为了消除所有不必要的细节,保持最初的实现容易尝试,本书中介绍的第一个遗传算法将是简单的二进制遗传算法. 二进制遗传算法比较容易实现,对于解决许多种优化问题,它可能是非常有效的工具.你可能还记得第1章提到,二进制遗传算法是由Holland(1975)提出的原创的遗传算法. 2.4.1 问题 首先,让我们回顾一下"全一"问题,它是可以用二进制遗传算法来解决的一个非常基本的问题. 该问题不是很有趣,但作为一个简单的问题,它的作用是强调所涉及的基本技术.顾名思义,该问题就是发

《Java遗传算法编程》—— 2.9 小结

2.9 小结 在本章中,你已经学会了实现遗传算法的基本知识.本章开头的伪代码提供了一个通用的概念模型,针对本书其余部分所有要实现的遗传算法:每个遗传算法将初始化并评估种群,然后进入一个循环,进行交叉.变异和再评估.仅当终止条件满足时,才退出循环. 在本章中,你建立了遗传算法的支持组件,尤其是Individual和Population类,在后面的章节中基本上会复用它们.然后你专门建立了GeneticAlgorithm类,具体解决"全一"问题,并成功地运行了它. 你还了解了以下内容:虽然每

《Java遗传算法编程》—— 2.8 交叉实现

2.8 交叉实现 为了实现轮盘赌选择,在GeneticAlgorithm类的任意位置增加一个selectParent( )方法. public Individual selectParent(Population population) { // Get individuals Individual individuals[] = population.getIndividuals(); // Spin roulette wheel double populationFitness = popu

《Java遗传算法编程》—— 1.3 进化计算的历史

1.3 进化计算的历史 20世纪50年代,进化计算首次作为一种优化工具被尝试,当时的计算机科学家将达尔文的生物进化论思想应用于候选解构成的种群.他们建立理论,认为有可能应用进化算子,如交叉(它是生物繁殖的模拟)和变异(这是新的遗传信息添加到基因组中的过程).这些算子和选择压力共同作用,让遗传算法在一段时间后,能够"进化"出新的解. 在20世纪60年代,"进化策略"(应用自然选择和进化思想的一种优化技术)最初由Rechenberg(1965,1973)提出,他的想法后

《Java遗传算法编程》—— 1.11 搜索过程

1.11 搜索过程 作为本章的结束,让我们一步一步地了解遗传算法背后的基本过程,如 图1-10所示. 1.遗传算法开始,初始化候选解的种群.这通常是随机提供整个搜索空间的均匀覆盖. 2.接下来,通过为种群中的每个个体分配一个适应度值,对种群进行评估.在这个阶段,我们常常要注意当前最优解,以及种群的平均适应度. 3.评估后,根据终止条件集,该算法决定它是否应该终止搜索.通常这是因为该算法已达到指定的世代数量,或已经找到适当的解. 4.如果终止条件不满足,种群经过一个选择阶段,基于适应度评分,从种群

《Java遗传算法编程》—— 2.3 关于本书的代码示例

2.3 关于本书的代码示例 本书中的每一章都作为一个包,放在附带的Eclipse项目中.每个包都至少有4个类. GeneticAlgorithm类,它抽象了遗传算法本身,为接口方法提供了针对问题的实现,如交叉.变异.适应度评估和终止条件检查. Individual类,它表示单个候选解及其染色体. Population类,它表示一个种群或个体的一个世代,并对它们应用群组级别的操作. 包含main方法的类,包括一些引导代码,前面伪代码的具体版本,以及具体问题可能需要的任何辅助工作.这些类根据它解决的

《Java遗传算法编程》—— 2.2 基本遗传算法的伪代码

2.2 基本遗传算法的伪代码 基本遗传算法的伪代码如下: 1: generation = 0; 2: population[generation] = initializePopulation(populationSize); 3: evaluatePopulation(population[generation]); 3: While isTerminationConditionMet() == false do 4: parents = selectParents(population[ge