第4章

105
第 4 章 整数計画法
— 0 か 1 か?
1 章で学んだ LP は,特定の条件が満たされない限り解は実数でした.現実の問
題に適用する際に,人数や製品の出荷数などは小数にはならないので,適当に数
値を丸めてやる必要があります.通常は,そのような操作で対処できるでしょう.
しかし,問題によっては数値を丸めることで大きく解の性質が異なる場合があり
ます.特に,数値が 0 か 1 かによって解釈が正反対になってしまうような場合,
単に解を四捨五入するだけではすまされません.
解の取りうる範囲を整数の範囲に制限した問題は,整数計画問題と呼ばれます.
スケジューリングや割り当てなど,多くの応用事例があります.
4.1
4.1.1
整数計画法
再びクッキーの製造
変数が整数値のみをとる問題,すなわち問題の制約条件に整数条件が入っている問題を整数計
画問題 (intger programming problem) といいます.1 章の線形計画問題では,すべての変数は実
数値をとりうるものとしました.そのため,最適解では,クッキーの枚数や家具の製造数なども小
数で表される場合がありました.現実には,椅子を 0.5 単位作るということはありえないので,値
は整数でなくてはならないでしょう.しかし,常に整数の条件をつけて問題を解く必要はありませ
ん.例えば,x1 = 447.7 という計算結果を四捨五入してチョコチップクッキーを 448 枚作るとして
も,その誤差は無視しうるものです.その一方で整数の条件が本質的な役割を果たす場合がありま
す.たとえば,何かがある/ない,何かを行う/行わない,という 2 者択一の決定を含む問題です.
まずは,例を見ることにしましょう.
1.1.2 節でクッキーの製造の問題を考えました.これをもう一度取り上げてみることにします.
クッキー製造に考慮した条件は,次の通りです.
1. 材料費の合計を小さくしたい.
2. 作る枚数は全部で 1000 枚とする.
3. 準備時間は 40 時間を越えることはできない.
4. 調理時間は 20 時間を越えることはできない.
106
第4章
整数計画法
図表 4.1 クッキーの種類と費用,1セットあたりの作業時間
チョコ
チップ
クッキー
1 枚あたり費用
1 セット枚数
25.1
24
準備時間(分) 10
調理時間(分) 10
ブ ラ ウ
ニー
ショート
ブレッド
ジ
ン
ジャー
クッキー
オ ー ト
ミ ー ル
クッキー
アーモン
ドビスコ
ッティ
キャラメ
ルバー
25.4
12
5
25
20.4
14
15
35
17.9
18
120
20
21.2
36
30
18
23.1
42
15
30
26.2
24
20
12
新たに図表 4.1 の 7 種類のクッキーを対象にして,この問題を定式化すると,
min.
s.t.
z = 602.5x1 + 305.0x2 + 285.0x3 + 322.5x4 + 763.2x5 + 970.2x6 + 628.8x7
24x1 + 12x2 + 14x3 + 18x4 + 36x5 + 42x6 + 24x7 = 1000
10x1 + 5x2 + 15x3 + 120x4 + 30x5 + 15x6 + 20x7 ≤ 2400
15x1 + 25x2 + 35x3 + 20x4 + 18x5 + 30x6 + 12x7 ≤ 1200
xj ≥ 0, j = 1, . . . , 7
(4.1)
となりました.変数の対応関係は,以下の通りです1 .
x1 :チョコチップクッキーのセット数
x2 :ブラウニーのセット数
x3 :ショートブレッドのセット数
x4 :ジンジャークッキーのセット数
x5 :オートミールクッキーのセット数
x6 :アーモンドビスコッティのセット数
x7 :キャラメルバーのセット数
最適解は,
x1 = x2 = 0,
x3 = 19.4,
x4 = 14.3,
x5 = 13.1,
x6 = x7 = 0,
z∗ = 20125.9
です.最適セット数から計算した作成枚数を図表 4.2(上限なしの行) に記しました.
図表 4.2 最適な作成枚数
上限なし
最大 250 枚
整数条件あり
チョコ
チップ
クッキー
ブ ラ ウ
ニー
ショート
ブレッド
ジ
ン
ジャー
クッキー
オ ー ト
ミ ー ル
クッキー
アーモン
ドビスコ
ッティ
キャラメ
ルバー
0
3.4
100
0
0
0
271.3
246.6
250
257.5
250
250
471.2
250
250
0
250
150
0
0
0
せっかく 7 種類も作ることができるのに,最適解では 3 種類しか作りません.また枚数をみる
と,多いものは他のクッキーの倍ちかく作ることになり,バランスがよくありません.そこで,ど
のクッキーも最大で 250 枚とするように,xj ≤ 250, j = 1, . . . , 7 と上限制約をおいて解いてみま
した.その結果,
x1 = 0.1,
x2 = 0,
x3 = 17.6,
1 1.1.2 節では,枚数を変数としました.
x4 = 13.9,
x5 = 6.9,
x6 = 6.0,
x7 = 0,
z∗ = 20659.53
4.1. 整数計画法
107
となります.作成枚数は,図表 4.2(最大 250 枚の行) にあります.上限を設けたことにより,5 種類
のクッキーを作ることになりました.ショートブレッド,ジンジャークッキー,オートミールクッ
キー,アーモンドビスコッティの枚数のバランスはよいのですが,チョコチップクッキーの枚数だ
けが極端に少なくなっています.このような少ない枚数ならばまったく作らないか,あるいはもし
作るならもう少し区切りのよい枚数を作りたいものです.これは,次のような条件として与えられ
ます.
必ずしもすべてのクッキーを作る必要はない.ただし,作るならば,最低 100 枚以上かつ 250
枚以下にする.
つまり,チョコチップクッキーを作らないという選択肢もある一方で,つくるなら最低 100 枚以上
250 枚以下にしなければならないということです.それぞれのクッキーを何枚作るのかとは別に,
そもそもそのクッキーを作るかどうか,ということも決定しなくてはならないことに注意してくだ
さい.枚数を表すには,もとの問題と同じく xj という変数を利用するとして,作る/作らないとい
う判断はどのように表せばよいでしょうか?
ひとつのアプローチは,作るクッキーの組合わせを総当たりで試すというものです.7 種類の
クッキーがあるので,総枚数の制限を考慮しなければ,128 通りの組合わせがあります.作るクッ
キーの組合わせを求めてから,それぞれ何枚作るかを LP を解いて求めるとなると,128 個の LP
を解かねばなりません.かりに 10 種類の候補を考えて,そのすべての組合せを検討するとなると
1024 通りとなってしまいます.
適切な定式化と,それに応じた解法を利用すれば,作る/作らないの判断と何枚作るかの判断
を同時に行うことが可能です.定式化には,枚数を表す変数 xj に加えて,作る/作らないの判断を
表す変数 zj (j = 1, . . . , 7) を導入します.ただし,この変数は通常の変数と違って,値として 0 と
1 しか取らないものとします.そして,zj = 0 ならばクッキー j はつくらない,zj = 1 ならばクッ
キー j をつくる,というように対応付けをしましょう.
次の作業は,作る/作らないの判断 (zj = 1 or 0) と枚数の制約を関連づけることです.チョコ
チップクッキーで考えます.24x1 がチョコチップクッキーを作る枚数です.我々が課したい対応関
係は,
z1 = 0 ↔ 24x1 = 0
z1 = 1 ↔ 100 ≤ 24x1 ≤ 250
です.これを 1 本の式にまとめるには,
100z1 ≤ 24x1 ≤ 250z1
とします.作る/作らないの判断と枚数の制約が関連づけられていることを確かめてください.
以上をまとめると,問題は以下のように定式化できます.
min.
s.t.
z = 602.5x1 + 305.0x2 + 285.0x3 + 322.5x4 + 763.2x5 + 970.2x6 + 628.8x7
24x1 + 12x2 + 14x3 + 18x4 + 36x5 + 42x6 + 24x7 = 1000
10x1 + 5x2 + 15x3 + 120x4 + 30x5 + 15x6 + 20x7 ≤ 2400
15x1 + 25x2 + 35x3 + 20x4 + 18x5 + 30x6 + 12x7 ≤ 1200
100z1 ≤ 24x1 ≤ 250z1 , 100z2 ≤ 12x2 ≤ 250z2
100z3 ≤ 14x3 ≤ 250z3 , 100z4 ≤ 18x4 ≤ 250z4
100z5 ≤ 36x5 ≤ 250z5 , 100z6 ≤ 42x6 ≤ 250z6
100z7 ≤ 24x7 ≤ 250z7
xj ≥ 0, j = 1, . . . , 7
zj ∈ {0, 1}, j = 1, . . . , 7
(4.2)
108
第4章
整数計画法
計算した結果,最適解は次のようになりました.作成枚数は図表 4.2(整数条件ありの行) にあり
ます.
z1 = 1
z2 = 0
z3 = 1
z4 = 1
z5 = 1
z6 = 1
z7 = 0
x1 = 4.2
x2 = 0
x3 = 17.9
x4 = 13.9
x5 = 6.9
x6 = 3.6
x7 = 0
演習問題 4.1
上の例題に,
「作成するクッキーの種類は,4 種類でなくてはならない」という条件が加わった場
合,どのように定式化すればよいか.ただし,上限を 250 枚から 350 枚にかえるものとする.
4.1.2
整数計画問題の性質
線形計画問題
maximize
subject to
∑n
cj xj
∑j=1
n
j=1 aij xj = bi , i = 1, . . . , m
xj ≥ 0,
j = 1, . . . , n
(1.5)
∑n
cj xj
∑j=1
n
j=1 aij xj = bi , i = 1, . . . , m
xj ≥ 0,
j = 1, . . . , n
xj ∈ Z,
j = 1, . . . , n
(4.3)
に,整数条件を課した問題
maximize
subject to
を (混合) 整数計画問題 ((mixed) integer programming problem) といいます2 .ここで,Z は整数
の集合を表しています.
線形計画問題 (1.5) と整数計画問題 (4.3) を比較してみましょう.問題 (1.5) の最適解 x† と問題
(4.3) の最適解 x∗ は通常は等しくなりません.目的関数値で比較すると,最大化問題の場合は常に,
c> x† ≥ c> x∗
が成り立ちます.最小化問題であれば,不等号の向きは逆です.線形計画問題 (1.5) に整数条件が
付け加わったため,(4.3) の制約領域が狭くなってしまったためと考えてください.
一般に x† は実数値を取ります.これを四捨五入,切り上げ,切り下げなどによって整数値とし
ても,かならずしも x∗ が得られるわけではありません.次の例で確かめてみましょう.
線形計画問題
maximize
subject to
x1 + x2 + x3
0.27x1 + 0.4x2 + 3x3
x1 + 0.13x2
0.11x1 + x2 − x3
xj ≥ 0,
≤ 3.8
≤3
≤1
j = 1, . . . , 3
の最適解は,
x†1 = 2.80,
x†2 = 1.51 x†3 = 0.81
2 厳密には,(混合) 整数線形計画問題というべきですが,普通はこれで通用します.
(4.4)
4.1. 整数計画法
109
です (小数点第 3 位で四捨五入).一方,(4.4) に整数条件を加えた問題
maximize
subject to
x1 + x2 + x3
0.27x1 + 0.4x2 + 3x3
x1 + 0.13x2
0.11x1 + x2 − x3
xj ≥ 0,
xj ∈ Z,
≤ 3.8
≤3
≤1
j = 1, . . . , 3
j = 1, . . . , 3
(4.5)
の最適解は,
x∗1 = 3,
x∗2 = 0 x∗3 = 0
です.単純な丸めの操作では最適解は得られないことがわかります.
もし,x† がたまたま整数条件を満たしているならば,x† = x∗ をみたします3 .
4.1.3
計算時間
整数条件をつけだだけで問題を解く難しさは飛躍的に増大します.これを実感してもらうため
に,数値実験を行ってみました.通常の LP 問題とそれに整数条件を加えた IP 問題を同じ環境で
解き,計算時間を比較しました.
実験の条件は以下の通りです.
制約式の本数は 40 本に固定した.
変数の数を,20 50 100 200 400 600 800 と増やして問題を作った.
目的関数,係数行列は区間 [0, 1] 上の一様乱数を用いた.
問題が実行不可能にならないように,右辺は区間 [1, 2] 上の一様乱数を用いた.
同じサイズの問題を 10 回解き4 , 平均値を求めた.
計算機環境は,OS: Linux 2.2.20, CPU: Intel Pentium 4 2.53GHz
ソルバは lp solve (Version 4.0) を用いた.
結果を表とグラフにしました (図表 4.3,4.4 参照).IP は,問題のサイズが多くなるにつれて急
激に計算時間が増加していることがわかります.一方,LP の計算時間の増加は非常に緩やかです.
両者の計算時間は文字通り桁違いに異なることをよく認識してください.
4.1.4
参考:分枝限定法
分枝限定法 (branch and bounding method) と呼ばれる手法を用いて整数計画問題を解く方法
を簡単に紹介しましょう.
3 ただし,x† ,x∗ ともに一意な最適解であるとします.
4 変数の数が 800 のとき,IP は 1 回しか解いていません.
110
第4章
図表 4.3 LP と IP の計算時間 (秒)
変数の数
20
線形計画問題
1 回目
0.020
2 回目
0.112
3 回目
0.042
4 回目
0.022
5 回目
0.010
6 回目
0.050
7 回目
0.020
8 回目
0.102
9 回目
0.041
10 回目
0.020
平均
0.044
50
100
200
400
600
800
0.033
0.064
0.022
0.011
0.074
0.024
0.064
0.020
0.012
0.053
0.038
0.063
0.078
0.091
0.045
0.053
0.079
0.089
0.040
0.064
0.078
0.068
0.133
0.043
0.113
0.054
0.120
0.051
0.113
0.024
0.115
0.024
0.079
0.048
0.048
0.065
0.049
0.050
0.048
0.047
0.047
0.047
0.081
0.053
0.170
0.113
0.157
0.245
0.161
0.261
0.166
0.088
0.175
0.081
0.162
0.322
0.223
0.172
0.194
0.160
0.165
0.303
0.260
0.177
0.163
0.214
整数計画問題
1 回目
0.02
2 回目
0.01
3 回目
0.01
4 回目
0.02
5 回目
0.01
6 回目
0.01
7 回目
0.02
8 回目
0.01
9 回目
0.01
10 回目
0.01
平均
0.013
0.15
0.09
0.07
0.16
0.12
0.16
0.05
0.11
0.17
0.11
0.119
0.31
0.60
0.91
0.60
0.18
0.43
0.87
0.70
0.46
0.65
0.571
2.16
3.76
2.55
6.49
2.43
3.58
3.33
3.89
3.48
3.12
3.479
29.55
35.36
20.84
23.09
27.45
13.23
18.73
25.06
34.96
21.65
24.992
380.60
696.63
257.85
89.96
244.88
568.30
544.46
394.25
781.69
246.77
420.539
1270.03
|
|
|
|
|
|
|
|
|
1270.03
整数計画法
4.1. 整数計画法
111
図表 4.4 LP と IP の計算時間 (平均値) の比較
1400
LP
IP
1200
time(sec)
1000
800
600
400
200
0
0
100
200
P0
max
s.t.
300
400
n
c> x
Ax = b
l0j ≤ xj ≤ u0j ,
x ∈ Zn
500
600
700
800
j = 1, . . . , n
(4.6)
問題 P0 を解くことを考えます.ただし,Zn は n 次元の整数ベクトルの全体を表し,l の要素
に −∞,u の要素に ∞ が含まれていてもよいものとします.
緩和問題
0 とおき
P0 の整数条件を取り除いた問題を考えましょう.これを P0 の緩和問題と呼びます.P
ました.問題 P0 は無限解を持たないと仮定します.
max
0 s.t.
P
c> x
Ax = b
l0j ≤ xj ≤ u0j ,
j = 1, . . . , n
(4.7)
0 はもちろん線形計画問題なので,解くのは容易です.緩和問題 P
0 を解いた結果,最適解が整数
P
0 が実行不可能なら
条件を満たしているならば,問題 P0 が解けたことになります.また,問題 P
ば,当然問題 P0 も実行不可能です.
0 は最適解 (x01 , . . . , x0n ) を生成し,しかもその要素のいずれかは整数
上記以外の場合,問題 P
ではないはずです.ここでは,x0s が整数でないものとしましょう.
子問題の生成
bξc で ξ より小さい整数のなかで最大のものを表します (小数部分の切り捨てです).
112
第4章
整数計画法
次のようにして,P0 の子問題 P1 と P1 を生成します.制約領域を,x0s の前後で 2 分するイ
メージです.
P1
P2
max
s.t.
c> x
Ax = b
l0j ≤ xj ≤ u0j , j = 1, . . . , n; j 6= s
ls ≤ xs ≤ bx0s c
x ∈ Zn
max
s.t.
c> x
Ax = b
l0j ≤ xj ≤ u0j , j = 1, . . . , n; j 6= s
bx0s c + 1 ≤ xs ≤ u0s
x ∈ Zn
問題 P1 と P2 の最適解のいずれかが,問題 P0 の最適解でなくてはなりません.そこで,問題
P1 と P2 の最適解を求めることします.そこで,P0 から P1 と P2 を生成したのと同様の操作 (緩
和問題を解き,適当な非整数解の前後で領域を分割) で子問題を生成します.これを分枝操作と呼
びます.分枝操作を繰り返していけば,子問題の制約領域はどんどん縮小していき,最終的に整数
値だけの解を得ることができるようになるはずです.しかし,この操作だけで問題を解こうとする
ならば,結局すべての可能な整数値の組合せを試すことになるので,とうてい実用的とはいえませ
ん.不必要な分枝操作をさける工夫が必要になります.
限定操作
j を解いたとき,あり得るケースは 3 種類です.
子問題 Pj の緩和問題 P
j が実行不可能なとき.
case 1) P
この場合,その問題から子問題は生成しない.
j が最適解を持ち,しかも整数条件を満たすとき.
case 2) P
もし,この解が,現在得られている暫定解よりもよい最適値を与えるなら,これを新たな暫
定解とする.もし,そうでないならば,暫定解は変更しない.いずれの場合にせよ,新たな
子問題は生成しない.
j が最適解を持つが,整数条件を満たさないとき.
case 3) P
j から子
j とし,暫定解を x^ とする.c> xj ≤ c> x^ ならば,これ以上,P
この問題の最適解を x
問題を生成してもよい解が得られることはないので,子問題は生成しない.
c> x
j > c> x^ ならば,よい解が得られる可能性があるので,さらに,子問題を生成して行く.
分枝限定法では,最悪の場合でも,整数解の個数が有限であれば有限回で終了します (実行可
能領域が有界であればこの条件は満たされます).
分枝限定法は,限定操作を工夫することによって探索する領域をいかに狭めることができるか
に,その効率性がかかっています.これらを適切に処理しないと最適解への収束が遅くなってしま
うでしょう.
4.1. 整数計画法
113
図表 4.5 分枝限定法の概念図
P11: …´„
†˜˙‰
P1
P12
P0
P121: …´„
†˜˙‰
P122: »ˆ˜Œ†
P2: ˚‹» ⁄»⁄”
実務的には必ずしも厳密な最適解でなくてもある誤差に収まる範囲で最適性が保証されれば充
分です.暫定解を x
^ とし,その時点で得られている緩和問題最適解のうち最も良い目的関数値を与
とすると,|c> x^ − c> x| ≤ となった時点で終了するという方法が考えられます.こ
えるものを x
の場合,誤差 の範囲で最適性が保証できます.
分枝限定法アルゴリズムの適用例
次の 2 変数の整数計画問題を考えます.
max 5x1 + 2x2
s. t. 6x1 + 2x2 ≤ 15
4x1 + 4x2 ≤ 15
− x1 + 2x2 ≤ 5
x1 , x2 ≥ 0
x ,x ∈ Z
1
(4.8)
2
(4.8) の緩和問題は
max
s. t.
P0 5x1 + 2x2
6x1 + 2x2 ≤ 15
4x1 + 4x2 ≤ 15
(4.9)
− x1 + 2x2 ≤ 5
x1 , x2 ≥ 0
です.通常の線形計画法のアルゴリズムを用いて解くと,P0 の最適解 (x01 , x02 ) は
(
x01
) (
)
x02 = 1.875 1.875
となり,最適値 z0 = 13.125 です.これは整数条件を満たしていないので,(4.8) の最適解ではあ
りません.
114
第4章
整数計画法
図表 4.6 問題 (4.8) とその緩和問題
3
x2
2
1
0
0
1
2
3
x1
次に,P0 を親問題とする子問題 P1 ,P2 を生成します.x01 = 1.875 に着目して,この値の前後
の整数で制約領域を分割します.x ≥ 2 と x1 ≤ 1 が付け加わる制約です.
max 5x1 + 2x2
max 5x1 + 2x2
s. t. 6x1 + 2x2 ≤ 15
s. t. 6x1 + 2x2 ≤ 15
4x1 + 4x2 ≤ 15
4x1 + 4x2 ≤ 15
P1 P2 (4.10)
− x1 + 2x2 ≤ 5
− x1 + 2x2 ≤ 5
x1 ≥ 2
x1 ≤ 1
x ,x ≥ 0
x ,x ≥ 0
1
2
P1 の最適解と最適値はそれぞれ
) (
(
P1 : x11 x12 = 2
1
)
1.5
2
z1 = 13
です.P2 は後で計算することにして,P1 から P11 と P12 を生成します.x12 = 1.5 に着目して,P1
4.1. 整数計画法
115
図表 4.7 P1 と P2 の制約領域
3
x2
2
1
P2
P1
0
0
1
2
3
x1
に x2 ≥ 2 と x2 ≤ 1 を加えます.
max 5x1 + 2x2
s. t. 6x1 + 2x2 ≤ 15
4x1 + 4x2 ≤ 15
P11 − x1 + 2x2 ≤ 5
x1 ≥ 2
x2 ≥ 2
x1 , x2 ≥ 0
P12
max
s. t.
5x1 + 2x2
6x1 + 2x2 ≤ 15
4x1 + 4x2 ≤ 15
− x1 + 2x2 ≤ 5
(4.11)
x1 ≥ 2
x2 ≤ 1
x1 , x2 ≥ 0
P11 は,実行不可能です.一方,P12 の最適解と最適値はそれぞれ
) (
)
( 12
= 2.17 1
z12 = 12.83
P12 :
x1 x12
2
となります.P11 は実行不可能なので,これ以上分枝操作は行いません.P12 から,P121 と P122
116
第4章
整数計画法
を生成します.
P121
max
s. t.
5x1 + 2x2
6x1 + 2x2 ≤ 15
4x1 + 4x2 ≤ 15
P122
− x1 + 2x2 ≤ 5
x1 ≥ 3
x2 ≤ 1
x1 , x2 ≥ 0
max
s. t.
5x1 + 2x2
6x1 + 2x2 ≤ 15
4x1 + 4x2 ≤ 15
− x1 + 2x2 ≤ 5
(4.12)
2 ≤ x1 ≤ 2
x2 ≤ 1
x1 , x2 ≥ 0
P121 は,実行不可能です.P122 の最適解と最適値はそれぞれ
) (
)
( 122
= 2 1
z122 = 12
P122 :
x122
x1
2
(
)
となり,はじめて整数条件を満たす解が得られました. 2 1 を暫定解として使って,限定操作
を行うことにします.
まだ,探索を行っていない領域をチェックしましょう.P2 を解いた結果は,次の通りです.
( 2
) (
)
P2 :
z2 = 10.5
x1 x22 = 1 2.75
z2 = 10 なので,現在の暫定解によって得られる値 12 を下回っています.したがって,これ以上,
(
)
P2 から子問題を生成しても,暫定解より良い解を得ることはできません.この段階で暫定解 2 1
がもとの問題 (4.8) の最適解であることがわかりました.
演習問題 4.2
上記の例で,P0 から子問題を生成する際に,x01 に着目した.x02 に着目した場合,どのような子
問題を生成すべきか.
4.2
整数計画法の適用例
整数計画問題として定式化される問題の例をいくつか見てみましょう.
4.2.1
出店計画
あるスーパーが新店舗を開設することを計画しています.各候補地における新店舗の設置費用
と見込まれる収益は,図表 4.8 のように与えられているものとします.このスーパーが出店計画に
図表 4.8 新規の出店費用と予想収益 (百万円)
候補地
候補地 1
候補地 2
候補地 3
候補地 4
出店費用
予想収益
70
90
50
120
100
110
60
150
計上している予算が 200(百万円) であるとき,どの候補地に出店するのが最も収益が高くなるで
4.2. 整数計画法の適用例
117
しょうか.ただし,各候補地は十分距離が離れているので,同時に出店しても相互に影響はないも
のとします.
候補地 j (j = 1, . . . , 4) に出店する/しないという判断を 0-1 変数 xj で表すことにしましょう.
もし,xj = 1 なら候補地 j に出店することを,xj = 0 なら出店しないことを意味するとします.こ
の場合,
max 100x1 + 110x2 + 60x3 + 150x4
(4.13)
s.t. 70x1 + 90x2 + 50x3 + 120x4 ≤ 200
xj ∈ {0, 1}, j = 1, . . . , 4
と定式化することで最適な出店計画が得られます.
問題 (4.13) の形をした問題をナップサック問題 (napsack problem) とよびます.ナップサック
問題も代表的な組み合わせ最適化問題のひとつです.もともとは,ナップサックにアイテムを詰め
ていく際に,総容量の制限以内で以下に役立つアイテムを選ぶか,というところからついた名前で
す.ナップサック問題は,その特殊な構造を利用した解法がいくつも開発されていて,比較的大型
の問題も解くことができます.
(4.13) の場合は各候補地への出店が独立に行えると仮定しておきました.では,ある地域の出
店がほかの地域への出店に影響を与えるような場合はどのような制約を課すべきでしょうか.引き
続きスーパーの出店を例に考えてみます.
このスーパーが追加的な調査を行ったところ,新たな候補地が 2ヶ所得られました.ところが,
候補地 5 は候補地 1 と商圏が重なり,候補地 6 は候補地 4 と商圏が重なるため,候補地 1 と候補
地 5,および,候補地 4 と候補地 6 は同時に出店しない方針を取ることにしました.さらに店舗だ
けでなく,状況によっては倉庫も必要になることがわかりました.具体的にいうと,候補地 1,2,
5 に出店をする場合は候補地 7 に,候補地 3,4,6 に出店をする場合は候補地 8 に,倉庫が作らね
ばなりません.(図表 4.9).
図表 4.9 追加された候補地と倉庫
候補地
候補地 5
候補地 6
倉庫 7
倉庫 8
出店費用
予想収益
100
40
20
15
120
75
|
|
今度の例では,候補地間に排他的な関係と依存的な関係が設定されています.排他的な関係と
は,両者を同時には満たせない関係です.候補地 1 と 5 には同時に出店できない,がそれにあたり
ます.依存関係は,一方の決定が他方の決定によって決まる,ことを指します.倉庫の建設は店舗
の出店の有無によって決まるという身で,前者は後者に依存してるのです.
以上のような排他的な条件と依存的なを考慮すると以下のような定式化になります.
max 100x1 + 110x2 + 60x3 + 150x4 + 120x5 + 75x6
s.t. 70x1 + 90x2 + 50x3 + 120x4
+100x5 + 40x6 + 20x7 + 15x8 ≤ 200
x1 + x5 ≤ 1, x4 + x6 ≤ 1
x1 − x7 ≤ 0 x2 − x7 ≤ 0
x5 − x7 ≤ 0 x3 − x8 ≤ 0
x4 − x8 ≤ 0 x6 − x8 ≤ 0
xj ∈ {0, 1}, j = 1, . . . , 8
(4.14)
118
第4章
整数計画法
問題 (4.13) の最適解は,
(x1 , x2 , x3 , x4 ) = (1, 0, 0, 1)
です.問題 (4.14) の最適解は,
(x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 ) = (1, 0, 1, 0, 0, 1, 1, 1)
です.
演習問題 4.3
容量が 3 単位のナップサックに,表 4.10 で与えられるようなアイテムを選んで,アイテムから
得られる効用の合計が最大になるように詰めることを考えます.ただし,どの種類のアイテムも
一つまでしか入れることはできません.
図表 4.10 アイテムの容積と効用
アイテム 1
2.5
3.01
容積
効用
アイテム 2
1.0
1.1
アイテム 3
アイテム 4
0.8
0.96
1.1
1.1
1. すべてのアイテムについて単位容積あたりの効用を計算し,単位容積あたりの効用が大き
い順に詰めていく場合に得られる解を求めなさい.
2. アイテムの可能な組合わせを全て列挙することにより最適解を求めなさい (列挙法).得ら
れた最適解を 1 の解と比較しなさい.
一般に,1 の方法5 では最適解を得られることは保証されません.しかし,初期解の生成法とし
てはよく使われます.
4.2.2
検査機器の購入
工場で新しい製品を製造することになりました.最終段階での製品の検査のための機器を購入
することを検討しています.この製品は出荷前に 8 種類の項目について検査を行わねばなりませ
ん.導入の対象としている検査機器はいずれも 1 台で複数の項目工程に対応してますが,1 台だけ
ですべての項目を処理することはできません.対応できる検査項目と機械の値段は表 4.11 の通り
です.○がついているのが,その機械が処理できる項目です.
図表 4.11 工程と機械の対応関係
機械 A
機械 B
機械 C
機械 D
機械 E
1
2
○
○
○
○
○
○
3
工程
4
5
○
○
○
○
○
○
○
○
6
7
○
○
○
○
○
8
○
○
○
価格
(百万円)
20
18
32
9
22
5 何らかの基準によって候補に順位をつけて並べ,その順番にしたがって容量を超えない範囲で詰める方法は欲張法
(greedy method) とよばれています.
4.2. 整数計画法の適用例
119
どの機械を導入すればもっとも安い費用ですべての検査を行うことができるでしょうか.ただ
し,機械の性能の差は無視できるものとします.
この問題でも,やはり導入する/しないの判断を変数 0{1 変数 xj (j ∈ A, B, C, D, E) で表すと
よいでしょう.あとは,すべての工程がカバーできるように制約を作るだけです.
min 20xA + 18xB + 32xC + 9xD + 22xE
s.t. xA + xC + xD + xE ≥ 1
xA + xB ≥ 1
xC + xE ≥ 1
xA + xC + xE ≥ 1
xC + xD + xE ≥ 1
xA + xC ≥ 1
xA + xD + xE ≥ 1
xB + xC + xD ≥ 1
xj ∈ {0, 1}, j ∈ {A, B, C, D, E}
最適解は,xA = xD = xE = 1,xB = xC = 0 です.
この問題は割り当て問題の一種です.割り当て問題では,すでに 2.6.2 節 (69 ページ) で掃除の
分担を例にとって論じました.2.6.2 節の場合,2 部グラフを利用して定式化を行い,最終的に LP
に帰着させることができます.しかし,今回の例は,LP としては定式化することはできません.
この形式の問題は,集合被覆問題 (set covering problem) と呼ばれています.
演習問題 4.4
12 の街区からなる大規模ニュータウンの建設計画があります.住民の共有施設として,地区セ
ンターをいくつか設置することになっています.デベロッパーは,できるだけ施設の利用度に差
が出ないような設置場所を選定することにしました.調査の結果,6 個所の候補地が得られてい
ます.各候補地に施設を設置した際に,どの地区の住民が利用可能になるかは,表 4.12 に示し
た通りです.設置場所によって,施設自体の大きさやアクセスの容易さに違いがあるので,利用
可のな地区の数は異なっていることに注意してください.
図表 4.12 候補地と利用可能な地区
候補地
A
B
C
D
E
F
利用可能な地区
第 1,2,3,4, 8 地区
第 3,4 地区
第 5,6,7 地区
第 8,10,11 地区
第 4,9,10 地区
第 6,11, 12 地区
設置費用
3.0 億円
0.9 億円
1.5 億円
2.1 億円
1.8 億円
1.4 億円
設置の条件は以下の通りです.
施設の総設置費用を最小にする
すべての街区の住民が少なくともひとつは共有施設を利用できるようにする
施設の数は,3 個もしくは 4 個とする
最適な施設配置を求める問題を定式化しなさい.
120
4.2.3
第4章
整数計画法
取引単位制約と固定費用
現実の商取引では,常に任意の量を売買できるとは限りません.たとえば,スーパーマーケッ
トで厳密に 1.00001kg の重さの砂糖を買うことは不可能でしょう.普通は,適当な取引単位が存在
するからです.砂糖であれば,おそらく,1kg 入り,500g 入り,200g 入りのパックしか売ってい
ないでしょう6 .ここでは取引単位を明示的に取り込んだモデルを考えることにします.
表 (4.13) にあるような取引条件を持つ商品を考えます.与えられた予算内で,効用を最大化す
るには,どのような買い方をすべきでしょうか.
図表 4.13 商品の取引条件
一個あたりの価格
取引単位
予算
商品 1 商品 2
20 円
50 円
100 個 80 個
10 万円
商品 1 の購入量を x1 ,商品 2 の購入量を x2 とし,そのときの効用が U(x1 , x2 ) であるとしま
す.効用を最大にする買い方を求める問題を定式化すると以下のようになります.
max
s.t.
U(x1 , x2 )
20x1 + 50x2 ≤ 100000
x1 = 100z1
x2 = 80z2
xj ≥ 0 j = 1, 2
zj ∈ Z j = 1, 2
さらに取引の条件として,固定費用が存在する場合を考えてみましょう.すなわち,もし取引
を行わないなら必要ないが,1 個でも買うと生じてしまうような費用です.今回の例では,商品 1,
2 のどちらについても固定費用を 500 円とします.この場合は,
max
s.t.
U(x1 , x2 )
20x1 + 50x2 + 500f1 + 500f2 ≤ 100000
x1 = 100z1
x2 = 80z2
zj ≤ Mfj , j = 1, 2
xj ≥ 0, j = 1, 2
zj ∈ Z, j = 1, 2
fj ∈ {0, 1}, j = 1, 2
と定式化できます.ただし,M は充分大きな数です (この場合であれば,M ≥ 50 であればよい).
制約領域には,z1 = 0,f1 = 1 の場合が含まれますが,効用関数が増加関数なら問題はありません.
4.2.4
参考:比例的でない取引費用
証券の取引には,取引費用がかかります.取引費用は,証券の取引量が一定単位数に達すると,
一単位当たりの費用が安くなるように設定されています.これを関数として表すと,図表 4.14 の
4.2. 整数計画法の適用例
121
図表 4.14 取引費用
transacton cost
d3
d2
d1
q
1
q
2
q
quantity: x
3
ような区分的線形関数となります7 .24 ページで紹介した,キャッシュフローマッチング問題に取
引費用を導入してみましょう.ただし,簡単化のために期間は 1 期間とします.
決定変数は,xj ,v で,それぞれ債券 j の購入単位数と資産の総価値を表しています.パラメー
タは,負債 L,償還額 (含むクーポン)cj ,価格 pj です.取引費用がないときは,次のように定式
化されます.
∑n
pj xj
min
∑j=1
n
s.t.
j=1 cj xj + ≥ L
xj ≥ 0, j = 1, . . . , n
目的関数は購入した債券の合計の価格です.ここに取引費用を含めましょう.なお,債券の購入量
には上限 q3 を設けておきます.
債券 j の取引にまつわる費用を yj とします.また,xj がどの区間に存在するかを表す 0-1 変数
zj0 ,zj1 ,zj2 と,実数変数 λj0 ,λj1 ,λj2 ,λj3 を導入します.
6 ものによっては計り売りもあります.最近はあまり見かけなくなりました
7 最近,手数料の自由化とネット取引の増加で,個人向けの売買では定額の手数料ですむ場合も増えてきました.
122
第4章
∑
整数計画法
∑
n
n
pj xj + j=1 yj
min
∑j=1
n
s.t.
j=1 cj xj + ≥ L
xj = q1 λj1 + q2 λj2 + q3 λj3 ,
yj = d1 λj1 + d2 λj2 + d3 λj3 ,
λj0 + λj1 + λj2 + λj3 = 1,
λ0j ≤ z1j ,
λ1j ≤ z1j + z2j ,
λ2j ≤ z2j + z3j ,
λ3j ≤ z3j ,
z1j + z2j + z3j = 1,
xj ≥ 0,
yj ≥ 0,
λ0j , λ1j , λ2j , λ3j ≥ 0,
z1j , z2j , z3j ∈ {0, 1},
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
j = 1, . . . , n
ここで使われたテクニックは,複雑な非凸型の問題を整数計画問題で近似する際に用いられます.
4.2.5
アルバイトのスケジュール
あるコンビニエンスストアを例にとって,スケジューリングを考えてみましょう.この店は,24
時間営業で,雇用契約を結んでいるパートとアルバイトは 24 名です.勤務時間帯は,次のような
5 つの時間帯にわかれています.
朝勤:8 時∼13 時
夜勤:22 時∼5 時
昼勤:13 時∼17 時
夕勤:17 時∼22 時
早朝勤:5 時∼8 時
従業員の勤務スケジュールは,店舗側と従業員の双方の事情を調整して,2 週間ごとに作成さ
れます.スケジュールを組むには,以下の条件を考慮しなくてはなりません.
従業員の勤務可能日:
従業員には,学生や家庭の主婦も少なくないため,出勤できない日や時間帯もあります.あ
らかじめ出勤可能な日時を決めてもらい,それ以外には割り当てないようにします.
勤務時間の上限・下限:
従業員によっては,一定額の給与を得るため,一定の勤務時間以上働くことを希望します.
逆に一定の勤務時間を超えないようにしなければならない人もいます.
シフトの連続性:
例えば,13 時に入って 22 時まで,2 つのシフトを通して働くことを希望する人がいます.一
方で,17 時に入って翌朝 5 時まで (2 シフト) 働きたいが,8 時までは繋げたくないという場
合もあります.
勤務時間の間隔:
人によっては,ある日が終日勤務可能であっても,その日に朝勤を働いてからいったん勤務
を終わり,再度同じ日に夕勤を行うというように割り当てはされたくないという場合があり
ます.この店では,いったん勤務を終えたら,次の勤務までの時間にどの程度必要かを従業
員ごとに申告してもらっています.
4.2. 整数計画法の適用例
123
必要従業員数:
客の入りは,曜日や時間帯ごとに異なるので,それぞれの場合に応じて必要な人員があらか
じめ見積もられています.
新人教育:
経験が浅い従業員には,ベテランの人がサポートしてあげることになっています.そのよう
な新人の配置は,教育役が勤まる人の予定とあわせて決めなくてはなりません.
予算:
勤務歴と時間帯によって,時給がかわります.給与総額が予算におさまるように全体の割り
当てを決める必要があります.
図表 4.15 必要人数とアルバイトの出勤可能日 (1 が可,0 が不可)
日付
シフト
シフト番号
勤務時間
必要人数
従業員 A
従業員 B
従業員 C
従業員 D
従業員 E
..
.
従業員 W
従業員 X
7/5 Sun.
朝
昼
1
5
2
1
1
0
0
1
2
4
3
1
1
0
0
1
0
1
0
0
夕
3
5
3
1
1
1
0
1
1
0
7/6 Mon.
夜
4
7
2
0
0
1
1
1
1
0
早
5
3
2
0
0
1
1
1
0
0
朝
6
5
3
0
1
0
0
1
昼
7
4
3
0
1
0
0
1
0
1
0
1
夕
夜
8
5
3
1
1
0
0
1
..
.
1
0
早
9
7
2
1
0
0
1
1
10
3
2
1
0
0
1
1
1
0
0
0
···
···
7/18 Sat.
朝
昼
夕
夜
早
66
5
2
1
1
1
0
1
67
4
3
0
1
1
0
1
68
5
3
0
1
1
0
1
69
7
3
0
0
1
1
1
70
3
2
1
0
1
1
1
0
1
0
0
1
0
1
0
0
0
図表 4.16 従業員の労働条件
労働時間
下限 上限
最大連続
勤務時間
最低勤務
時間間隔
時給
増分
新
人
教育
係可
12
12
12
12
12
50
80
30
0
0
{
{
{
{
{
1
1
{
{
{
12
12
-50
-50
1
1
{
{
従業員 A
従業員 B
従業員 C
従業員 D
従業員 E
40
70
20
10
10
70
100
50
40
70
12
8
5
5
5
従業員 W
従業員 X
10
10
50
50
8
8
..
.
..
.
上記の条件をまとめると,図表 4.15,4.16 のようになります.これらの条件を考慮して,スケ
ジューリングを決める問題を定式化していきましょう.従業員 i の第 j シフトの勤務の有無を表す
124
第4章
整数計画法
決定変数として,xij (i = A, B, · · · , X; j = 1, 2, . . . , 70) を用意します.xi,j は 0-1 変数で,
{
1, 従業員 i が第 j シフトに勤務する
xij =
(4.15)
0, 従業員 i が第 j シフトに勤務しない
と定義します.xA1 = 1 ならば,7 月 5 日の朝勤に A さんが割り当てられることを意味します.勤
務が不可能なシフトは,単純にその割り当てを表す変数の値を 0 に設定することで表せます.7 月
5 日に A さんは夜・早朝勤ができないので,
xA4 = 0,
xA5 = 0
とおくことになります8 .以下,他の日,他の従業員についても同様です.
勤務時間の上下限については,以下の不等式で表されます.朝,昼,夕,夜,早朝勤の勤務時
間がそれぞれ,5,4,5,7,3 時間であることに注意してください.A さんの 2 週間の総勤務時間
が 40 時間以上 70 時間以内なので,
5xA1 + 4xA2 + 5xA3 + 7xA4 + 3xA5 + 5xA6 + 4xA7 + · · · + 7xA69 + 3xA70 ≥ 40
5xA1 + 4xA2 + 5xA3 + 7xA4 + 3xA5 + 5xA6 + 4xA7 + · · · + 7xA69 + 3xA70 ≤ 70
(4.16)
を満たさなくてはなりません.
シフトの連続性の条件はどうなるでしょうか.A さんは,最大 12 時間連続で働いてもよいと考
えています.逆に言えば,13 時間以上となるシフトの連続は不可ということです.例えば,朝+
昼+夕という勤務は割り当てられません.昼+夕+夜,夕+夜+早朝も同様です.これらは,次の
ような不等式にまとめられます.
5xA1 + 4xA2 + 5xA3 ≤ 12,
4xA2 + 5xA3 + 7xA4 ≤ 12,
5xA3 + 7xA4 + 3xA5 ≤ 12,
7xA4 + 3xA5 + 5xA6 ≤ 12,
3xA5 + 5xA6 + 4xA7 + 5xA8 ≤ 12
5xA6 + 4xA7 + 5xA8 ≤ 12
..
.
4xA67 + 5xA68 + 7xA69 ≤ 12,
(4.17)
5xA68 + 7xA69 + 3xA70 ≤ 12
最低勤務時間間隔は,可能な割り当てはなにかという観点から見てみることにします.A さんの場
合,いったん勤務を離れたら,それが少なくとも 12 時間続く必要があります.A さんが 7 月 5 日
の朝勤につき,昼勤には割り当てられていないならば,昼,夕,夜勤にはつけません.これは,次
の不等式によって表すことができます.
(1 − xA2 ) + (1 − xA3 ) + (1 − xA4 ) ≥ 3(xA1 − xA2 )
朝勤をして (xA1 = 1),昼勤をしない (xA2 = 0) 場合,つまりいったん勤務を離れた場合に,右辺の
値は 3 となります.その場合,左辺を満たすのは,昼・夕・夜勤をしない場合 (xA2 = xA3 = xA4 = 0)
に限ります.朝勤をして (xA1 = 1),昼勤もする (xA2 = 1) 場合は,右辺は 0 となるので左辺はど
のような組み合わせでも構いません.
8 別のやり方として,x
A4 ,xA5
をすべて削除してしまうことで対応できます.
4.2. 整数計画法の適用例
125
これをすべてのシフトについて表すと以下の様になります.
(1 − xA2 ) + (1 − xA3 ) + (1 − xA4 ) ≥ 3(xA1 − xA2 )
(1 − xA3 ) + (1 − xA4 ) ≥ 2(xA2 − xA3 )
(1 − xA4 ) + (1 − xA5 ) + (1 − xA6 ) ≥ 3(xA3 − xA4 )
..
.
(4.18)
(1 − xA68 ) + (1 − xA69 ) ≥ 2(xA67 − xA68 )
となります.本来,最後の 3 つのシフトに関して勤務時間の間隔を考慮するためには,次の期の勤
務も考慮しなくてはいけませんが,これは,次の期の計画で対処することにしましょう.
A さん以下 X さんまでのすべての従業員に (4.16),(4.17),(4.18) と同様な制約式を作る必要
があります.さらに,W さんの場合には別の条件式が必要です.W さんは新人なので,必ず誰か
教育係がつかねばなりません.今,教育係は,A,B,G,H さんであるとします.そうすると,新
人の勤務に教育係がつくという条件は,
xW1 ≤ xA1 + xB1 + xG1 + xH1 ,
..
.
(4.19)
xW70 ≤ xA70 + xB70 + xG70 + xH70
となります.同じく,新人である X さんについても同様です.
店舗側の条件も定式化しましょう.必要人数については,
xA1 + xB1 + · · · + xX1 ≥ 2
xA2 + xB2 + · · · + xX2 ≥ 3
···
(4.20)
xA70 + xB70 + · · · + xX70 ≥ 2
となります.予算は,超過分が一定額 M を超えないと言うかたちで式をたてます.
50(5xA1 + 4xA2 + 5xA3 + 7xA4 + 3xA5 + 5xA6 + 4xA7 + · · · + 7xA69 + 3xA70 )
+ 80(5xB1 + 4xB2 + 5xB3 + 7xB4 + 3xB5 + 5xB6 + 4xB7 + · · · + 7xB69 + 3xB70 )
· · · − 50(5xX1 + 4xX2 + 5xX3 + 7xX4 + 3xX5 + 5xX6 + 4xX7 + · · · + 7xX69 + 3xX70 ) ≤ M
(4.21)
以上の制約式をすべてまとめると,
変数の数=70 ∗ 24 = 1680
制約式の本数=24 ∗ (2 + 68 + 67) + 2 ∗ 70 + 70 + 1 = 3499
となりました.
いままでのところ,制約式のみを論じて,目的関数については触れていません.その理由は,現
実のスケジューリング問題では条件が厳しすぎて,すべての制約を完全に満たせないことがしばし
ば生じるからです.そのような場合,目的関数値の大小より,制約を調整して実行可能な解を見つ
け出すことの方が大事なのです.
制約の調整方法についても,いろいろな方法が提案されていますが,ここでは割愛します.
126
第4章
整数計画法
演習問題 4.5
2 週間の割り当てにおいて,1 週目と 2 週目のそれぞれの勤務時間の合計に差がないことが望ま
しい.週ごとの勤務時間の差が 15 時間を越えないようにするためにはどのような制約式をつく
るべきか,A さんの場合について式をつくれ.
演習問題 4.6
A さんは,原則として連続 12 時間働いてもよいが,夜勤の後に早朝勤を行うのは避けたいと思っ
ている.夜勤がなければ,早朝勤を行うことは構わない.この条件を式で表すにはどうすればよ
いか.