2、整數規划
2.1 定義
規划中的變量 (部分或全部) 限制為整數時, 稱為整數規划。 若在線性規划模型中,變量限制為整數,則稱為整數線性規划。
2.2 分類
- 變量全限制為整數時,稱純(完全)整數規划。
- 變量部分限制為整數的,稱混合整數規划。
2.3 整數規划特點
1、原線性規划有最優解, 當自變量限制為整數后, 其整數規划解出現下述情況:
- 原線性規划和整數規划的最優解一致
- 整數規划無可行解
- 有可行解(但不是最優解)
2、整數規划最優解不能按照實數最優解簡單取整而獲得
2.4 求解的方法
- 分枝定界法—可求純或混合整數線性規划
- 割平面法—可求純或混合整數線性規划
- 隱枚舉法—求解“0-1”整數規划:
- 過濾隱枚舉法;
- 分枝隱枚舉法。
- 匈牙利法—解決指派問題
- 蒙特卡洛法—求解各種類型規划
2.5 分枝定界法
對有約束條件的最優化問題 (其可行解為有限數) 的所有可行解空間恰當地進行系統搜索,這就是分枝與定界內容。把全部可行解空間反復地分割為越來越小的子集,稱為分枝。對每個子集內的解集計算一個目標下界(對於最小值問題) ,這稱為定界。
在每次分枝后, 凡是界限超出已知可行解集目標值的那些子集不再進一步分枝,這樣,許多子集可不予考慮,這稱剪枝。這就是分枝定界法的主要思路。
例 1
求
解:
1、先不考慮整數限制,直接按照線性規划求解,將此線性規划問題視為 B,得
再取 x1 = x2 = 0,得到 z 為 0,那么,以上便可求出可行解 z 的上下界
2、任選 x1 和 x2 進行分枝,取 x1 <= 4,x1 >= 5
可得
對 z 再定界,有
3、對 x2 進行分枝,取 x2 <= 2,x2 >= 3,有
再定界,有
4、若再對 x2 以 1 進行分支定界,無可行解,那么,可推斷,最優解為
2.6 0 - 1 整數規划
0-1 整數規划指的是變量 xj 僅能取 0 或 1,即
2.6.1 投資場所的選定——相互排斥的計划
題目描述:某公司擬在市東、西、南三區建立門市部。擬議中有 7 個位置 Aj(j = 1, 2, 3...7)可供選擇,規定
Aj 點的投資為 bj 元,每年利潤為 cj 元,投資總額不能超過 B 元,問如何選擇可使年利潤最大?
解:
引入變量 xj,令
那么問題可寫為
2.6.2 互斥問題的約束條件
1、
可寫為
M 為充分大的數
2、
可寫為
2.6.3 固定費用的問題
例 2
某工廠為了生產某種產品,有三種方式可供選擇:
- xj 表示采用第 j 種方式生產時的產量
- cj 表示第 j 種方式生產時的變動成本
- kj 表示第 j 種方式生產時的固定成本
要求最小化生產成本。
解:
第 j 種生產方式的總成本為
引入 0 - 1 變量 yj,為
於是目標函數為
對於(3)式的規定,可改寫為
前者和后者分別為充分小和充分大的數
2.7 0 - 1 整數規划的解法
2.7.1 過濾隱枚舉法
窮舉法是最容易想到的一種方法,但是計算量太大,因此設計一種僅檢查變量取值的組合的一部分,稱為過濾隱枚舉法。分枝定界法也為過濾隱枚舉法的一種。
例 3
解題思路:
- 先取一個可行解,例如 (x1, x2, x3) = (1, 0, 0),可行解 z = 3
- 因為求的是最大值,因此求解過程中凡是 z < 3 的值均不考慮
- 改進過濾條件,抬高過濾門檻
2.8 蒙特卡洛法(隨機取樣法)
前面講的是線性整數規划,接下來說明非線性整數規划的問題,當數據量很大時,采用窮舉法得到最優解不符合現實,但是應用概率理論可以證明,在一定的計算量的情況下,完全可以得出一個滿意解。
例 4
解:
若采用窮舉法,共 1010 個點,可隨機分析 106 便可達到最優。
mente.m 如下:目標函數 f ,約束向量函數 g
mainint.m 如下:
上面代碼中 sum(g <= 0) == 4 的原因是題目中 4 個約束條件需全部滿足。
2.9 指派問題的計算機求解
采用 0 - 1 整數規划求解,使用到的 MATLAB 函數為 bintprog
例 5
解:
MATLAB 程序如下:
解得
bintprog 函數說明如下:參考 https://www.jianshu.com/p/9ad0f6d0a7df
- x = bintprog(f)
- x = bintprog(f, A, b)
- x = bintprog(f, A, b, Aeq, beq)
x 是解向量,f 是矩陣系數
A是一個矩陣,b是一個向量
- A,b和變量x={x1,x2,…,xn}一起,表示了線性規划中不等式約束條件
- A,b是系數矩陣和右端向量。
- Aeq和Beq表示了線性規划中等式約束條件中的系數矩陣和右端向量。
例 6
求 max=193x1+191x2+187x3+186x4+180x5+185x6;
st.
x5+x6>=1;
x3+x5>=1;
x1+x2<=1;
x2+x6<=1;
x4+x6<=1;
x1+x2+x3+x4+x5+x6=1;
解:
f=[-193;-191;-187;-186;-180;-185;];
a=[0 0 0 0 -1 -1;0 0 -1 0 -1 0;1 1 0 0 0 0;0 1 0 0 0 1;0 0 0 1 0 1];
b=[-1,-1,1,1,1]';
aeq=[1 1 1 1 1 1];
beq=[3];
x=bintprog(f,a,b,aeq,beq)
2.10 生產與銷售計划問題
2.10.1 問題描述
某公司用兩種原油( A和B )混合加工成兩種汽油(甲和乙) 。甲、乙兩種汽油含 A 原油的最低比例分別為 50%和 60%,每噸售價分別為 4800 元和 5600 元。該公司現有原油 A和B 的庫存量分別為 500 噸和 1000 噸, 還可以從市場上買到不超過 1500噸的原油 A。原油 A的市場價為:購買量不超過 500 噸時的單價為 10000 元/噸;購買量超過 500 噸單不超過 1000 噸時,超過 500 噸的部分 8000 元/噸;購買量超過 1000 噸時,超過 1000 噸的部分 6000 元/噸。該公司應如何安排原油的采購和加工。
2.10.2 模型
設購買的 A 為 x 噸,那么支出 c(x) 為
設 A 用於生產甲、乙的數量分別為 x11,x12,B 用於生產甲、乙的數量分別為 x21,x22,那么利潤為
限制條件為
2.10.3 模型化簡
解法一
將 x 分解為三個量 x1,x2,x3,分別表示采集 10 千元/噸、8 千元/噸、6 千元/噸的 A 的數量,那么
目標函數變為
注意,只有當 x1 = 500 時,才可以 8 千元/噸的價格購買 x2,也就是
同理,只有當 x2 = 500 時,才可以 10 千元/噸的價格購買 x3,也就是
即
解法二
引入 0 - 1 問題,z1 =1,z2 =1,z3 =1 表示以 6 千元/噸、8 千元/噸、10 千元/噸的價格采購 A,上述問題轉化為
解法三
成本函數的曲線為
分別記 b1 = 0,b2 = 500,b3 = 1000,當 x 屬於第一個小區時,
同理,當 x 屬於第二個小區時,
當 x 屬於第三個小區時
當 x 屬於第 k 個小區時, zk = 1,否則 zk = 0,那么