10. 計算困難な問題に対するアプローチ
• 厳密解法と近似解法
– 厳密解法:最悪の場合に指数時間かかっても最適解を求める.
– 近似解法:現実的な計算時間で良良い実⾏行行可能解を求める.
• 汎⽤用解法と専⽤用解法
– 汎⽤用解法:整数計画問題や制約充⾜足問題などに定式化して汎
⽤用ソルバーを適⽤用する.
– 専⽤用解法:問題特有の性質を利利⽤用した専⽤用ソルバーを適⽤用も
しくは開発する.
アルゴリズム a
現実世界の問題 現実世界の問題
分枝限定法
問題 a
a アルゴリズム b
a
b b 問題 b
c 整数計画問題 c
d d
アルゴリズム e
e e
問題 e
汎⽤用解法アプローチ 専⽤用解法アプローチ
10
24. 例例:栄養問題
• ある飲料料メーカーでは野菜ジュースを製造しており,n種類の野菜
を混合してm種類の栄養素を充⾜足している.どの野菜をどれだけ
購⼊入するのが最も経済的だろうか?
aij : 野菜jに含まれる栄養素iの量量(定数)
bi : 栄養素iの必要量量(定数)
cj : 野菜jの単位量量当たりの値段(定数)
野菜jの購⼊入量量を変数xjとすると
n
X
min c j xj
j=1
Xn
s.t. aij xj bi , i = ... , m,
j=1
xj 0, j = 1, ... , n.
24
25. 例例:輸送問題
• mヵ所の⼯工場からnヵ所の⼩小売店に製品を輸送する際に,各⼯工場
の⽣生産量量を超えない範囲で各⼩小売店が需要を満たすように輸送し
たい.輸送費⽤用が最⼩小となる計画は?
ai : ⼯工場iの⽣生産量量(定数)
bj : ⼩小売店jの需要量量(定数)
cij : ⼯工場iから⼩小売店jへの単位量量当たりの輸送費⽤用(定数)
xij : ⼯工場iから⼩小売店jへの輸送量量(変数)
m
XXn
1 1
c11 min cij xij
c12
c1n 2 i=1 j=1
Xn
2
s.t. xij ai , i = 1, ... , m,
j=1
n m
X
xij bj , j = 1, ... , n,
m
i=1
xij 0, i = 1, ... , m, j = 1, ... , n. 25
27. 区分線形関数の最⼩小化
• 観測で得られたn個の⼊入出⼒力力データ(xi,yi)(i=1,...,n)から⼊入出⼒力力の
関係を⼀一次式 y=ax+b で近似する(係数a,bの値を変数として求
めるいわゆる回帰問題)
L1ノルムの最⼩小化
n
X
誤差|yi (axi + b)| min |yi (axi + b)|
x
i=1
誤差を表す
(xi,
yi)
m
X 変数ziを⽤用いる
min zi
i=1
s.t. yi (axi + b) zi , i = 1, ... , n,
yi (axi + b) zi , i = 1, ... , n,
y
zi 0, i = 1, ... , n.
27
29. 最⼤大値の最⼩小化(最⼩小値の最⼤大化)
• 複数の⽬目的関数を同時に最⼩小化したい場合には,これらの⽬目的関
数の最⼤大値を最⼩小化する⽅方法が考えられる.
• 逆に,資源をなるべく公平に配分したい場合には,配分量量の最⼩小
値を最⼤大化する⽅方法が考えられる. min z
Xn
s.t. cj1 xj z,
k個の⽬目的関数を同時に最⼩小化
j=1
Xn
n
X n
X n
X cj2 xj z,
min cj1 xj , cj2 xj , ... , cjk xj , j=1
j=1 j=1 j=1 最⼤大値を表す
n ··· 変数zを⽤用いる
X Xn
s.t. aij xj bi , i = 1, ... , m, cjk xj z,
j=1
j=1
xj 0, j = 1, ... , n. Xn
aij xj bi , i = 1, ... , m,
j=1
xj 0, j = 1, ... , n. 29
30. ⽐比率率率の最⼩小化
• ⽐比率率率を最⼩小化する⾮非線形な関数を線形計画問題に変換できる場合
もある.
t = n 1 , yj = txj
X
X n d j xj
c j xj j=1 Xn
j=1 min c j yj
min n
X j=1
d j xj Xn
j=1 s.t. aij yj bi t 0, i = 1, ... , m,
X n j=1
s.t. aij xj bi , i = 1, ... , m, Xn
j=1 dj yj = 1,
X n j=1
dj xj > 0, yj 0, j = 1, ... , n,
j=1 t 0.
xj 0, j = 1, ... , n.
30
31. 線形計画問題を解く
• 制約式をm本,変数をn個とする.
• 実⾏行行可能領領域は(m+n)個の超平⾯面に囲まれている → 凸多⾯面体
• n個の超平⾯面が交差する頂点のいずれかに最適解がある!
x2
④ 最適解
maxx1 + 2x2 ③
x1 + x2 6, → ①
s.t. ①
x1 + 3x2 12, → ② 最⼤大化
2x1 + x2 10, → ③
x1 0, → ④ ②
x2 0. → ⑤ ⑤
✓ ◆ x1
m+n (m + n)!
調べる頂点の数が = 個となって効率率率的ではない
n m!n!
31
36. 整数計画問題
• 線形計画問題+変数の整数条件.
• ⼀一部の変数のみが整数条件を持つ場合は混合整数計画問題(Mixed
Integer Program; MIP)と呼ばれる.
• 全ての変数が{0,1}の2値条件を持つ場合は0-‐‑‒1整数計画問題(0-‐‑‒1
Integer Program; 0-‐‑‒1IP)と呼ばれる.
n
X
min c j xj x2 LPの実⾏行行可能領領域
j=1 IPの実⾏行行可能領領域
Xn
MIPの実⾏行行可能領領域
s.t. aij xj bi , i = 1, ... , m,
j=1
xj 0, j = 1, ... , n,
xj : integer, j 2 J.
x1
Jは整数変数の添字集合
36
37. 例例:ナップサック問題
• 最⼤大でc(>0)の重さまで荷物を詰め込める袋が1つとn個の荷物が
与えられる.重さの合計がcを超えない範囲で荷物の価値の合計
が最⼤大となる詰込み⽅方は?
c : 袋に詰め込める重さ合計の上限(定数)
wi : 荷物iの重さ(定数)
pi : 荷物iの価値(定数)
xi : 荷物iを袋に詰め込む→xi=1, つめ込まない→xi=0(変数)
Xn
max p i xi
i=1
Xn
s.t. wi xi c,
i=1
xi 2 {0, 1}, i = 1, ... , n.
37
38. 例例:割当て問題
• m⼈人の学⽣生をn個のクラスに割り当てる.ただし,各クラスの受
講者数には上下限が与えられている.学⽣生の満⾜足度度を最⼤大にする
クラスの編成は?
uj : クラスjの受講者数の上限(定数)
lj : クラスjの受講者数の下限(定数)
pij : 学⽣生iのクラスjに対する満⾜足度度(定数)
xij : 学⽣生iをクラスjに割り当てる →xij=1, 割り当てない →xij=0(変数)
m
XXn
max pij xij
i=1 j=1
Xm
s.t. lj xij uj , j = 1, ... , n,
i=1
n
X
xij = 1, i = 1, ... , m,
j=1
xij 2 {0, 1}, i = 1, ... , m, j = 1, ... , n. 38
39. 例例:最短路路問題
• n個の点からなるグラフG=(V,E)と隣隣接する点間の距離離が与えら
れる.指定された始点sから終点tまでの距離離が最短となるルートは?
dij : 点(i,j)間の距離離(定数)
xij : 枝(i,j)を通る→xij=1, 通らない→xij=0(変数)
X
A 4km B 5km E min dij xij
(i,j)2E
X
3km s.t. xsj = 1,
4km
9km C 3km
j:(s,j)2E
X X
F xji xij = 0, i 2 V {s, t},
j:(j,i)2E j:(i,j)2E
3km X
10km 4km xjt = 1,
D
j:(j,t)2E
xij 2 {0, 1}, (i, j) 2 E .
39
43. 固定費⽤用の有無を表す
• 製品量量によって⽣生じる変動費⽤用と段取り替えによって⽣生じる固定
費⽤用の両⽅方を扱うには?
• 単位費⽤用c1で⽣生産される製品の⽣生産量量をxとする.
• わずかでも製品が⽣生産されると初期費⽤用c2が発⽣生する.
• 総費⽤用f(x)を線形式で表すには?
⇢
f(x) 0 x =0
f (x) =
c1 x + c2 0<x C
傾きc1
min f (x) = c1 + c2 y
c2 s.t. x Cy , x>0ならば1
y 2 {0, 1}.
x
0 C 0 x C.
43
44. 例例:ビンパッキング問題
• ⼗十分な数の最⼤大でc(>0)の重さまで荷物を詰め込める箱とn個の
荷物が与えられる.全ての荷物を詰め込むのに必要な箱の数が最
⼩小となる荷物の詰込み⽅方は?
c : 箱に詰め込める重さ合計の上限(定数)
wi : 荷物iの重さ(定数)
yj : 箱jを使う→yj=1, 箱jを使わない→yj=0(変数)
xij : 荷物iを箱jに詰め込む→xij=1, 詰め込まない→xij=0(変数)
n
X
min yj
j=1
Xn
s.t. wi xij cyj , j = 1, ... , n,
i=1
n
X
xij = 1, i = 1, ... , n,
j=1
xij 2 {0, 1}, i = 1, ... , n, j = 1, ... , n,
yj 2 {0, 1}, j = 1, ... , n.
ちなみに,ビン(bin)は⼤大箱の意味であって瓶ではありません. 44
45. 離離接した制約式
• k個の制約式の少なくとも⼀一⽅方の制約式が成⽴立立する場合に,これら
は離離接している制約式と呼ばれる.
• 順序付け,⾮非凸な区分線形関数などが表現できる.
n
X n
X
n
X a1j xj b1 _ a2j xj b2
x2 a1j xj b1
j=1 j=1
j=1
8 n and ではなく or
n
X > X
>
>
> a1j xj b1 + M(1 y1 ),
a2j xj b2 >
> j=1
>
> n
j=1 < X ⼗十分⼤大きな定数
> a2j xj b2 + M(1 y2 ),
> j=1
>
>
>
> y1 + y2 = 1,
>
x1 >
:
y1 , y2 2 {0, 1}. 制約式の実質的な
有無を決定する
離離接した制約式を0-‐‑‒1変数を⽤用いて記述 0-‐‑‒1変数
45
46. 例例:1機械スケジューリング問題
• n個の仕事とこれらの仕事を処理理する1台の機械が与えられる.全
ての仕事の納期遅れの総和を最⼩小化する仕事の処理理順は?
• 全ての仕事は時刻0で開始可能.仕事は⼀一度度始めたら中断はでき
ない.1台の機械で同時に2つ以上の仕事はできない.
pi : 仕事iの処理理時間(定数)
di : 仕事iの納期時刻(定数)
si : 仕事iの開始時刻(変数)
xij : 仕事iが仕事jに先⾏行行する→xij=1, 先⾏行行しない→xij=1(変数)
n
X
min max {si + pi di , 0} 線形式でない
pi pj i=1
s.t. si + pi sj + M(1 xij ), i = 1, ... , n, j 6= i,
i j xij + xji = 1, i = 1, ... , n, j 6= i,
si di si+pi sj 時刻 xij 2 {0, 1}, i = 1, ... , n, j 6= i,
si 0, i = 1, ... , n.
si+pi-‐‑‒di 46
47. 例例:1機械スケジューリング問題
• n個の仕事とこれらの仕事を処理理する1台の機械が与えられる.全
ての仕事の納期遅れの総和を最⼩小化する仕事の処理理順は?
• 全ての仕事は時刻0で開始可能.仕事は⼀一度度始めたら中断はでき
ない.1台の機械で同時に2つ以上の仕事はできない.
pi : 仕事iの処理理時間(定数)
di : 仕事iの納期時刻(定数)
s i , ti : 仕事iの開始・終了了時刻(変数)
xij : 仕事iが仕事jに先⾏行行する→xij=1, 先⾏行行しない→xij=1(変数)
n
X
min ti
pi pj i=1
s.t. si + pi sj + M(1 xij ), i = 1, ... , n, j 6= i,
i j xij + xji = 1, i = 1, ... , n, j 6= i,
sj si + pi di ti , i = 1, ... , n,
si di si+pi 時刻
xij 2 {0, 1}, i = 1, ... , n, j 6= i,
si+pi-‐‑‒di si , ti 0, i = 1, ... , n.
47
48. ⾮非凸な区分線形関数を表す
• ⾮非凸な⾮非線形関数を区分線形関数で近似する.
• 区分線形関数上の点(x,y)はいずれかの線分上にある.
• (x1,y1),(x2,y2)で結ばれる線分上にある場合は以下の通り表現できる.
(x, y ) = t1 (x1 , y1 ) + t2 (x2 , y2 ), t1 + t2 = 1, t1 , t2 0
• これを⼀一般化すると(x,y)は…
(x, y ) = t1 (x1 , y1 ) + t2 (x2 , y2 ) + t3 (x3 , y3 ) + t4 (x4 , y4 ),
t1 + t2 + t3 + t4 = 1, t1 , t2 , t3 , t4 0,
⾼高々2つの隣隣り合うtiが正(⾮非ゼロ)
(x2,y2) (x4,y4)
t1 z 1 , t 2 z 1 + z 2 , t3 z 2 + z 3 , t4 z 3 ,
z1 + z2 + z3 = 1, z1 , z2 , z3 2 {0, 1}.
(x3,y3)
(x1,y1)
48
51. 0-‐‑‒1整数2次計画問題
• xTQxで表される2次関数でも2値変数でかつ⾏行行列列Q=[qij]が疎なら,
線形関数に変換できる. i qij j
1 2 j n 無向グラフ
に変換する
Q
1
2
i qij
yij=xi xj とおけば
n
XX
n min qij yij と書ける
i=1 j6=i
• さらに,yij=xi xj で(xi, xj, yij)が取る値の組み合わせは,(0,0,0),
(1,0,0),(0,1,0),(1,1,1)で, は以下の通り
yij = xi xj , xi , xj 2 {0, 1}
書き換えられるので,xTQx + cTx も線形関数に変換できる.
8
< xi + xj yij 1, ちなみに, y=x x ... x だと
8 Pk 1 2 k
xi yij 0, xj yij 0, < i=1 xi y 1,
: x y 0, i = 1, ... , k,
xi , xj 2 {0, 1}. : i
xi 2 {0, 1}, ı = 1, ... , k.
51