描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111647348
编辑推荐
复杂性科学使用计算来探索物理和社会科学。在本书中,你将使用图表、元胞自动机以及基于代理的模型来研究物理学、生物学和经济学。无论是中等水平的Python程序员还是希望学习计算机建模的学生,你都可以通过一系列工作示例、练习、案例研究和易于理解的解释深入学习复杂系统。作为Python编程与算法的理想教材,本书还有助于自学者掌握关于他们可能未曾谋面的主题与想法的宝贵经验。
内容简介
本书是美国奥林工程学院Allen B. Downey教授以20世纪80年代兴起的复杂性科学这一领域的前沿研究成果为载体,在近十几年教学科研过程中积累而成的本书。本书内容主要分三部分:第壹部分主要对复杂性科学概念、范式和科学模式,以及复杂工程和复杂性思维等方面进行了介绍;第二部分主要从图论、小世界图、无标度网络、元胞自动机等方面对其经典算法及其实现进行了介绍;第三部分主要从物理建模、自组织临界性、智能体模型、兽群算法、进化和合作进化等方面进行了介绍和实现。通过阅读本书,你将更加深入地理解图、算法分析、无尺度网络与细胞自动机,使用Python这种强大的语言所提供的高级特性。作为Python编程与算法的理想教材,本书还有助于自学者掌握关于他们可能未曾谋面的主题与想法的宝贵经验。
目 录
前言1
第1章 复杂性科学7
1.1 范式转变9
1.2 科学模型的轴线10
1.3 不同的模型用于不同的目的11
1.4 复杂的工程12
1.5 复杂性思维13
第2章 图16
2.1 图是什么16
2.2 NetworkX18
2.3 随机图20
2.4 生成图21
2.5 连通图22
2.6 生成ER图24
2.7 连通的概率26
2.8 图论算法分析27
2.9 练习29
第3章 小世界图31
3.1 Stanley Milgram31
3.2 Watts和Strogatz 32
3.3 环格33
3.4 WS图34
3.5 集聚36
3.6 最短路径长度37
3.7 WS实验38
3.8 这是什么样的解释40
3.9 广度优先搜索41
3.10 Dijkstra算法43
3.11 练习45
第4章 无标度网络48
4.1 社交网络数据48
4.2 WS模型51
4.3 度51
4.4 重尾分布53
4.5 Barabási-Albert模型55
4.6 生成BA图57
4.7 累积分布函数58
4.8 解释模型61
4.9 练习62
第5章 元胞自动机64
5.1 一个简单的CA64
5.2 Wolfram的实验65
5.3 CA的分类66
5.4 随机性67
5.5 确定性68
5.6 宇宙飞船70
5.7 普遍性71
5.8 可证伪性73
5.9 这是一个什么样的模型74
5.10 CA的实现75
5.11 互相关77
5.12 CA表79
5.13 练习79
第6章 生命游戏82
6.1 Conway的生命游戏82
6.2 生命模式83
6.3 Conway的猜想85
6.4 现实主义86
6.5 工具主义88
6.6 生命游戏实现89
6.7 练习91
第7章 物理建模93
7.1 扩散93
7.2 反应-扩散94
7.3 渗透97
7.4 相变99
7.5 分形101
7.6 分形和渗透模型103
7.7 练习104
第8章 自组织临界性106
8.1 关键系统106
8.2 沙堆107
8.3 实施沙堆108
8.4 重尾分布110
8.5 分形112
8.6 粉红噪声116
8.7 沙堆的声音117
8.8 还原论和整体论119
8.9 SOC、因果关系和预测121
8.10 练习122
第9章 基于智能体的模型125
9.1 Schelling模型125
9.2 Schelling模型的实现126
9.3 种族隔离129
9.4 Sugarscape130
9.5 财富的不平等132
9.6 实现Sugarscape134
9.7 迁移与波动特性136
9.8 涌现137
9.9 练习138
第10章 兽群、鸟群和交通堵塞141
10.1 交通堵塞141
10.2 随机扰动144
10.3 Boid145
10.4 Boid算法146
10.5 仲裁149
10.6 涌现和自由意志150
10.7 练习151
第11章 进化153
11.1 模拟进化154
11.2 适应度景观155
11.3 智能体156
11.4 模拟157
11.5 无差别158
11.6 进化的证据159
11.7 生存差异161
11.8 突变162
11.9 物种形成165
11.10 总结167
11.11 练习168
第12章 合作进化169
12.1 囚徒困境169
12.2 Nice的问题170
12.3 囚徒困境的比赛172
12.4 模拟合作进化173
12.5 Tournament类175
12.6 模拟176
12.7 结果178
12.8 结论181
12.9 练习182
附录A 阅读列表185
第1章 复杂性科学7
1.1 范式转变9
1.2 科学模型的轴线10
1.3 不同的模型用于不同的目的11
1.4 复杂的工程12
1.5 复杂性思维13
第2章 图16
2.1 图是什么16
2.2 NetworkX18
2.3 随机图20
2.4 生成图21
2.5 连通图22
2.6 生成ER图24
2.7 连通的概率26
2.8 图论算法分析27
2.9 练习29
第3章 小世界图31
3.1 Stanley Milgram31
3.2 Watts和Strogatz 32
3.3 环格33
3.4 WS图34
3.5 集聚36
3.6 最短路径长度37
3.7 WS实验38
3.8 这是什么样的解释40
3.9 广度优先搜索41
3.10 Dijkstra算法43
3.11 练习45
第4章 无标度网络48
4.1 社交网络数据48
4.2 WS模型51
4.3 度51
4.4 重尾分布53
4.5 Barabási-Albert模型55
4.6 生成BA图57
4.7 累积分布函数58
4.8 解释模型61
4.9 练习62
第5章 元胞自动机64
5.1 一个简单的CA64
5.2 Wolfram的实验65
5.3 CA的分类66
5.4 随机性67
5.5 确定性68
5.6 宇宙飞船70
5.7 普遍性71
5.8 可证伪性73
5.9 这是一个什么样的模型74
5.10 CA的实现75
5.11 互相关77
5.12 CA表79
5.13 练习79
第6章 生命游戏82
6.1 Conway的生命游戏82
6.2 生命模式83
6.3 Conway的猜想85
6.4 现实主义86
6.5 工具主义88
6.6 生命游戏实现89
6.7 练习91
第7章 物理建模93
7.1 扩散93
7.2 反应-扩散94
7.3 渗透97
7.4 相变99
7.5 分形101
7.6 分形和渗透模型103
7.7 练习104
第8章 自组织临界性106
8.1 关键系统106
8.2 沙堆107
8.3 实施沙堆108
8.4 重尾分布110
8.5 分形112
8.6 粉红噪声116
8.7 沙堆的声音117
8.8 还原论和整体论119
8.9 SOC、因果关系和预测121
8.10 练习122
第9章 基于智能体的模型125
9.1 Schelling模型125
9.2 Schelling模型的实现126
9.3 种族隔离129
9.4 Sugarscape130
9.5 财富的不平等132
9.6 实现Sugarscape134
9.7 迁移与波动特性136
9.8 涌现137
9.9 练习138
第10章 兽群、鸟群和交通堵塞141
10.1 交通堵塞141
10.2 随机扰动144
10.3 Boid145
10.4 Boid算法146
10.5 仲裁149
10.6 涌现和自由意志150
10.7 练习151
第11章 进化153
11.1 模拟进化154
11.2 适应度景观155
11.3 智能体156
11.4 模拟157
11.5 无差别158
11.6 进化的证据159
11.7 生存差异161
11.8 突变162
11.9 物种形成165
11.10 总结167
11.11 练习168
第12章 合作进化169
12.1 囚徒困境169
12.2 Nice的问题170
12.3 囚徒困境的比赛172
12.4 模拟合作进化173
12.5 Tournament类175
12.6 模拟176
12.7 结果178
12.8 结论181
12.9 练习182
附录A 阅读列表185
前 言
复杂性科学(Complexity Science)是一个交叉了数学、计算机科学和自然科学的跨学科领域,它主要关注有许多交互组件的复杂系统。
离散化模型是复杂性科学所使用的重要工具之一,它包括网络、图论、元胞自动机和基于智能体的模拟。这些工具在自然和社会科学中非常有用,有时在艺术和人类科学中也非常有用。
有关复杂性科学的概述,请参阅https://thinkcomplex.com/complex。
为什么需要学习复杂性科学呢?主要有以下几个原因:
复杂性科学是非常有用的,特别是对于自然和社会系统行为的解释。自牛顿以来,以数学为基础的物理学一直关注具有少量组件和简单交互作用的系统。这些方法对于一些应用(如天体力学)是有效的,而对于其他应用(如经济学),则不那么有用。复杂性科学提供了一个多样化和适应性强的建模工具包。
复杂性科学的许多核心结果令人惊讶。本书反复强调的一个主题是,简单的模型可以产生复杂的行为,因此,我们有时可以用简单的模型来解释现实世界中的复杂行为。
正如在第1章中所解释的,复杂性科学处于我们所认为的科学实践中慢速转变的中心。
学习复杂性科学提供了一个学习发展不同的物理和社会系统、应用编程技能并思考科学中的哲学基本问题的机会。
通过阅读本书并进行练习,你将有机会探索你可能不会遇到的主题和思想,基于Python实践编程,并学习更多关于数据结构和算法的知识。
本书的特点
技术细节
大多数关于复杂性科学的书都是为大众读者写的,而忽略了技术细节,这让能够运用这些技术的人感到沮丧。本书介绍了代码、数学并解释了模型是如何工作的。
延伸阅读
整本书包括进一步的阅读指南、论文原文(大部分都是电子版)和维基百科上的相关文章及其他来源的文章。
Jupyter笔记本
针对每一章,提供了一个Jupyter笔记本用于记录本章中用到的代码、其他的示例和动画,这些可以帮助你观察模型的作用。
练习题和解答
几乎在每一章的最后都带有解答的练习题,建议你进行练习。
书中的大部分链接都是URL链接。此机制有隐藏链接目标的缺点,但使URL更短并且不那么突兀。更重要的是,我可以在不更新书籍的情况下更新链接。 如果你发现链接断开,请告诉我,我将更改链接。
本书的读者对象
书中的实例和代码都使用Python编写。你需要了解Python编程并熟悉面向对象的特征,特别是类的使用和定义。
如果你对Python并不熟悉,可以先阅读《Think Python》,这本书比较适合从来没有接触过编程的读者。如果你有其他语言的编程经验,在学习Python时,可选的参考书有很多,网络上也有很多Python资源。
在本书中,使用了NumPy、SciPy和NetworkX,它们都是Python的程序扩展库。最好你熟悉这三个库,后文中我会再做一些介绍。
在此假设读者了解一些数学知识,在本书的某些章节中我使用了对数,在一个实例中使用了向量。
从第1版以来的变化
从第2版开始,增加了两章,一章关于进化,另一章关于合作进化。
在第1版中,每章都介绍了一个主题的背景,并提供给读者可以运行的实验。 对于第2版,我做了这些实验。每章都以实际例子的形式介绍了实施过程和结果,然后为读者提供了额外的实验。
在第2版中,我使用了一些标准库(如NumPy和NetworkX)当中的库函数来代替我自己的代码,这使结果更加简明有效,并给读者提供了学习Python扩展库的机会。
当然Jupyter笔记本也是新增的。每章都有两个笔记本,一个是本章中的代码、注释和练习题,另一个是习题答案。
最后,所有的支持软件都已更新为Python 3(但大部分不经修改即可在Python 2中运行)。
使用代码
本书当中使用的所有代码都可以从GitHub上的Git库中获得:https://thinkcomplex. com/repo。如果你对Git不熟悉,那么它就是一个版本控制系统,允许跟踪组成项目的文件。Git控制下的文件集合称为“仓库”。GitHub是一个操作界面便捷的托管服务平台,为Git仓库提供存储环境。
GitHub主页为存储库提供了几种使用代码的方法:
可以通过按右上方的Fork按钮来创建仓库的副本。如果没有GitHub账号,则需要创建一个账号。在创建仓库的副本后,你将在GitHub上拥有自己的仓库,可以使用它来跟踪你在使用本书时编写的代码。然后,可以克隆repo,也就是将文件复制到你的计算机上。
你也可以不用克隆我的仓库,即直接复制我的repo到你的电脑上。这样是不需要GitHub账号的,但是不能将你修改后的文件重新上传到GitHub的仓库中。
如果你不想用Git,可以通过绿色的“Clone or download”按钮下载你所需要文件的压缩包。
我写本书时使用了Continuum Analytics的Anaconda,这是一个免费的Python发行版,其中包含运行代码所需的所有软件包(还有更多)。我发现Anaconda易于安装。默认情况下,它需要执行用户级安装,而不是系统级安装,因此你不需要管理权限。它对Python 2和Python 3都支持。Anaconda的下载地址为:https://continuum.io/downloads。
仓库包括Python脚本和Jupyter笔记本。如果你之前没有使用过Jupyter笔记本,可以通过链接https://jupyter.org了解。
有三种使用Jupyter笔记本的方法:
在电脑上运行Jupyter
如果已经安装了Anaconda,可以在电脑终端或命令窗口输入以下命令安装Jupyter:
$ conda install jupyter
在启动Jupyter之前,使用cd进入包含代码的目录:
$ cd ThinkComplexity2/code
启动Jupyter服务器:
$ jupyter notebook
启动Jupyter服务器,它会启动默认Web浏览器或在打开的浏览器窗口中创建新选项卡。然后你就可以打开并运行Jupyter笔记本了。
在Binder上运行Jupyter
Binder是一种在虚拟机中运行Jupyter的服务。如果你点击链接https://thinkcomplex.com/binder,将打开Jupyter主页,其中包含本书的笔记以及支持的数据和脚本。
你可以运行脚本并进行修改以运行你自己的代码,但是虚拟机上的只是暂时的。如果虚拟机停止运行,那在虚拟机里对脚本所做的任何修改都会消失。
在GitHub上查看笔记
GitHub提供了笔记本的视图,可以用来阅读笔记本并查看我生成的结果,但无法修改或运行代码。
排版约定
斜体(Italic)
表示文中重要小标题、URL和电子邮件地址。
粗体(Bold)
用于定义新术语。
等宽字体(Constant width)
用于程序列表以及段落内部,表示文件名、文件扩展名和程序元素,如变量和函数名称、数据类型、语句和关键字。
等宽粗体(Constant width bold)
显示应由用户按字面输入的命令或其他文本。
Safari在线电子书
Safari(前身为Safari Books Online)是一个面向企业、政府、教育工作者和个人的会员制培训和参考平台。
会员可以访问来自超过250家出版商的书籍、培训视频、学习路径、互动教程和精心策划的播放列表,包括O’Reilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley&Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones&Bartlett和Course Technology等。更多信息,请访问http://oreilly.com/safari。
如何联系我们
对于本书如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
对本书的评论和技术性问题,请发送电子邮件到:
[email protected]
要了解更多O’Reilly图书、培训课程、会议和新闻的信息,请访问:
http://www.oreilly.com
我们在Facebook的地址为:http://facebook.com/oreilly。
请关注我们的Twitter动态:http://twitter.com/oreillymedia。
我们的YouTube视频地址:http://www.youtube.com/oreillymedia。
离散化模型是复杂性科学所使用的重要工具之一,它包括网络、图论、元胞自动机和基于智能体的模拟。这些工具在自然和社会科学中非常有用,有时在艺术和人类科学中也非常有用。
有关复杂性科学的概述,请参阅https://thinkcomplex.com/complex。
为什么需要学习复杂性科学呢?主要有以下几个原因:
复杂性科学是非常有用的,特别是对于自然和社会系统行为的解释。自牛顿以来,以数学为基础的物理学一直关注具有少量组件和简单交互作用的系统。这些方法对于一些应用(如天体力学)是有效的,而对于其他应用(如经济学),则不那么有用。复杂性科学提供了一个多样化和适应性强的建模工具包。
复杂性科学的许多核心结果令人惊讶。本书反复强调的一个主题是,简单的模型可以产生复杂的行为,因此,我们有时可以用简单的模型来解释现实世界中的复杂行为。
正如在第1章中所解释的,复杂性科学处于我们所认为的科学实践中慢速转变的中心。
学习复杂性科学提供了一个学习发展不同的物理和社会系统、应用编程技能并思考科学中的哲学基本问题的机会。
通过阅读本书并进行练习,你将有机会探索你可能不会遇到的主题和思想,基于Python实践编程,并学习更多关于数据结构和算法的知识。
本书的特点
技术细节
大多数关于复杂性科学的书都是为大众读者写的,而忽略了技术细节,这让能够运用这些技术的人感到沮丧。本书介绍了代码、数学并解释了模型是如何工作的。
延伸阅读
整本书包括进一步的阅读指南、论文原文(大部分都是电子版)和维基百科上的相关文章及其他来源的文章。
Jupyter笔记本
针对每一章,提供了一个Jupyter笔记本用于记录本章中用到的代码、其他的示例和动画,这些可以帮助你观察模型的作用。
练习题和解答
几乎在每一章的最后都带有解答的练习题,建议你进行练习。
书中的大部分链接都是URL链接。此机制有隐藏链接目标的缺点,但使URL更短并且不那么突兀。更重要的是,我可以在不更新书籍的情况下更新链接。 如果你发现链接断开,请告诉我,我将更改链接。
本书的读者对象
书中的实例和代码都使用Python编写。你需要了解Python编程并熟悉面向对象的特征,特别是类的使用和定义。
如果你对Python并不熟悉,可以先阅读《Think Python》,这本书比较适合从来没有接触过编程的读者。如果你有其他语言的编程经验,在学习Python时,可选的参考书有很多,网络上也有很多Python资源。
在本书中,使用了NumPy、SciPy和NetworkX,它们都是Python的程序扩展库。最好你熟悉这三个库,后文中我会再做一些介绍。
在此假设读者了解一些数学知识,在本书的某些章节中我使用了对数,在一个实例中使用了向量。
从第1版以来的变化
从第2版开始,增加了两章,一章关于进化,另一章关于合作进化。
在第1版中,每章都介绍了一个主题的背景,并提供给读者可以运行的实验。 对于第2版,我做了这些实验。每章都以实际例子的形式介绍了实施过程和结果,然后为读者提供了额外的实验。
在第2版中,我使用了一些标准库(如NumPy和NetworkX)当中的库函数来代替我自己的代码,这使结果更加简明有效,并给读者提供了学习Python扩展库的机会。
当然Jupyter笔记本也是新增的。每章都有两个笔记本,一个是本章中的代码、注释和练习题,另一个是习题答案。
最后,所有的支持软件都已更新为Python 3(但大部分不经修改即可在Python 2中运行)。
使用代码
本书当中使用的所有代码都可以从GitHub上的Git库中获得:https://thinkcomplex. com/repo。如果你对Git不熟悉,那么它就是一个版本控制系统,允许跟踪组成项目的文件。Git控制下的文件集合称为“仓库”。GitHub是一个操作界面便捷的托管服务平台,为Git仓库提供存储环境。
GitHub主页为存储库提供了几种使用代码的方法:
可以通过按右上方的Fork按钮来创建仓库的副本。如果没有GitHub账号,则需要创建一个账号。在创建仓库的副本后,你将在GitHub上拥有自己的仓库,可以使用它来跟踪你在使用本书时编写的代码。然后,可以克隆repo,也就是将文件复制到你的计算机上。
你也可以不用克隆我的仓库,即直接复制我的repo到你的电脑上。这样是不需要GitHub账号的,但是不能将你修改后的文件重新上传到GitHub的仓库中。
如果你不想用Git,可以通过绿色的“Clone or download”按钮下载你所需要文件的压缩包。
我写本书时使用了Continuum Analytics的Anaconda,这是一个免费的Python发行版,其中包含运行代码所需的所有软件包(还有更多)。我发现Anaconda易于安装。默认情况下,它需要执行用户级安装,而不是系统级安装,因此你不需要管理权限。它对Python 2和Python 3都支持。Anaconda的下载地址为:https://continuum.io/downloads。
仓库包括Python脚本和Jupyter笔记本。如果你之前没有使用过Jupyter笔记本,可以通过链接https://jupyter.org了解。
有三种使用Jupyter笔记本的方法:
在电脑上运行Jupyter
如果已经安装了Anaconda,可以在电脑终端或命令窗口输入以下命令安装Jupyter:
$ conda install jupyter
在启动Jupyter之前,使用cd进入包含代码的目录:
$ cd ThinkComplexity2/code
启动Jupyter服务器:
$ jupyter notebook
启动Jupyter服务器,它会启动默认Web浏览器或在打开的浏览器窗口中创建新选项卡。然后你就可以打开并运行Jupyter笔记本了。
在Binder上运行Jupyter
Binder是一种在虚拟机中运行Jupyter的服务。如果你点击链接https://thinkcomplex.com/binder,将打开Jupyter主页,其中包含本书的笔记以及支持的数据和脚本。
你可以运行脚本并进行修改以运行你自己的代码,但是虚拟机上的只是暂时的。如果虚拟机停止运行,那在虚拟机里对脚本所做的任何修改都会消失。
在GitHub上查看笔记
GitHub提供了笔记本的视图,可以用来阅读笔记本并查看我生成的结果,但无法修改或运行代码。
排版约定
斜体(Italic)
表示文中重要小标题、URL和电子邮件地址。
粗体(Bold)
用于定义新术语。
等宽字体(Constant width)
用于程序列表以及段落内部,表示文件名、文件扩展名和程序元素,如变量和函数名称、数据类型、语句和关键字。
等宽粗体(Constant width bold)
显示应由用户按字面输入的命令或其他文本。
Safari在线电子书
Safari(前身为Safari Books Online)是一个面向企业、政府、教育工作者和个人的会员制培训和参考平台。
会员可以访问来自超过250家出版商的书籍、培训视频、学习路径、互动教程和精心策划的播放列表,包括O’Reilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley&Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones&Bartlett和Course Technology等。更多信息,请访问http://oreilly.com/safari。
如何联系我们
对于本书如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
对本书的评论和技术性问题,请发送电子邮件到:
[email protected]
要了解更多O’Reilly图书、培训课程、会议和新闻的信息,请访问:
http://www.oreilly.com
我们在Facebook的地址为:http://facebook.com/oreilly。
请关注我们的Twitter动态:http://twitter.com/oreillymedia。
我们的YouTube视频地址:http://www.youtube.com/oreillymedia。
评论
还没有评论。