整数线性规划算法
一、整數線性規劃基礎
二、常用求解方法:
1. 割平面法、
2. 分支定界法
-
對于不滿足約束或者小于下屆的分支還需要進行剪枝操作。
3. 隱枚舉法
三、算例及實現代碼
3.1 整數線性規劃常見的第三方庫和軟件(截圖來自B站)
(1) 軟件:Excel, Lingo和matlab
(2) 第三方庫
補充:
- pulp: Lp models
- OpenOpt: Lp models, non-LP models
3.2 這里我們先學習使用pulp求解器來求解一個問題
3.2.1 基于anaconda的pulp安裝
3.2.2 求解一個算例,來自B站
- 算例描述
某公司生產三種油漆(interior, exterior, theme),油漆的原材料來源為M1和M2, 現在M1和M2分別只剩10噸和5噸了,三種油漆每噸的利潤分別是:1k,2k和3k,三種油漆每生產一噸需要的原材料重量如下表所示,要求如何分配原材料的配置,使得利潤最大化,注意這里并不是整數線性規劃問題,原材料的分配可以為小數。
- 數學模型
(1) 變量
| x1 | interior產量 |
| x2 | exterior產量 |
| x3 | theme產量 |
(2) 目標函數
| const_function=1000?x1+2000?x2+3000?x3const\_function=1000*x1+2000*x2+3000*x3const_function=1000?x1+2000?x2+3000?x3 | (1) |
(3) 約束
| x1+x2?2+x3?3<=10x1+x2*2+x3*3<=10x1+x2?2+x3?3<=10 | (2) |
| x1?0+x2+x3?2<=5x1*0+x2+x3*2<=5x1?0+x2+x3?2<=5 | (3) |
| x1,x2,x3>=0x1,x2,x3>=0x1,x2,x3>=0 | (4) |
- 代碼實現
輸出
status: Optimal
x1 = 2.5
x2 = 0.0
x3 = 2.5
10000.0
3.3 pulp進階:新增函數
- 還是上一節的問題,但是變量定義方式變了
利用LpVariable.dicts(name, indexs,lowBound=None,upBound=None, cat='Continuous',indexStart=[])用來構造變量字典,可以不需要一個個創建Lp變量實例,name指定所有變量前綴,index是列表,其元素會被用來構造變量名,后面三個參數和LpVariable一樣。 - lpSum(vector) 計算一個序列的值,使用lpSum求解比普通sum函數快。
輸出
status: Optimal
paint_exterior = 0.0
paint_interior = 2.5
paint_theme = 2.5
10000.0
注意這一次的輸出變量名和第一次輸出的變量名有所區別,這里的變量名是庫自己生成的。
總結
- 上一篇: 计算机应用基础试题及答案东师,计算机应用
- 下一篇: 用友nccloud 虚拟机