Julia 像C 一样快,像MATLAB 一样方便,并且像Python 一样通用。在Julia 开发者,特别是JuMP 包开发者的大力支持下,Julia 为运筹学及相关领域的高性能科学计算提供了一个强大的工具——JuMP。本书对Julia 语法基础及其标准库、编程技巧、数值优化、优化求解、计算机科学计算都有所涉及,它可以作为计算机科学计算的入门图书使用;本书作者是美国南佛罗里达大学副教授Changhyun Kwon,他为了方便学生的研究、学习写下本书,所以本书也可以作为高校研究生和教师的有用的参考书。
Changhyun Kwon,南佛罗里达大学工业与管理系统工程系副教授。他的研究兴趣包括交通系统分析和服务操作问题。他的研究得到了许多方面的支持,包括美国国家科学基金组织、美国交通部和加拿大大使馆。
徐国栋,浙江大学研究生,Julia爱好者,Julia社区翻译参与者。李琦 ,毕业于中国农业大学,Julia爱好者,Julia社区翻译参与者。
第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