この 章の 目標
線形計画問題を 標準形に 直し、基底解・頂点・被約費用の 言葉で 書き表せる
実行可能基底解と 頂点が 同じ ものである ことを 証明し、最適解が(存在すれば)頂点から 選べる ことを 説明できる
単体法の ピボットを 計算でき、退化と 巡回・ブランドの 規則・計算量に ついて 正確に 述べられる
ファルカスの 補題から 双対定理を 証明し、相補性条件を 使って 最適性を 確かめられる
双対変数を シャドウプライスと して 解釈し、その 有効範囲と 退化した ときの 注意を 説明できる
前提 :第2章 、02-linear-algebra 第2章 。定式化の 例は 第1章で 見た。3.6 節では 第2章の 点と 閉凸集合の 分離定理(定理 2.6)を 使う。
工場で 何を いく つ作るか、倉庫から 店へ 何を どれだけ運ぶか、誰を どの 仕事に 割り当てるか。こうした 計画の 多くは、「一次式で 表される 費用(利益)を、一次式の 等式・ 不等式の 制約のもとで 最小化(最大化)する」と いう 形に 書ける。これが 線形計画問題 (linear programming problem, LP) である。変数が 数百万ある 問題も 日常的に 解かれており、最適化の 中でもっとも 広く 使われている 問題の 一つである。
線形計画問題には 著しい 性質が 二つある。一つは、最適解が(存在すれば)実行可能領域である 多面体の 頂点から 選べる ことで、これが 頂点から 頂点へ 移って 最適解を 探す 単体法 (simplex method) の 基礎に なる。もう 一つは 双対性で、どの 線形計画問題にも 最適値の 一致する 双対問題が 対応する。双対問題の 解は 主問題の 解が 最適である ことの 証明書で あり( 第1章 例 1.2 の 生産計画で、制約を 9 / 5 9/5 9/5 倍と 2 / 5 2/5 2/5 倍して 足したのが その 例)、「資源を 1 単位増やすと 最適値が どれだけ改善するか」(シャドウプライス)を 表す。双対性は 第4章で 非線形の 問題に 拡張される。
ベクトル x , y x, y x , y に ついて x ≥ y x \geq y x ≥ y は 各成分で x j ≥ y j x_j \geq y_j x j ≥ y j と なる ことを 表す。 A ⊤ A^{\top} A ⊤ は 転置( 02-linear-algebra 第1章 の t A {}^tA t A と 同じ もの)、 1 \mathbf{1} 1 は 成分が すべて 1 1 1 の ベクトルである。
3.1 線形計画問題と 標準形
例 3.1 (生産計画)製品 P, Q の 1 単位あたりの 利益は 40 千円、30 千円である。P を 1 単位作るには 機械 2 時間・作業 1 時間・原料 1 単位、Q には 機械 1 時間・作業 1 時間が 必要で(原料は 使わない)、1 週間に 使えるのは 機械 100 時間、作業 80 時間、原料 40 単位までとする。生産量を x 1 , x 2 x_1, x_2 x 1 , x 2 と すると、問題は
maximize 40 x 1 + 30 x 2 subject to 2 x 1 + x 2 ≤ 100 , x 1 + x 2 ≤ 80 , x 1 ≤ 40 , x 1 , x 2 ≥ 0 \begin{aligned}
\text{maximize} \quad & 40x_1 + 30x_2 \\
\text{subject to} \quad & 2x_1 + x_2 \leq 100, \quad x_1 + x_2 \leq 80, \quad x_1 \leq 40, \quad x_1, x_2 \geq 0
\end{aligned} maximize subject to 40 x 1 + 30 x 2 2 x 1 + x 2 ≤ 100 , x 1 + x 2 ≤ 80 , x 1 ≤ 40 , x 1 , x 2 ≥ 0
である。実行可能領域は 頂点 ( 0 , 0 ) (0, 0) ( 0 , 0 ) , ( 40 , 0 ) (40, 0) ( 40 , 0 ) , ( 40 , 20 ) (40, 20) ( 40 , 20 ) , ( 20 , 60 ) (20, 60) ( 20 , 60 ) , ( 0 , 80 ) (0, 80) ( 0 , 80 ) の 五角形で、利益は それぞれ 0 , 1600 , 2200 , 2600 , 2400 0, 1600, 2200, 2600, 2400 0 , 1600 , 2200 , 2600 , 2400 である。最適解が 頂点から 選べる こと(定理 3.11)を 認めれば、最適解は ( 20 , 60 ) (20, 60) ( 20 , 60 ) 、最大利益は 2600 2600 2600 千円である。この 例は 本章を 通して 使う。
定義 3.2 (線形計画問題)一次関数 c ⊤ x c^{\top}x c ⊤ x を 有限個の 一次の 等式・ 不等式のもとで 最小化または 最大化する 問題を 線形計画問題と いう。制約を 満たす x x x を 実行可能解 (feasible solution)、その全体を 実行可能領域 (feasible region) と いう。実行可能解が ない とき 実行不能 (infeasible)、最小化問題で 目的関数が いくらでも 小さくなる(最大化問題なら 大きくなる)とき 非有界 (unbounded) と いう。
等式は 2 つの 不等式と みな せるので、実行可能領域は 第2章の 意味の 多面体(閉凸集合)である。理論は 次の 形に そろえて 述べる。
定義 3.3 (標準形, standard form)A ∈ R m × n A \in \mathbb{R}^{m \times n} A ∈ R m × n , b ∈ R m b \in \mathbb{R}^m b ∈ R m , c ∈ R n c \in \mathbb{R}^n c ∈ R n に 対する 次の 問題を 標準形の 線形計画問題と いう。
(P) minimize c ⊤ x subject to A x = b , x ≥ 0 \text{(P)} \qquad \text{minimize} \quad c^{\top}x \qquad \text{subject to} \quad Ax = b, \quad x \geq 0 (P) minimize c ⊤ x subject to A x = b , x ≥ 0
命題 3.4 (標準形への 変換)任意の 線形計画問題は 次の 書き換えで 標準形に なる。書き換えの 前後で 実行可能解は 目的関数の 値を 保って 対応する(一方の 実行可能解から 他方の 実行可能解が 作れる)ので、最適解の 有無と 最適値(最大化を 最小化に 直した 符号を 除く)は 変わらない。
最大化 c ⊤ x c^{\top}x c ⊤ x は 最小化 ( − c ) ⊤ x (-c)^{\top}x ( − c ) ⊤ x に 直す。
不等式 a ⊤ x ≤ β a^{\top}x \leq \beta a ⊤ x ≤ β は、新しい 変数 s ≥ 0 s \geq 0 s ≥ 0 (スラック変数 , slack variable)を 加えて a ⊤ x + s = β a^{\top}x + s = \beta a ⊤ x + s = β と する。 a ⊤ x ≥ β a^{\top}x \geq \beta a ⊤ x ≥ β は a ⊤ x − s = β a^{\top}x - s = \beta a ⊤ x − s = β , s ≥ 0 s \geq 0 s ≥ 0 と する。
符号の 制約の ない 変数( 自由変数 )x j x_j x j は x j = x j + − x j − x_j = x_j^{+} - x_j^{-} x j = x j + − x j − , x j ± ≥ 0 x_j^{\pm} \geq 0 x j ± ≥ 0 と 置き換える。
証明. 2:a ⊤ x ≤ β a^{\top}x \leq \beta a ⊤ x ≤ β なら s = β − a ⊤ x ≥ 0 s = \beta - a^{\top}x \geq 0 s = β − a ⊤ x ≥ 0 と おけば よく、逆に ( x , s ) (x, s) ( x , s ) が 新しい 制約を 満たせば a ⊤ x = β − s ≤ β a^{\top}x = \beta - s \leq \beta a ⊤ x = β − s ≤ β 。目的関数は s s s を 含まない( ≥ \geq ≥ も 同様)。3: x j ± = max ( ± x j , 0 ) x_j^{\pm} = \max(\pm x_j, 0) x j ± = max ( ± x j , 0 ) と おけば よく、逆に x j ± ≥ 0 x_j^{\pm} \geq 0 x j ± ≥ 0 からは x j = x j + − x j − x_j = x_j^{+} - x_j^{-} x j = x j + − x j − を 作る。目的関数と 制約は x j + − x j − x_j^{+} - x_j^{-} x j + − x j − を 通してしか 新しい 変数に よらない。1 は 明らか。 □ \square □
例 3.5 例 3.1 は、最大化を − 40 x 1 − 30 x 2 -40x_1 - 30x_2 − 40 x 1 − 30 x 2 の 最小化に 直し、スラック変数 s 1 , s 2 , s 3 s_1, s_2, s_3 s 1 , s 2 , s 3 (それぞれ機械・作業・原料の 余り)を 加えると、変数 ( x 1 , x 2 , s 1 , s 2 , s 3 ) (x_1, x_2, s_1, s_2, s_3) ( x 1 , x 2 , s 1 , s 2 , s 3 ) の 標準形
minimize − 40 x 1 − 30 x 2 subject to ( 2 1 1 0 0 1 1 0 1 0 1 0 0 0 1 ) ( x 1 x 2 s 1 s 2 s 3 ) = ( 100 80 40 ) , x 1 , x 2 , s 1 , s 2 , s 3 ≥ 0 \text{minimize} \quad -40x_1 - 30x_2 \qquad \text{subject to} \quad \begin{pmatrix} 2 & 1 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 & 1 \end{pmatrix}\begin{pmatrix} x_1 \\ x_2 \\ s_1 \\ s_2 \\ s_3 \end{pmatrix} = \begin{pmatrix} 100 \\ 80 \\ 40 \end{pmatrix}, \quad x_1, x_2, s_1, s_2, s_3 \geq 0 minimize − 40 x 1 − 30 x 2 subject to 2 1 1 1 1 0 1 0 0 0 1 0 0 0 1 x 1 x 2 s 1 s 2 s 3 = 100 80 40 , x 1 , x 2 , s 1 , s 2 , s 3 ≥ 0
に なる。
3.2 基底解と 頂点
例 3.1 の 最適解は 五角形の「角」に あった。この 角を 代数的に とらえるのが 基底解である。以下、標準形の 実行可能領域を P = { x ∈ R n ∣ A x = b , x ≥ 0 } P = \lbrace x \in \mathbb{R}^n \mid Ax = b,\ x \geq 0 \rbrace P = { x ∈ R n ∣ A x = b , x ≥ 0 } 、A A A の 第 j j j 列を a j a_j a j と 書き、 x x x の 台 (support) を supp x = { j ∣ x j ≠ 0 } \operatorname{supp} x = \lbrace j \mid x_j \neq 0 \rbrace supp x = { j ∣ x j = 0 } と する。
定義 3.7 (基底解)(rank A = m \operatorname{rank} A = m rank A = m と する) { 1 , … , n } \lbrace 1, \dots, n \rbrace { 1 , … , n } の m m m 元部分集合 B B B で、列 a j a_j a j (j ∈ B j \in B j ∈ B )が 一次独立である もの、すな わち m m m 次正方行列 A B = ( a j ) j ∈ B A_B = (a_j)_{j \in B} A B = ( a j ) j ∈ B が 正則である ものを 基底 (basis) と いい、残りの 添字の 集合を N N N と する。 x N = 0 x_N = 0 x N = 0 , x B = A B − 1 b x_B = A_B^{-1}b x B = A B − 1 b で 定まる x x x を B B B の 基底解 (basic solution)、x j x_j x j (j ∈ B j \in B j ∈ B )を 基底変数 、x j x_j x j (j ∈ N j \in N j ∈ N )を 非基底変数と いう。基底解が x ≥ 0 x \geq 0 x ≥ 0 を 満たすとき 実行可能基底解 (basic feasible solution) と いい、さらに x B x_B x B の 成分に 0 0 0 が ある とき 退化している (degenerate) と いう。
多面体の 端点( 第2章 2.1 節:凸集合の 2 点を 結ぶ 線分の 内部の 点に ならない 点)を 頂点 (vertex) と よぶ。
定理 3.8 (基底解と 頂点) x ∈ P x \in P x ∈ P に ついて、次は 同値である。
x x x は P P P の 頂点である。
列 a j a_j a j (j ∈ supp x j \in \operatorname{supp} x j ∈ supp x )は 一次独立である。
ある c ∈ R n c \in \mathbb{R}^n c ∈ R n に ついて、 x x x は P P P 上で c ⊤ x c^{\top}x c ⊤ x を 最小に するただ 一つの 点である。
特に P P P の 頂点は 有限個である。さらに rank A = m \operatorname{rank} A = m rank A = m ならば、これらは「x x x は ある 基底の 実行可能基底解である」とも 同値で、頂点は ( n m ) \binom{n}{m} ( m n ) 個以下である。
証明. (3 ⇒ 1) x = ( 1 − t ) y + t z x = (1 - t)y + tz x = ( 1 − t ) y + t z (y , z ∈ P y, z \in P y , z ∈ P , 0 < t < 1 0 < t < 1 0 < t < 1 )と すると、 c ⊤ x = ( 1 − t ) c ⊤ y + t c ⊤ z c^{\top}x = (1 - t)c^{\top}y + tc^{\top}z c ⊤ x = ( 1 − t ) c ⊤ y + t c ⊤ z と c ⊤ y , c ⊤ z ≥ c ⊤ x c^{\top}y, c^{\top}z \geq c^{\top}x c ⊤ y , c ⊤ z ≥ c ⊤ x より c ⊤ y = c ⊤ z = c ⊤ x c^{\top}y = c^{\top}z = c^{\top}x c ⊤ y = c ⊤ z = c ⊤ x で、一意性から y = z = x y = z = x y = z = x 。
(1 ⇒ 2) 対偶を 示す。 S = supp x S = \operatorname{supp} x S = supp x の 列が 一次従属なら、 ∑ j ∈ S d j a j = 0 \sum_{j \in S} d_ja_j = 0 ∑ j ∈ S d j a j = 0 と なる 0 0 0 でない ( d j ) j ∈ S (d_j)_{j \in S} ( d j ) j ∈ S が あり、 j ∉ S j \notin S j ∈ / S では d j = 0 d_j = 0 d j = 0 と おくと A d = 0 Ad = 0 A d = 0 , d ≠ 0 d \neq 0 d = 0 。ε = min { x j / ∣ d j ∣ ∣ d j ≠ 0 } > 0 \varepsilon = \min\lbrace x_j/\lvert d_j \rvert \mid d_j \neq 0 \rbrace > 0 ε = min { x j / ∣ d j ∣ ∣ d j = 0 } > 0 と すると x ± ε d ≥ 0 x \pm \varepsilon d \geq 0 x ± ε d ≥ 0 , A ( x ± ε d ) = b A(x \pm \varepsilon d) = b A ( x ± ε d ) = b で、x = 1 2 ( x + ε d ) + 1 2 ( x − ε d ) x = \frac{1}{2}(x + \varepsilon d) + \frac{1}{2}(x - \varepsilon d) x = 2 1 ( x + ε d ) + 2 1 ( x − ε d ) は P P P の 相異なる 2 点の 中点だから 頂点でない。
(2 ⇒ 3) c j = 0 c_j = 0 c j = 0 (j ∈ S j \in S j ∈ S )、c j = 1 c_j = 1 c j = 1 (j ∉ S j \notin S j ∈ / S )と おく。 y ∈ P y \in P y ∈ P なら c ⊤ y = ∑ j ∉ S y j ≥ 0 = c ⊤ x c^{\top}y = \sum_{j \notin S} y_j \geq 0 = c^{\top}x c ⊤ y = ∑ j ∈ / S y j ≥ 0 = c ⊤ x で、等号は y j = 0 y_j = 0 y j = 0 (j ∉ S j \notin S j ∈ / S )の ときに 限る。その とき ∑ j ∈ S y j a j = b = ∑ j ∈ S x j a j \sum_{j \in S} y_ja_j = b = \sum_{j \in S} x_ja_j ∑ j ∈ S y j a j = b = ∑ j ∈ S x j a j で、列の 一次独立性から y = x y = x y = x 。同じ 理由で、頂点 x x x は 台 S S S から(∑ j ∈ S x j a j = b \sum_{j \in S} x_ja_j = b ∑ j ∈ S x j a j = b の 唯一の 解と して)決まるので、頂点は 2 n 2^n 2 n 個以下で 有限個である。
(基底解との 同値) x x x が 基底 B B B の 実行可能基底解なら supp x ⊂ B \operatorname{supp} x \subset B supp x ⊂ B で、A B A_B A B の 列の 一部と して 2 が 成り立つ。逆に 2 を 仮定する。 rank A = m \operatorname{rank} A = m rank A = m より A A A の 列は R m \mathbb{R}^m R m を 張るので、 { a j } j ∈ supp x \lbrace a_j \rbrace_{j \in \operatorname{supp} x} { a j } j ∈ supp x が R m \mathbb{R}^m R m を 張らない 限り、その 張る 空間に 入らない 列 a k a_k a k が あり、 a k a_k a k を 加えても 一次独立である( 02-linear-algebra 第2章 命題 2.21 の 2)。これを 繰り返して m m m 本の 一次独立な 列に 延長し、その 添字集合を B B B と すれば、 x N = 0 x_N = 0 x N = 0 と A B x B = b A_Bx_B = b A B x B = b より x B = A B − 1 b x_B = A_B^{-1}b x B = A B − 1 b で、x x x は B B B の 実行可能基底解である。基底は ( n m ) \binom{n}{m} ( m n ) 個以下で、基底解は 基底で 決まるから、頂点の 個数も ( n m ) \binom{n}{m} ( m n ) 以下である。□ \square □
退化した 頂点では、 supp x \operatorname{supp} x supp x を 基底に 延長する 方法が 複数あるので、一つの 頂点に 複数の 基底が 対応する。
例 3.9 例 3.5 で、5 列から 3 列を 選ぶ ( 5 3 ) = 10 \binom{5}{3} = 10 ( 3 5 ) = 10 通りの うち、 { x 2 , s 1 , s 2 } \lbrace x_2, s_1, s_2 \rbrace { x 2 , s 1 , s 2 } の 3 列は 第 3 成分が すべて 0 0 0 で 一次従属なので 基底に ならない。残る 9 個の 基底解の うち実行可能なのは 5 個で、例 3.1 の 5 つの 頂点に 一対一に 対応する(どれも 非退化。計算機で 列挙して 確かめた)。たとえば 基底 { x 1 , x 2 , s 3 } \lbrace x_1, x_2, s_3 \rbrace { x 1 , x 2 , s 3 } の 基底解 ( x 1 , x 2 , s 1 , s 2 , s 3 ) = ( 20 , 60 , 0 , 0 , 20 ) (x_1, x_2, s_1, s_2, s_3) = (20, 60, 0, 0, 20) ( x 1 , x 2 , s 1 , s 2 , s 3 ) = ( 20 , 60 , 0 , 0 , 20 ) は 頂点 ( 20 , 60 ) (20, 60) ( 20 , 60 ) で、機械と 作業を 使い切り原料が 20 余る。基底 { x 1 , x 2 , s 1 } \lbrace x_1, x_2, s_1 \rbrace { x 1 , x 2 , s 1 } の 基底解 ( 40 , 40 , − 20 , 0 , 0 ) (40, 40, -20, 0, 0) ( 40 , 40 , − 20 , 0 , 0 ) は 利益 2800 2800 2800 を 与えるが、機械が 20 時間 足りず実行不能である。頂点の 数は 変数と 制約が 増えると 急速に 増えるので、すべてを 列挙できるのは 小さな 問題に 限られる。
3.3 最適解の 存在と 頂点
補題 3.10 (台を 減らす) x ∈ P x \in P x ∈ P で、列 a j a_j a j (j ∈ supp x j \in \operatorname{supp} x j ∈ supp x )が 一次従属であると する。この とき A d = 0 Ad = 0 A d = 0 , d ≠ 0 d \neq 0 d = 0 , supp d ⊂ supp x \operatorname{supp} d \subset \operatorname{supp} x supp d ⊂ supp x と なる d d d が 存在する。 d d d が 負の 成分を もてば、 t ∗ = min { x j / ( − d j ) ∣ d j < 0 } > 0 t^{\ast} = \min\lbrace x_j/(-d_j) \mid d_j < 0 \rbrace > 0 t ∗ = min { x j / ( − d j ) ∣ d j < 0 } > 0 に ついて x + t ∗ d ∈ P x + t^{\ast}d \in P x + t ∗ d ∈ P かつ supp ( x + t ∗ d ) ⊊ supp x \operatorname{supp}(x + t^{\ast}d) \subsetneq \operatorname{supp} x supp ( x + t ∗ d ) ⊊ supp x である。
証明. d d d の 存在は 定理 3.8 の 証明(1 ⇒ 2)と 同じである。 d j < 0 d_j < 0 d j < 0 なら j ∈ supp x j \in \operatorname{supp} x j ∈ supp x なので x j > 0 x_j > 0 x j > 0 で、t ∗ > 0 t^{\ast} > 0 t ∗ > 0 。0 ≤ t ≤ t ∗ 0 \leq t \leq t^{\ast} 0 ≤ t ≤ t ∗ なら、d j ≥ 0 d_j \geq 0 d j ≥ 0 の 成分は x j + t d j ≥ 0 x_j + td_j \geq 0 x j + t d j ≥ 0 、d j < 0 d_j < 0 d j < 0 の 成分も t ≤ x j / ( − d j ) t \leq x_j/(-d_j) t ≤ x j / ( − d j ) より 非負で、 A ( x + t d ) = b A(x + td) = b A ( x + t d ) = b 。t = t ∗ t = t^{\ast} t = t ∗ では 最小値を 与える j j j で 成分が 0 0 0 に なり、 supp d ⊂ supp x \operatorname{supp} d \subset \operatorname{supp} x supp d ⊂ supp x より 台の 外の 成分は 0 0 0 の ままである。 □ \square □
定理 3.11 (線形計画法の 基本定理)標準形 (P) が 実行可能( P ≠ ∅ P \neq \emptyset P = ∅ )であると する。
P P P は 頂点を もつ。
次の ちょうど 一方が 成り立つ。(a) d ≥ 0 d \geq 0 d ≥ 0 , A d = 0 Ad = 0 A d = 0 , c ⊤ d < 0 c^{\top}d < 0 c ⊤ d < 0 を 満たす d d d が 存在する。この とき x ∈ P x \in P x ∈ P に ついて x + t d ∈ P x + td \in P x + t d ∈ P (t ≥ 0 t \geq 0 t ≥ 0 )で c ⊤ ( x + t d ) → − ∞ c^{\top}(x + td) \to -\infty c ⊤ ( x + t d ) → − ∞ と なり、(P) は 非有界である。(b) (P) は 最適解を もち、 P P P の 頂点の 中に 最適解が ある。
特に P P P が 有界ならば、(P) は 頂点で 最適解を もつ。
証明. まず次を 示す:(a) の d d d が 存在しなければ、任意の x ∈ P x \in P x ∈ P に 対し c ⊤ v ≤ c ⊤ x c^{\top}v \leq c^{\top}x c ⊤ v ≤ c ⊤ x と なる 頂点 v v v が ある。 ∣ supp x ∣ \lvert \operatorname{supp} x \rvert ∣ supp x ∣ に 関する 帰納法に よる。台の 列が 一次独立なら x x x 自身が 頂点である(定理 3.8)。そうでなければ 補題 3.10 の d d d を とる。 − d -d − d も 同じ 条件を 満たすので、符号を 選んで c ⊤ d ≤ 0 c^{\top}d \leq 0 c ⊤ d ≤ 0 と して よい。この とき d d d が 負の 成分を もたなければ、 d ≥ 0 d \geq 0 d ≥ 0 , A d = 0 Ad = 0 A d = 0 と (a) が 成り立たない ことから c ⊤ d = 0 c^{\top}d = 0 c ⊤ d = 0 で、d d d を − d -d − d に 取り替えれば負の 成分を もつ( d ≠ 0 d \neq 0 d = 0 だから)。こうして d d d は 負の 成分を もち c ⊤ d ≤ 0 c^{\top}d \leq 0 c ⊤ d ≤ 0 と できる。補題 3.10 の x ′ = x + t ∗ d ∈ P x' = x + t^{\ast}d \in P x ′ = x + t ∗ d ∈ P は 台が 真に 小さく、 c ⊤ x ′ = c ⊤ x + t ∗ c ⊤ d ≤ c ⊤ x c^{\top}x' = c^{\top}x + t^{\ast}c^{\top}d \leq c^{\top}x c ⊤ x ′ = c ⊤ x + t ∗ c ⊤ d ≤ c ⊤ x なので、帰納法の 仮定から c ⊤ v ≤ c ⊤ x ′ c^{\top}v \leq c^{\top}x' c ⊤ v ≤ c ⊤ x ′ と なる 頂点 v v v が ある。
1:c = 0 c = 0 c = 0 と すれば (a) は 起こらないので、 P P P の 点から 頂点が 得られる。2:(a) なら 非有界なので (b) と 両立しない。(a) が 成り立たないとする。頂点は 有限個(定理 3.8)で、1 より 空でないので、 c ⊤ v c^{\top}v c ⊤ v が 最小の 頂点 v ∗ v^{\ast} v ∗ を とる。任意の x ∈ P x \in P x ∈ P に ついて c ⊤ x ≥ c ⊤ v ≥ c ⊤ v ∗ c^{\top}x \geq c^{\top}v \geq c^{\top}v^{\ast} c ⊤ x ≥ c ⊤ v ≥ c ⊤ v ∗ と なる 頂点 v v v が あるので、 v ∗ v^{\ast} v ∗ は 最適解である。3: d ≠ 0 d \neq 0 d = 0 , d ≥ 0 d \geq 0 d ≥ 0 , A d = 0 Ad = 0 A d = 0 なら { x + t d ∣ t ≥ 0 } ⊂ P \lbrace x + td \mid t \geq 0 \rbrace \subset P { x + t d ∣ t ≥ 0 } ⊂ P は 有界でないので、 P P P が 有界なら (a) は 起こらない。 □ \square □
したがって 標準形の 問題は、 実行不能・非有界・頂点で 最適解を もつ の ちょうど 一つに 当ては まる。一般の 最適化問題と 違い、「目的関数は 下に 有界なのに 最小値に 達しない」( R \mathbb{R} R 上の e x e^{x} e x のような)ことは 起こらない。
例 3.12 実行可能領域が 非有界でも 最適解を もつ ことは ある。 x 1 + 2 x 2 ≥ 2 x_1 + 2x_2 \geq 2 x 1 + 2 x 2 ≥ 2 , x ≥ 0 x \geq 0 x ≥ 0 の 領域は 非有界だが、 x 1 + x 2 x_1 + x_2 x 1 + x 2 の 最小値は 頂点 ( 0 , 1 ) (0, 1) ( 0 , 1 ) での 1 1 1 である(頂点 ( 2 , 0 ) (2, 0) ( 2 , 0 ) では 2 2 2 )。一方、x 1 − x 2 ≤ 1 x_1 - x_2 \leq 1 x 1 − x 2 ≤ 1 , x ≥ 0 x \geq 0 x ≥ 0 のもとで x 1 + x 2 x_1 + x_2 x 1 + x 2 を 最大化する 問題は 非有界である。標準形では スラック変数の 成分を 0 0 0 とした d = ( 1 , 1 , 0 ) d = (1, 1, 0) d = ( 1 , 1 , 0 ) が (a) の d d d に なる。
注意
「最適解は 頂点に ある」の 正しい 意味は「(最適解が あれば) 最適解の 中に 頂点が ある」である。(1) 目的関数の 等高線が 辺と 平行なら 辺全体が 最適解に なり、頂点以外の 最適解も ある。(2) 一般の 形の 多面体は 頂点を もたない ことがある。半平面 x 1 + x 2 ≥ 1 x_1 + x_2 \geq 1 x 1 + x 2 ≥ 1 上で x 1 + x 2 x_1 + x_2 x 1 + x 2 を 最小化すると、直線 x 1 + x 2 = 1 x_1 + x_2 = 1 x 1 + x 2 = 1 全体が 最適解で、頂点は ない。標準形では x ≥ 0 x \geq 0 x ≥ 0 の おかげで、実行可能なら 必ず 頂点が ある(定理 3.11 の 1)。(3) 内点法(3.5 節)は、最適解が 一意でない とき頂点でない 最適解を 返すことがある。
3.4 単体法
単体法は、実行可能基底解から 出発し、目的関数の 値が 下がる「隣の」基底解へ 移る ことを 繰り返す。基底 B B B を 固定し、 A x = b Ax = b A x = b を A B x B + A N x N = b A_Bx_B + A_Nx_N = b A B x B + A N x N = b と 分けて x B x_B x B に ついて 解き、目的関数 c ⊤ x = c B ⊤ x B + c N ⊤ x N c^{\top}x = c_B^{\top}x_B + c_N^{\top}x_N c ⊤ x = c B ⊤ x B + c N ⊤ x N に 代入すると、 A x = b Ax = b A x = b を 満たすすべての x x x に ついて
x B = A B − 1 b − A B − 1 A N x N , c ⊤ x = c B ⊤ A B − 1 b + ∑ j ∈ N c ˉ j x j x_B = A_B^{-1}b - A_B^{-1}A_Nx_N, \qquad c^{\top}x = c_B^{\top}A_B^{-1}b + \sum_{j \in N}\bar{c}_jx_j x B = A B − 1 b − A B − 1 A N x N , c ⊤ x = c B ⊤ A B − 1 b + j ∈ N ∑ c ˉ j x j
が 成り立つ。ここで
c ˉ j = c j − y ⊤ a j ( j = 1 , … , n ) , y = ( A B ⊤ ) − 1 c B \bar{c}_j = c_j - y^{\top}a_j \quad (j = 1, \dots, n), \qquad y = (A_B^{\top})^{-1}c_B c ˉ j = c j − y ⊤ a j ( j = 1 , … , n ) , y = ( A B ⊤ ) − 1 c B
を 基底 B B B に 関する 被約費用 (reduced cost)、y y y を 単体乗数 (simplex multiplier) と いう( j ∈ B j \in B j ∈ B では c ˉ j = 0 \bar{c}_j = 0 c ˉ j = 0 )。非基底変数 x N x_N x N を 決めると 基底変数と 目的関数の 値が 決まる、と いう 形の この 式を 辞書 (dictionary) と よぶ。
命題 3.13 (最適性の 判定)基底 B B B の 実行可能基底解 x x x に ついて c ˉ ≥ 0 \bar{c} \geq 0 c ˉ ≥ 0 ならば、x x x は (P) の 最適解である。
証明. x ′ ∈ P x' \in P x ′ ∈ P なら、上の 式より c ⊤ x ′ = c B ⊤ A B − 1 b + ∑ j ∈ N c ˉ j x j ′ ≥ c B ⊤ A B − 1 b = c ⊤ x c^{\top}x' = c_B^{\top}A_B^{-1}b + \sum_{j \in N}\bar{c}_jx'_j \geq c_B^{\top}A_B^{-1}b = c^{\top}x c ⊤ x ′ = c B ⊤ A B − 1 b + ∑ j ∈ N c ˉ j x j ′ ≥ c B ⊤ A B − 1 b = c ⊤ x (x ′ ≥ 0 x' \geq 0 x ′ ≥ 0 , c ˉ ≥ 0 \bar{c} \geq 0 c ˉ ≥ 0 )。□ \square □
命題 3.14 (ピボット)x x x を 基底 B = { B ( 1 ) , … , B ( m ) } B = \lbrace B(1), \dots, B(m) \rbrace B = { B ( 1 ) , … , B ( m )} の 実行可能基底解とし、 c ˉ q < 0 \bar{c}_q < 0 c ˉ q < 0 と なる q ∈ N q \in N q ∈ N を とって u = A B − 1 a q u = A_B^{-1}a_q u = A B − 1 a q と おく。 d q = 1 d_q = 1 d q = 1 , d B ( i ) = − u i d_{B(i)} = -u_i d B ( i ) = − u i (i = 1 , … , m i = 1, \dots, m i = 1 , … , m )、他の 成分を 0 0 0 とした d d d は A d = 0 Ad = 0 A d = 0 , c ⊤ d = c ˉ q c^{\top}d = \bar{c}_q c ⊤ d = c ˉ q を 満たす。
u ≤ 0 u \leq 0 u ≤ 0 ならば d ≥ 0 d \geq 0 d ≥ 0 で、(P) は 非有界である。
u i > 0 u_i > 0 u i > 0 と なる i i i が あれば、次の 最小値( 比の 判定 , ratio test)を 与える i = ℓ i = \ell i = ℓ を とる。
t ∗ = min { x B ( i ) u i | u i > 0 } t^{\ast} = \min\left\lbrace \frac{x_{B(i)}}{u_i} \;\middle|\; u_i > 0 \right\rbrace t ∗ = min { u i x B ( i ) u i > 0 }
この とき B ′ = ( B ∖ { B ( ℓ ) } ) ∪ { q } B' = (B \setminus \lbrace B(\ell) \rbrace) \cup \lbrace q \rbrace B ′ = ( B ∖ { B ( ℓ )}) ∪ { q } は 基底であり、 x ′ = x + t ∗ d x' = x + t^{\ast}d x ′ = x + t ∗ d は B ′ B' B ′ の 実行可能基底解で、 c ⊤ x ′ = c ⊤ x + t ∗ c ˉ q ≤ c ⊤ x c^{\top}x' = c^{\top}x + t^{\ast}\bar{c}_q \leq c^{\top}x c ⊤ x ′ = c ⊤ x + t ∗ c ˉ q ≤ c ⊤ x である。t ∗ > 0 t^{\ast} > 0 t ∗ > 0 (たとえば x x x が 非退化)なら 目的関数は 真に 減少する。
証明. A d = a q − A B u = 0 Ad = a_q - A_Bu = 0 A d = a q − A B u = 0 、c ⊤ d = c q − c B ⊤ A B − 1 a q = c ˉ q c^{\top}d = c_q - c_B^{\top}A_B^{-1}a_q = \bar{c}_q c ⊤ d = c q − c B ⊤ A B − 1 a q = c ˉ q 。1 は 定理 3.11 の (a) の 場合である。2: 0 ≤ t ≤ t ∗ 0 \leq t \leq t^{\ast} 0 ≤ t ≤ t ∗ なら x + t d ≥ 0 x + td \geq 0 x + t d ≥ 0 (u i ≤ 0 u_i \leq 0 u i ≤ 0 の 成分は 減らず、 u i > 0 u_i > 0 u i > 0 の 成分は t ≤ x B ( i ) / u i t \leq x_{B(i)}/u_i t ≤ x B ( i ) / u i の 範囲で 非負)で、 A ( x + t d ) = b A(x + td) = b A ( x + t d ) = b 。x ′ x' x ′ の 第 B ( ℓ ) B(\ell) B ( ℓ ) 成分は x B ( ℓ ) − t ∗ u ℓ = 0 x_{B(\ell)} - t^{\ast}u_\ell = 0 x B ( ℓ ) − t ∗ u ℓ = 0 で、B ′ B' B ′ の 外の 成分は すべて 0 0 0 である。a q = A B u = ∑ i u i a B ( i ) a_q = A_Bu = \sum_i u_ia_{B(i)} a q = A B u = ∑ i u i a B ( i ) で u ℓ ≠ 0 u_\ell \neq 0 u ℓ = 0 なので、a B ( ℓ ) a_{B(\ell)} a B ( ℓ ) は a q a_q a q と a B ( i ) a_{B(i)} a B ( i ) (i ≠ ℓ i \neq \ell i = ℓ )の 一次結合であり、これら m m m 本の 列は R m \mathbb{R}^m R m を 張る。よって 一次独立で、 B ′ B' B ′ は 基底、 x ′ x' x ′ は その 基底解である。 □ \square □
単体法 は、実行可能基底解と その 基底から 始めて 次を 繰り返す。(i) c ˉ \bar{c} c ˉ を 計算し、 c ˉ ≥ 0 \bar{c} \geq 0 c ˉ ≥ 0 なら 最適(命題 3.13)と して 終了する。(ii) c ˉ q < 0 \bar{c}_q < 0 c ˉ q < 0 と なる q q q を 選ぶ( x q x_q x q を 入る 変数と いう)。(iii) u = A B − 1 a q u = A_B^{-1}a_q u = A B − 1 a q を 計算し、 u ≤ 0 u \leq 0 u ≤ 0 なら 非有界と して 終了する。(iv) 比の 判定で ℓ \ell ℓ を 選び( x B ( ℓ ) x_{B(\ell)} x B ( ℓ ) を 出る 変数と いう)、基底を B ′ B' B ′ に 替えて (i) に 戻る。この 基底の 交換を ピボット (pivot) と いう。
定理 3.15 (有限終了)すべての 実行可能基底解が 非退化ならば、単体法は((ii)・ (iv) の 選び方に よらず)有限回の 反復で、最適な 実行可能基底解を 見つけるか 非有界である ことを 検出して 終了する。
証明. 非退化なら t ∗ > 0 t^{\ast} > 0 t ∗ > 0 なので、各反復で 目的関数の 値は 真に 減少する。基底解は 基底で 決まるから、同じ 基底が 二度 現れる ことは ない。基底は 有限個なので、反復は 有限回で 終わる。 □ \square □
例 3.16 (例 3.1 を 単体法で 解く)最大化問題の まま 辞書を 書くと、目的関数 z z z の 行で 係数が 正の 非基底変数を 入れればよい(最小化に 直した ときの c ˉ j < 0 \bar{c}_j < 0 c ˉ j < 0 に あたる)。最初の 基底は スラック変数で、実行可能基底解は 原点である。
s 1 = 100 − 2 x 1 − x 2 s 2 = 80 − x 1 − x 2 s 3 = 40 − x 1 z = 0 + 40 x 1 + 30 x 2 \begin{aligned}
s_1 &= 100 - 2x_1 - x_2 \\
s_2 &= 80 - x_1 - x_2 \\
s_3 &= 40 - x_1 \\
z &= 0 + 40x_1 + 30x_2
\end{aligned} s 1 s 2 s 3 z = 100 − 2 x 1 − x 2 = 80 − x 1 − x 2 = 40 − x 1 = 0 + 40 x 1 + 30 x 2
係数の 大きい x 1 x_1 x 1 を 入れる。 x 1 x_1 x 1 を 増やすと s 1 , s 2 , s 3 s_1, s_2, s_3 s 1 , s 2 , s 3 は それぞれ x 1 = 50 , 80 , 40 x_1 = 50, 80, 40 x 1 = 50 , 80 , 40 で 0 0 0 に なるので(比の 判定)、最小の 40 40 40 を 与える s 3 s_3 s 3 が 出る。 s 3 s_3 s 3 の 式を x 1 = 40 − s 3 x_1 = 40 - s_3 x 1 = 40 − s 3 と 解いて 他の 式に 代入すると
x 1 = 40 − s 3 s 1 = 20 − x 2 + 2 s 3 s 2 = 40 − x 2 + s 3 z = 1600 + 30 x 2 − 40 s 3 \begin{aligned}
x_1 &= 40 - s_3 \\
s_1 &= 20 - x_2 + 2s_3 \\
s_2 &= 40 - x_2 + s_3 \\
z &= 1600 + 30x_2 - 40s_3
\end{aligned} x 1 s 1 s 2 z = 40 − s 3 = 20 − x 2 + 2 s 3 = 40 − x 2 + s 3 = 1600 + 30 x 2 − 40 s 3
次に x 2 x_2 x 2 が 入り、比は s 1 s_1 s 1 で 20 20 20 、s 2 s_2 s 2 で 40 40 40 なので s 1 s_1 s 1 が 出る。
x 1 = 40 − s 3 x 2 = 20 − s 1 + 2 s 3 s 2 = 20 + s 1 − s 3 z = 2200 − 30 s 1 + 20 s 3 \begin{aligned}
x_1 &= 40 - s_3 \\
x_2 &= 20 - s_1 + 2s_3 \\
s_2 &= 20 + s_1 - s_3 \\
z &= 2200 - 30s_1 + 20s_3
\end{aligned} x 1 x 2 s 2 z = 40 − s 3 = 20 − s 1 + 2 s 3 = 20 + s 1 − s 3 = 2200 − 30 s 1 + 20 s 3
ここで s 3 s_3 s 3 を 入れる ことは、P を 1 単位減らして 原料の 余りを 作り、空いた 機械 2 時間で Q を 2 単位増やすことに あたる(利益は − 40 + 60 = 20 -40 + 60 = 20 − 40 + 60 = 20 増える)。x 2 x_2 x 2 の 行は s 3 s_3 s 3 の 係数が 正なので 制限に ならず、比は x 1 x_1 x 1 で 40 40 40 、s 2 s_2 s 2 で 20 20 20 なので s 2 s_2 s 2 が 出る。
x 1 = 20 − s 1 + s 2 x 2 = 60 + s 1 − 2 s 2 s 3 = 20 + s 1 − s 2 z = 2600 − 10 s 1 − 20 s 2 \begin{aligned}
x_1 &= 20 - s_1 + s_2 \\
x_2 &= 60 + s_1 - 2s_2 \\
s_3 &= 20 + s_1 - s_2 \\
z &= 2600 - 10s_1 - 20s_2
\end{aligned} x 1 x 2 s 3 z = 20 − s 1 + s 2 = 60 + s 1 − 2 s 2 = 20 + s 1 − s 2 = 2600 − 10 s 1 − 20 s 2
z z z の 行の 係数が すべて 負に なったので 最適であり、最適解 ( x 1 , x 2 ) = ( 20 , 60 ) (x_1, x_2) = (20, 60) ( x 1 , x 2 ) = ( 20 , 60 ) 、最大利益 2600 2600 2600 を 得る。たどった 頂点は ( 0 , 0 ) → ( 40 , 0 ) → ( 40 , 20 ) → ( 20 , 60 ) (0, 0) \to (40, 0) \to (40, 20) \to (20, 60) ( 0 , 0 ) → ( 40 , 0 ) → ( 40 , 20 ) → ( 20 , 60 ) である(各辞書は 計算機で 厳密に 検算した)。最後の 行の 係数 − 10 , − 20 -10, -20 − 10 , − 20 の 意味は 3.7・3.8 節で 明らかに なる。
3.5 退化・巡回と 計算量
実行可能基底解が 退化していると、比の 判定で t ∗ = 0 t^{\ast} = 0 t ∗ = 0 と なる ことがある。この とき基底は 替わるが 点は 動かず、目的関数も 減らない。こうした ピボットが 続いて 同じ 基底に 戻ってくる ことを 巡回 (cycling) と いう。
例 3.18 (巡回する 例)次の 問題を、「 z z z の 行で 係数が 最大の 変数を 入れ、比の 判定で 最小値を 与える 行が 複数あれば 添字が 最小の 変数を 出す」と いう 規則で 解く。スラック変数を x 5 , x 6 , x 7 x_5, x_6, x_7 x 5 , x 6 , x 7 と する。
maximize 10 x 1 − 57 x 2 − 9 x 3 − 24 x 4 subject to 1 2 x 1 − 11 2 x 2 − 5 2 x 3 + 9 x 4 ≤ 0 , 1 2 x 1 − 3 2 x 2 − 1 2 x 3 + x 4 ≤ 0 , x 1 ≤ 1 , x 1 , x 2 , x 3 , x 4 ≥ 0 \begin{aligned}
\text{maximize} \quad & 10x_1 - 57x_2 - 9x_3 - 24x_4 \\
\text{subject to} \quad & \tfrac{1}{2}x_1 - \tfrac{11}{2}x_2 - \tfrac{5}{2}x_3 + 9x_4 \leq 0, \quad \tfrac{1}{2}x_1 - \tfrac{3}{2}x_2 - \tfrac{1}{2}x_3 + x_4 \leq 0, \\
& x_1 \leq 1, \quad x_1, x_2, x_3, x_4 \geq 0
\end{aligned} maximize subject to 10 x 1 − 57 x 2 − 9 x 3 − 24 x 4 2 1 x 1 − 2 11 x 2 − 2 5 x 3 + 9 x 4 ≤ 0 , 2 1 x 1 − 2 3 x 2 − 2 1 x 3 + x 4 ≤ 0 , x 1 ≤ 1 , x 1 , x 2 , x 3 , x 4 ≥ 0
基底は { x 5 , x 6 , x 7 } → { x 1 , x 6 , x 7 } → { x 1 , x 2 , x 7 } → { x 2 , x 3 , x 7 } → { x 3 , x 4 , x 7 } → { x 4 , x 5 , x 7 } → { x 5 , x 6 , x 7 } \lbrace x_5, x_6, x_7 \rbrace \to \lbrace x_1, x_6, x_7 \rbrace \to \lbrace x_1, x_2, x_7 \rbrace \to \lbrace x_2, x_3, x_7 \rbrace \to \lbrace x_3, x_4, x_7 \rbrace \to \lbrace x_4, x_5, x_7 \rbrace \to \lbrace x_5, x_6, x_7 \rbrace { x 5 , x 6 , x 7 } → { x 1 , x 6 , x 7 } → { x 1 , x 2 , x 7 } → { x 2 , x 3 , x 7 } → { x 3 , x 4 , x 7 } → { x 4 , x 5 , x 7 } → { x 5 , x 6 , x 7 } と 替わり、6 回の ピボットの 後に 最初の 辞書に そのまま 戻る。その間、点は 原点から 動かず z = 0 z = 0 z = 0 の ままである(各辞書の 計算は 省略する。計算機で 確かめられる)。最適値は 1 1 1 (x 1 = x 3 = 1 x_1 = x_3 = 1 x 1 = x 3 = 1 , x 2 = x 4 = 0 x_2 = x_4 = 0 x 2 = x 4 = 0 )なのに、この 規則では 永遠に 到達しない。
定理 3.19 (ブランドの 規則, Bland's rule)単体法で、入る 変数と して c ˉ j < 0 \bar{c}_j < 0 c ˉ j < 0 と なる j j j の うち添字が 最小の ものを 選び、出る 変数と して 比の 判定の 最小値を 与える i i i の うち添字 B ( i ) B(i) B ( i ) が 最小の ものを 選ぶと、巡回は 起こらない(ブランド, 1977 年)。したがって単体法は 有限回で 終了する。
証明は Chvátal, Linear Programming または Schrijver, Theory of Linear and Integer Programming を 参照(本書では 主張のみ)。例 3.18 を ブランドの 規則で 解くと、7 回の ピボットで 最適解に 達する(計算機で 確かめた)。ブランドの 規則が 保証するのは 有限回で 終わる ことであって、ピボットの 回数が 少ない ことではない。巡回を 防ぐ 方法と しては、ほかに 右辺 b b b を わずかに ずらして 退化を 解消する 摂動法(辞書式規則)が 知られている。
単体法の ピボットの 回数に ついては、次の ことが 知られている。
定理 3.20 (クレー–ミンティ, Klee–Minty, 1972 年)各 n n n に ついて、 n n n 変数・n n n 本の 不等式制約(と 非負制約)の 問題で、原点から 始めて「 z z z の 行で 係数が 最大の 変数を 入れる」規則( ダンツィクの 規則 )の 単体法が 2 n − 1 2^n - 1 2 n − 1 回の ピボットを 要する ものが 存在する。
(主張のみ。Chvátal の 教科書を 参照。)たとえば
maximize ∑ j = 1 n 10 n − j x j subject to 2 ∑ j = 1 i − 1 10 i − j x j + x i ≤ 100 i − 1 ( i = 1 , … , n ) , x ≥ 0 \text{maximize} \quad \sum_{j=1}^{n}10^{n-j}x_j \qquad \text{subject to} \quad 2\sum_{j=1}^{i-1}10^{i-j}x_j + x_i \leq 100^{i-1} \quad (i = 1, \dots, n), \quad x \geq 0 maximize j = 1 ∑ n 1 0 n − j x j subject to 2 j = 1 ∑ i − 1 1 0 i − j x j + x i ≤ 10 0 i − 1 ( i = 1 , … , n ) , x ≥ 0
が そのような 例で、実行可能領域は 立方体を ゆが めた形で 2 n 2^n 2 n 個の 頂点を もつ。 n = 1 , … , 7 n = 1, \dots, 7 n = 1 , … , 7 で ピボットの 回数が 2 n − 1 2^n - 1 2 n − 1 に なる ことを 計算機で 確かめた。 n = 3 n = 3 n = 3 では ( 0 , 0 , 0 ) → ( 1 , 0 , 0 ) → ( 1 , 80 , 0 ) → ( 0 , 100 , 0 ) → ( 0 , 100 , 8000 ) → ( 1 , 80 , 8200 ) → ( 1 , 0 , 9800 ) → ( 0 , 0 , 10000 ) (0, 0, 0) \to (1, 0, 0) \to (1, 80, 0) \to (0, 100, 0) \to (0, 100, 8000) \to (1, 80, 8200) \to (1, 0, 9800) \to (0, 0, 10000) ( 0 , 0 , 0 ) → ( 1 , 0 , 0 ) → ( 1 , 80 , 0 ) → ( 0 , 100 , 0 ) → ( 0 , 100 , 8000 ) → ( 1 , 80 , 8200 ) → ( 1 , 0 , 9800 ) → ( 0 , 0 , 10000 ) と、8 個の 頂点を すべてたどる。つまり単体法は、最悪の 場合に 変数の 数に ついて 指数回の ピボットを 要しうる。
一方、線形計画問題 その ものは 多項式時間で 解ける。入力(有理数の A , b , c A, b, c A , b , c )の ビット数を L L L と する とき、ハチヤン(1979 年)は 楕円体法 が L L L の 多項式時間で 線形計画問題を 解く ことを 示し(変数や 制約の 数は L L L 以下なので、問題の 規模に ついても 多項式時間である)、カーマーカー(1984 年)は 実用的にも 速い 多項式時間の 内点法 (interior point method) を 提案した。内点法は 実行可能領域の 内部を 通って 最適解に 近づく 方法で、その 考え方(対数バリアと 中心パス)は 第6章で 扱う。単体法も 実際の 問題では 多くの 場合に 高速であることが 経験的に 知られており、実用的な ソルバーの 多くは 単体法と 内点法の 両方を 備えている。
3.6 ファルカスの 補題
連立一次方程式が 解を もたない ことは、式の 一次結合で「 0 = 1 0 = 1 0 = 1 」を 作れば 示せる。では 非負の 解を もたない ことは どう 示せば よいか。x 1 + x 2 = 2 x_1 + x_2 = 2 x 1 + x 2 = 2 , x 1 + 3 x 2 = 1 x_1 + 3x_2 = 1 x 1 + 3 x 2 = 1 は 解 ( 5 / 2 , − 1 / 2 ) (5/2, -1/2) ( 5/2 , − 1/2 ) を もつが、非負の 解は もたない。実際、第 1 式に − 1 -1 − 1 、第 2 式に 1 1 1 を 掛けて 足すと 2 x 2 = − 1 2x_2 = -1 2 x 2 = − 1 と なり、 x 2 ≥ 0 x_2 \geq 0 x 2 ≥ 0 に 反する。乗数 y = ( − 1 , 1 ) y = (-1, 1) y = ( − 1 , 1 ) は A ⊤ y = ( 0 , 2 ) ≥ 0 A^{\top}y = (0, 2) \geq 0 A ⊤ y = ( 0 , 2 ) ≥ 0 , b ⊤ y = − 1 < 0 b^{\top}y = -1 < 0 b ⊤ y = − 1 < 0 を 満たす。このような y y y が 常に 見つかる ことを 示すのが ファルカスの 補題である。
補題 3.21 (有限生成錐は 閉) A ∈ R m × n A \in \mathbb{R}^{m \times n} A ∈ R m × n に 対し、 cone ( A ) = { A x ∣ x ∈ R n , x ≥ 0 } \operatorname{cone}(A) = \lbrace Ax \mid x \in \mathbb{R}^n,\ x \geq 0 \rbrace cone ( A ) = { A x ∣ x ∈ R n , x ≥ 0 } は R m \mathbb{R}^m R m の 閉凸錐である。
証明. 凸錐である ことは A x + A x ′ = A ( x + x ′ ) Ax + Ax' = A(x + x') A x + A x ′ = A ( x + x ′ ) , t A x = A ( t x ) tAx = A(tx) t A x = A ( t x ) から 明らか。 w = A x w = Ax w = A x (x ≥ 0 x \geq 0 x ≥ 0 )と する。台の 列が 一次従属なら、補題 3.10( P = { x ≥ 0 ∣ A x = w } P = \lbrace x \geq 0 \mid Ax = w \rbrace P = { x ≥ 0 ∣ A x = w } に 適用する。 d d d と − d -d − d の 一方は 負の 成分を もつ)で 台を 減らせるので、 w w w は 一次独立な 列の 非負結合と して 書ける。そこで、列が 一次独立と なる 添字集合 S S S ごとに C S = { A S z ∣ z ≥ 0 } C_S = \lbrace A_Sz \mid z \geq 0 \rbrace C S = { A S z ∣ z ≥ 0 } と おけば、 cone ( A ) \operatorname{cone}(A) cone ( A ) は 有限個の C S C_S C S の 和集合である。各 C S C_S C S は 閉集合である :列が 一次独立なので、 A S ⊤ A S v = 0 A_S^{\top}A_Sv = 0 A S ⊤ A S v = 0 なら ∥ A S v ∥ 2 = v ⊤ A S ⊤ A S v = 0 \lVert A_Sv \rVert^2 = v^{\top}A_S^{\top}A_Sv = 0 ∥ A S v ∥ 2 = v ⊤ A S ⊤ A S v = 0 より v = 0 v = 0 v = 0 と なり A S ⊤ A S A_S^{\top}A_S A S ⊤ A S は 正則である。 A S z k → w A_Sz_k \to w A S z k → w (z k ≥ 0 z_k \geq 0 z k ≥ 0 )なら z k = ( A S ⊤ A S ) − 1 A S ⊤ ( A S z k ) → ( A S ⊤ A S ) − 1 A S ⊤ w = : z z_k = (A_S^{\top}A_S)^{-1}A_S^{\top}(A_Sz_k) \to (A_S^{\top}A_S)^{-1}A_S^{\top}w =: z z k = ( A S ⊤ A S ) − 1 A S ⊤ ( A S z k ) → ( A S ⊤ A S ) − 1 A S ⊤ w =: z で、z ≥ 0 z \geq 0 z ≥ 0 , A S z = w A_Sz = w A S z = w だから w ∈ C S w \in C_S w ∈ C S 。有限個の 閉集合の 和集合は 閉である。 □ \square □
定理 3.22 (ファルカスの 補題, Farkas' lemma) A ∈ R m × n A \in \mathbb{R}^{m \times n} A ∈ R m × n , b ∈ R m b \in \mathbb{R}^m b ∈ R m に ついて、次の ちょうど 一方が 成り立つ。
A x = b Ax = b A x = b , x ≥ 0 x \geq 0 x ≥ 0 を 満たす x ∈ R n x \in \mathbb{R}^n x ∈ R n が 存在する。
A ⊤ y ≥ 0 A^{\top}y \geq 0 A ⊤ y ≥ 0 , b ⊤ y < 0 b^{\top}y < 0 b ⊤ y < 0 を 満たす y ∈ R m y \in \mathbb{R}^m y ∈ R m が 存在する。
証明. 両方が 成り立つと 0 ≤ x ⊤ ( A ⊤ y ) = ( A x ) ⊤ y = b ⊤ y < 0 0 \leq x^{\top}(A^{\top}y) = (Ax)^{\top}y = b^{\top}y < 0 0 ≤ x ⊤ ( A ⊤ y ) = ( A x ) ⊤ y = b ⊤ y < 0 と なり矛盾する。1 が 成り立たない、すな わち b ∉ C : = cone ( A ) b \notin C := \operatorname{cone}(A) b ∈ / C := cone ( A ) と する。 C C C は 空でない 閉凸集合(補題 3.21)なので、 第2章 の 点と 閉凸集合の 分離定理(定理 2.6)に より、 sup w ∈ C p ⊤ w < p ⊤ b \sup_{w \in C}p^{\top}w < p^{\top}b sup w ∈ C p ⊤ w < p ⊤ b と なる p ∈ R m p \in \mathbb{R}^m p ∈ R m が ある。 0 ∈ C 0 \in C 0 ∈ C より p ⊤ b > 0 p^{\top}b > 0 p ⊤ b > 0 。ある w ∈ C w \in C w ∈ C で p ⊤ w > 0 p^{\top}w > 0 p ⊤ w > 0 なら、t w ∈ C tw \in C tw ∈ C (t > 0 t > 0 t > 0 )に ついて p ⊤ ( t w ) → ∞ p^{\top}(tw) \to \infty p ⊤ ( tw ) → ∞ と なり矛盾するので、すべての w ∈ C w \in C w ∈ C で p ⊤ w ≤ 0 p^{\top}w \leq 0 p ⊤ w ≤ 0 、特に p ⊤ a j ≤ 0 p^{\top}a_j \leq 0 p ⊤ a j ≤ 0 (j = 1 , … , n j = 1, \dots, n j = 1 , … , n )。y = − p y = -p y = − p と おけば A ⊤ y ≥ 0 A^{\top}y \geq 0 A ⊤ y ≥ 0 , b ⊤ y < 0 b^{\top}y < 0 b ⊤ y < 0 。□ \square □
幾何学的には、1 は「b b b が 列ベクトルの 生成する 錐に 入る」こと、2 は「 b b b と 錐を 超平面 { w ∣ y ⊤ w = 0 } \lbrace w \mid y^{\top}w = 0 \rbrace { w ∣ y ⊤ w = 0 } で 分けられる」ことである。2 の y y y は 1 が 解を もたない ことの 証明書で あり、検証は A ⊤ y A^{\top}y A ⊤ y と b ⊤ y b^{\top}y b ⊤ y を 計算するだけで 済む。
系 3.23 (ファルカスの 補題の 変形)
次の ちょうど 一方が 成り立つ:(i) A x ≤ b Ax \leq b A x ≤ b , x ≥ 0 x \geq 0 x ≥ 0 を 満たす x x x が ある。(ii) y ≥ 0 y \geq 0 y ≥ 0 , A ⊤ y ≥ 0 A^{\top}y \geq 0 A ⊤ y ≥ 0 , b ⊤ y < 0 b^{\top}y < 0 b ⊤ y < 0 を 満たす y y y が ある。
次の ちょうど 一方が 成り立つ:(i) A ⊤ y ≤ c A^{\top}y \leq c A ⊤ y ≤ c を 満たす y ∈ R m y \in \mathbb{R}^m y ∈ R m が ある。(ii) x ≥ 0 x \geq 0 x ≥ 0 , A x = 0 Ax = 0 A x = 0 , c ⊤ x < 0 c^{\top}x < 0 c ⊤ x < 0 を 満たす x ∈ R n x \in \mathbb{R}^n x ∈ R n が ある。
証明. 1:(i) は スラック変数を 加えた [ A , I ] ( x , s ) = b [A, I](x, s) = b [ A , I ] ( x , s ) = b , ( x , s ) ≥ 0 (x, s) \geq 0 ( x , s ) ≥ 0 の 可解性と 同値で、定理 3.22 を これに 使うと、もう 一方は A ⊤ y ≥ 0 A^{\top}y \geq 0 A ⊤ y ≥ 0 , y ≥ 0 y \geq 0 y ≥ 0 , b ⊤ y < 0 b^{\top}y < 0 b ⊤ y < 0 と なる。2:(i) は y = y + − y − y = y^{+} - y^{-} y = y + − y − と 分けスラック s s s を 加えた A ⊤ y + − A ⊤ y − + s = c A^{\top}y^{+} - A^{\top}y^{-} + s = c A ⊤ y + − A ⊤ y − + s = c , ( y + , y − , s ) ≥ 0 (y^{+}, y^{-}, s) \geq 0 ( y + , y − , s ) ≥ 0 の 可解性と 同値である。定理 3.22 を 行列 [ A ⊤ , − A ⊤ , I ] [A^{\top}, -A^{\top}, I] [ A ⊤ , − A ⊤ , I ] に 使うと、もう 一方は「 A x ≥ 0 Ax \geq 0 A x ≥ 0 , − A x ≥ 0 -Ax \geq 0 − A x ≥ 0 , x ≥ 0 x \geq 0 x ≥ 0 , c ⊤ x < 0 c^{\top}x < 0 c ⊤ x < 0 を 満たす x x x が ある」、すな わち (ii) である。 □ \square □
ヒント
実務では
大きな モデルを 組むと、ソルバーから「実行不能」と 返ってくることが よく ある。データの 入力ミスや、両立しない 業務ルール(「P を 50 単位以上 作る」と「原料は 40 単位まで」など)が 原因である。多くの ソルバーは、実行不能性の 証明書と して ファルカスの 補題の y y y (どの 制約を どんな 重みで 足すと 矛盾が 出るか)や、互いに 矛盾する 制約の 極小な 組を 出力できる。 y i ≠ 0 y_i \neq 0 y i = 0 の 制約だけを 調べればよいので、数万本の 制約から 原因を 絞り込める。
3.7 双対問題と 双対定理
例 3.1 で、最大利益の 上界を 作ってみる。機械・作業・原料の 制約に それぞれ y 1 , y 2 , y 3 ≥ 0 y_1, y_2, y_3 \geq 0 y 1 , y 2 , y 3 ≥ 0 を 掛けて 足すと
( 2 y 1 + y 2 + y 3 ) x 1 + ( y 1 + y 2 ) x 2 ≤ 100 y 1 + 80 y 2 + 40 y 3 (2y_1 + y_2 + y_3)x_1 + (y_1 + y_2)x_2 \leq 100y_1 + 80y_2 + 40y_3 ( 2 y 1 + y 2 + y 3 ) x 1 + ( y 1 + y 2 ) x 2 ≤ 100 y 1 + 80 y 2 + 40 y 3
で、2 y 1 + y 2 + y 3 ≥ 40 2y_1 + y_2 + y_3 \geq 40 2 y 1 + y 2 + y 3 ≥ 40 , y 1 + y 2 ≥ 30 y_1 + y_2 \geq 30 y 1 + y 2 ≥ 30 なら、x ≥ 0 x \geq 0 x ≥ 0 より 左辺は 利益 40 x 1 + 30 x 2 40x_1 + 30x_2 40 x 1 + 30 x 2 以上である。したがって 右辺は 利益の 上界であり、 y = ( 10 , 20 , 0 ) y = (10, 20, 0) y = ( 10 , 20 , 0 ) と すると 上界 2600 2600 2600 が 得られる。これは ( 20 , 60 ) (20, 60) ( 20 , 60 ) での 利益に 等しいので、 ( 20 , 60 ) (20, 60) ( 20 , 60 ) の 最適性が 証明された。最良の 上界を 求める 問題が また 線形計画問題に なる。これが 双対問題である。
定義 3.24 (双対問題, dual problem)標準形 (P) に 対し、次の 問題 (D) を (P) の 双対問題 、(P) を 主問題 (primal problem) と いう。 y ∈ R m y \in \mathbb{R}^m y ∈ R m に 符号の 制約は ない。
(D) maximize b ⊤ y subject to A ⊤ y ≤ c \text{(D)} \qquad \text{maximize} \quad b^{\top}y \qquad \text{subject to} \quad A^{\top}y \leq c (D) maximize b ⊤ y subject to A ⊤ y ≤ c
定理 3.25 (弱双対定理, weak duality)x x x が (P) の、y y y が (D) の 実行可能解ならば b ⊤ y ≤ c ⊤ x b^{\top}y \leq c^{\top}x b ⊤ y ≤ c ⊤ x である。特に b ⊤ y = c ⊤ x b^{\top}y = c^{\top}x b ⊤ y = c ⊤ x ならば、x , y x, y x , y は それぞれ (P), (D) の 最適解である。
証明. b ⊤ y = ( A x ) ⊤ y = x ⊤ ( A ⊤ y ) ≤ x ⊤ c b^{\top}y = (Ax)^{\top}y = x^{\top}(A^{\top}y) \leq x^{\top}c b ⊤ y = ( A x ) ⊤ y = x ⊤ ( A ⊤ y ) ≤ x ⊤ c (x ≥ 0 x \geq 0 x ≥ 0 , A ⊤ y ≤ c A^{\top}y \leq c A ⊤ y ≤ c )。等号の とき、(P) の 任意の 実行可能解 x ′ x' x ′ に ついて c ⊤ x ′ ≥ b ⊤ y = c ⊤ x c^{\top}x' \geq b^{\top}y = c^{\top}x c ⊤ x ′ ≥ b ⊤ y = c ⊤ x なので x x x は 最適で、 y y y も 同様。 □ \square □
定理 3.26 (強双対定理, strong duality)(P) が 最適解を もてば (D) も 最適解を もち、両者の 最適値は 等しい。
証明. (P) の 最適解を x ∗ x^{\ast} x ∗ 、最適値を z ∗ = c ⊤ x ∗ z^{\ast} = c^{\top}x^{\ast} z ∗ = c ⊤ x ∗ と する。 A ⊤ y ≤ c A^{\top}y \leq c A ⊤ y ≤ c かつ b ⊤ y ≥ z ∗ b^{\top}y \geq z^{\ast} b ⊤ y ≥ z ∗ を 満たす y y y が 存在する ことを 示せば、弱双対定理より b ⊤ y = z ∗ b^{\top}y = z^{\ast} b ⊤ y = z ∗ で y y y は (D) の 最適解に なる。この 条件は y y y に ついての 連立不等式
( A ⊤ − b ⊤ ) y ≤ ( c − z ∗ ) \begin{pmatrix} A^{\top} \\ -b^{\top} \end{pmatrix}y \leq \begin{pmatrix} c \\ -z^{\ast} \end{pmatrix} ( A ⊤ − b ⊤ ) y ≤ ( c − z ∗ )
である。解が ないと すると、系 3.23 の 2 より、 ( w , t ) ≥ 0 (w, t) \geq 0 ( w , t ) ≥ 0 (w ∈ R n w \in \mathbb{R}^n w ∈ R n , t ∈ R t \in \mathbb{R} t ∈ R )で A w − t b = 0 Aw - tb = 0 A w − t b = 0 かつ c ⊤ w − t z ∗ < 0 c^{\top}w - tz^{\ast} < 0 c ⊤ w − t z ∗ < 0 と なる ものが ある。 t > 0 t > 0 t > 0 なら x = w / t x = w/t x = w / t は x ≥ 0 x \geq 0 x ≥ 0 , A x = b Ax = b A x = b , c ⊤ x < z ∗ c^{\top}x < z^{\ast} c ⊤ x < z ∗ を 満たし、 z ∗ z^{\ast} z ∗ の 最適性に 反する。 t = 0 t = 0 t = 0 なら w ≥ 0 w \geq 0 w ≥ 0 , A w = 0 Aw = 0 A w = 0 , c ⊤ w < 0 c^{\top}w < 0 c ⊤ w < 0 で、x ∗ + s w x^{\ast} + sw x ∗ + s w (s ≥ 0 s \geq 0 s ≥ 0 )は 実行可能かつ c ⊤ ( x ∗ + s w ) → − ∞ c^{\top}(x^{\ast} + sw) \to -\infty c ⊤ ( x ∗ + s w ) → − ∞ と なり、やはり 矛盾する。 □ \square □
系 3.27 (双対定理)
(P) と (D) が ともに 実行可能ならば、ともに 最適解を もち、最適値は 等しい。
(P) が 実行可能で (D) が 実行不能ならば (P) は 非有界である。(D) が 実行可能で (P) が 実行不能ならば (D) は 非有界である。
(P) と (D) が ともに 実行不能な こともある。
証明. 1:弱双対定理より (P) の 目的関数は 下に 有界なので、定理 3.11 より (P) は 最適解を もち、定理 3.26 が 使える。2:(D) が 実行不能なら、系 3.23 の 2 より w ≥ 0 w \geq 0 w ≥ 0 , A w = 0 Aw = 0 A w = 0 , c ⊤ w < 0 c^{\top}w < 0 c ⊤ w < 0 と なる w w w が あり、(P) の 実行可能解 x x x に ついて x + s w x + sw x + s w (s ≥ 0 s \geq 0 s ≥ 0 )で 目的関数は − ∞ -\infty − ∞ に 発散する。(P) が 実行不能なら、定理 3.22 より A ⊤ y ′ ≥ 0 A^{\top}y' \geq 0 A ⊤ y ′ ≥ 0 , b ⊤ y ′ < 0 b^{\top}y' < 0 b ⊤ y ′ < 0 と なる y ′ y' y ′ が あり、(D) の 実行可能解 y y y に ついて y − s y ′ y - sy' y − s y ′ (s ≥ 0 s \geq 0 s ≥ 0 )は A ⊤ ( y − s y ′ ) ≤ c A^{\top}(y - sy') \leq c A ⊤ ( y − s y ′ ) ≤ c を 満たし、 b ⊤ ( y − s y ′ ) → + ∞ b^{\top}(y - sy') \to +\infty b ⊤ ( y − s y ′ ) → + ∞ 。3:A A A の 行を ( 1 , − 1 ) (1, -1) ( 1 , − 1 ) と ( − 1 , 1 ) (-1, 1) ( − 1 , 1 ) 、b = ( 1 , 1 ) b = (1, 1) b = ( 1 , 1 ) , c = ( − 1 , − 1 ) c = (-1, -1) c = ( − 1 , − 1 ) と すると、(P) の 2 式を 足すと 0 = 2 0 = 2 0 = 2 、(D) の 2 式 y 1 − y 2 ≤ − 1 y_1 - y_2 \leq -1 y 1 − y 2 ≤ − 1 , − y 1 + y 2 ≤ − 1 -y_1 + y_2 \leq -1 − y 1 + y 2 ≤ − 1 を 足すと 0 ≤ − 2 0 \leq -2 0 ≤ − 2 と なり、どちらも 実行不能である。 □ \square □
逆に、弱双対定理より、一方が 非有界ならば 他方は 実行不能である。したがって (P) と (D) の 組は、「ともに 最適解を もち、最適値が 等しい」「(P) が 非有界で (D) が 実行不能」「(D) が 非有界で (P) が 実行不能」「ともに 実行不能」の 4 通りの どれかに なる。
双対問題の 作り方. 一般の 形の 問題の 双対問題は、命題 3.4 で 標準形に 直して 定義 3.24 を 当ては めれば 得られる。よく 使う 対称な 形
(P ′ ) maximize c ⊤ x s.t. A x ≤ b , x ≥ 0 (D ′ ) minimize b ⊤ y s.t. A ⊤ y ≥ c , y ≥ 0 \text{(P}'\text{)} \quad \text{maximize} \ c^{\top}x \ \ \text{s.t.} \ Ax \leq b, \ x \geq 0 \qquad \text{(D}'\text{)} \quad \text{minimize} \ b^{\top}y \ \ \text{s.t.} \ A^{\top}y \geq c, \ y \geq 0 (P ′ ) maximize c ⊤ x s.t. A x ≤ b , x ≥ 0 (D ′ ) minimize b ⊤ y s.t. A ⊤ y ≥ c , y ≥ 0
も こうして 得られ(問題 3.5)、(P′) か (D′) の 一方が 最適解を もてば 他方も 最適解を もち、最適値は 等しい。一般に、最大化問題と その 双対(最小化問題)の 間には 次の 対応が ある。いずれも 標準形に 直して 確かめられる。
最大化問題
最小化問題
第 i i i 制約が ≤ \leq ≤
y i ≥ 0 y_i \geq 0 y i ≥ 0
第 i i i 制約が = = =
y i y_i y i は 自由
第 i i i 制約が ≥ \geq ≥
y i ≤ 0 y_i \leq 0 y i ≤ 0
x j ≥ 0 x_j \geq 0 x j ≥ 0
第 j j j 制約が ≥ \geq ≥
x j x_j x j は 自由
第 j j j 制約が = = =
x j ≤ 0 x_j \leq 0 x j ≤ 0
第 j j j 制約が ≤ \leq ≤
定理 3.28 (相補性条件, complementary slackness)x x x を (P) の、y y y を (D) の 実行可能解と する。 x , y x, y x , y が ともに 最適解である ための 必要十分条件は、
x j ( c j − a j ⊤ y ) = 0 ( j = 1 , … , n ) x_j(c_j - a_j^{\top}y) = 0 \qquad (j = 1, \dots, n) x j ( c j − a j ⊤ y ) = 0 ( j = 1 , … , n )
である。対称な 形 (P′), (D′) では、条件は y i ( b i − ( A x ) i ) = 0 y_i(b_i - (Ax)_i) = 0 y i ( b i − ( A x ) i ) = 0 (i = 1 , … , m i = 1, \dots, m i = 1 , … , m )かつ x j ( ( A ⊤ y ) j − c j ) = 0 x_j((A^{\top}y)_j - c_j) = 0 x j (( A ⊤ y ) j − c j ) = 0 (j = 1 , … , n j = 1, \dots, n j = 1 , … , n )である。
証明. c ⊤ x − b ⊤ y = x ⊤ ( c − A ⊤ y ) = ∑ j x j ( c j − a j ⊤ y ) c^{\top}x - b^{\top}y = x^{\top}(c - A^{\top}y) = \sum_j x_j(c_j - a_j^{\top}y) c ⊤ x − b ⊤ y = x ⊤ ( c − A ⊤ y ) = ∑ j x j ( c j − a j ⊤ y ) で、各項は 非負である。両方が 最適なら 強双対定理より 左辺は 0 0 0 なので 各項が 0 0 0 。逆に 各項が 0 0 0 なら c ⊤ x = b ⊤ y c^{\top}x = b^{\top}y c ⊤ x = b ⊤ y で、弱双対定理より 両方とも 最適。対称な 形でも、 b ⊤ y − c ⊤ x = y ⊤ ( b − A x ) + x ⊤ ( A ⊤ y − c ) b^{\top}y - c^{\top}x = y^{\top}(b - Ax) + x^{\top}(A^{\top}y - c) b ⊤ y − c ⊤ x = y ⊤ ( b − A x ) + x ⊤ ( A ⊤ y − c ) の 各項が 非負である ことから 同様である。 □ \square □
言葉で いえば、「主問題で 正の 値を とる 変数に 対応する 双対の 制約は 等号で 成り立ち、正の 双対変数に 対応する 主問題の 制約は 等号で 成り立つ(資源を 使い 切っている)」。最適性を 確かめるには、相補性条件から 双対の 候補を 連立一次方程式で 求め、それが 双対実行可能かを 調べればよい。
例 3.29 (例 3.1 の 双対)例 3.1 の 双対問題は、この 節の 初めに 作った「 2 y 1 + y 2 + y 3 ≥ 40 2y_1 + y_2 + y_3 \geq 40 2 y 1 + y 2 + y 3 ≥ 40 , y 1 + y 2 ≥ 30 y_1 + y_2 \geq 30 y 1 + y 2 ≥ 30 , y ≥ 0 y \geq 0 y ≥ 0 のもとで 100 y 1 + 80 y 2 + 40 y 3 100y_1 + 80y_2 + 40y_3 100 y 1 + 80 y 2 + 40 y 3 を 最小化する」問題である。 x = ( 20 , 60 ) x = (20, 60) x = ( 20 , 60 ) では 原料が 余るので y 3 = 0 y_3 = 0 y 3 = 0 、x 1 , x 2 > 0 x_1, x_2 > 0 x 1 , x 2 > 0 なので 双対の 2 本の 制約は 等号で、 2 y 1 + y 2 = 40 2y_1 + y_2 = 40 2 y 1 + y 2 = 40 , y 1 + y 2 = 30 y_1 + y_2 = 30 y 1 + y 2 = 30 から y = ( 10 , 20 , 0 ) y = (10, 20, 0) y = ( 10 , 20 , 0 ) が 求まる。この y y y は 例 3.16 の 最後の 辞書 z = 2600 − 10 s 1 − 20 s 2 z = 2600 - 10s_1 - 20s_2 z = 2600 − 10 s 1 − 20 s 2 に 現れていた。一般に、単体法が c ˉ ≥ 0 \bar{c} \geq 0 c ˉ ≥ 0 で 終了した ときの 単体乗数 y = ( A B ⊤ ) − 1 c B y = (A_B^{\top})^{-1}c_B y = ( A B ⊤ ) − 1 c B は、A ⊤ y ≤ c A^{\top}y \leq c A ⊤ y ≤ c (c ˉ ≥ 0 \bar{c} \geq 0 c ˉ ≥ 0 と 同値)と b ⊤ y = c B ⊤ A B − 1 b = c ⊤ x b^{\top}y = c_B^{\top}A_B^{-1}b = c^{\top}x b ⊤ y = c B ⊤ A B − 1 b = c ⊤ x を 満たすので (D) の 最適解である。単体法は 双対問題も 同時に 解いている。
3.8 シャドウプライスと 感度分析
例 3.1 で 機械を 1 時間増やすと、最大利益は どれだけ 増えるだろうか。右辺 b b b を 変えた ときの 最適値の 変化は、双対の 最適解で 表せる。
定理 3.30 (シャドウプライス, shadow price)標準形 (P) で 右辺を b ′ b' b ′ に 替えた 問題の 最適値を v ( b ′ ) v(b') v ( b ′ ) と し(実行不能なら v ( b ′ ) = + ∞ v(b') = +\infty v ( b ′ ) = + ∞ )、(P)(右辺 b b b )は 最適解を もつとする。
(D) の 任意の 最適解 y ∗ y^{\ast} y ∗ と 任意の b ′ b' b ′ に ついて、 v ( b ′ ) ≥ v ( b ) + y ∗ ⊤ ( b ′ − b ) v(b') \geq v(b) + y^{\ast\top}(b' - b) v ( b ′ ) ≥ v ( b ) + y ∗ ⊤ ( b ′ − b ) 。
rank A = m \operatorname{rank} A = m rank A = m で、(P) が 非退化な 最適基底解 x ∗ x^{\ast} x ∗ (基底 B B B )を もつとする。この とき (D) の 最適解は y ∗ = ( A B ⊤ ) − 1 c B y^{\ast} = (A_B^{\top})^{-1}c_B y ∗ = ( A B ⊤ ) − 1 c B ただ 一つであり、 A B − 1 b ′ ≥ 0 A_B^{-1}b' \geq 0 A B − 1 b ′ ≥ 0 を 満たすすべての b ′ b' b ′ に ついて v ( b ′ ) = v ( b ) + y ∗ ⊤ ( b ′ − b ) v(b') = v(b) + y^{\ast\top}(b' - b) v ( b ′ ) = v ( b ) + y ∗ ⊤ ( b ′ − b ) が 成り立つ。この 範囲は b b b の 近傍を 含み、特に ∂ v / ∂ b i = y i ∗ \partial v/\partial b_i = y_i^{\ast} ∂ v / ∂ b i = y i ∗ である。
証明. 1:(D) の 実行可能領域 { y ∣ A ⊤ y ≤ c } \lbrace y \mid A^{\top}y \leq c \rbrace { y ∣ A ⊤ y ≤ c } は b b b に よらないので、 y ∗ y^{\ast} y ∗ は 右辺 b ′ b' b ′ の 問題の 双対問題でも 実行可能であり、弱双対定理と 強双対定理より v ( b ′ ) ≥ b ′ ⊤ y ∗ = b ⊤ y ∗ + y ∗ ⊤ ( b ′ − b ) = v ( b ) + y ∗ ⊤ ( b ′ − b ) v(b') \geq b'^{\top}y^{\ast} = b^{\top}y^{\ast} + y^{\ast\top}(b' - b) = v(b) + y^{\ast\top}(b' - b) v ( b ′ ) ≥ b ′ ⊤ y ∗ = b ⊤ y ∗ + y ∗ ⊤ ( b ′ − b ) = v ( b ) + y ∗ ⊤ ( b ′ − b ) 。
2:まず c ˉ ≥ 0 \bar{c} \geq 0 c ˉ ≥ 0 である。実際、c ˉ q < 0 \bar{c}_q < 0 c ˉ q < 0 と なる q q q が あれば、命題 3.14 の 1 なら 非有界、2 なら 非退化より t ∗ > 0 t^{\ast} > 0 t ∗ > 0 で 目的関数が 真に 減り、どちらも x ∗ x^{\ast} x ∗ の 最適性に 反する。よって y ∗ = ( A B ⊤ ) − 1 c B y^{\ast} = (A_B^{\top})^{-1}c_B y ∗ = ( A B ⊤ ) − 1 c B は A ⊤ y ∗ ≤ c A^{\top}y^{\ast} \leq c A ⊤ y ∗ ≤ c を 満たし、 b ⊤ y ∗ = c B ⊤ A B − 1 b = c ⊤ x ∗ b^{\top}y^{\ast} = c_B^{\top}A_B^{-1}b = c^{\top}x^{\ast} b ⊤ y ∗ = c B ⊤ A B − 1 b = c ⊤ x ∗ だから (D) の 最適解である。(D) の 最適解 y y y は 相補性条件を 満たし、 x j ∗ > 0 x_j^{\ast} > 0 x j ∗ > 0 (j ∈ B j \in B j ∈ B )なので a j ⊤ y = c j a_j^{\top}y = c_j a j ⊤ y = c j (j ∈ B j \in B j ∈ B )、すな わち A B ⊤ y = c B A_B^{\top}y = c_B A B ⊤ y = c B で y = y ∗ y = y^{\ast} y = y ∗ 。最後に、A B − 1 b ′ ≥ 0 A_B^{-1}b' \geq 0 A B − 1 b ′ ≥ 0 なら x B ′ = A B − 1 b ′ x'_B = A_B^{-1}b' x B ′ = A B − 1 b ′ , x N ′ = 0 x'_N = 0 x N ′ = 0 は 右辺 b ′ b' b ′ の 問題の 実行可能解で、 c ⊤ x ′ = c B ⊤ A B − 1 b ′ = b ′ ⊤ y ∗ c^{\top}x' = c_B^{\top}A_B^{-1}b' = b'^{\top}y^{\ast} c ⊤ x ′ = c B ⊤ A B − 1 b ′ = b ′ ⊤ y ∗ だから、弱双対定理より v ( b ′ ) = b ′ ⊤ y ∗ = v ( b ) + y ∗ ⊤ ( b ′ − b ) v(b') = b'^{\top}y^{\ast} = v(b) + y^{\ast\top}(b' - b) v ( b ′ ) = b ′ ⊤ y ∗ = v ( b ) + y ∗ ⊤ ( b ′ − b ) 。A B − 1 b > 0 A_B^{-1}b > 0 A B − 1 b > 0 なので、連続性から b b b の 近くの b ′ b' b ′ では A B − 1 b ′ ≥ 0 A_B^{-1}b' \geq 0 A B − 1 b ′ ≥ 0 である。□ \square □
y i ∗ y_i^{\ast} y i ∗ を 制約 i i i の シャドウプライス(潜在価格)と いう。最大化問題 (P′) では 不等号の 向きが 逆に なり、 v ( b ′ ) ≤ v ( b ) + y ∗ ⊤ ( b ′ − b ) v(b') \leq v(b) + y^{\ast\top}(b' - b) v ( b ′ ) ≤ v ( b ) + y ∗ ⊤ ( b ′ − b ) である(v v v は 凹関数)。右辺や 目的関数の 係数を 動かした とき、最適基底が どの 範囲で 変わらないかを 調べる ことを 感度分析 (sensitivity analysis) と いう。
例 3.31 (例 3.1 の シャドウプライス)最適解は 非退化で(基底変数 x 1 = 20 x_1 = 20 x 1 = 20 , x 2 = 60 x_2 = 60 x 2 = 60 , s 3 = 20 s_3 = 20 s 3 = 20 が すべて 正)、 y ∗ = ( 10 , 20 , 0 ) y^{\ast} = (10, 20, 0) y ∗ = ( 10 , 20 , 0 ) 。機械を 1 時間増やすと 最大利益は 10 千円、作業なら 20 千円増え、余っている 原料を 増やしても 利益は 増えない。最適基底 { x 1 , x 2 , s 3 } \lbrace x_1, x_2, s_3 \rbrace { x 1 , x 2 , s 3 } の 基底解は、右辺 ( b 1 , b 2 , b 3 ) (b_1, b_2, b_3) ( b 1 , b 2 , b 3 ) に 対して x 1 = b 1 − b 2 x_1 = b_1 - b_2 x 1 = b 1 − b 2 , x 2 = 2 b 2 − b 1 x_2 = 2b_2 - b_1 x 2 = 2 b 2 − b 1 , s 3 = b 3 − b 1 + b 2 s_3 = b_3 - b_1 + b_2 s 3 = b 3 − b 1 + b 2 なので、作業 80・原料 40 の まま 機械 b 1 b_1 b 1 を 動かすとき、この 基底が 実行可能なのは 80 ≤ b 1 ≤ 120 80 \leq b_1 \leq 120 80 ≤ b 1 ≤ 120 である。この 範囲で 機械 1 時間の 価値は 10 千円であり、 b 1 > 120 b_1 > 120 b 1 > 120 では 原料が 尽きて P を 増やせず、利益は 2800 2800 2800 から 増えない(計算機で 確かめた)。目的関数の 係数に ついても、 c ˉ ≥ 0 \bar{c} \geq 0 c ˉ ≥ 0 が 保たれる 限り 最適基底は 変わらない。たとえば Q の 利益 30 を 固定すると、P の 利益 c 1 c_1 c 1 が 30 ≤ c 1 ≤ 60 30 \leq c_1 \leq 60 30 ≤ c 1 ≤ 60 なら ( 20 , 60 ) (20, 60) ( 20 , 60 ) が 最適の ままである( ( c 1 , 30 ) = y 1 ( 2 , 1 ) + y 2 ( 1 , 1 ) (c_1, 30) = y_1(2, 1) + y_2(1, 1) ( c 1 , 30 ) = y 1 ( 2 , 1 ) + y 2 ( 1 , 1 ) の y 1 = c 1 − 30 y_1 = c_1 - 30 y 1 = c 1 − 30 , y 2 = 60 − c 1 y_2 = 60 - c_1 y 2 = 60 − c 1 が 非負の 範囲)。
注意
シャドウプライスは「その 範囲でだけ有効な 限界的な 値」である。(1) 範囲を 超えて 外挿してはいけない(問題 3.6)。(2) 退化していると 双対の 最適解は 一意とは 限らず、増やす方向と 減らす方向で 限界的な 値が 異なりうる。例 3.1 に 制約 x 1 + 2 x 2 ≤ 140 x_1 + 2x_2 \leq 140 x 1 + 2 x 2 ≤ 140 を 加えると、頂点 ( 20 , 60 ) (20, 60) ( 20 , 60 ) で 3 本の 制約が 等号に なって 退化する。最適値は 2600 2600 2600 の ままだが、機械を 増やすときの 利益の 増え方は 1 時間 あたり 10 10 10 、減らすときの 減り方は 50 / 3 50/3 50/3 で、双対の 最適解は ( y 1 , 50 − 3 y 1 , 0 , y 1 − 10 ) (y_1, 50 - 3y_1, 0, y_1 - 10) ( y 1 , 50 − 3 y 1 , 0 , y 1 − 10 ) (10 ≤ y 1 ≤ 50 / 3 10 \leq y_1 \leq 50/3 10 ≤ y 1 ≤ 50/3 )の 全体に なる(計算機で 確かめた。右微分 10 10 10 と 左微分 50 / 3 50/3 50/3 が y 1 y_1 y 1 の 範囲の 両端に なっている ことは、定理 3.30 の 1 と 整合する)。ソルバーは この 中の 一つしか 報告せず、同じソルバーでも 解法の 設定に よって ( 10 , 20 , 0 , 0 ) (10, 20, 0, 0) ( 10 , 20 , 0 , 0 ) が 返る ことも ( 50 / 3 , 0 , 0 , 20 / 3 ) (50/3, 0, 0, 20/3) ( 50/3 , 0 , 0 , 20/3 ) が 返る こともある。
ヒント
実務では
多くの ソルバーは、最適解と 一緒に 双対変数(シャドウプライス、dual value)と 被約費用(reduced cost)を 返し、右辺や 目的関数の 係数を 最適基底が 変わらずに 動かせる 範囲も 出力できる。「どの 資源の 追加に いくらまで 払う 価値が あるか」「採算に 合わない 製品の 利益が いくら上がれば 作る 価値が 出るか」(被約費用)を 判断する 材料に なる。ただし符号の 約束(最大化か 最小化か、 ≤ \leq ≤ か ≥ \geq ≥ か)は ソルバーに よって 異なるので、小さな 例で 確かめてから 読むこと。
3.9 輸送問題と 割当問題
第1章 例 1.3 の 輸送問題では、倉庫 i i i の 在庫 s i s_i s i 、店舗 j j j の 需要 d j d_j d j 、単位輸送費 c i j c_{ij} c ij に ついて、 ∑ j x i j ≤ s i \sum_j x_{ij} \leq s_i ∑ j x ij ≤ s i , ∑ i x i j = d j \sum_i x_{ij} = d_j ∑ i x ij = d j , x ≥ 0 x \geq 0 x ≥ 0 のもとで ∑ i , j c i j x i j \sum_{i,j}c_{ij}x_{ij} ∑ i , j c ij x ij を 最小化する。上の 対応表に よれば、双対問題は、在庫の 制約に u i ≤ 0 u_i \leq 0 u i ≤ 0 、需要の 制約に 自由な v j v_j v j を 対応させた
maximize ∑ i s i u i + ∑ j d j v j subject to u i + v j ≤ c i j , u i ≤ 0 \text{maximize} \quad \sum_i s_iu_i + \sum_j d_jv_j \qquad \text{subject to} \quad u_i + v_j \leq c_{ij}, \quad u_i \leq 0 maximize i ∑ s i u i + j ∑ d j v j subject to u i + v j ≤ c ij , u i ≤ 0
である。相補性条件は、「使う 経路( x i j > 0 x_{ij} > 0 x ij > 0 )では u i + v j = c i j u_i + v_j = c_{ij} u i + v j = c ij 」「在庫が 余る 倉庫( ∑ j x i j < s i \sum_j x_{ij} < s_i ∑ j x ij < s i )では u i = 0 u_i = 0 u i = 0 」である。
例 3.32 (輸送問題)2 つの 倉庫 A, B(在庫 50, 60)から 3 つの 店舗 1, 2, 3(需要 30, 40, 25)へ 製品を 運ぶ。単位輸送費は 次の 表の とおりである。
店舗 1
店舗 2
店舗 3
倉庫 A
4
6
9
倉庫 B
5
3
7
B は 店舗 2・3 へは 安いが、在庫 60 では 両方の 需要 65 を まかなえない。そこで A→1 に 30、A→3 に 5、B→2 に 40、B→3 に 20 運ぶ計画(費用 120 + 45 + 120 + 140 = 425 120 + 45 + 120 + 140 = 425 120 + 45 + 120 + 140 = 425 )を 考える。A の 在庫は 15 余るので u A = 0 u_A = 0 u A = 0 、使う 経路で u i + v j = c i j u_i + v_j = c_{ij} u i + v j = c ij と すると、 v 1 = 4 v_1 = 4 v 1 = 4 , v 3 = 9 v_3 = 9 v 3 = 9 , u B = 7 − 9 = − 2 u_B = 7 - 9 = -2 u B = 7 − 9 = − 2 , v 2 = 3 − ( − 2 ) = 5 v_2 = 3 - (-2) = 5 v 2 = 3 − ( − 2 ) = 5 。使わない 経路でも u A + v 2 = 5 ≤ 6 u_A + v_2 = 5 \leq 6 u A + v 2 = 5 ≤ 6 , u B + v 1 = 2 ≤ 5 u_B + v_1 = 2 \leq 5 u B + v 1 = 2 ≤ 5 が 成り立ち、 u ≤ 0 u \leq 0 u ≤ 0 なので 双対実行可能で、双対の 目的関数値は 60 ⋅ ( − 2 ) + 30 ⋅ 4 + 40 ⋅ 5 + 25 ⋅ 9 = 425 60 \cdot (-2) + 30 \cdot 4 + 40 \cdot 5 + 25 \cdot 9 = 425 60 ⋅ ( − 2 ) + 30 ⋅ 4 + 40 ⋅ 5 + 25 ⋅ 9 = 425 。よって この 計画は 最適である(計算機でも 確かめた)。
基底変数 x A 1 , x A 3 , x B 2 , x B 3 x_{A1}, x_{A3}, x_{B2}, x_{B3} x A 1 , x A 3 , x B 2 , x B 3 と A の 余りは すべて 正で 非退化なので、定理 3.30 に より 双対変数は 限界費用を 表す。店舗 2 の 需要が 1 増えた ときの 費用の 増加は v 2 = 5 v_2 = 5 v 2 = 5 で、最安の 経路の 費用 3 ではない。B は 在庫を 使い 切っているので、B→2 を 1 増やし( + 3 +3 + 3 )、B→3 を 1 減らし(− 7 -7 − 7 )、A→3 を 1 増やす(+ 9 +9 + 9 )ことに なるからである。同様に、B の 在庫が 1 増えると 費用は 2 2 2 減る(u B = − 2 u_B = -2 u B = − 2 。B の 在庫が 45 から 65 の 範囲で 正しい)。店舗 3 の 需要の 変化は 問題 3.7 で 扱う。
輸送問題・ 割当問題では、最適解が 整数に なることが 重要である。
命題 3.33 (輸送問題の 整数性)在庫と 需要が つり合った 輸送問題 ∑ j x i j = s i \sum_j x_{ij} = s_i ∑ j x ij = s i (i = 1 , … , m i = 1, \dots, m i = 1 , … , m )、∑ i x i j = d j \sum_i x_{ij} = d_j ∑ i x ij = d j (j = 1 , … , n j = 1, \dots, n j = 1 , … , n )、x ≥ 0 x \geq 0 x ≥ 0 で、s i , d j s_i, d_j s i , d j が すべて 整数ならば、実行可能領域の 頂点は すべて 整数ベクトルである。したがって 最適解を もてば、整数の 最適解が ある。
証明. 倉庫 i i i と 店舗 j j j を 頂点とし、 x i j > 0 x_{ij} > 0 x ij > 0 と なる ( i , j ) (i, j) ( i , j ) を 辺と する 2 部グラフ G ( x ) G(x) G ( x ) を 考える。変数 x i j x_{ij} x ij の 係数の 列は e i + e m + j e_i + e_{m+j} e i + e m + j (e k e_k e k は R m + n \mathbb{R}^{m+n} R m + n の 単位ベクトル)である。
(i) x x x が 頂点なら G ( x ) G(x) G ( x ) は 閉路を もたない。閉路 i 1 j 1 i 2 j 2 ⋯ i k j k i 1 i_1j_1i_2j_2\cdots i_kj_ki_1 i 1 j 1 i 2 j 2 ⋯ i k j k i 1 が あると すると、辺 ( i 1 , j 1 ) , ( i 2 , j 2 ) , … , ( i k , j k ) (i_1, j_1), (i_2, j_2), \dots, (i_k, j_k) ( i 1 , j 1 ) , ( i 2 , j 2 ) , … , ( i k , j k ) の 列に + 1 +1 + 1 、辺 ( i 2 , j 1 ) , ( i 3 , j 2 ) , … , ( i 1 , j k ) (i_2, j_1), (i_3, j_2), \dots, (i_1, j_k) ( i 2 , j 1 ) , ( i 3 , j 2 ) , … , ( i 1 , j k ) の 列に − 1 -1 − 1 を 掛けて 足せば、各頂点で + 1 +1 + 1 と − 1 -1 − 1 が 打ち消し合って 0 0 0 に なる。これは 台の 列が 一次従属である ことを 意味し、定理 3.8 に 反する。
(ii) G ( x ) G(x) G ( x ) が 閉路を もたない 実行可能解 x x x は 整数ベクトルである。辺の 本数に ついての 帰納法で 示す。辺が なければ x = 0 x = 0 x = 0 。辺が あれば、閉路の ない グラフには 次数 1 の 頂点が ある(最長の 道の 端点は、他の 頂点と つながれば 道が 延びるか 閉路が できるので、次数 1 である)。それが 倉庫 i i i で、唯一の 辺が ( i , j ) (i, j) ( i , j ) なら、∑ j ′ x i j ′ = s i \sum_{j'}x_{ij'} = s_i ∑ j ′ x i j ′ = s i より x i j = s i x_{ij} = s_i x ij = s i は 整数である。 x i j x_{ij} x ij と s i s_i s i を 0 0 0 に、d j d_j d j を d j − s i d_j - s_i d j − s i に 替えると、整数データの 同じ形の 系の、辺が 1 本少なく 閉路の ない 解が 得られるので、帰納法の 仮定から 残りの 成分も 整数である。店舗の 場合も 同様。最後の 主張は 定理 3.11 に よる。 □ \square □
在庫が 需要を 上回る 場合も、余りを 受け取る 費用 0 0 0 の 仮想の 店舗を 加えれば、つり合った 問題に 帰着する。
割当問題 (assignment problem) は、n n n 人を n n n 個の 仕事に 一人 一つずつ 割り 当て、費用 c i j c_{ij} c ij の 和を 最小に する 問題である。 x i j ∈ { 0 , 1 } x_{ij} \in \lbrace 0, 1 \rbrace x ij ∈ { 0 , 1 } と いう 整数の 制約を x i j ≥ 0 x_{ij} \geq 0 x ij ≥ 0 に ゆる めると、 s i = d j = 1 s_i = d_j = 1 s i = d j = 1 の 輸送問題に なる。命題 3.33 より、その 頂点は 各行・各列の 和が 1 の 0 0 0 -1 1 1 行列、すな わち置換行列である。したがって、ゆる めた 線形計画問題を 単体法で 解けば、元の 割当問題の 最適解が 得られる。
例 3.34 (割当問題)3 人の 担当者に 3 つの 仕事を 割り 当てる。所要時間は 次の とおりである。
仕事 1
仕事 2
仕事 3
担当者 1
2
3
6
担当者 2
1
7
8
担当者 3
5
4
9
時間の 短い 組から 順に 決める 貪欲な 方法では、担当者 2→仕事 1(1)、担当者 1→仕事 2(3)、担当者 3→仕事 3(9)で 合計 13 に なる。6 通りの 割り 当てを すべて 調べると、最小は 担当者 1→仕事 3、担当者 2→仕事 1、担当者 3→仕事 2 の 6 + 1 + 4 = 11 6 + 1 + 4 = 11 6 + 1 + 4 = 11 である。ゆるめた 線形計画問題を 解いても、この 割り 当てを 表す置換行列が 最適解と して 得られる(計算機で 確かめた)。人数が 増えると 割り 当ての 数 n ! n! n ! は 爆発的に 増えるが、線形計画(あるいは 専用の ハンガリー法)なら 効率よく 解ける。整数の 制約を ゆる めても 整数解が 得られるのは 特別な 構造の おかげで、一般の 整数計画問題では 成り立たない( 第7章 )。
まとめ
線形計画問題は、スラック変数と 自由変数の 分解に より 標準形 min c ⊤ x \min c^{\top}x min c ⊤ x , A x = b Ax = b A x = b , x ≥ 0 x \geq 0 x ≥ 0 に 直せる。
実行可能基底解・頂点・「台の 列が 一次独立な 実行可能解」は 同じ ものであり、頂点は 有限個である。
標準形の 問題は、実行不能・非有界( d ≥ 0 d \geq 0 d ≥ 0 , A d = 0 Ad = 0 A d = 0 , c ⊤ d < 0 c^{\top}d < 0 c ⊤ d < 0 が ある)・頂点で 最適解を もつ、の ちょうど 一つに 当ては まる。
単体法は 被約費用 c ˉ \bar{c} c ˉ を 見て 隣の 頂点へ 移る。 c ˉ ≥ 0 \bar{c} \geq 0 c ˉ ≥ 0 なら 最適。非退化なら 有限回で 終わるが、退化すると 巡回しうる。ブランドの 規則を 使えば 巡回は 起こらない。
ダンツィクの 規則の 単体法は 最悪の 場合 2 n − 1 2^n - 1 2 n − 1 回の ピボットを 要する(クレー–ミンティ)。楕円体法・ 内点法は 多項式時間で 解く。
ファルカスの 補題: A x = b Ax = b A x = b , x ≥ 0 x \geq 0 x ≥ 0 が 解を もたない ことと、 A ⊤ y ≥ 0 A^{\top}y \geq 0 A ⊤ y ≥ 0 , b ⊤ y < 0 b^{\top}y < 0 b ⊤ y < 0 と なる y y y (実行不能性の 証明書)が 存在する ことは 同値である。有限生成錐が 閉である ことと 分離定理から 従う。
弱双対定理・強双対定理:主問題が 最適解を もてば双対問題も 最適解を もち、最適値は 等しい。相補性条件で 最適性を 確かめられる。
双対の 最適解は シャドウプライスであり、非退化なら 最適値の 右辺に ついての 偏微分に 等しい。有効範囲の 外への 外挿と、退化に よる 非一意性に 注意する。
輸送問題・ 割当問題では、整数データなら 頂点が 整数に なり、ゆる めた 線形計画問題から 整数の 最適解が 得られる。
演習問題
問題 3.1 ★ 次の 問題を 標準形に 直せ。また、実行可能領域の 頂点を 調べて 最適解を 求めよ( x 2 x_2 x 2 は 符号の 制約の ない 変数である)。
maximize x 1 − 2 x 2 subject to x 1 + x 2 ≥ 1 , 2 x 1 − x 2 ≤ 4 , x 1 ≥ 0 \text{maximize} \quad x_1 - 2x_2 \qquad \text{subject to} \quad x_1 + x_2 \geq 1, \quad 2x_1 - x_2 \leq 4, \quad x_1 \geq 0 maximize x 1 − 2 x 2 subject to x 1 + x 2 ≥ 1 , 2 x 1 − x 2 ≤ 4 , x 1 ≥ 0
解答
x 2 = x 2 + − x 2 − x_2 = x_2^{+} - x_2^{-} x 2 = x 2 + − x 2 − とし、余剰変数 s 1 s_1 s 1 と スラック変数 s 2 s_2 s 2 を 加えると、標準形は
minimize − x 1 + 2 x 2 + − 2 x 2 − subject to x 1 + x 2 + − x 2 − − s 1 = 1 , 2 x 1 − x 2 + + x 2 − + s 2 = 4 , x 1 , x 2 + , x 2 − , s 1 , s 2 ≥ 0 \text{minimize} \quad -x_1 + 2x_2^{+} - 2x_2^{-} \qquad \text{subject to} \quad x_1 + x_2^{+} - x_2^{-} - s_1 = 1, \quad 2x_1 - x_2^{+} + x_2^{-} + s_2 = 4, \quad x_1, x_2^{+}, x_2^{-}, s_1, s_2 \geq 0 minimize − x 1 + 2 x 2 + − 2 x 2 − subject to x 1 + x 2 + − x 2 − − s 1 = 1 , 2 x 1 − x 2 + + x 2 − + s 2 = 4 , x 1 , x 2 + , x 2 − , s 1 , s 2 ≥ 0
である(元の 最大値は この 最小値の − 1 -1 − 1 倍)。元の 実行可能領域 x 1 ≥ 0 x_1 \geq 0 x 1 ≥ 0 , x 2 ≥ 1 − x 1 x_2 \geq 1 - x_1 x 2 ≥ 1 − x 1 , x 2 ≥ 2 x 1 − 4 x_2 \geq 2x_1 - 4 x 2 ≥ 2 x 1 − 4 の 頂点は ( 0 , 1 ) (0, 1) ( 0 , 1 ) と ( 5 / 3 , − 2 / 3 ) (5/3, -2/3) ( 5/3 , − 2/3 ) (x 1 + x 2 = 1 x_1 + x_2 = 1 x 1 + x 2 = 1 と 2 x 1 − x 2 = 4 2x_1 - x_2 = 4 2 x 1 − x 2 = 4 の 交点)で、目的関数の 値は − 2 -2 − 2 と 3 3 3 である。領域は 非有界( x 2 x_2 x 2 は いくらでも 大きく できる)なので、頂点の 比較だけでは 最大値とは 言えない。そこで 制約の 一次結合で 上界を 作ると、任意の 実行可能解に ついて x 1 − 2 x 2 = ( 2 x 1 − x 2 ) − ( x 1 + x 2 ) ≤ 4 − 1 = 3 x_1 - 2x_2 = (2x_1 - x_2) - (x_1 + x_2) \leq 4 - 1 = 3 x 1 − 2 x 2 = ( 2 x 1 − x 2 ) − ( x 1 + x 2 ) ≤ 4 − 1 = 3 であり、等号は 2 つの 制約が ともに 等号の とき、すな わち ( 5 / 3 , − 2 / 3 ) (5/3, -2/3) ( 5/3 , − 2/3 ) でだけ成り立つ(第 1・第 2 制約に 掛けた 係数 − 1 -1 − 1 , 1 1 1 は、双対問題の 最適解に なっている)。よって 最適解は ( 5 / 3 , − 2 / 3 ) (5/3, -2/3) ( 5/3 , − 2/3 ) 、最大値は 3 3 3 である(標準形では x 1 = 5 / 3 x_1 = 5/3 x 1 = 5/3 , x 2 + = 0 x_2^{+} = 0 x 2 + = 0 , x 2 − = 2 / 3 x_2^{-} = 2/3 x 2 − = 2/3 , s 1 = s 2 = 0 s_1 = s_2 = 0 s 1 = s 2 = 0 )。
問題 3.2 ★ 連立方程式 x 1 + x 2 + x 3 = 2 x_1 + x_2 + x_3 = 2 x 1 + x 2 + x 3 = 2 , x 1 − x 2 = 3 x_1 - x_2 = 3 x 1 − x 2 = 3 が 非負の 解を もたない ことを、ファルカスの 補題の y y y を 具体的に 与えて 示せ。また、非負の 制約が なければ 解が ある ことを 確かめよ。
解答
係数行列 A A A の 行は ( 1 , 1 , 1 ) (1, 1, 1) ( 1 , 1 , 1 ) と ( 1 , − 1 , 0 ) (1, -1, 0) ( 1 , − 1 , 0 ) 、b = ( 2 , 3 ) b = (2, 3) b = ( 2 , 3 ) である。y = ( 1 , − 1 ) y = (1, -1) y = ( 1 , − 1 ) と すると A ⊤ y = ( 0 , 2 , 1 ) ≥ 0 A^{\top}y = (0, 2, 1) \geq 0 A ⊤ y = ( 0 , 2 , 1 ) ≥ 0 , b ⊤ y = − 1 < 0 b^{\top}y = -1 < 0 b ⊤ y = − 1 < 0 。実際、第 1 式から 第 2 式を 引くと 2 x 2 + x 3 = − 1 2x_2 + x_3 = -1 2 x 2 + x 3 = − 1 と なり、 x ≥ 0 x \geq 0 x ≥ 0 なら 左辺は 非負なので 矛盾する。非負の 制約が なければ、たとえば x = ( 3 , 0 , − 1 ) x = (3, 0, -1) x = ( 3 , 0 , − 1 ) が 解である。
問題 3.3 ★ 次の 問題で x = ( 7 / 2 , 3 / 2 ) x = (7/2, 3/2) x = ( 7/2 , 3/2 ) が 最適解である ことを、相補性条件を 使って 双対問題の 解を 作る ことで 示せ。また 各制約の シャドウプライスを 答えよ。
maximize 5 x 1 + 4 x 2 subject to x 1 + x 2 ≤ 5 , 3 x 1 + x 2 ≤ 12 , x 1 + 2 x 2 ≤ 8 , x ≥ 0 \text{maximize} \quad 5x_1 + 4x_2 \qquad \text{subject to} \quad x_1 + x_2 \leq 5, \quad 3x_1 + x_2 \leq 12, \quad x_1 + 2x_2 \leq 8, \quad x \geq 0 maximize 5 x 1 + 4 x 2 subject to x 1 + x 2 ≤ 5 , 3 x 1 + x 2 ≤ 12 , x 1 + 2 x 2 ≤ 8 , x ≥ 0
解答
x x x は 実行可能で、第 1・2 制約は 等号、第 3 制約は 7 / 2 + 3 = 13 / 2 < 8 7/2 + 3 = 13/2 < 8 7/2 + 3 = 13/2 < 8 で 余る。双対問題は minimize 5 y 1 + 12 y 2 + 8 y 3 5y_1 + 12y_2 + 8y_3 5 y 1 + 12 y 2 + 8 y 3 subject to y 1 + 3 y 2 + y 3 ≥ 5 y_1 + 3y_2 + y_3 \geq 5 y 1 + 3 y 2 + y 3 ≥ 5 , y 1 + y 2 + 2 y 3 ≥ 4 y_1 + y_2 + 2y_3 \geq 4 y 1 + y 2 + 2 y 3 ≥ 4 , y ≥ 0 y \geq 0 y ≥ 0 である。相補性条件より y 3 = 0 y_3 = 0 y 3 = 0 で、x 1 , x 2 > 0 x_1, x_2 > 0 x 1 , x 2 > 0 より 双対の 2 本の 制約は 等号: y 1 + 3 y 2 = 5 y_1 + 3y_2 = 5 y 1 + 3 y 2 = 5 , y 1 + y 2 = 4 y_1 + y_2 = 4 y 1 + y 2 = 4 。これを 解くと y = ( 7 / 2 , 1 / 2 , 0 ) ≥ 0 y = (7/2, 1/2, 0) \geq 0 y = ( 7/2 , 1/2 , 0 ) ≥ 0 で 双対実行可能。目的関数値は 主問題が 5 ⋅ 7 2 + 4 ⋅ 3 2 = 47 2 5 \cdot \frac{7}{2} + 4 \cdot \frac{3}{2} = \frac{47}{2} 5 ⋅ 2 7 + 4 ⋅ 2 3 = 2 47 、双対問題が 5 ⋅ 7 2 + 12 ⋅ 1 2 = 47 2 5 \cdot \frac{7}{2} + 12 \cdot \frac{1}{2} = \frac{47}{2} 5 ⋅ 2 7 + 12 ⋅ 2 1 = 2 47 で 一致するので、弱双対定理より 両方とも 最適である。基底変数 x 1 , x 2 x_1, x_2 x 1 , x 2 と 第 3 制約の スラック( 3 / 2 3/2 3/2 )は すべて 正で 非退化なので、シャドウプライスは 第 1 制約が 7 / 2 7/2 7/2 、第 2 制約が 1 / 2 1/2 1/2 、第 3 制約が 0 0 0 である(計算機で 確かめた)。
問題 3.4 ★ ★ 標準形の 実行可能領域 P = { x ∣ A x = b , x ≥ 0 } P = \lbrace x \mid Ax = b,\ x \geq 0 \rbrace P = { x ∣ A x = b , x ≥ 0 } が 空でなく 有界ならば、 P P P の 任意の 点は P P P の 頂点の 凸結合である ことを 示せ。これを 使って、 P P P 上で c ⊤ x c^{\top}x c ⊤ x を 最小に する 頂点が ある ことを(定理 3.11 とは 別の 方法で)示せ。
解答
x ∈ P x \in P x ∈ P に ついて ∣ supp x ∣ \lvert \operatorname{supp} x \rvert ∣ supp x ∣ に 関する 帰納法で 示す。台の 列が 一次独立なら x x x は 頂点である(定理 3.8)。そうでなければ 補題 3.10 の d d d (A d = 0 Ad = 0 A d = 0 , d ≠ 0 d \neq 0 d = 0 , supp d ⊂ supp x \operatorname{supp} d \subset \operatorname{supp} x supp d ⊂ supp x )を とる。 d d d が 負の 成分を もたなければ x + t d ∈ P x + td \in P x + t d ∈ P (t ≥ 0 t \geq 0 t ≥ 0 )と なり P P P の 有界性に 反するので、 d d d は 負の 成分を もち、同様に − d -d − d も 負の 成分を もつ。補題 3.10 を d d d と − d -d − d に 使い、 t 1 = min { x j / ( − d j ) ∣ d j < 0 } t_1 = \min\lbrace x_j/(-d_j) \mid d_j < 0 \rbrace t 1 = min { x j / ( − d j ) ∣ d j < 0 } , t 2 = min { x j / d j ∣ d j > 0 } t_2 = \min\lbrace x_j/d_j \mid d_j > 0 \rbrace t 2 = min { x j / d j ∣ d j > 0 } と すると、 y = x + t 1 d y = x + t_1d y = x + t 1 d , z = x − t 2 d z = x - t_2d z = x − t 2 d は P P P の 点で、台は x x x より 真に 小さい。
t 2 t 1 + t 2 y + t 1 t 1 + t 2 z = x + t 1 t 2 − t 1 t 2 t 1 + t 2 d = x \frac{t_2}{t_1 + t_2}y + \frac{t_1}{t_1 + t_2}z = x + \frac{t_1t_2 - t_1t_2}{t_1 + t_2}d = x t 1 + t 2 t 2 y + t 1 + t 2 t 1 z = x + t 1 + t 2 t 1 t 2 − t 1 t 2 d = x
なので x x x は y , z y, z y , z の 凸結合であり、帰納法の 仮定より y , z y, z y , z は 頂点の 凸結合だから、 x x x も そうである。頂点を v 1 , … , v k v_1, \dots, v_k v 1 , … , v k 、x = ∑ i λ i v i x = \sum_i \lambda_iv_i x = ∑ i λ i v i (λ i ≥ 0 \lambda_i \geq 0 λ i ≥ 0 , ∑ i λ i = 1 \sum_i \lambda_i = 1 ∑ i λ i = 1 )と すると c ⊤ x = ∑ i λ i c ⊤ v i ≥ min i c ⊤ v i c^{\top}x = \sum_i \lambda_ic^{\top}v_i \geq \min_i c^{\top}v_i c ⊤ x = ∑ i λ i c ⊤ v i ≥ min i c ⊤ v i なので、c ⊤ v i c^{\top}v_i c ⊤ v i が 最小の 頂点が 最適解である。これは、 第2章 2.1 節で 紹介した「有界な 多面体は 頂点の 凸包に 等しい」ことの、標準形の 場合の 証明にも なっている。
問題 3.5 ★ ★ (1) 双対問題 (D) を 命題 3.4 で 標準形に 直し、その 双対問題を 作ると (P) と 同値な 問題に なる こと(双対の 双対は 主問題である こと)を 示せ。(2) (P′) の 双対問題が (D′) である ことを、標準形に 直して 確かめよ。
解答
(1) (D) は y = y + − y − y = y^{+} - y^{-} y = y + − y − と スラック s s s に より、minimize − b ⊤ y + + b ⊤ y − -b^{\top}y^{+} + b^{\top}y^{-} − b ⊤ y + + b ⊤ y − subject to A ⊤ y + − A ⊤ y − + s = c A^{\top}y^{+} - A^{\top}y^{-} + s = c A ⊤ y + − A ⊤ y − + s = c , ( y + , y − , s ) ≥ 0 (y^{+}, y^{-}, s) \geq 0 ( y + , y − , s ) ≥ 0 と なる(最適値は (D) の 最適値の − 1 -1 − 1 倍)。係数行列は [ A ⊤ , − A ⊤ , I ] [A^{\top}, -A^{\top}, I] [ A ⊤ , − A ⊤ , I ] なので、定義 3.24 に よる 双対は maximize c ⊤ w c^{\top}w c ⊤ w subject to A w ≤ − b Aw \leq -b A w ≤ − b , − A w ≤ b -Aw \leq b − A w ≤ b , w ≤ 0 w \leq 0 w ≤ 0 、すな わち A w = − b Aw = -b A w = − b , w ≤ 0 w \leq 0 w ≤ 0 である。x = − w x = -w x = − w と おくと、これは A x = b Ax = b A x = b , x ≥ 0 x \geq 0 x ≥ 0 のもとで − c ⊤ x -c^{\top}x − c ⊤ x を 最大化する 問題、つまり (P) と 同値である(最適値は (P) の 最適値の − 1 -1 − 1 倍で、符号の 付け替えが 打ち消し合う)。
(2) (P′) は スラック s s s を 加え、minimize − c ⊤ x -c^{\top}x − c ⊤ x subject to A x + s = b Ax + s = b A x + s = b , ( x , s ) ≥ 0 (x, s) \geq 0 ( x , s ) ≥ 0 と なる。係数行列は [ A , I ] [A, I] [ A , I ] なので、双対は maximize b ⊤ z b^{\top}z b ⊤ z subject to A ⊤ z ≤ − c A^{\top}z \leq -c A ⊤ z ≤ − c , z ≤ 0 z \leq 0 z ≤ 0 。y = − z y = -z y = − z と おくと minimize b ⊤ y b^{\top}y b ⊤ y subject to A ⊤ y ≥ c A^{\top}y \geq c A ⊤ y ≥ c , y ≥ 0 y \geq 0 y ≥ 0 で、これが (D′) である。最適値に ついては max c ⊤ x = − min ( − c ⊤ x ) = − max b ⊤ z = min b ⊤ y \max c^{\top}x = -\min(-c^{\top}x) = -\max b^{\top}z = \min b^{\top}y max c ⊤ x = − min ( − c ⊤ x ) = − max b ⊤ z = min b ⊤ y と なる。
問題 3.6 ★ ★ 例 3.1 で、作業時間の シャドウプライスは 20 千円である。担当者は「作業時間を 50 時間増やせば、利益は 20 × 50 = 1000 20 \times 50 = 1000 20 × 50 = 1000 千円増える」と 報告した。この 結論は 正しいか。シャドウプライス 20 が 正しい 作業時間の 範囲を 求め、実際の 利益の 増加を 計算せよ。
解答
正しくない。最適基底 { x 1 , x 2 , s 3 } \lbrace x_1, x_2, s_3 \rbrace { x 1 , x 2 , s 3 } の 基底解は x 1 = b 1 − b 2 x_1 = b_1 - b_2 x 1 = b 1 − b 2 , x 2 = 2 b 2 − b 1 x_2 = 2b_2 - b_1 x 2 = 2 b 2 − b 1 , s 3 = b 3 − b 1 + b 2 s_3 = b_3 - b_1 + b_2 s 3 = b 3 − b 1 + b 2 なので、b 1 = 100 b_1 = 100 b 1 = 100 , b 3 = 40 b_3 = 40 b 3 = 40 の まま 作業時間 b 2 b_2 b 2 を 動かすと、非負である 条件は 100 − b 2 ≥ 0 100 - b_2 \geq 0 100 − b 2 ≥ 0 , 2 b 2 − 100 ≥ 0 2b_2 - 100 \geq 0 2 b 2 − 100 ≥ 0 , b 2 − 60 ≥ 0 b_2 - 60 \geq 0 b 2 − 60 ≥ 0 、すな わち 60 ≤ b 2 ≤ 100 60 \leq b_2 \leq 100 60 ≤ b 2 ≤ 100 である。この 範囲では 利益は 2600 + 20 ( b 2 − 80 ) 2600 + 20(b_2 - 80) 2600 + 20 ( b 2 − 80 ) で、b 2 = 100 b_2 = 100 b 2 = 100 で ( x 1 , x 2 ) = ( 0 , 100 ) (x_1, x_2) = (0, 100) ( x 1 , x 2 ) = ( 0 , 100 ) 、利益 3000 3000 3000 に なる。 b 2 > 100 b_2 > 100 b 2 > 100 では 作業時間は 余り、機械の 制約 2 x 1 + x 2 ≤ 100 2x_1 + x_2 \leq 100 2 x 1 + x 2 ≤ 100 と 原料の 制約だけが 効く。その ときの 頂点 ( 0 , 100 ) (0, 100) ( 0 , 100 ) , ( 40 , 20 ) (40, 20) ( 40 , 20 ) での 利益は 3000 3000 3000 , 2200 2200 2200 なので、最大利益は 3000 3000 3000 の ままである。したがって 50 時間増やして 130 時間に した ときの 増加は 3000 − 2600 = 400 3000 - 2600 = 400 3000 − 2600 = 400 千円で、1000 千円ではない(後半の 30 時間は 機械が ボトルネックに なって 価値が ない)。定理 3.30 の 1(最大化では 不等号が 逆)から、増加は 常に 20 × 50 20 \times 50 20 × 50 以下 であることも 言える(計算機で 確かめた)。
問題 3.7 ★ ★ 例 3.32 で、店舗 3 の 需要が 25 から 35 に 増えた。双対変数を 使って 費用の 増加を 予測し、その 予測が 正しい 需要の 範囲を 求めよ。
解答
v 3 = 9 v_3 = 9 v 3 = 9 なので、予測は 9 × 10 = 90 9 \times 10 = 90 9 × 10 = 90 の 増加、費用 515 515 515 である。最適基底 { x A 1 , x A 3 , x B 2 , x B 3 , s A } \lbrace x_{A1}, x_{A3}, x_{B2}, x_{B3}, s_A \rbrace { x A 1 , x A 3 , x B 2 , x B 3 , s A } (s A s_A s A は A の 余り)のもとで、 x A 2 = x B 1 = 0 x_{A2} = x_{B1} = 0 x A 2 = x B 1 = 0 と B の 余り 0 0 0 を 保ったまま 店舗 3 の 需要を d 3 d_3 d 3 に すると、 x A 1 = 30 x_{A1} = 30 x A 1 = 30 , x B 2 = 40 x_{B2} = 40 x B 2 = 40 , x B 3 = 60 − 40 = 20 x_{B3} = 60 - 40 = 20 x B 3 = 60 − 40 = 20 , x A 3 = d 3 − 20 x_{A3} = d_3 - 20 x A 3 = d 3 − 20 , s A = 50 − 30 − x A 3 = 40 − d 3 s_A = 50 - 30 - x_{A3} = 40 - d_3 s A = 50 − 30 − x A 3 = 40 − d 3 である。これが 非負なのは 20 ≤ d 3 ≤ 40 20 \leq d_3 \leq 40 20 ≤ d 3 ≤ 40 の ときで、この 範囲では 定理 3.30 より 費用は 425 + 9 ( d 3 − 25 ) 425 + 9(d_3 - 25) 425 + 9 ( d 3 − 25 ) 。d 3 = 35 d_3 = 35 d 3 = 35 では x A 3 = 15 x_{A3} = 15 x A 3 = 15 , s A = 5 s_A = 5 s A = 5 で 費用 515 515 515 と なり、予測どおりである(計算機で 確かめた)。 d 3 > 40 d_3 > 40 d 3 > 40 では 総需要が 総在庫 110 を 超えて 実行不能に なる。
問題 3.8 ★ ★ ある 単体法の 実装は、比の 判定で u i ≠ 0 u_i \neq 0 u i = 0 と なる すべての 行に ついて x B ( i ) / ∣ u i ∣ x_{B(i)}/\lvert u_i \rvert x B ( i ) / ∣ u i ∣ の 最小値を とっている。例 3.16 の 3 番目の 辞書( z = 2200 − 30 s 1 + 20 s 3 z = 2200 - 30s_1 + 20s_3 z = 2200 − 30 s 1 + 20 s 3 )で この 実装が s 3 s_3 s 3 を 入れると 何が 起こるか。この 実装の どこが 危ないかを 説明せよ。
解答
辞書 x 1 = 40 − s 3 x_1 = 40 - s_3 x 1 = 40 − s 3 , x 2 = 20 − s 1 + 2 s 3 x_2 = 20 - s_1 + 2s_3 x 2 = 20 − s 1 + 2 s 3 , s 2 = 20 + s 1 − s 3 s_2 = 20 + s_1 - s_3 s 2 = 20 + s 1 − s 3 で s 3 s_3 s 3 を 入れると、 u u u は s 3 s_3 s 3 の 係数の 符号を 変えた ものなので、 x 1 x_1 x 1 の 行で u = 1 u = 1 u = 1 、x 2 x_2 x 2 の 行で u = − 2 u = -2 u = − 2 、s 2 s_2 s 2 の 行で u = 1 u = 1 u = 1 である。誤った 実装は 40 / 1 40/1 40/1 , 20 / 2 20/2 20/2 , 20 / 1 20/1 20/1 を 比べて x 2 x_2 x 2 を 出す。 x 2 = 0 x_2 = 0 x 2 = 0 , s 1 = 0 s_1 = 0 s 1 = 0 と すると s 3 = − 10 s_3 = -10 s 3 = − 10 と なり、 x 1 = 50 x_1 = 50 x 1 = 50 , s 2 = 30 s_2 = 30 s 2 = 30 , z = 2000 z = 2000 z = 2000 。原料の 制約 x 1 ≤ 40 x_1 \leq 40 x 1 ≤ 40 が 破れた( s 3 < 0 s_3 < 0 s 3 < 0 )実行不能な 点に 移り、目的関数も 悪くなっている。 u i < 0 u_i < 0 u i < 0 の 行は、入る 変数を 増やすとか えって 基底変数が 増えるので 制限に ならない。比の 判定は u i > 0 u_i > 0 u i > 0 の 行だけで 行わなければならない。浮動小数点で 計算する ときは、 u i > 0 u_i > 0 u i > 0 の 判定にも 許容誤差が 必要で(ごく 小さな 正の u i u_i u i で 割ると 誤差が 拡大する)、実用的な 実装は この 点に 注意を 払っている。