一類要求變數取整數值的數學規劃。若要求全部變數取整數值,則稱為純整數規劃,簡稱為整數規劃。若隻要求部分變數取整數值,則稱為混合整數規劃。特別地,當在線性規劃中要求變數取整數時,就是線性整數規劃。若要求變數為0,1變數,即其值隻取0或1時,則稱為0-1規劃。由於實際問題中有許多量具有不可分割的性質,如人數、機器數、元件數等;還有一些邏輯現象如開與關,取與舍,有與無等可利用0、1變數作數量化描述,因此,在線路設計、工廠選址、人員安排、代碼選取以及其他領域中,常常常出現整數規劃問題。1958年,R.E.戈莫裡提出解線性整數規劃的割平面法後,整數規劃逐步形成一個獨立的分支。

  形式最簡單的整數規劃問題是背包問題,也就是求 max

,滿足 x j取0或1)的解的問題。假如將 V解釋為背包的容積, v j為物體 j的體積, w j為物體 j的重量,而變量 x j取1時表示物體 j裝入背包, x j取0時表示物體 j不裝入背包,那麼背包問題就是要尋求一種既不超過背包容積,又能使總重量最大的裝法。背包問題的一種特殊解法是動態規劃的方法,這種方法所需的計算時間與所給問題中的參數 nV有關,大致與 n V成正比例增長。

  設所給的整數規劃問題(p)為求極小值問題。在整數規劃的一般性解法中,有三個基本概念。①分解,以F(p)表示問題(p)的約束集。所謂問題(p)分解為子問題(p1),(p2),…,(pq)之和,是指滿足條件(S1)和(S2),(S1):問題(p)的任何一個可行解,恰好是(p1),(p2),…,(pq)中某一個問題的可行解;(S2):任何子問題(pi)的可行解也是(p)的可行解,即

,1≤ ijq。最通常的分解方式是“二分法”,例如,若 x j是( p)的0,1變量,把條件“ x j=0”和“ x j=1”分別添進問題( p)的約束條件中,則問題( p)分解為兩個子問題之和。②松弛,凡是放棄問題( p)的某些約束條件後所得到的問題( ),都稱為問題( p)的松弛問題。任何松弛問題( )都具有以下三個明顯的性質:(R1)若( )沒有可行解,則( p)也沒有可行解;(R2)對同樣的目標函數而言,( p)的最小值不小於( p)的最小值;(R3)若( )的一個最優解是( p)的可行解,則它也是( p)的一個最優解。最通常的松弛方式是放棄變量的整數性要求。③探測假設按某種規則,已將問題( p)分解為子問題( p 1),( p 2),…,( p q)之和,並且各( p j)已有對應的松弛問題( j)。若( j)沒有可行解,則探明瞭( p j)沒有可行解,因此,可從( p)的分解表上把它刪去。此種情形記為(F1)。假若當時已掌握瞭( p)的一個可行解 x *,與之相應的目標函數值為 z *,如果松弛問題( j)的最小值不比 z *小,那麼就探明瞭( p j)中沒有比 x *更好的可行解,因此已無須再考慮子問題( p j),就可從分解表上把它刪去。此種情形記為(F2)。若( j)的最優解是( p j)的可行解,則已求得瞭( p j)的一個最優解。因此也無須再考慮它瞭,可以從分解表上把( p j)刪去,這時若( p j)的最優解比 x *好,則替換掉 x *,同時刷新 z *的值。此種情形記為(F3)。假如各個( j)的目標函數最小值都不比 z *小,則 x *便是原問題( p)的最優解。此種情形記為(F4)。情形(F1)通常稱為可行性探測。情形(F2)至(F4)通常稱為最優性探測。

  概括地說,求解一個整數規劃問題(p),有以下幾個步驟。首先,選定一種松弛方式,將(p)松弛為問題(),使得比較容易求解。若()沒有可行解,則(p)也沒有可行解。若()的最優解是(p)的可行解,則已求得(p)的最優解。若()的最優解不是(p)的可行解,則有兩條不同的途徑,一是設法改進松弛問題(),繼續探測問題();一是選定一種分解方式,把(p)分解成兩個或幾個子問題之和,將其列表記錄,並且賦予各子問題盡可能好的目標函數值的下界。然後,按一定的次序,逐個進行探測。當某個子問題已經被探明時,就從表中刪去,否則,繼續對子問題進行分解。

  對線性整數規劃問題,不用分解的算法有割平面法,它以線性規劃問題作為松弛問題,利用生成割平面來不斷改進松弛問題,使最終求得的松弛問題的最優解也是整數解;還有一種是群論方法,它用有限阿貝爾群上的一個背包問題作為松弛問題,是放棄一部分變量的非負性要求後得到的。利用分解的算法有隱數法和分枝定界法兩類。它們通常都是以線性規劃問題作為松弛問題,不同之處僅在於探測子問題的先後次序。隱數法是按照子問題表中“先入後出”的原則來確定探測次序,即後出現的子問題先探測。分枝定界法是按照所賦予的下界大小來確定探測的先後順序,即下界小的子問題優先探測。前者計算程序比較簡單,在計算過程中所需要保存的信息較少,而後者在選取子問題時有靈活性,因為往往下界數值小的子問題中存在最優解的可能性較大。

  對線性混合整數規劃問題,J.F.本德爾斯提出瞭一種分解算法。它的求解過程可以分為兩部分,一部分是解一個線性整數規劃問題,另一部分是解一個線性規劃問題。

  割平面法 例如,考慮整數規劃問題:求

   (1)

滿足條件

   (2)

   (3)

   (4)

   (5)

x1x2取整數值。   (6)

  取它的松弛問題為線性規劃(1)~(5),約束集為圖1

中的多邊形 A B C D。整數規劃的可行解是此多邊形內的整點(即座標為整數的點)。松弛問題的基本最優解為

即圖1中的點 C。目標函數的最優值

   (7)

   (8)

從(7)和(8)中解出 x 1x 2,得

   (9)

   (10)

x 1x 2yz都必須取整數值,故由(9)和(10)可得同餘方程

   (11)

   (12)

利用方程(11)或(12)中 yz的系數,可以導出整數規劃的一個新的約束條件,例如,用 乘條件(2)的兩邊,用 乘(4)的兩邊,然後將(2)和(4)的兩邊分別相加,可得 。由於 x 1必須取整數值,就可推得一個新的約束條件: x 1≤1。這就是整數規劃的一個割平面。類似地,由 可推得另一個割平面:3 x 1- x 2≤4。增加割平面 x 1≤1後,新的松弛問題的約束集如圖 2

所示。它的基本最優解為: x 1=1, ,是圖2中的點 Q 再由條件 x 1≤1和 可導出一個新的割平面: x 1+ x 2≥3。增加此割平面後,松弛問題的約束集如圖3所示。它的基本最優解為: x 1=1即圖3中的點 R。由於它已是整數解,故必為整數規劃(1)~(6)的最優解。目標函數的最大值 x 0=1。

  分枝定界法 例如,整數規劃問題(p):求

     (13)

滿足條件

(14)

(15)

(16)

x1x2x3取整數值。 (17)

  取松弛問題()為線性規劃(13)~(16)。()的最優解為x1=0.4,x2=3.8,x3=0;x0=14.2。按條件x2≤3和x2≥4將(p)分解為子問題(p1)與(p2)之和。解(p1)的松弛問題(1),得x1x11=0.5,x21=3,x

=0.5; x 0 1=14.5。再按條件 x 1=0和 x 1≥1將( p 1)分解為( p 3)與( p 4)之和。這時子問題表為{( p 3,( p 4),( p 2)}。這些子問題的 x 0的下界,暫時都可以取為15。按表中“先入後出”原則,解( p 3)的松弛問題( 3),得 x 3x 1 3=0, x 2 3=3, x 3 3=2; x 0 3=17。由於 x 3是整數解,故必為( p 3)的最優解。因此,( p 3)已被探明,就可從表中刪去,記 x *= x 3z *=17,這是被找到的第一個整數解。解( 4),得 。由於 x z *=17,故已探明( p 4)中沒有( p)的最優解。解( 2),得 。按條件 x 1=0和 x 2≥1 將( p 2)分解為( p 5)與( p 6)之和。( p 5)、 p 6x 0的下界可取為15。解( 5),得

。由於 x 3是整數解,故已探明( p 5)。由於 x z *=17,故可刷新記錄解,取 x *= x 3

。由於 x 也達到( p 6)的下界,故已探明( p 6)中沒有比 x 3更好的解,至此( p)已探明,最優解為 x *= x 3。以上過程可表示為圖4

  

參考書目

 R.S.Garfinkel and G.L.Nemhauser,Integer Programming,John Wiley &Sons,New York,1972.