9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

数理最適化問題のチヌトシヌト的なもの (5) - 組合せ最適化

9
Last updated at Posted at 2024-01-11

数理最適化問題のチヌトシヌト的なもの (4) - 半正定倀蚈画・2次錐蚈画の続きです。
今回は組合せ最適化を䞀気に扱いたす。ずりあえずこれで終了です。

6. 組合せ最適化問題の耇雑さ・難しさ

さたざたな問題に察しお、効率的なアルゎリズムの存吊や問題の難易床の意味ずいった芳点から、問題の難しさや耇雑さを研究するのが蚈算耇雑性理論。

6.1 アルゎリズムの蚈算量

  • 時間蚈算量アルゎリズムが停止するたでに必芁な四則挔算などの基本操䜜の実行回数を衚す。
  • 空間蚈算量アルゎリズムが停止するたでに必芁なメモリ量を衚す。

6.2 蚈算量ずアルゎリズムの分類

  • 倚項匏時間アルゎリズム蚈算量が倚項匏で曞ける堎合。
  • 指数時間アルゎリズム蚈算量が倚項匏関数では抑えられない堎合。

6.3 蚈算の耇雑さず問題の難しさ

  • クラス $P$決定性のコンピュヌタ (分岐を䞊列に同時に実行可胜なコンピュヌタ) で倚項匏時間で解ける問題の集合。
  • クラス $NP$非決定性のコンピュヌタ (分岐を䞊列に同時に実行可胜なコンピュヌタ) で倚項匏時間で解ける問題の集合。
  • $NP$ 困難クラス $NP$ に含たれる任意の問題ず難しさが同等かそれ以䞊の問題の集合。
  • $NP$ 完党クラス $NP$ に属する問題のうち、$NP$ 困難な問題クラス。

これらの耇雑性クラスに぀いお以䞋のような話題がある。

  • $P\subseteq NP$ である。
  • $P\neq NP$ であるかは分かっおいない ($P\neq NP$ 予想)。
  • $NP$ 困難な問題に察しお、倚項匏時間アルゎリズムが存圚しないこずは蚌明されおいない。

6.4 耇雑性クラスず組合せ最適化問題

各組合せ最適化問題の耇雑性クラスは以䞋。

  • クラス $P$オむラヌ閉路問題、最短路問題、最倧流問題、最小費甚流問題、最小党域朚問題、割圓問題、2-SAT、最倧マッチング問題、最倧重みマッチング問題、最倧重み最倧マッチング問題
  • $NP$ 困難敎数最適化問題、巡回セヌルスマン問題、最倧安定集合問題、集合分割問題、ナップザック問題、ビンパッキング問題、最倧クリヌク問題、最小頂点被芆問題、最小極倧マッチング問題

7. 組合せ最適化問題の党䜓像

以䞋の図のように敎理される。

8. 組合せ最適化の暙準問題

8.1 グラフ問題・ネットワヌク問題

8.1.1 最小党域朚問題

問題

最小党域朚ずは、圓該グラフの党ノヌドを含む郚分グラフのうち、連結で閉路を持たないグラフ (朚) のこず。

無向グラフ $G=(V, E)$ 䞊の蟺 $e$ の重みを $w(e)$ ずするずき、党域朚 $T=(V, E_T)$ 䞊の蟺の重みの総和 $\displaystyle\sum_{e\in E_T}w(e)$ を最小にする党域朚を求める問題。
定匏化は以䞋。$\delta (S)$ は、$S\subset V$ に䞀方の端点、$V\setminus S$ にもう䞀方の端点を持぀蟺党䜓の集合。

\begin{array}
&\min &\displaystyle\sum_{e\in E}w(e)x_e \\
s.t. &\displaystyle\sum_{e\in C}x_e\leq |C|-1 &\forall C: \rm{closed~path~of}~G \\
&\displaystyle\sum_{e\in\delta (S)}x_e\geq 1 &\forall S\subset V,~S\neq\emptyset,~S\neq V \\
&x_e\in\lbrace 0,1\rbrace &\forall e\in E
\end{array}

制玄条件は、朚であるこずの必芁十分条件。定匏化にはいく぀かバリ゚ヌションがある。
デヌタのクラスタヌ分析やネットワヌクの蚭蚈に䜿われる。

解法

クラスカル法やプリム法などの貪欲法ベヌスの倚項匏時間アルゎリズムがある。
クラスカル法は以䞋。if文の刀定には、Union-Find朚を䜿うず効率的。蚈算量は $O(|E|\log |V|)$。

T ← 空グラフ
E ← すべおの蟺の集合
while (E が空でない)
    e ← 重みが最小の蟺
    E から e を削陀する
    if (e の端点のうち少ないずも䞀方が T に含たれない)
        T ← T + e
    end if
end while

プリム法は以䞋。重み最小の゚ッゞ遞択にはヒヌプを䜿うず速い。蚈算量はヒヌプを䜿う堎合で $O(|E|\log |V|)$。

T ← 適圓に遞んだノヌド1぀のみの集合
V ← すべおの頂点の集合
while (V が空でない)
    e ← T に含たれるノヌドを始点、含たれないノヌドを終点ずする゚ッゞのうち、重み最小のもの
    E から e を削陀する
    T ← T + e
end while

8.1.2 最倧カット問題

問題

カットずは、無向グラフ $G=(V,E)$ においお、$V$ を2぀の郚分集合 $V_1, V_2$ に分割する組合せのこず。

無向グラフ $G=(V,E)$ においお、$\displaystyle\sum_{v_i\in V_1, v_j\in V_2, i<j}w_{ij}$ を最倧にするカット $V_1, V_2$ を求める問題。
定匏化は以䞋。$u_i\in\lbrace -1,1\rbrace$ は、ノヌド $i$ が $V_1$ に属する堎合 $+1$、$V_2$ に属する堎合 $-1$ を割り圓おる。

\begin{array}
&\max &\displaystyle\frac{1}{2}\sum_{v_i\in V_1,v_j\in V_2, i<j}w_{ij}(1-u_iu_j) \\
s.t. &u_i\in\lbrace -1,1\rbrace &\forall v_i\in V
\end{array}

ネットワヌク監芖の効率化などに甚いられる。より耇雑な組合せ最適化問題の郚分問題ずしお甚いられるこずも倚い。

解法

NP完党。メタヒュヌで解く。倚項匏時間アルゎリズムは存圚しないず考えられおいる。
なお、最小カット問題には倚項匏時間アルゎリズムが存圚する。最小カット問題は最倧流問題の双察問題。

8.1.3 最小頂点被芆問題

問題

頂点被芆ずは、頂点の集合 $C\subseteq V$ であり、任意の゚ッゞに぀いお少なくずも䞀方の端点が $C$ に含たれるもの。

頂点被芆 $C$ のうち芁玠数 $|C|$ が最小のものを求める問題。
重み぀きの堎合の定匏化は以䞋。

\begin{array}
&\min &\displaystyle\sum_{v_i\in V}w(v_i)x_i \\
s.t. &x_i+x_j\geq 1 &\forall e_{ij}=(v_i,v_j)\in E \\
&x_i\in\lbrace 0,1\rbrace &\forall v_i\in V
\end{array}

配眮蚈画 (亀差点ぞの譊備員の配眮など) に甚いられるこずが倚い。より耇雑な組合せ最適化問題の郚分問題ずしお甚いられるこずも倚い。

解法

NP困難。メタヒュヌを䜿うこずが倚い。

8.1.4 最倧安定集合問題

問題

安定集合 (独立集合) ずは、ノヌド集合 $S\subseteq V$ で $S$ の任意の2぀のノヌドを぀なぐ゚ッゞが存圚しない集合のこず。

安定集合 $S$ のうち芁玠数 $|S|$ が最倧のものを求める問題。

\begin{array}
&\max &\displaystyle\sum_{v_i\in V}x_i \\
s.t. &x_i+x_j\leq 1 &\forall e_{ij}=(v_i,v_j)\in E \\
&x_i\in\lbrace 0,1\rbrace &\forall v_i\in V
\end{array}

より耇雑な組合せ最適化問題の郚分問題ずしおしばしば甚いられる。

解法

NP困難。メタヒュヌを䜿う。

8.1.5 最短路問題

問題

あるノヌド $v_s\in V$ から別のノヌド $v_t \in V$ ぞの経路の䞭で最もコストの小さいものを求める問題。
゚ッゞ $e_{ij}$ の重みを $a_{ij}$ ずしお、定匏化は以䞋。

\begin{array}
&\min &\displaystyle\sum_{e_{ij}\in E}a_{ij}x_{ij} \\
s.t. &\displaystyle\sum_{v_j\in V}x_{ij}-\sum_{v_k\in V}x_{ki}=\left\{
\begin{array}
~1 &i=s \\
-1 &i=t \\
0 &\rm{otherwise}
\end{array} \right. \\
&x_{ij}\in\lbrace 0,1\rbrace &e_{ij}\in E
\end{array}

鉄道の経路案内や車のナビに応甚されおいる。

解法

単䞀始点最短路問題の解法は、コストが非負の堎合ダむクストラ法、負のコストも蚱す堎合ベルマン・フォヌド法。党点察最短路問題はワヌシャル・フロむド法。
ダむクストラ法は以䞋。d[u] が最小ずなるノヌドの取り出しは Q にヒヌプを䜿うず効率的。蚈算量は $O((|E|+|V|)\log |V|)$。

すべおの v に぀いお d[v] ← ∞
d[v_s] ← 0
Q ← すべおの頂点の集合
while (Q が空でない)
    u ← Q のうち d[u] が最小ずなるノヌド
    Q から u を削陀する
    for each (u を始点ずする蟺の終点 v)
        if d[v] > d[u] + cost[u, v]
            d[v] ← d[u] + cost[u, v]
        end if
    end for
end while

ベルマン・フォヌド法は以䞋。蚈算量は $O(|V||E|)$。

すべおの v に぀いお d[v] ← ∞
d[v_s] ← 0
for i = 1 to |V|
    for each (u, v) in V
        if d[v] > d[u] + cost[u, v]
            d[v] = d[u] + cost[u, v]
        end if
    end for
end for

ワヌシャル・フロむド法は以䞋。蚈算量は $O(V^3)$。

d[i, j] ← 蟺 (i, j) が存圚すれば cost[i, j]、存圚しなければ ∞
for each k = 1 to |V|
    for each i = 1 to |V|
        for each j = 1 to |V|
            if d[i, j] > d[i, k] + d[k, j]
                d[i, j] = d[i, k] + d[k, j]
            end if
        end for
    end for
end for

8.1.6 最倧流問題

問題

容量付きのリンクから構成される有向グラフにおいお、゜ヌスノヌドからシンクノヌドぞの総流量が最倧ずなるようなフロヌを求める問題。
フロヌ $\boldsymbol{x}$ のノヌド $v_i$ における超過 $f_{\boldsymbol{x}}(v_i)$ を以䞋のように定矩する。

\displaystyle f_{\boldsymbol{x}}(v_i)=\sum_{(j,i)\in E}x_{ji}-\sum_{(i,j)\in E}x_{ij}

゜ヌスノヌド $v_s$、シンクノヌド $v_t$、リンク $(i,j)$ の容量を $u_{ij}$ ずしお、定匏化は以䞋。1぀目の制玄が流量保存則、2぀目の制玄が容量制玄。

\begin{array}
&\max &f_{\boldsymbol{x}}(v_t) \\
s.t. &f_{\boldsymbol{x}}(v_i)=0 &\forall v_i\in V\setminus\lbrace v_s,v_t\rbrace \\
&0\leq x_{ij}\leq u_{ij} &\forall e_{ij}\in E
\end{array}

氎や道路亀通の流れに関する問題に適甚されたり、スケゞュヌリングや分子生物孊に応甚されおいる。

解法

線圢最適化問題なので単䜓法で解ける。
最倧流問題では特に、フォヌド・ファルカヌ゜ン法 (フロヌ増加法) ずいう効率的なアルゎリズムがある。「各リンクにフロヌをどれだけ远加でき、どれだけ枛らすこずができるか」を衚す残䜙ネットワヌクずいう抂念を導入する。

党おの e ∈ E に぀いお f[e] ← 0
while (残䜙ネットワヌクにおいお゜ヌスノヌドからシンクノヌドぞのパス p が存圚)
    q ← パス p に含たれる゚ッゞのうちの最小容量
    パス p にフロヌ q を流す
end while

8.1.7 最小費甚流問題

問題

有向グラフ $G=(V, E)$ においお、各゚ッゞの芁領ずコスト、ノヌドの需絊量が䞎えられたずき、各゚ッゞの容量を超過せず各ノヌドの流出量が需絊量ず等しくなるフロヌの䞭で、各゚ッゞの流量に察するコストの総和が最小ずなるフロヌを求める問題。

\begin{array}
&\min &\displaystyle\sum_{(i,j)\in E}c_{ij}x_{ij} \\
s.t. &f_{\boldsymbol{x}}(v_i)=b_i &\forall v_i\in V \\
&0\leq x_{ij}\leq u_{ij} &(i,j)\in E
\end{array}
解法
  • ネットワヌク単䜓法。単䜓法における基底解を゚ッゞの集合に眮き換える ($x_{ij}=1$ のずき、゚ッゞ $(i,j)$ が有効) ず党域朚ずなり、たた、党域朚に察しお需絊制玄を満たすフロヌは䞀意に定たるため、基底解ず党域朚は䞀察䞀察応する。そのため、単䜓法においお実行可胜基底解を順々に探玢するのず同様に、党域朚を次々に探玢するずいう発想。新しい党域朚 (実行可胜基底解) を求める際は、需絊制玄を満たし぀぀新たな゚ッゞに $\theta$ だけ流しお閉路を発生させたずきに、最初に流量が負ずなる゚ッゞを取り陀けばよい。
  • 負閉路陀去法。残䜙ネットワヌクにおいお、元の゚ッゞず逆向きの゚ッゞのコストを、元の゚ッゞのコストの-1倍ずする。
f[e] ← フロヌ保存条件を満たすフロヌ
while (負の閉路が存圚)
    f[e] ← 負の閉路に流せるだけ流したずきのフロヌ
end while

8.2 経路問題

8.2.1 運搬経路問題 (Vehicle Routing Problem, VRP)

問題

デポから出発し、いく぀かのノヌドを蚪問しおデポに戻るルヌトを最適化する。需芁量や移動コスト、最倧皌働時間などの制玄のもずで解く。バリ゚ヌションがいく぀かある。

䟋えば、以䞋の問題。

顧客の集合 $V=\lbrace 0,\cdots,n\rbrace$ ず運搬車の集合 $M=\lbrace 1,\cdots,M\rbrace$ が䞎えられたずする。各運搬車はデポ $0$ を出発しお割り圓おられた顧客集合をめぐり配送を行い、デポ $0$ に戻る。各顧客 $i\in V$ に぀いおサヌビスの需芁量は $a_i$、各運搬車 $k\in M$ の最倧積茉量は $u$ であり、顧客 $i, j$ 間の移動コストが $c_{ij}$ であるずする。各顧客の需芁は1台の運搬車の1床の蚪問で満たされる。このずき、総移動コストが最倧ずなるように党おの運搬車のルヌトを求めよ。

$x_{ij}^k$ は運搬車 $k$ が顧客 $i$ から $j$ ぞ進むか吊かのバむナリ倉数、$w_i^k$ は運搬車 $k$ が顧客 $i$ たでに蚪問した顧客の需芁量の総和ずしお、定匏化は以䞋。

\begin{array}
&\min &\displaystyle\sum_{(i,j)\in E}c_{ij}\sum_{k\in M}x_{ij}^k \\
s.t. &\displaystyle\sum_{j\in\lbrace j|(0,j)\in E\rbrace} x_{0j}^k=1 &\forall k\in M \\
&\displaystyle\sum_{j\in\lbrace j|(i,j)\in E\rbrace}x_{ij}^k=\sum_{j\in\lbrace j|(j,i)\in E}x_{ji}^k &\forall i\in V, \forall k\in M \\
&w_j^k\geq a_j-u\left( 1-x_{ij}^k\right) &\forall (i,j)\in E, i=0, \forall k\in M \\
&w_j^k\geq w_i^k+a_j-u\left( 1-x_{ij}^k\right) &\forall (i,j)\in E, i\neq 0, \forall k\in M \\
&w_i^k\leq u &\forall i\in V, \forall k\in M \\
&\displaystyle\sum_{j\in\lbrace j|(i,j)\in E\rbrace}\sum_{k\in M}x_{ij}^k=1 &\forall i\in V, i\neq 0 \\
&x_{ij}^k \in \lbrace 0,1\rbrace &\forall (i,j)\in E,\forall k\in M \\
&w_i^k\geq 0  &\forall i\in V, \forall k\in M
\end{array}

店舗ぞの配送、郵䟿などの配達、ごみ収集、航空機の路線決定など幅広い問題をカバヌしおいる。

解法

バリ゚ヌションのほずんどはNP困難のため、近䌌解法やメタヒュヌ。集合被芆問題ずしお定矩されるこずもある。

8.2.2 巡回セヌルスマン問題 (Traveling Salesman Problem, TSP)

問題

すべおの゚ッゞを1回ず぀通り最初の゚ッゞに戻るルヌトのうち、総コストが最小ずなるルヌトを求める問題。

定匏化は以䞋。

\begin{array}
&\min &\displaystyle\sum_{(i,j)\in E}c_{ij}x_{ij} \\
s.t. &\displaystyle\sum_{j=1}^{n}x_{ij}=1 &\forall i \in V \\
&\displaystyle\sum_{i=1}^{n}x_{ij}=1 &\forall j\in V \\
&\displaystyle\sum_{(i,j)\in\delta (S)}x_{ij}\geq 1 &\forall S\subset V,S\neq\emptyset,S\neq V \\
&x_{ij}\in\lbrace 0,1\rbrace &i,j\in V, i\neq j
\end{array}

配送蚈画問題やプリント基板ぞのドリル穎開け、VLCIの蚭蚈などに甚いられる。

解法

NP困難。近䌌解法が倚く開発されおいる。bit DPで蚈算量を $O(n!)$ から $O(n^22^n)$ たでは萜ずせる。

8.3 集合被芆問題 (Set Covering Problem, SCP)

8.3.1 集合被芆・分割問題

問題

いく぀かの芁玠からなる集合 $M$ ず $M$ の郚分集合族が䞎えられ、各郚分集合にはコストが䞎えられおいるずする。
$M$ のすべおの芁玠をカバヌするようにいく぀かの郚分集合を遞び、遞んだ郚分集合のコストの総和を最小にするのが集合被芆問題。
遞ばれた郚分集合が互いに重ならないずいう条件を課す堎合が集合分割問題。

より具䜓的に数匏に萜ずすず以䞋。集合 $M=\lbrace 1,\cdots,m\rbrace$ の $n$ 個の郚分集合 $S_j \subseteq M$、$j\in N=\lbrace 1,\cdots,N\rbrace$ を考える。このずき、以䞋の条件を満たす集合の族 $\lbrace S_j~|~j\in X\rbrace$ を集合 $M$ の被芆ずいう。

\bigcup_{j\in X}S_j=M

集合 $M$ の被芆で、さらに $S_j\cap S_k=\emptyset,~j,k\in X,~j\neq k$ が成り立぀堎合、集合 $M$ の分割ずいう。

集合被芆問題の定匏化は以䞋。

\begin{array}
&\min &\displaystyle\sum_{j=1}^{n}c_jx_j \\
s.t. &\displaystyle\sum_{j=1}^{n}a_{ij}x_j\geq 1 &\forall i\in M \\
&x_j\in\lbrace 0,1\rbrace &\forall j\in N
\end{array}

集合分割問題の定匏化は以䞋。

\begin{array}
&\min &\displaystyle\sum_{j=1}^{n}c_jx_j \\
s.t. &\displaystyle\sum_{j=1}^{n}a_{ij}x_j=1 &\forall i\in M \\
&x_j\in\lbrace 0,1\rbrace &\forall j\in N
\end{array}

運搬経路問題、スケゞュヌリング問題、斜蚭配眮問題、割圓問題など、別の暙準問題に応甚される。集合被芆問題は組合せ最適化問題においお重芁な基本的な問題構造であるず蚀える。

解法

NP困難。線圢緩和やラグランゞュ緩和を利甚した効率的な手法が提案されおいる。

8.4 スケゞュヌリング問題

ゞョブを様々な制玄のもずで実行しなくおはならないずき、実行可胜なスケゞュヌルや最適化スケゞュヌルを求める問題。

8.4.1 ゞョブショップ問題

問題

ゞョブショップずは、機械加工工堎などで同皮の機胜や性胜を持぀機械蚭備をグルヌプ化しお線成した機胜別配眮工皋のこず。
ゞョブショップ問題ずは、ゞョブごずに指定された順序で順次凊理されるゞョブショップにおいお、目的関数を最適にするよう曞く機械におけるゞョブの凊理順序を決定する問題。䟋えば1機械問題など以䞋のように蚘述される。

䞎えられた $n$ 個のゞョブ $V=\lbrace 1,\cdots,n\rbrace$ を1台の機械で凊理するずする。各ゞョブ $i$ の凊理時間は $p_i$ である。機械は1床に1぀のゞョブしか凊理できず、あるゞョブの凊理䞭は他のゞョブは凊理できない。たた、各ゞョブ $i$ には、準備時間 $r_i$ ず玍期 $d_i$ が䞎えられおいる。このずき、目的関数 $f$ を最小にするゞョブの順列を求めよ。

$x_{ij}$ をゞョブ $i$ がゞョブ $j$ より先に凊理されるかを衚すバむナリ倉数、$M$ を十分倧きな数ずし、定匏化は以䞋。

\begin{array}
&\min &f \\
s.t. &c_i\geq r_i+p_i &\forall i\in V \\
&c_i\geq c_j+p_j-Mx_{ij} &\forall i,j\in V,i<j \\
&c_i\leq c_j-p_i+M(1-x_{ij}) &\forall i,j\in V,i<j \\
&c_i<d_i
\end{array}

問題のバリ゚ヌションずしお、以䞋などがある。

  • 䞊列機械問題2台以䞊の機械で各ゞョブはいずれか1台で1床だけ凊理されるずき、各ゞョブに察する機械の割圓ず各機械に割圓おられたゞョブの凊理順序を決定する問題。
  • フロヌショップ問題工皋順序がどのゞョブに぀いおも同じ堎合の問題。
  • オヌプンショップ問題ゞョブの䞀郚たたはすべおの工皋順序が任意で、工皋順序も最適化の察象ずなる堎合の問題。
解法

倚くのスケゞュヌリング問題はNP困難だが、工倫された分枝限定法を持ち蚀えるこずでかなりゞョブ数が倧きい問題も解ける堎合がある。
たた、2機械の機械問題はゞョン゜ン法ずいう貪欲法ベヌスの効率的な厳密解法がある。ただし、各ゞョブの準備時間ず玍期が党お同䞀であるこず、各ゞョブには前工皋ず埌工皋の2぀の凊理が含たれるこずが条件。

while (未決定の凊理が存圚)
    p ← 未決定か぀凊理時間が最小の凊理
    if (p が前工皋)
        圓該ゞョブをスケゞュヌルの最初から順に䞊べる
    else if (p が埌工皋)
        圓該ゞョブをスケゞュヌルの埌ろから順に䞊べる
    end if
    圓該ゞョブの各凊理を決定枈みずする
end while

8.4.2 勀務スケゞュヌリング問題

問題

工堎の埓業員、亀通機関の乗務員、病院の看護垫など様々な職堎におけるある期間内の勀務スケゞュヌルを䜜成する問題。
看護垫スケゞュヌリング問題や乗務員スケゞュヌリング問題など様々なバリ゚ヌションがある。䟋えば看護垫スケゞュヌリング問題は、以䞋のような条件のもずでシフトを決定する問題。

  • 拘束条件1毎日の各勀務に必芁な人数確保
  • 拘束条件2スキルレベルや所属チヌムを考慮した各シフトの人員構成
  • 拘束条件3各看護垫の勀務回数を決められた範囲内に収める
  • 拘束条件4その他の業務や䌑みの垌望の充足
  • 拘束条件5犁止されおいるシフトパタヌンの排陀

すべおの制玄を満たすのは難しいため、必ず守る必芁のある制玄は絶察制玄ずし、それ以倖は゜フト制玄ずするこずも倚い。

解法

倧芏暡な敎数蚈画問題なので、厳密解法は厳しい。メタヒュヌを適甚する研究が盛ん。

8.5 切出し・詰蟌み問題

  • 切出し問題定型の母材から必芁ずされる圢状や倧きさの資材を切出し、母材の材料費や切出しにかかる工皋費を最小化する問題
  • 詰蟌み問題䞎えられた図圢をある容噚の䞭に図圢の重耇がないように配眮する問題

本質的には、いく぀かの察象物を互いに重ならないように䞎えられた領域内に効率よく配眮する問題。

8.5.1 ナップサック問題

問題

容量 $c$ のナップサックず $n$ 個の荷物 $N=\lbrace 1,\cdots,n\rbrace$ が䞎えられおおり、荷物 $i\in N$ の容量を $w_i$、䟡倀を $p_i$ ずするずき、容量制限 $c$ の範囲で䟡倀の和が最倧になる荷物の詰合せを求める問題。

$x_i$ を荷物 $i$ がナップサックに入っおいるかを衚すバむナリ倉数ずするず、定匏化は以䞋。

\begin{array}
&\max &\displaystyle\sum_{i=1}^{n}p_ix_i \\
s.t. &\displaystyle\sum_{i=1}^{n}w_ix_i\leq c \\
&x_i\in\lbrace 0,1\rbrace &\forall i\in N
\end{array}
解法

NP困難。厳密解法では分枝限定法や動的蚈画法、近䌌解法では局所探玢法などが甚いられる。動的蚈画法は以䞋。「$i$ 個目たでの品物たでで、ナップサックの容量が $j$ のずきの最適倀」をDPテヌブルずする。

dp ← (N+1)×(c+1)の配列
for each j = 0 to c
    dp[0][j] = 0
end for

for each i = 1 to N
    for each j = 0 to c
        dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w_i] + p_a)
    end for
end for

PRINT dp[N][C]

8.5.2 ビンパッキング問題

問題

容量 $c$ の箱ず $n$ 個の荷物 $N=\lbrace 1,\cdots,n\rbrace$ が䞎えられおおり、荷物 $j\in N$ の容量を $w_j$ ずするずき、すべおの荷物を詰合せるのに必芁な箱の数を最小にする詰合せを求める問題。

$x_{ij}$ を箱 $i$ に荷物 $j$ が入っおいるかのバむナリ倉数、$y_i$ を箱 $i$ が䜿われおいるかのバむナリ倉数ずするず、定匏化は以䞋。

\begin{array}
&\min &\displaystyle\sum_{i=1}^n y_i \\
s.t. &\displaystyle\sum_{j=1}^n w_jx_{ij}\leq cy_i &\forall i\in N \\
&\displaystyle\sum_{i=1}^n x_{ij} = 1 &\forall j \in N \\
&y_i\in\lbrace 0,1\rbrace &\forall i\in N \\
&x_{ij}\in\lbrace 0,1\rbrace &\forall i\in N, j\in N
\end{array}
解法

NP困難。分枝限定法や貪欲法・列生成法をはじめずする近䌌解法が甚いられる。

8.5.3 その他

以䞋のような問題がある。

  • 1次元資材切出し問題母材から様々な倧きさ䜍の必芁ずされる量の資材を切出すずきに䜿甚する母材を最小にする問題。
  • 長方圢詰蟌み問題様々な倧きさの長方圢を2次元平面のある領域内に重なりのないように配眮する問題。

8. 配眮問題

斜蚭配眮問題ずは、斜蚭の配眮可胜な候補点ず斜蚭に割圓たる察象を䞎件ずし、ある基準を満たす斜蚭の配眮を決定する問題。以䞋は斜蚭配眮問題の䟋。

  • メディアン問題顧客から最も近い斜蚭ぞの距離の総和を最小化するように斜蚭を配眮する問題。
  • センタヌ問題顧客から最も近い斜蚭ぞの距離の最倧倀を最小化するように斜蚭を配眮する問題。

8.6.1 容量制玄なし斜蚭配眮問題

問題

顧客の集合 $D$ ず斜蚭の配眮可胜地点の集合 $F$ が䞎えられ、各斜蚭 $i\in F$ を開蚭するための固定コストを $f_i$、各顧客 $j\in D$ ず各斜蚭 $i$ の間の単䜍需芁圓たりの茞送コストを $c_{ij}$ ずするずき、斜蚭開蚭固定コストず茞送コストの総和が最小ずなるように、開蚭する斜蚭を遞択する問題。

$x_{ij}$ を斜蚭 $i$ によっお顧客 $j$ の需芁が満たされる割合、$y_i$ を斜蚭 $i$ を開蚭するか吊かのバむナリ倉数ずしお、定匏化は以䞋。MIPになる。

\begin{array}
&\min &\displaystyle\sum_{i\in F}f_iy_i+\sum_{i\in F}\sum_{j\in D}c_{ij}x_{ij} \\
s.t. &x_{ij}\leq y_i &\forall i\in F, j\in D \\
&\displaystyle\sum_{i\in F}x_{ij}=1 &\forall j\in D \\
&x_{ij}\geq 0 &\forall i\in F, j\in D \\
&y_i\in\lbrace 0,1\rbrace &\forall i\in F
\end{array}
解法

斜蚭配眮問題の倚くはNP困難。緩和手法や近䌌手法が甚いられる。

8.7 割圓問題・マッチング問題

ある集合の各芁玠に぀いおそれぞれ別の集合のどの芁玠に割圓おるず、さたざたな制玄条件を満たし぀぀、最もよい割圓を行うこずができるのかを決定する問題。

8.7.1 2次割圓問題

問題

察象物ず同数の割圓先が䞎えられおいるずき、割圓先間の茞送量ず距離の垭の総和を最小化する問題。
より具䜓的には、察象物 $P=\lbrace P_1,\cdots,P_n\rbrace$ の割圓先 $L=\lbrace L_1,\cdots,L_n\rbrace$ を考え、察象物 $P_i$ ず $P_j$ の間の茞送量 $q_{ij}$ ず割圓先 $L_k$ ず $L_l$ の間の距離 $d_{kl}$ が䞎えられおいるずき、茞送量ず距離の積の総和を最小にする割圓を求める問題。

$x_{ij}$ を察象物 $P_i$ が割圓先 $L_j$ に䜍眮するか吊かのバむナリ倉数ずし、以䞋のように定匏化される。

\begin{array}
&\min &\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{k=1}^{n}\sum_{l=1}^{n}q_{ij}d_{kl}x_{ik}x_{jl} \\
s.t. &\displaystyle\sum_{j=1}^{n}x_{ij}=1 &\forall i\in V \\
&\displaystyle\sum_{i=j}^{n}x_{ij}=1 &\forall j\in V \\
&x_{ij}\in\lbrace 0,1\rbrace &\forall i,j\in V
\end{array}

工堎内の機械の配眮や倖郚蚘憶装眮䞊でのデヌタ配列などの甚途がある。

解法

NP困難。巡回セヌルスマン問題ず同じく、目的関数を最小にする順列を求める問題だが、目的関数が2次で難しい。分枝限定法やメタヒュヌ。

8.7.2 䞀般化割圓問題

問題

䞎えられたいく぀かの仕事を゚ヌゞェントに割圓おるずき、割圓に䌎うコストの総和を最小化する問題。䟋えば以䞋。

$n$ 個の仕事 $J=\lbrace 1,\cdots,n\rbrace$ ず $m$ 人の゚ヌゞェント $I=\lbrace 1,\cdots,m\rbrace$ に察しお、仕事 $j\in J$ を゚ヌゞェント $i\in I$ に割圓おたずきのコスト $c_{ij}$ ず資源の芁求量 $a_{ij}$、および各゚ヌゞェント $i\in I$ の利甚可胜資源量 $b_i$ が䞎えられおいる。
それぞれの仕事を必ずいずれか1぀の゚ヌゞェントに割圓なければならず、たた、各゚ヌゞェントに割圓おられた仕事の総資源芁求量が、その゚ヌゞェントの利甚可胜資源量を超えないようにしなくおはならない。このずき、割圓に䌎うコストの総和を最小化するような割圓を求めよ。

$x_{ij}$ を仕事 $j$ を゚ヌゞェント $i$ に割圓おるか吊かのバむナリ倉数ずしお、定匏化は以䞋。

\begin{array}
&\min &\displaystyle\sum_{i\in I}\sum_{j\in J}c_{ij}x_{ij} \\
s.t. &\displaystyle\sum_{j\in J}a_{ij}x_{ij}\leq b_i &\forall i\in I \\
&\displaystyle\sum_{i\in I}x_{ij}=1 &\forall j\in J \\
&x_{ij}\in\lbrace 0,1\rbrace &\forall i\in I,j\in J
\end{array}
解法

実行可胜解が存圚するかの刀定問題がNP完党。䞀郚の制玄を緩和しお実行䞍可胜解も探玢の察象ずする方法が有効。

8.7.3 最倧マッチング問題

問題

無向グラフ $G=(V,E)$ に察しお゚ッゞの本数が最倧のマッチングを求める問題。

$A$ を接続行列、$\boldsymbol{x}$ ず゚ッゞが存圚するか吊かのバむナリ倉数のベクトルずしお、定匏化は以䞋。

\begin{array}
&\max &\boldsymbol{1}^T\cdot\boldsymbol{x} \\
s.t. &A\boldsymbol{x}\leq\boldsymbol{1} \\
&x(e)\in\lbrace 0,1\rbrace &\forall e\in E
\end{array}

仕事の割圓や孊生ず授業の割り圓お、人員の配属割圓などに甚いられる。

解法

2郚グラフの堎合、片方のグラフに仮想的な゜ヌスノヌド、もう片方のグラフに仮想的なシンクノヌドを定矩しお繋ぎ、すべおの゚ッゞの容量を1ずしお最倧流問題を考えればよい。

䞀般のグラフの堎合ぱドモンズ法 (ただ理解できおいないので、理解したら远蚘したす)。

8.7.4 最倧重みマッチング問題

問題

各蟺 $e\in E$ の重み $w(e)$ が䞎えられおいる無向グラフ $G=(V,E)$ に察し、重みの和 $\displaystyle\sum_{e\in M}$ が最倧のマッチング $M$ を求める問題。
$\delta(v)$ をノヌド $v$ に接続しおいる゚ッゞ集合、$x(e)$ を゚ッゞ $e$ がマッチング $M$ の芁玠か吊かのバむナリ倉数ずしお、定匏化は以䞋。

\begin{array}
&\max &\displaystyle\sum_{e\in E}w(e)x(e) \\
s.t. &\displaystyle\sum_{e\in\delta(v)}x(e)\leq 1 &\forall v\in V \\
&x(e)\in\lbrace 0,1\rbrace &\forall e\in E
\end{array}
解法

2郚グラフではハンガリヌ法。䞀般グラフでぱドモンズ法。最倧重み完党マッチングの堎合のハンガリヌ法は以䞋。

for each element in A
    element ← max_element - element
end for

for each row in A
    element ← element - min_element_in_row
end for
for each col in A
    element ← element - min_element_in_col
end for

while 倀が0の成分のみで完党マッチングができない
    0を含んでいる成分がなくなるように行・列を削陀しお行列B生成 (削陀する行・列数を最小にする)

    for each element in A
        if element is not in 削陀された行・列
            element ← element - min_element_in_B
        end if
    end for
end while

倀が0の成分のみの完党マッチングを出力

9. 解法

9.1 厳密解法

9.1.1 分枝限定法 (Branch and Bound)

倉数の倀で堎合分けしお元の問題を子問題に分割する操䜜ず (分枝操䜜)、子問題以䞋に最適解が存圚するかを確認する操䜜 (限定操䜜) ずを繰り返しお解を求める手法。
党探玢をベヌスずしお厳密解法だが、凊理を途䞭で止めれば暫定解が埗られる。

ナップザック問題を䟋にずるず以䞋のように凊理される。

  1. 貪欲法などで初期解を埗る。初期解はこの問題の䞋界。
  2. ただ怜蚎しおいない品物を遞んだ堎合ず遞ばなかった堎合でそれぞれ子問題を䜜る (分枝操䜜)
  3. 子問題では線圢緩和により解を埗お、解の倀が䞋界以䞋ならその子問題は切り捚おる (限定操䜜)。捚おない堎合は子問題を再垰的に解く。いずれかの子問題で解が埗られれば、䞋界を曎新する。
  4. すべおの子問題が解き、䞋界に察応する

9.1.2 切陀平面法 (Cutting-Plane Method)

線圢緩和問題の最適解から始めお、敎数解を残し぀぀緩和解を陀去する制玄を远加する手続きを繰り返し適甚する。劥圓䞍等匏 (敎数解を残す制玄) の䞭で緩和解を陀くものを切陀平面ず蚀い、切陀平面を远加するこずで解空間を狭めおいく。

  1. 線圢緩和問題を解く
  2. 緩和解が敎数解なら終了
  3. 劥圓䞍等匏を远加しお1.に戻る

9.2 近䌌解法

9.2.1 貪欲法

問題の意思決定察象に察し、局所的な情報だけで順に意思決定しおいく。䟋えばナップザック問題で、$p_i/w_i$ が倧きいものから順に商品を遞んでいくなど。
䞀般には近䌌解しか埗られないが、クラスカル法・プリム法・ゞョン゜ン法などでは厳密解を埗られる。

9.2.2 局所探玢法

名前の通り今埗られおいる解の近傍を探玢しおいく。

  1. 初期解 $\boldsymbol{x}$ をいずれかの方法により構築する
  2. è§£ $\boldsymbol{x}$ の近傍内によりよい解があれば解 $\boldsymbol{x}$ を曎新し、ステップ2に戻る。よりよい解がなければ終了する。
    ナップザック問題を䟋にずるず近傍には以䞋のようなものがある。
  • 挿入近傍リストに入っおいない品物を1぀遞び、リストに入れる
  • 亀換近傍リストに入っおいるものから1぀、入っおいないものから1぀遞び亀換する
  • $k$-opt近傍$k$ 個の芁玠を倉化させる。リストに入っおいるものから $k-l$ 個、入っおいないものから $l$ 個遞び亀換する、など

䞀般に倧域的最適解には到達できないが、局所的最適解は比范的容易に求められる。

9.2.3 メタヒュヌリスティクス

問題に䟝存しない圢匏で近䌌的に解を探玢・改善する手法。以䞋のような工倫によりよい解を埗られる。これらをバランスよく実珟するこずが重芁。

  • 集䞭化よい解呚蟺を集䞭的に探玢する
  • 倚様化局所的最適解に陥らないように、幅広く探玢する
9.2.3.1 倚スタヌト局所探玢法 (Multi-start Local Search)

初期解を倉えお局所探玢法を繰り返す方法。初期解の䜜成には乱数を甚いる。

途䞭たでの局所最適解を初期解に反映させる方法もある。適応的倚スタヌト局所探玢法ずいう。

9.2.3.2 遺䌝的アルゎリズム (Generic Algorithm)

解を遺䌝子ずしお衚珟し、耇数の遺䌝子を甚いお亀叉や突然倉異などの操䜜ず淘汰による䞖代亀代によっお、解を探玢する。

亀叉や突然倉異は以䞋のむメヌゞ。

9.2.3.3. 粒子矀最適化 (Particle Swarm Optimization)

倚数の粒子によっお集団を圢成し、集団に含たれる粒子同士が情報亀換するこずにより探玢を進める。

  1. 初期化すべおの粒子 $k$ に察しお、初期䜍眮 $x_k(0)$ ず初期速床 $v_k(0)$ を䞎える
  2. 䜍眮曎新速床を甚いお粒子の䜍眮を曎新する。$x_k(t+1)=x_k(t)+v_k(t)$
  3. 速床曎新よい解の方向に向かうように速床を曎新する。$x_k^p(t)$ は $k$ 番目の粒子の䞭での過去最良解、$x^g(t)$ はタむムステップ $t$ における最良解、$w, c, r$ は定数。
v_k(t+1)=wv_k(t)+c_1r_1\left(x^{p}_k(t)-x_k(t+1)\right)+c_2r_2\left(x^{g}(t)-x_k(t+1)\right)
9.2.3.4. 焌きなたし法 (Simulated Annealing)

高枩状態からはじめ、探玢を繰り返す䞭で䜎音状態にしおいく。高枩では改悪を含む探玢を蚱容、䜎枩では通垞の局所探玢をするこずで、局所最適解に陥らないようにする。

  1. 初期枩床 $T$ を蚭定する
  2. 初期解を蚭定する
  3. 冷华率 $\alpha$ で枩床を䞋げる。$T←\alpha T$。
  4. 次の解をランダムにサンプリングする。
    4-1. サンプリングした解が珟圚の解よりよい堎合、曎新する。
    4-2. サンプリングした解が珟圚の解より悪い堎合、改悪幅 $\Delta E$ に察しお確率 $\displaystyle Prob\left(U(0,1)>\exp\left(-\frac{\Delta E}{T}\right)\right)$ で曎新する。
  5. 閟倀を満たす解を埗られるたで3.ず4.を繰り返す。
9.2.3.5. 人工蜂コロニヌアルゎリズム (Artificial Bee Colony Algorithm)

ミツバチの採逌行動を暡す。収穫バチ・远埓バチ・偵察バチを定矩。

  • 収穫バチ぀の食糧源に蜜を取りに行き、その近傍も探玢する
  • 远埓バチ収穫バチの情報に基づいお目暙の食糧源を決め、蜜を取りに行く
  • 偵察バチ食糧源の蜜が尜きたら新しい食糧源を決める。
    以䞋のようなアルゎリズム。
  1. 初期食糧源を生成する
  2. 収穫バチフェヌズ。自分の食糧源近傍を探玢し、よりよい食糧源があれば曎新する。たた、蜜の取埗回数をむンクリメントする
  3. 远埓バチフェヌズ。評䟡倀の高い食糧源を高確率で遞択し、蜜の取埗回数をむンクリメントする
  4. 偵察バチフェヌズ。指定回数以䞊蜜を取埗した食糧源を、他の食糧源に眮き換える。探玢の打ち切りを瀺す
9.2.3.6. タブヌ探玢法 (Tabu Search)

タブヌリストず呌ばれる過去の曎新履歎を甚いお、同じ解ぞの探玢をしないようにする。局所解に萜ちないための工倫。

  1. 基準個䜓を生成する
  2. 近傍個䜓を生成する (タブヌリストに含たれる個䜓は生成しない)
  3. 基準個䜓から最良個䜓ぞの遷移をタブヌリストに远加 (最良個䜓そのものをタブヌリストに远加する堎合もある)
  4. 最良個䜓を基準個䜓にする
  5. 最良個䜓が終了条件を満たせば終了、それ以倖の堎合2.に戻る。

9.2.4. 列生成法 (Column Generation Algorithm)

パタヌンを党列挙するず膚倧になり線圢緩和問題を解くのも難しい堎合に、パタヌンを䞀郚だけ列挙しお近䌌解を埗る方法。

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?