運籌優化常用模型、算法及案例實戰 — Python + Java 實現
劉興祿、熊望祺、臧永森、段宏達、曾文佳、陳偉堅
- 出版商: 清華大學
- 出版日期: 2022-10-01
- 售價: $768
- 貴賓價: 9.5 折 $730
- 語言: 簡體中文
- ISBN: 7302600147
- ISBN-13: 9787302600145
-
相關分類:
Algorithms-data-structures
立即出貨
買這商品的人也買了...
-
$680$530 -
$352機器學習實戰
-
$250C# 並發編程經典實例
-
$352Java 多線程編程核心技術 (Java Multi-thread Programming)
-
$500數值與非數值分析VC++類庫(附光盤)
-
$352實戰 Java 高並發程序設計
-
$860$731 -
$177Java 多線程編程實戰指南 (設計模式篇)
-
$690$538 -
$534$507 -
$580$458 -
$505實戰 Python 網絡爬蟲
-
$520$411 -
$534$507 -
$714$678 -
$880$695 -
$654$621 -
$520$406 -
$580$458 -
$600$540 -
$600$540 -
$234$222 -
$352MATLAB 運籌學
-
$780$616 -
$880$695
相關主題
商品描述
《運籌優化常用模型、算法及案例實戰》主要講述運籌優化領域常用的數學模型、精確算法以及相應的代碼實現。首先簡要介紹基本理 論,然後用豐富的配套案例講解多個經典的精確算法框架,最後結合常用的優化求解器(CPLEX 和 Gurobi)說明如何用 Python 和 Java 語言實現書中提到的所有精確算法。 全書共分 3 部分。第 I 部分(第 1~4 章)為運籌優化常用模型及建模技巧。該部分著重介紹整數規 劃的建模技巧和常見的經典模型。第 II 部分(第 5~7 章)為常用優化求解器 API 詳解及應用案例。該 部分主要介紹兩款常用的商業求解器(CPLEX 和 Gurobi)的使用方法,包括 Python 和 Java 的 API 詳 解、簡單案例以及復雜案例。第 III 部分(第 8~17 章)為運籌優化常用算法及實戰。該部分詳細介紹幾 個經典的精確算法的理論、相關案例、偽代碼以及相應的代碼實現。 本書適合作為高等院校工業工程、管理科學與工程、信息管理與信息系統、數學與應用數學、物流 工程、物流管理、控制科學與工程等開設運籌學相關課程的高年級本科生、研究生教材,同時也可供在 物流與供應鏈、交通、互聯網、製造業、醫療、金融、能源等領域從事有關運籌優化的開發人員以及廣 大科技工作者和研究人員參考。
目錄大綱
目 錄
第I部分 運籌優化常用模型及建模技巧
第1章 運籌優化算法相關概念 3
1.1 幾類常見的數學規劃模型 3
1.1.1 線性規劃 3
1.1.2 混合整數規劃 3
1.1.3 二次規劃 4
1.1.4 二次約束規劃 4
1.1.5 二次約束二次規劃 4
1.1.6 二階錐規劃 5
1.2 凸集和極點 6
1.2.1 凸集 6
1.2.2 極點 7
1.3 多面體、超平面與半平面 7
1.3.1 多面體 7
1.3.2 超平面與半平面 7
1.4 凸組合和凸包 8
1.4.1 凸組合和凸包的概念 8
1.4.2 一些結論 8
第2章 運籌優化經典問題數學模型 9
2.1 指派問題 9
2.2 最短路問題 11
2.3 最大流問題 12
2.3.1 問題描述 12
2.3.2 問題建模及最優解 13
2.3.3 最大流問題的一般模型 14
2.3.4 Ford–Fulkerson 算法求解最大流問題 15
2.3.5 Java實現Ford–Fulkerson算法求解最大流問題 18
2.4 最優整數解特性和幺模矩陣 23
2.4.1 指派問題的最優解特性驗證 24
2.4.2 最短路問題的整數最優解特性驗證 27
2.4.3 最優整數解特性的理解 31
2.4.4 幺模矩陣和整數最優解特性 32
2.5 多商品網絡流問題 34
2.6 多商品流運輸問題 37
2.7 設施選址問題 38
2.8 旅行商問題 39
2.8.1 TSP建模方法1:子環路消除約束 41
2.8.2 TSP建模方法2:MTZ約束消除子環路 42
2.8.3 TSP建模方法3:1-tree建模方法 45
2.9 車輛路徑規劃問題 47
2.9.1 概述 47
2.9.2 VRPTW的一般模型 48
第3章 整數規劃建模技巧 51
3.1 邏輯約束 51
3.1.1 兩個命題 51
3.1.2 二選一約束條件 51
3.1.3 指示約束條件 53
3.2 線性化 54
3.2.1 分段線性函數線性化 54
3.2.2 含絕對值形式的線性化 58
3.2.3 含乘積形式的線性化 60
3.2.4 含分式形式的線性化 61
3.2.5 含max/min形式的線性化 62
第4章 大規模線性規劃的對偶 64
4.1 對偶理論概述 64
4.2 原問題與對偶問題之間的關系 65
4.3 對偶理論相關重要定理 66
4.4 最短路問題的對偶 73
4.4.1 借助Excel和具體小算例寫出大規模SPP的對偶 74
4.4.2 SPP中存在負環的特例 76
4.5 多商品網絡流問題的對偶 81
4.5.1 借助Excel和具體小算例寫出大規模MCNF的對偶 81
4.5.2 將Excel中的對偶問題表轉化成公式形式 83
4.5.3 Python調用Gurobi求解MCNF 83
第II部分 常用優化求解器API詳解及應用案例
第5章 CPLEX的Java API詳解及簡單案例 93
5.1 基於Eclipse的CPLEX Java API的安裝與配置:適用於macOS 93
5.2 基於Eclipse的CPLEX Java API的安裝與配置:適用於Windows 97
5.2.1 基本環境配置 97
5.2.2 環境設置中java.library.path的問題 98
5.2.3 Javadoc的設置 100
5.3 CPLEX建模 102
5.3.1 類與接口 102
5.3.2 變量 102
5.3.3 表達式 102
5.3.4 範圍約束 104
5.3.5 目標函數 104
5.3.6 建模方式 105
5.3.7 模型求解 108
5.3.8 獲取解的信息 108
5.3.9 模型導出與模型導入 109
5.3.10 參數 109
5.3.11 其他 114
5.4 傳統回調 114
5.4.1 參考回調 115
5.4.2 查詢或診斷回調 116
5.4.3 控制回調 117
5.4.4 回調的終止 118
5.4.5 傳統回調示例 119
5.5 通用回調 121
5.5.1 簡介 121
5.5.2 功能 121
5.5.3 通用回調的上下文 121
5.5.4 通用回調示例 123
5.6 Java調用CPLEX求解整數規劃的小例子 124
5.6.1 書架生產問題 124
5.6.2 包裝盒選擇問題 128
第6章 Gurobi的Python API詳解及簡單案例 132
6.1 Python調用Gurobi環境配置 132
6.1.1 完整步驟 132
6.1.2 相關問題 132
6.2 Gurobi算法框架介紹 138
6.2.1 Gurobi MIP Algorithms 138
6.2.2 Presolving 140
6.2.3 Node Selection 141
6.2.4 Cutting Planes 142
6.2.5 Heuristics 143
6.2.6 設置啟發式的參數 144
6.2.7 Branching 144
6.3 Gurobi能夠求解的模型類別 145
6.3.1 線性規劃 145
6.3.2 混合整數規劃 147
6.3.3 二次規劃 148
6.3.4 二次約束二次規劃 150
6.3.5 二階錐規劃 152
6.4 Python 調用Gurobi總體流程 154
6.5 Gurobi求解MIP輸出的日誌信息解釋 156
6.5.1 MIP日誌示例 156
6.5.2 預求解部分 157
6.5.3 求解進程部分 158
6.5.4 匯總部分 160
6.6 Python接口概述 161
6.6.1 模型概述 161
6.6.2 求解模型 162
6.6.3 多個解、目標函數和場景 162
6.6.4 不可行的模型 162
6.6.5 查詢和修改模型屬性 163
6.6.6 其他修改模型信息的方法 163
6.6.7 惰性更新 164
6.6.8 參數管理 164
6.6.9 管理求解進程:日誌和回調 165
6.6.10 修改求解器的行為:回調 165
6.7 Python調用Gurobi常用類和函數 165
6.7.1 全局函數 165
6.7.2 Model類 166
6.7.3 Var類和MVar類 169
6.7.4 Column類 170
6.7.5 目標函數 170
6.7.6 表達式 171
6.7.7 約束類 172
6.7.8 求解 175
6.7.9 解的輸出 176
6.8 Python接口中的GRB類 176
6.8.1 GRB類中的常量 176
6.8.2 GRB類中的屬性:GRB.Attr 180
6.8.3 GRB類中的參數:GRB.Param 185
6.9 Gurobi的回調函數 190
6.9.1 什麽是Gurobi的回調函數 190
6.9.2 Gurobi回調函數的用法 192
6.10 Python 調用Gurobi的參數調優 193
6.11 Python調用Gurobi求解整數規劃的簡單例子 194
第7章 調用CPLEX和Gurobi求解MIP的復雜案例:VRPTW和TSP 197
7.1 調用CPLEX和Gurobi求解VRPTW 197
7.1.1 VRPTW的一般模型 197
7.1.2 Java調用CPLEX求解VRPTW 198
7.1.3 Java調用Gurobi求解VRPTW 213
7.1.4 Python調用Gurobi求解VRPTW 221
7.2 Python調用Gurobi求解TSP 232
7.2.1 TSP的MTZ建模及調用Gurobi求解 235
7.2.2 TSP:Python調用Gurobi實現callback添加消除子環路約束 237
第III部分 運籌優化常用算法及實戰
第8章 單純形法 249
8.1 線性規劃問題的標準形式 249
8.2 單純形法流程圖及詳細案例 251
8.3 大$M$法和兩階段法 257
8.4 單純形法偽代碼 259
8.5 Python實現單純形法 260
第9章 Dijkstra算法 265
9.1 Dijkstra算法求解最短路問題詳解 265
9.2 Dijkstra算法步驟及偽代碼 269
9.3 Python實現Dijkstra算法 271
9.3.1 網絡數據準備 271
9.3.2 Dijkstra算法實現 272
9.3.3 算例測試 273
9.4 拓展 274
第10章 分支定界算法 275
10.1 整數規劃和混合整數規劃 275
10.2 分支定界算法求解混合整數規劃 276
10.3 分支定界算法的一般步驟和偽代碼 286
10.4 分支定界算法執行過程的直觀展示 290
10.5 分支定界算法的分支策略 291
10.6 分支定界算法的搜索策略 292
10.7 分支定界算法的剪枝策略 292
10.8 Python調用Gurobi實現分支定界算法的簡單案例 293
10.9 Python調用Gurobi實現分支定界算法求解TSP 300
10.10 Python調用Gurobi實現分支定界算法求解VRPTW 301
第11章 分支切割算法 303
11.1 什麽是分支切割算法 303
11.2 有效不等式 306
11.3 割平面算法 308
11.3.1 Gomory's分數割平面算法 309
11.3.2 其他割平面算法 313
11.4 分支切割算法: 分支定界+割平面 314
11.4.1 分支切割算法偽代碼 314
11.4.2 分支切割算法: 一個詳細的例子 317
11.5 Java調用CPLEX實現分支切割算法求解VRPTW 319
11.5.1 分支定界 319
11.5.2 割平面 320
11.6 Python調用Gurobi實現分支切割算法求解VRPTW完整代碼 321
11.7 Java 調用 CPLEX 實現分支切割算法求解CVRP: 回調函數添加割平面 322
11.7.1 CVRP的基本模型 322
11.7.2 割平面 323
第12章 拉格朗日鬆弛 326
12.1 最優性和鬆弛 326
12.1.1 原始邊界 327
12.1.2 對偶邊界 328
12.2 對偶 328
12.3 拉格朗日鬆弛 329
12.3.1 拉格朗日鬆弛介紹 329
12.3.2 拉格朗日對偶問題 330
12.3.3 拉格朗日鬆弛應用案例:無容量限制的設施選址問題 331
12.4 拉格朗日對偶的加強 333
12.5 求解拉格朗日對偶 335
12.5.1 次梯度算法求解拉格朗日對偶 335
12.5.2 應用案例:拉格朗日鬆弛求解TSP 338
12.6 如何選擇拉格朗日鬆弛 340
12.7 Python調用Gurobi實現拉格朗日鬆弛求解選址--運輸問題 342
12.7.1 拉格朗日鬆弛應用案例:選址--運輸問題 342
12.7.2 Python代碼實現 345
第13章 列生成算法 347
13.1 為什麽用列生成算法 347
13.2 下料問題 349
13.2.1 引例 349
13.2.2 列生成求解下料問題的一般模型及其偽代碼 352
13.2.3 列生成最優性的幾個小問題 355
13.3 列生成求解下料問題的實現 356
13.3.1 Python調用Gurobi實現列生成求解下料問題示例算例:版本1 357
13.3.2 Python調用Gurobi實現列生成求解下料問題示例算例:版本2
(以人工變量為初始列的方式) 360
13.3.3 Python調用Gurobi實現列生成求解下料問題 : 版本3 362
13.4 列生成求解TSP 365
13.4.1 TSP的1-tree建模及列生成求解 365
13.4.2 主問題 366
13.4.3 子問題 367
13.5 列生成求解VRPTW 369
13.5.1 主問題 370
13.5.2 子問題 372
13.5.3 詳細案例演示 373
第14章 動態規劃 393
14.1 動態規劃 393
14.1.1 動態規劃求解最短路問題 394
14.1.2 問題建模和求解 394
14.1.3 一個較大規模的例子 396
14.2 動態規劃的實現 397
14.2.1 偽代碼 397
14.2.2 Java代碼 398
14.3 動態規劃求解TSP 403
14.3.1 一個簡單的TSP算例 403
14.3.2 偽代碼 408
14.3.3 Python實現:示例算例 409
14.3.4 Python實現:中大規模算例 412
14.4 標簽算法求解帶資源約束的最短路問題 419
14.4.1 帶資源約束的最短路問題 419
14.4.2 標簽算法 424
14.4.3 標簽算法的偽代碼 425
14.4.4 標簽設定算法和標簽校正算法 426
14.4.5 優超準則和優超算法 426
14.4.6 Python實現標簽算法求解SPPRC 427
14.5 Python實現標簽算法結合列生成求解VRPTW 435
14.5.1 初始化RMP 435
14.5.2 標簽算法求解子問題 437
第15章 分支定價算法 438
15.1 分支定價算法基本原理概述 438
15.2 分支定價算法求解VRPTW 440
15.2.1 VRPTW的通用列生成建模方法 440
15.2.2 分支定價算法完整流程及偽代碼 442
15.2.3 分支策略 445
15.2.4 界限更新 449
第16章 Dantzig-Wolfe分解算法 450
16.1 引例 450
16.2 塊角模型與Dantzig-Wolfe分解 454
16.2.1 塊角模型 454
16.2.2 Minkowski表示定理 455
16.2.3 模型分解 455
16.2.4 兩階段法 458
16.3 詳細案例 459
16.4 Dantzig-Wolfe分解求解大規模混合整數規劃 464
16.4.1 兩階段法實現Dantzig-Wolfe分解算法介紹 465
16.4.2 第1階段 465
16.4.3 第2階段 471
16.5 Python調用Gurobi實現Dantzig-Wolfe分解求解多商品流運輸問題 482
16.5.1 多商品網絡流模型的區塊結構 482
16.5.2 多商品流運輸問題 : Dantzig-Wolfe分解求解 483
16.5.3 Python調用Gurobi實現Dantzig-Wolfe分解求解多商品流運輸問題 487
16.5.4 完整代碼 487
16.5.5 算例格式說明 497
16.5.6 算例運行結果 498
16.6 Dantzig-Wolfe分解求解VRPTW 500
第17章 Benders分解算法 504
17.1 分解方法 504
17.1.1 Benders分解的原理 504
17.1.2 Benders分解的全過程 509
17.1.3 算法框架圖 510
17.1.4 算法偽代碼 511
17.2 詳細案例 512
17.2.1 問題描述和模型轉換 512
17.2.2 第1次迭代 513
17.2.3 第2次迭代 515
17.2.4 第3次迭代 516
17.2.5 第4次迭代 517
17.3 Benders分解應用案例 518
17.3.1 固定費用運輸問題 518
17.3.2 設施選址問題 520
參考文獻 523