本书以理论结合编程开发为原则,使用Python作为开发语言,讲解*优化算法的原理和应用,详细介绍了Python基础、Gurobi优化器、线性规划、整数规划、多目标优化、动态规划、图与网络分析、智能优化算法。对于算法部分的每一种算法都包含原理和编程实践,使读者对*优化算法的认识更加深入。
本书分为3篇共9章。第1篇(第1~3章)是*优化算法与编程基础:第1章介绍了什么是*优化算法及其在生产和生活中的应用;第2章介绍Python编程基础和Python数据分析库及绘图库;第3章讲解Gurobi优化器的基础和高级特性。第2篇(第4~6章)是数学规划方法:第4章详细讲解线性规划的知识,包括单纯形法、内点法、列生成法、拉格朗日乘子法、对偶问题;第5章讲解整数规划解法的分支定界法和割平面法;第6章讲解多目标优化的概念及基于单纯形法的目标规划法。第3篇(第7~9章)是启发式算法:第7章介绍动态规划算法;第8章讲解图与网络分析,介绍最小生成树、最短路径、网络流、路径规划等问题的建模;第9章讲解了粒子群算法和遗传算法求解各种类型优化算法问题的方法。
本书内容丰富,实例典型,实用性强,适合各个层次从事*优化算法研究和应用的人员,尤其适合有一定算法基础而没有编程基础的人员阅读。
苏振裕,厦门大学金融学硕士,现任SHEIN 智慧供应链资深算法工程师。知乎专栏《从推公式到写代码》作者,运筹优化论坛(optimize.fun)的创建人。在大数据、人工智能、运筹优化和供应链方面,具有多年的相关算法研究及应用经验。
| 第1篇 最优化算法与编程基础 |
第1章 最优化算法概述 2
1.1 最优化算法简介 3
1.2 最优化算法的内容 4
1.2.1 规划论 4
1.2.2 库存论 5
1.2.3 图论 6
1.2.4 排队论 7
1.2.5 可靠性理论 8
1.2.6 对策论 8
1.2.7 决策论 8
1.2.8 搜索论 9
1.3 本章小结 9
第2章 Python编程方法 10
2.1 开发环境安装 11
2.2 编程基础:Python语法 17
2.2.1 基础数据结构与基本运算 18
2.2.2 关于Python的列表、元组、字典、集合 18
2.2.3 程序控制语句 21
2.2.4 函数 21
2.2.5 类与实例 22
2.2.6 迭代 23
2.3 数据分析:NumPy基础 24
2.3.1 NumPy基础数据结构 24
2.3.2 NumPy的随机数 26
2.3.3 NumPy矩阵运算 28
2.3.4 NumPy线性代数 31
2.4 Pandas基础 32
2.4.1 Pandas基础数据结构 32
2.4.2 Pandas基础统计函数 35
2.4.3 Pandas基础数据处理 37
2.4.4 分组统计 39
2.4.5 apply函数 41
2.5 Python绘图 42
2.5.1 常用图形 43
2.5.2 图形属性 47
2.5.3 组合图和子图 49
2.5.4 三维图 51
2.5.5 动态图 55
2.6 本章小结 57
第3章 Gurobi优化器 58
3.1 Gurobi的数据结构 59
3.1.1 Multidict 59
3.1.2 Tuplelist 60
3.1.3 Tupledict 61
3.1.4 应用范例 62
3.2 Gurobi的参数和属性 65
3.2.1 参数类型 65
3.2.2 修改参数 75
3.2.3 修改参数的例子 75
3.2.4 属性类型 77
3.2.5 查看修改属性 85
3.2.6 修改属性的例子 85
3.3 Gurobi线性化技巧 85
3.3.1 最大值max 86
3.3.2 最小值min 88
3.3.3 绝对值abs 89
3.3.4 逻辑与and 90
3.3.5 逻辑或or 90
3.3.6 指示函数indicator 90
3.3.7 带固定成本约束 91
3.3.8 分段线性函数 91
3.4 Gurobi多目标优化 92
3.5 callback函数 96
3.5.1 回调函数callback定义 97
3.5.2 状态where与值what 97
3.5.3 callback函数的功能 98
3.6 本章小结 102
| 第2篇 数学规划方法 |
第4章 线性规划 104
4.1 线性规划的标准型 105
4.2 单纯形法 105
4.2.1 单纯形法的原理 106
4.2.2 单纯形法的过程 106
4.2.3 单纯形法代码 111
4.3 单纯形的数学规范型 113
4.4 内点法 114
4.4.1 内点法的原理 114
4.4.2 内点法过程 115
4.4.3 内点法代码 118
4.5 列生成法 120
4.5.1 列生成法的原理 120
4.5.2 列生成的过程 123
4.6 对偶问题 126
4.6.1 对偶问题的形式 127
4.6.2 对称形式对偶 128
4.6.3 对偶单纯形 129
4.6.4 对偶问题的应用 130
4.7 拉格朗日乘子法 130
4.7.1 无约束优化 131
4.7.2 等式约束优化 131
4.7.3 不等式约束优化 132
4.7.4 拉格朗日对偶 134
4.8 本章小结 137
第5章 整数规划 138
5.1 快速掌握Gurobi整数规划 139
5.2 分支定界法 140
5.3 割平面法 142
5.4 本章小结 147
第6章 多目标优化 148
6.1 多目标优化的一般形式 149
6.2 Pareto最优解 149
6.3 多目标优化求解方法 151
6.4 目标规划法 152
6.4.1 偏差变量 153
6.4.2 优先等级和权重系数 153
6.4.3 目标规划单纯形法 154
6.4.4 目标规划Gurobi实现 158
6.5 NSGA-Ⅱ 159
6.6 本章小结 160
| 第3篇 启发式算法 |
第7章 动态规划 162
7.1 多阶段决策问题 163
7.2 动态规划的基本概念 164
7.3 动态规划的最优化原理 165
7.4 最短路径问题 166
7.5 使用整数规划解最短路径问题 169
7.6 背包问题 170
7.7 本章小结 175
第8章 图与网络分析 176
8.1 图的基本概念 177
8.2 图的矩阵表示 178
8.3 最小生成树 179
8.4 最短路径问题 183
8.5 网络最大流问题 187
8.6 路径规划 190
8.7 VRP问题 196
8.8 本章小结 203
第9章 智能优化算法 204
9.1 粒子群算法 205
9.1.1 粒子群算法原理 205
9.1.2 粒子群求解无约束优化问题 207
9.1.3 粒子群求解约束优化问题 211
9.1.4 粒子群求解旅行商问题 218
9.2 遗传算法 225
9.2.1 遗传算法原理 225
9.2.2 遗传算法的编码方法 227
9.2.3 遗传算法的选择操作 230
9.2.4 遗传算法求解无约束优化问题 231
9.2.5 遗传算法库Geatpy的介绍 233
9.2.6 使用Geatpy求解约束优化问题 239
9.2.7 使用Geatpy求解多目标优化问题 241
9.3 本章小结 242