猜你喜欢
Julia高性能科学计算(第2版)

Julia高性能科学计算(第2版)

书籍作者:Changhyun ISBN:9787121381775
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:3804
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

Julia像C一样快,像MATLAB一样方便,并且像Python一样通用。在Julia开发者,特别是JuMP包开发者的大力支持下,Julia为运筹学及相关领域的高性能科学计算提供了一个强大的工具——JuMP。

《Julia高性能科学计算(第2版)》对Julia语法基础及其标准库、编程技巧、数值优化、优化求解、计算机科学计算都有所涉及,它可以作为计算机科学计算的入门图书使用;《Julia高性能科学计算(第2版)》作者是美国南佛罗里达大学副教授Changhyun Kwon,他为了方便学生的研究、学习写下本书,所以《Julia高性能科学计算(第2版)》也可以作为高校研究生和教师的有用的参考书。


作者简介

Changhyun Kwon是南佛罗里达大学工业与管理系统工程副教授。他的研究兴趣包括运输系统分析和服务运营问题。他的研究得到了包括国家科学基金会、美国运输部和加拿大大使馆在内的各种组织的支持。在加入南佛罗里达大学之前,Changhyun Kwon曾在布法罗大学任教,并于2015年获得UB杰出学者:青年研究者奖。

译者

徐国栋:浙江大学计算机专业硕士,目前主要从事与3D视觉相关的研究,Julia爱好者,Julia中文社区翻译参与者。

李琦:生物信息资深从业者,星宇辰庚CEO。Julia骨灰粉,Julia中文社区翻译参与者。


编辑推荐

1. 本书是Julia Programming for Operations Research的中文版,作者是美国南佛罗里达大学副教授Changhyun Kwon。他为了方便学生学习写下本书,因此本书可以作为高校计算机、运筹学及相关专业师生的优秀的参考书。

2. 本书还可以作为Julia语言爱好者、IT从业者、技术尝鲜者的入门图书,本书内容主要涉及Julia语言、科学计算、数学建模、数值优化、优化求解、运筹学等。

3. 感谢麻省理工学院(MIT)在读博士、Julia中文社区核心成员覃含章,Julia中文社区核心成员、Julia的量子算法包Yao.jl的作者之一罗秀哲(Roger)为本书做序,他们皆在阅读本书的中、英文版本后才提笔写下客观的荐言,其诚足为读者阅读本书的“钥匙”。


前言

写作本书的主要目的是“帮助我自己”。我是一位运筹学教授,每天都做着构建数学优化模型、开发解决问题的算法、用计算机编程语言执行这些算法、用数据做实验等工作。这期间会用到人类语言、数学语言和计算机语言这3 种语言。我的学生和我需要在这3 种语言之间进行跳转,我们需要在这3 种语言之间进行“翻译”。

当有学生因这类“翻译”任务向我求助时,我通常把自己之前的“翻译”作为例子,或者查找网上可能有帮助的资源给他。如果学生的数学基础不错,有足够的计算机编程经验,对数学计算的工作原理理解得很好,那么他学起来就会比较容易,我每天的研究和教学任务也会进行得比较顺利。

但不尽如人意的是,很多搞运筹学的研究生需要花很长时间去学习如何“翻译”。写作本书就是为了让我能够更好地帮助他们。

我既不是计算机科学家,也不是软件工程师。所以,本书并没有教授最好的“翻译”方法,而是讲解在运筹学和管理学的研究和开发工作中,如何完成一些常见的任务。这只是“一种翻译”,并且很可能不是最好的“翻译”。但阅读本书后,读者应该能够学会用这样或那样的方式去搞定任务。

本书教些什么

本书不只是关于数值计算方法的教科书、Julia 编程综合介绍书、数值优化的教科书、优化求解完全手册,也不只是计算机科学和工程的入门书——本书对这些内容都有所涉及。

本书首先会讲解如何安装Julia 语言。然后讲一些语法、Julia 的标准库、Julia编程技巧、一些数值方法、优化模型、蒙特卡洛方法、算法和一些优化解决方案。

本书绝不是以上提到的各个领域的完整的教科书,也不该被单独当作教科书来使用。在我看来,最好把本书与其他运筹学和管理学的主要教科书和参考书一起使用。本书的读者需要熟悉或愿意从其他参考文献中自学优化理论和算法。当然,我在书中提供了相关领域的我所知的最好的参考资料。

阅读本书后,读者就有了一些写代码的经验,就应该能够检索和阅读更多网上的技术文档了。本书将帮助你迈出学习运筹学和管理学计算的第一步——这事实上是一本计算机入门图书。

本书怎么用

本书无疑对研究生及他们的导师完成研究任务会有很大的帮助。低年级研究生可以把本书当作可选优化求解器和算法的辅导书,也可以当作学习指南。当研究生在学习各种课程时,本书将会是学习如何解决特定优化问题和实现算法的好起点。最后,本书也将会是他们做论文研究的有用参考书之一。

高年级研究生可以把本书作为参考文献。例如,当需要为他们的问题执行拉格朗日松弛法时,他们可以参考本书的对应章节学习如何执行。

我同时还希望,本书可以作为运筹学、分析学、线性规划、非线性规划、数值优化、网络优化、管理学及运输工程的补充教科书。对运筹学专业和管理学专业来说,数值方法和计算机计算工具是必修的课程,老师可以根据自己的主要关注点,将本书作为初级或中级教科书。

高级程序员需注意

如果你已经熟悉计算机计算和至少一种计算机编程语言,我认为本书可能对你意义不大。网上有很多资源可以让你学习Julia 语言并很容易地跟进最新进展。但如果你希望学得更快,遇到的问题更少,本书将对你有所帮助。

我在学Julia 之前有MATLAB 和Java 的编程经验。学习Julia 并不难,相反,它令人激动又很有趣。我们只需要一些好的“借口”去学习和使用Julia。阅读第1章可以了解这些“借口”。

参考资料说明

本书提供了大量的参考资料以方便读者更好地了解书中提到的相关技术及工具。为了保证参考资料相关链接能够实时更新,特将“参考资料”文档放于博文视点官方网站,读者可在http://www.broadview.com.cn/38177 页面进行下载。

致谢

我诚挚地感谢Julia 开发者的辛勤努力。Julia 是一门美丽的语言,我非常喜欢。它完全改变了我每天的计算生活。我也很感激JuMP 和其他相关软件包的开发者。自从有了JuMP,我不再需要去寻找更好的模型语言了。

Changhyun Kwon

于美国佛罗里达州 坦帕


目录

第1 章 介绍和安装 1

1.1 什么是Julia 及为什么要使用Julia 2

1.2 安装Julia 4

1.2.1 在Windows 系统上安装Julia 4

1.2.2 在macOS 系统上安装Julia 9

1.2.3 运行Julia 脚本 13

1.2.4 安装Gurobi 13

1.2.5 安装CPLEX 15

1.3 安装IJulia 17

1.4 包管理 20

1.5 帮助 22

第2 章 简单线性规划 24

2.1 线性规划问题 25

2.2 写线性规划问题的其他方式 29

2.3 写线性规划问题的另一种方式 31

2.4 混合整数线性规划问题 32

第3 章 Julia 语言基础 35

3.1 向量、矩阵和数组 35

3.2 元组 40

3.3 索引和范围 42

3.4 打印信息 45

3.5 集合、字典和循环 47

3.6 函数 50

3.7 变量的作用域 52

3.8 随机数生成 55

3.9 文件读/写 59

3.10 绘图 63

3.10.1 PyPlot 包 64

3.10.2 在PyPlot 中避免使用第三方字体 68

第4 章 数值方法选讲 70

4.1 曲线拟合 70

4.2 数值微分 75

4.3 数值积分 78

4.4 自动微分 80

第5 章 单纯形法 84

5.1 单纯形法简介 84

5.2 查询所有基本可行解 87

5.3 使用JuMP 包 93

5.4 表格式的枢轴旋转 93

5.5 单纯形法的实现 95

5.5.1 initialize(c,A,b) 97

5.5.2 is_optimal(tableau) 99

5.5.3 pivoting!(tableau) 100

5.5.4 创建模型 104

5.6 后面的步骤 110

第6 章 网络优化问题 111

6.1 最小费用网络流问题 111

6.2 运输问题 121

6.3 最短路径问题 127

6.4 实现Dijkstra 算法 132

第7 章 内点法 138

7.1 仿射尺度算法 138

7.2 原路径跟踪算法 144

7.3 评述 149

第8 章 非线性优化问题 151

8.1 无约束优化 151

8.1.1 线性搜索 151

8.1.2 无约束优化 153

8.1.3 盒约束优化 154

8.2 非线性优化 155

8.3 其他求解器 156

8.4 混合整数非线性规划 161

第9 章 蒙特卡洛方法 163

9.1 概率分布 163

9.2 随机线性规划 165

9.3 估算简单路径的数目 172

第10 章 拉格朗日松弛 181

10.1 拉格朗日松弛介绍 181

10.1.1 下界与上界 182

10.1.2 次梯度优化 183

10.1.3 总结 184

10.2 p-中位问题 184

10.2.1 读取数据文件 186

10.2.2 最优化求解p-中位问题 188

10.2.3 拉格朗日松弛应用 189

10.2.4 求解下界 189

10.2.5 求解上界 193

10.2.6 更新拉格朗日乘子 195

第11 章 互补问题 208

11.1 线性互补问题(LCP) 208

11.2 非线性互补问题(NCP) 216

11.3 混合互补问题(MCP) 220

第12 章 最优化求解器中的参数 221

12.1 设置CPU 时间限制 221

12.2 设置最优化间隙公差 222

12.3 热启动 223

12.4 Big-M 与整性公差 224

12.5 关掉求解器的输出 225

12.6 其他求解器参数 226


产品特色