首页>参考读物>计算机科学与技术>人工智能

深度强化学习实践(原书第2版)
作者 : [俄] 马克西姆·拉潘(Maxim Lapan) 著
译者 : 林然 王薇 译
出版日期 : 2021-08-04
ISBN : 978-7-111-68738-2
定价 : 149.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 634
开本 : 16
原书名 : Deep Reinforcement Learning Hands-On,Second Edition
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书理论与实践相结合,系统阐述强化学习的基础知识,以及如何动手编写智能体以执行一系列实际任务。通过阅读本书,读者将获得深层Q网络、策略梯度方法、连续控制问题以及高度可扩展的非梯度方法等主题领域的可行洞见,还将学会如何构建一个经过强化学习训练、价格低廉的真实硬件机器人,并通过一步步代码优化在短短30分钟的训练后解决Pong环境。此外,本书还专门介绍了强化学习的新发展,包括离散优化(解决魔方问题)、多智能体方法、Microsoft的TextWorld环境、高级探索技术等。

图书特色

图书前言

本书的主题是强化学习(Reinforcement Learning,RL),它是机器学习(Machine Learning,ML)的一个分支,强调如何解决在复杂环境中选择最优动作时产生的通用且极具挑战的问题。学习过程仅由奖励值和从环境中获得的观察驱动。该模型非常通用,能应用于多个真实场景,从玩游戏到优化复杂制造过程都能涵盖。
由于它的灵活性和通用性,RL领域在快速发展的同时,吸引了很多人的关注。其中,既包括试图改进现有方法或创造新方法的研究人员,也包括专注于用最有效的方式解决问题的从业人员。
写本书的目的
写本书的目的是填补RL理论系统和实际应用之间的巨大空白。目前全世界有很多研究活动,基本上每天都有新的相关论文发表,并且有很多深度学习的会议,例如神经信息处理系统(Neural Information Processing Systems,NeurIPS)大会和国际学习表征会议(International Conference on Learning Representations,ICLR)。同时,有好几个大型研究组织致力于将RL应用于机器人、医学、多智能体系统等领域。
最新的相关研究资料虽然很容易获得,却都过于专业和抽象,难以理解。RL的实践落地则显得更为困难,因为将论文中由数学公式堆砌的大量抽象理论转换成解决实际问题的实现方式并不总是显而易见的。
这使得一些对该领域感兴趣的人很难理解隐含在论文或学术会议背后的方法与思想。虽然针对RL的各个方面有很多非常棒的博客用生动的例子来解释,但博客的形式限制让作者们只能阐述一两种方法,而不是构建一个完整的全景图来将不同的方法联系起来。本书就是为了解决这个问题而写的。
教学方法
本书的另一个关注点是实际应用。每个方法针对非常简单到非常复杂的情况都进行了实现。我试图让例子简洁易懂,PyTorch的易读与强大使之成为可能。另外,例子的复杂度是针对RL业余爱好者而设计的,不需要大量的计算资源,比如图形处理器(GPU)集群或很强大的工作站。我相信,这将使充满乐趣和令人兴奋的RL领域不仅限于研究小组或大型人工智能公司,还可以让更广泛的受众涉足。但毕竟本书有关内容还是“深度”RL,因此强烈建议大家使用GPU。
除了Atari游戏或连续控制问题等RL中一些经典的中等规模例子外,本书还有好几章(第10、14、15、16和18章)介绍大型项目,说明RL方法能应用到更复杂的环境和任务中。这些例子不是现实场景中的完整项目,但也足以说明,除了精心设计的基准测试外,RL能在更大的范围内应用。
本书从结构上看分为四个部分,其中第1~4章为第一部分,第5~10章为第二部分,第11~16为第三部分,第17~25章为第四部分。关于本书前三个部分的例子,值得注意的另一件事是我试图使它们成为独立的,会完整地显示所有代码。有时这会导致代码片段的重复(例如,大多数方法中的训练迭代都很相似),但是我认为,让大家学到想学的函数比刻意避免一些重复更重要,你可以自行跳转到需要的代码。本书中的所有例子都能在GitHub上找到,网址为https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On-Second-Edition。欢迎你来获取、实验并贡献代码。
读者对象
本书面向已经有机器学习基础而想对RL领域进行实践的读者。阅读本书前,读者应该熟悉Python并且有一定的深度学习和机器学习基础。具有统计学和概率论知识会大有帮助,但对于理解本书的大部分内容都不是必要的。
本书内容
第1章介绍了RL的思想和模型。
第2章使用开源库Gym介绍了RL实践。
第3章概述了PyTorch库。
第4章用最简单的RL方法对RL的方法和问题进行了初步介绍。
第5章介绍了基于价值的RL方法。
第6章描述了深度Q-network(DQN),是对基础的基于价值的方法的扩展,能解决复杂环境下的问题。
第7章描述了PTAN库,它可以简化RL方法的实现。
第8章详细介绍了DQN的最新扩展方法,以提升在复杂环境下的稳定性和收敛性。
第9章概述了使RL代码加速执行的办法。
第10章给出了第一个练习项目,重点是将DQN方法应用于股票交易。
第11章介绍了另一类RL方法,即基于策略学习的方法。
第12章描述了RL中使用非常广泛的方法之一。
第13章用并行环境交互的方式扩展了actor-critic方法,从而提高了稳定性和收敛性。
第14章给出了第二个项目,展示了如何将RL方法应用于自然语言处理问题。
第15章介绍了RL方法在文字冒险游戏中的应用。
第16章给出了另一个大项目,使用MiniWoB任务集将RL应用于Web导航。
第17章介绍了连续动作空间的环境特性以及各种方法。
第18章介绍了RL方法在机器人问题中的应用,描述了如何用RL方法来构建和训练小型机器人。
第19章仍是有关连续动作空间的章节,描述了一组置信域方法在其中的应用。
第20章展示了另一组不显式使用梯度的方法。
第21章介绍了能更好地进行环境探索的方法。
第22章介绍了RL的基于模型的方法,并使用了将想象力应用于RL的最新研究结果。
第23章描述了AlphaGo Zero方法并将其应用于四子连横棋游戏中。
第24章使用魔方作为环境,描述了RL方法在离散优化领域的应用。
第25章介绍了一个相对较新的RL方法应用方向,即在多智能体情境下的应用。
阅读指导
本书的所有章节都采用同样的结构来描述RL方法:首先讨论方法的动机、理论基础以及背后的思想;然后,给出几个不同环境下的带完整源代码的例子。
你可以通过不同的方式来阅读本书:
1. 若要快速熟悉某些方法,可以只阅读相关章节的简介部分。
2. 若要深入理解某个方法是如何实现的,可以阅读代码和相关注释。
3. 若要深度熟悉某个方法(我认为是最好的学习方式),可以尝试借助提供的代码重新实现该方法并使之有效。
无论如何,我希望这本书对你有帮助!
下载示例代码及彩色图片
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
本书的代码也托管在GitHub上(https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On-Second-Edition)。如果代码有更新,GitHub上的代码会同步更新。本书所有彩色版屏幕截图/图表的PDF文件也可以从https://static.packt-cdn.com/downloads/ 9781838826994_ColorImages.pdf下载。
排版约定
文中的代码体:表示出现在文中的代码、数据库表名、目录名、文件名、文件扩展名、路径、用户输入、Twitter句柄。
代码块示例:

命令行输入或输出示例:

黑体:表示新的术语、重要的词或会在屏幕中显示的词(例如,菜单或对话框中的内容)。
表示警告或重要的提示。
表示提示和技巧。

上架指导

计算机\人工智能

封底文字

强化学习是一个令人兴奋的领域,它为新的可能性开辟了道路。Maxim Lapan写了一本关于强化学习的优秀指南,它不仅解释了这些概念,而且向我们展示了如何使用RL来开发我们自己的程序。
—— Marco Wiering博士,Groningen大学人工智能助理教授
我刚刚读完Maxim Lapan写的《深度强化学习实践》第2版。这本书写得非常好,内容丰富,发人深省,见解深刻。
—— Tristan Behrens博士,AI公会创始成员和独立深度学习实践顾问

本书包括新的强化学习工具和技术,介绍了强化学习的基础知识,以及如何动手编写智能体以执行一系列实际任务。
本书较上一版新增6章,专门介绍了强化学习的新发展,包括离散优化(解决魔方问题)、多智能体方法、Microsoft的TextWorld环境、高级探索技术等。学完本书,你将对这个新兴领域的前沿技术有深刻的理解。
此外,你将获得对深度Q-network、策略梯度方法、连续控制问题以及高度可扩展的非梯度方法等领域的可行洞见,还将学会如何构建经过强化学习训练、价格低廉的真实硬件机器人,并通过逐步代码优化在短短30分钟的训练后解决Pong环境问题。
简而言之,本书将帮助你探索强化学习中令人兴奋的复杂主题,让你通过实例获得经验和知识。
通过阅读本书,你将:
了解强化学习的深度学习上下文并实现复杂的深度学习模型。
学会评估强化学习的方法,包括交叉熵、DQN、actor-critic、TRPO、PPO、DDPG、D4PG等。
学会构建经过强化学习方法训练的、价格低廉的硬件机器人。
研究Microsoft的TextWorld环境,这是一个文字冒险游戏平台。
学会在强化学习中使用离散优化来解决魔方问题。
学会教你的智能体使用AlphaGo Zero玩四子连横棋。
探索有关AI聊天机器人等主题的较新深度强化学习技术。
研究先进的探索技术,包括噪声网络和网络蒸馏技术。

译者序

我最早于2018年接触强化学习这一令人兴奋的技术,在深入了解后,感觉打开了一扇新世界的大门。使用强化学习,我不仅可以享受编程的乐趣,也可以享受玩游戏的乐趣。同时,强化学习也在一定程度上给了我一些生活上的启示,从前的我是容易陷入“局部最优性”的人:我之前只要在食堂遇到一种喜欢吃的食物,就会天天吃,直到吃腻为止;回家的路,只会走那条最熟悉的(即使可能有近路,但是害怕走错还是不会选择那条可能的近路)。强化学习对于探索的需求是很强烈的,对于未见过的观察,智能体必须要有强烈的探索欲望,经历过各种场景,最终得到的策略才会更优。在探索强化学习的同时,我自身也更接纳“探索”了:多尝试以前没有吃过的菜,多探索几条新的回家的路。这种不需要后续步骤、可以立即得到确定性状态价值的探索非常高效,必须要好好利用。
在接触本书后,我发现,如果在啃Sutton的《强化学习(第2版)》前,能先好好学习一下本书,那该多么幸福!本书从理论和实践两个角度对强化学习进行了解释和演示,如果想快速上手强化学习并开始实践,那么本书就是目前的不二之选了。
由于译者水平有限,书中出现错误与不妥之处在所难免,恳请读者批评指正。如果有强化学习相关的问题想和译者进行探讨,可发邮件至boydfd@gmail.com。
最后,感谢本书的策划编辑王春华的耐心和悉心指导。当然,还要感谢我的女朋友王薇,在她的支持和协助下,这本书才得以翻译完成,并呈现在大家面前。感谢每一位读者,你的潜心研习与融会贯通将会令本书更有价值。

林然
2021年1月

图书目录

译者序
前言
作者简介
审校者简介
第1章 什么是强化学习1
1.1 机器学习分类2
1.1.1 监督学习2
1.1.2 非监督学习2
1.1.3 强化学习2
1.2 强化学习的复杂性4
1.3 强化学习的形式4
1.3.1 奖励5
1.3.2 智能体6
1.3.3 环境6
1.3.4 动作7
1.3.5 观察7
1.4 强化学习的理论基础9
1.4.1 马尔可夫决策过程9
1.4.2 策略17
1.5 总结18
第2章 OpenAI Gym19
2.1 剖析智能体19
2.2 硬件和软件要求21
2.3 OpenAI Gym API23
2.3.1 动作空间23
2.3.2 观察空间23
2.3.3 环境25
2.3.4 创建环境26
2.3.5 车摆系统28
2.4 随机CartPole智能体30
2.5 Gym的额外功能:包装器和监控器30
2.5.1 包装器31
2.5.2 监控器33
2.6 总结35
第3章 使用PyTorch进行深度学习36
3.1 张量36
3.1.1 创建张量37
3.1.2 零维张量39
3.1.3 张量操作39
3.1.4 GPU张量40
3.2 梯度41
3.3 NN构建块44
3.4 自定义层45
3.5 最终黏合剂:损失函数和优化器47
3.5.1 损失函数48
3.5.2 优化器48
3.6 使用TensorBoard进行监控50
3.6.1 TensorBoard 10150
3.6.2 绘图52
3.7 示例:将GAN应用于Atari图像53
3.8 PyTorch Ignite57
3.9 总结61
第4章 交叉熵方法62
4.1 RL方法的分类62
4.2 交叉熵方法的实践63
4.3 交叉熵方法在CartPole中的应用65
4.4 交叉熵方法在FrozenLake中的应用72
4.5 交叉熵方法的理论背景78
4.6 总结79
第5章 表格学习和Bellman方程80
5.1 价值、状态和最优性80
5.2 最佳Bellman方程82
5.3 动作的价值84
5.4 价值迭代法86
5.5 价值迭代实践87
5.6 Q-learning在FrozenLake中的应用92
5.7 总结94
第6章 深度Q-network95
6.1 现实的价值迭代95
6.2 表格Q-learning96
6.3 深度Q-learning100
6.3.1 与环境交互102
6.3.2 SGD优化102
6.3.3 步骤之间的相关性103
6.3.4 马尔可夫性质103
6.3.5 DQN训练的最终形式103
6.4 DQN应用于Pong游戏104
6.4.1 包装器105
6.4.2 DQN模型109
6.4.3 训练110
6.4.4 运行和性能118
6.4.5 模型实战120
6.5 可以尝试的事情122
6.6 总结123
第7章 高级强化学习库124
7.1 为什么使用强化学习库124
7.2 PTAN库125
7.2.1 动作选择器126
7.2.2 智能体127
7.2.3 经验源131
7.2.4 经验回放缓冲区136
7.2.5 TargetNet类137
7.2.6 Ignite帮助类139
7.3 PTAN版本的CartPole解决方案139
7.4 其他强化学习库141
7.5 总结141
第8章 DQN扩展142
8.1 基础DQN143
8.1.1 通用库143
8.1.2 实现147
8.1.3 结果148
8.2 N步DQN150
8.2.1 实现152
8.2.2 结果152
8.3 Double DQN153
8.3.1 实现154
8.3.2 结果155
8.4 噪声网络156
8.4.1 实现157
8.4.2 结果159
8.5 带优先级的回放缓冲区160
8.5.1 实现161
8.5.2 结果164
8.6 Dueling DQN165
8.6.1 实现166
8.6.2 结果167
8.7 Categorical DQN168
8.7.1 实现171
8.7.2 结果175
8.8 组合所有方法178
8.9 总结180
8.10 参考文献180
第9章 加速强化学习训练的方法182
9.1 为什么速度很重要182
9.2 基线184
9.3 PyTorch中的计算图186
9.4 多个环境188
9.5 在不同进程中分别交互和训练190
9.6 调整包装器194
9.7 基准测试总结198
9.8 硬核CuLE199
9.9 总结199
9.10 参考文献199
第10章 使用强化学习进行股票交易200
10.1 交易200
10.2 数据201
10.3 问题陈述和关键决策202
10.4 交易环境203
10.5 模型210
10.6 训练代码211
10.7 结果211
10.7.1 前馈模型212
10.7.2 卷积模型217
10.8 可以尝试的事情218
10.9 总结219
第11章 策略梯度:一种替代方法220
11.1 价值与策略220
11.1.1 为什么需要策略221
11.1.2 策略表示221
11.1.3 策略梯度222
11.2 REINFORCE方法222
11.2.1 CartPole示例223
11.2.2 结果227
11.2.3 基于策略的方法与基于价值的方法228
11.3 REINFORCE的问题229
11.3.1 需要完整片段229
11.3.2 高梯度方差229
11.3.3 探索230
11.3.4 样本相关性230
11.4 用于CartPole的策略梯度方法230
11.4.1 实现231
11.4.2 结果233
11.5 用于Pong的策略梯度方法237
11.5.1 实现238
11.5.2 结果239
11.6 总结240
第12章 actor-critic方法241
12.1 减小方差241
12.2 CartPole的方差243
12.3 actor-critic246
12.4 在Pong中使用A2C247
12.5 在Pong中使用A2C的结果252
12.6 超参调优255
12.6.1 学习率255
12.6.2 熵的beta值256
12.6.3 环境数256
12.6.4 批大小257
12.7 总结257
第13章 A3C258
13.1 相关性和采样效率258
13.2 向A2C添加另一个A259
13.3 Python中的多重处理功能261
13.4 数据并行化的A3C262
13.4.1 实现262
13.4.2 结果267
13.5 梯度并行化的A3C269
13.5.1 实现269
13.5.2 结果273
13.6 总结274
第14章 使用强化学习训练聊天机器人275
14.1 聊天机器人概述275
14.2 训练聊天机器人276
14.3 深度NLP基础277
14.3.1 RNN277
14.3.2 词嵌入278
14.3.3 编码器–解码器架构279
14.4 seq2seq训练280
14.4.1 对数似然训练280
14.4.2 双语替换评测分数282
14.4.3 seq2seq中的强化学习282
14.4.4 自评序列训练283
14.5 聊天机器人示例284
14.5.1 示例的结构285
14.5.2 模块:cornell.py和data.py285
14.5.3 BLEU分数和utils.py286
14.5.4 模型287
14.6 数据集探索292
14.7 训练:交叉熵294
14.7.1 实现294
14.7.2 结果298
14.8 训练:SCST300
14.8.1 实现300
14.8.2 结果306
14.9 经过数据测试的模型309
14.10 Telegram机器人311
14.11 总结314
第15章 TextWorld环境315
15.1 文字冒险游戏315
15.2 环境318
15.2.1 安装318
15.2.2 游戏生成318
15.2.3 观察和动作空间320
15.2.4 额外的游戏信息322
15.3 基线DQN325
15.3.1 观察预处理326
15.3.2 embedding和编码器331
15.3.3 DQN模型和智能体333
15.3.4 训练代码335
15.3.5 训练结果335
15.4 命令生成模型340
15.4.1 实现341
15.4.2 预训练结果345
15.4.3 DQN训练代码346
15.4.4 DQN训练结果347
15.5 总结349
第16章 Web导航350
16.1 Web导航简介350
16.1.1 浏览器自动化和RL351
16.1.2 MiniWoB基准352
16.2 OpenAI Universe353
16.2.1 安装354
16.2.2 动作与观察354
16.2.3 创建环境355
16.2.4 MiniWoB的稳定性357
16.3 简单的单击方法357
16.3.1 网格动作358
16.3.2 示例概览359
16.3.3 模型359
16.3.4 训练代码360
16.3.5 启动容器364
16.3.6 训练过程366
16.3.7 检查学到的策略368
16.3.8 简单单击的问题369
16.4 人类演示371
16.4.1 录制人类演示371
16.4.2 录制的格式373
16.4.3 使用演示进行训练375
16.4.4 结果376
16.4.5 井字游戏问题380
16.5 添加文字描述383
16.5.1 实现383
16.5.2 结果387
16.6 可以尝试的事情390
16.7 总结391
第17章 连续动作空间392
17.1 为什么会有连续的空间392
17.1.1 动作空间393
17.1.2 环境393
17.2 A2C方法395
17.2.1 实现396
17.2.2 结果399
17.2.3 使用模型并录制视频401
17.3 确定性策略梯度401
17.3.1 探索402
17.3.2 实现403
17.3.3 结果407
17.3.4 视频录制409
17.4 分布的策略梯度409
17.4.1 架构410
17.4.2 实现410
17.4.3 结果414
17.4.4 视频录制415
17.5 可以尝试的事情415
17.6 总结416
第18章 机器人技术中的强化学习417
18.1 机器人与机器人学417
18.1.1 机器人的复杂性419
18.1.2 硬件概述420
18.1.3 平台421
18.1.4 传感器422
18.1.5 执行器423
18.1.6 框架424
18.2 第一个训练目标427
18.3 模拟器和模型428
18.3.1 模型定义文件429
18.3.2 机器人类432
18.4 DDPG训练和结果437
18.5 控制硬件440
18.5.1 MicroPython440
18.5.2 处理传感器443
18.5.3 驱动伺服器454
18.5.4 将模型转移至硬件上458
18.5.5 组合一切464
18.6 策略实验466
18.7 总结467
第19章 置信域:PPO、TRPO、ACKTR及SAC468
19.1 Roboschool469
19.2 A2C基线469
19.2.1 实现469
19.2.2 结果471
19.2.3 视频录制475
19.3 PPO475
19.3.1 实现476
19.3.2 结果479
19.4 TRPO480
19.4.1 实现481
19.4.2 结果482
19.5 ACKTR484
19.5.1 实现484
19.5.2 结果484
19.6 SAC485
19.6.1 实现486
19.6.2 结果488
19.7 总结490
第20章 强化学习中的黑盒优化491
20.1 黑盒方法491
20.2 进化策略492
20.2.1 将ES用在CartPole上493
20.2.2 将ES用在HalfCheetah上498
20.3 遗传算法503
20.3.1 将GA用在CartPole上504
20.3.2 GA优化506
20.3.3 将GA用在HalfCheetah上507
20.4 总结510
20.5 参考文献511
第21章 高级探索512
21.1 为什么探索很重要512
21.2 ε-greedy怎么了513
21.3 其他探索方式516
21.3.1 噪声网络516
21.3.2 基于计数的方法516
21.3.3 基于预测的方法517
21.4 MountainCar实验517
21.4.1 使用ε-greedy的DQN方法519
21.4.2 使用噪声网络的DQN方法520
21.4.3 使用状态计数的DQN方法522
21.4.4 近端策略优化方法525
21.4.5 使用噪声网络的PPO方法527
21.4.6 使用基于计数的探索的PPO方法529
21.4.7 使用网络蒸馏的PPO方法531
21.5 Atari实验533
21.5.1 使用ε -greedy的DQN方法534
21.5.2 经典的PPO方法535
21.5.3 使用网络蒸馏的PPO方法536
21.5.4 使用噪声网络的PPO方法537
21.6 总结538
21.7 参考文献539
第22章 超越无模型方法:想象力540
22.1 基于模型的方法540
22.1.1 基于模型与无模型540
22.1.2 基于模型的缺陷541
22.2 想象力增强型智能体542
22.2.1 EM543
22.2.2 展开策略544
22.2.3 展开编码器544
22.2.4 论文的结果544
22.3 将I2A用在Atari Breakout上545
22.3.1 基线A2C智能体545
22.3.2 EM训练546
22.3.3 想象力智能体548
22.4 实验结果553
22.4.1 基线智能体553
22.4.2 训练EM的权重555
22.4.3 训练I2A模型557
22.5 总结559
22.6 参考文献559
第23章 AlphaGo Zero560
23.1 棋盘游戏560
23.2 AlphaGo Zero方法561
23.2.1 总览561
23.2.2 MCTS562
23.2.3 自我对抗564
23.2.4 训练与评估564
23.3 四子连横棋机器人564
23.3.1 游戏模型565
23.3.2 实现MCTS567
23.3.3 模型571
23.3.4 训练573
23.3.5 测试与比较573
23.4 四子连横棋的结果574
23.5 总结576
23.6 参考文献576
第24章 离散优化中的强化学习577
24.1 强化学习的名声577
24.2 魔方和组合优化578
24.3 最佳性与上帝的数字579
24.4 魔方求解的方法579
24.4.1 数据表示580
24.4.2 动作580
24.4.3 状态581
24.5 训练过程584
24.5.1 NN架构584
24.5.2 训练585
24.6 模型应用586
24.7 论文结果588
24.8 代码概览588
24.8.1 魔方环境589
24.8.2 训练593
24.8.3 搜索过程594
24.9 实验结果594
24.9.1 2×2魔方596
24.9.2 3×3魔方598
24.10 进一步改进和实验599
24.11 总结600
第25章 多智能体强化学习601
25.1 多智能体RL的说明601
25.1.1 通信形式602
25.1.2 强化学习方法602
25.2 MAgent环境602
25.2.1 安装602
25.2.2 概述603
25.2.3 随机环境603
25.3 老虎的深度Q-network608
25.4 老虎的合作612
25.5 同时训练老虎和鹿615
25.6 相同actor之间的战斗617
25.7 总结617

教学资源推荐
作者: (土耳其)Ethem Alpaydin 著
作者: 蔡自兴 等编著
作者: [意]朱塞佩·博纳科尔索(Giuseppe Bonaccorso)著
作者: (澳)Michael Negnevitsky 著
参考读物推荐
作者: [意大利]保罗·加莱奥内(Paolo Galeone) 著