Julia高性能科学计算 : 第2版
  • 推荐0
  • 收藏0
  • 浏览300

Julia高性能科学计算 : 第2版

Changhyun Kwon ( 权昌贤) (作者)  徐国栋 , 李琦 (译者) 张春雨 (责任编辑)

  • 书  号: 978-7-121-38177-5
  • 出版日期:2020-05-01
  • 页  数:240
  • 开  本:16(170*240)
  • 出版状态:正在印刷
  • 原书名: Julia Programming for Operations Research
  • 原书号:9781798205471
  • 维护人:崔志伟
Julia 像C一样快,像MATLAB 一样方便,并且像Python 一样通用。在Julia 开发者,特别是JuMP 包开发者的大力支持下,Julia 为运筹学及相关领域的高性能科学计算提供了一个强大的工具——JuMP。
本书对Julia 语法基础及其标准库、编程技巧、数值优化、优化求解、计算机科学计算都有所涉及,它可以作为计算机科学计算的入门图书使用;本书作者是美国南佛罗里达大学副教授Changhyun Kwon,他为了方便学生的研究、学习写下本书,所以本书也可以作为高校研究生和教师的有用的参考书。
写这本书的主要动机是帮助作者自己。作为运筹学领域的教授,他的日常活动包括建立数学优化模型、开发解决问题的算法、使用计算机编程语言实现这些算法、用数据进行实验等等。涉及三种语言:人类语言、数学语言和计算机语言。他的学生团队需要复习三种不同的语言,这就需要在三种语言之间进行“翻译”。这本书是为了教他的研究小组如何翻译而写的,对于任何需要在类似情况下学习如何翻译的人来说,这本书也是很有用的。Julia语言与C语言一样快,与MATLAB一样方便,与Python一样通用,为数学优化问题提供了灵活的代数建模语言。在Julia开发人员的大力支持下,特别是JuMP-Julia for math programming package开发人员的大力支持下,Julia为从事运筹学及相关领域(如工业工程、管理科学、交通工程、经济学和区域科学)的学生和专业人员提供了一个完美的工具。
徐国栋:浙江大学计算机专业硕士,目前主要从事与3D视觉相关的研究,Julia爱好者,Julia中文社区翻译参与者。
李琦:生物信息资深从业者,星宇辰庚CEO。Julia骨灰粉,Julia中文社区翻译参与者。
写作本书的主要目的是“帮助我自己”。我是一位运筹学教授,每天都做着构建数学优化模型、开发解决问题的算法、用计算机编程语言执行这些算法、用数据做实验等工作。这期间会用到人类语言、数学语言和计算机语言这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

读者评论

相关图书

看漫画学Python:有趣、有料、好玩、好用(全彩版)

关东升、赵大羽 (作者)

Python是一门既简单又强大的编程语言,被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。Python也越来越重要,成为国家计算机...

 

游戏设计师的Playlist:激发创造力的必玩游戏

Zack Hiwiller (作者) 李天颀 (译者)

在本书中,作者基于多年的游戏设计及教授经验,用诙谐幽默的语言向读者传授了一个又一个重要的游戏设计理念。书中的每一章均有一个明确的主题,涉及随机性、叙事、挑战、机...

¥99.00

Boost程序库完全开发指南――深入C++”准”标准库(第5版)

罗剑锋 (作者)

Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。<br>Boost由C++标准委员会的部分成员所设...

¥118.00

程序员修炼之道:通向务实的最高境界(第2版)

THOMAS, DAVID; HUNT, ANDREW (作者)

《程序员修炼之道》之所以在全球范围内广泛传播,被一代代开发者奉为圭臬,盖因它可以创造出真正的价值:或编写出更好的软件,或探究出编程的本质,而所有收获均不依赖于特...

¥89.00

ASP.NET Core 3框架揭秘

蒋金楠 (作者)

本书主要阐述 ASP.NET Core 最核心的部分——请求处理管道。通过阅读本书,读者可以深刻系统地了解 ASP.NET Core 应用在启动过程中管道的构建...

¥199.00

Spring Cloud微服务架构实战

陈韶健 (作者)

本书以Spring Cloud为主导,以电商平台为实例,从服务架构设计的角度,对架构设计、程序开发、运维部署三个层面进行了详细的阐述。本书不仅详细介绍了如何使用...