logo

ベルツルアルゴリズム: 最小内包ディスク問題の解法 📂位相データ分析

ベルツルアルゴリズム: 最小内包ディスク問題の解法

定義

最小包含円

n>dn > d としよう。dd次元のユークリッド空間で与えられた有限集合P={pk}k=1nRdP = \left\{ p_{k} \right\}_{k=1}^{n} \subset \mathbb{R}^{d}に対して、以下のような最適化問題最小包含円問題smallest Enclosing Disk Problemという。 Minimizer0subject tocpk2rcRd,k=1,,n \begin{matrix} \text{Minimize} & r \ge 0 \\ \text{subject to} & \left\| c - p_{k} \right\|_{2} \le r \end{matrix} \\ c \in \mathbb{R}^{d} , k = 1, \cdots , n

ヒント

これは正確には定理と呼ぶほどのものではないが、この問題を扱う際に知っておくと良い事実である。

  • PPアフィン独立である場合、円の境界にはPPの点が最少で22から最大でd+1d+1個まで存在する。つまり、点が重なっていたり、3点以上が一直線上にあるような場合を除き、正確に2md+12 \le m \le d+1個の点で最小包含円が一意に定まる。
    • 例えば、d=2d = 2次元平面では、円は正確に3つの点で一意に定まる。
  • 一般にn>d+1n > d+1個の点が与えられた場合、アルゴリズムalgorithmではなく明示的な公式explicit formulaを見つけることは不可能とされている。境界上に最小包含円を一意に定める点をサポートsupportと呼ぶが、単に点を持っているだけでは誰がサポートかを知る方法がないためである。
    • このように境界上の点をサポートと呼ぶのは、幾何学の問題で一般的である。サポートベクターマシンでは、サポートが境界上の点を意味する。
  • したがって、この問題を解くアルゴリズムを開発するということは、境界上のサポートを見つけることを保証するか、それを迅速に見つける方法に関する研究と言っても過言ではない。ただし、現在使用されているアルゴリズムでは、その根本的なアイデアはほぼウェルツルのものに基づいており、その改良や変種をまとめて単にウェルツルアルゴリズムwelzl Algorithmと呼んでいる1。少なくともこの投稿で紹介されている後続の研究はすべてその系統に属している。

解法

ウェルツルアルゴリズム 2

ウェルツルアルゴリズムwelzl Algorithmは、最小包含円問題を解く再帰的なrecursive解法である。基本的には、点を一つずつ追加したり削除したりしながらサポートを見つけ、そのようにして得られた円が与えられたすべての点を包含しているかどうかを繰り返し確認する。

点がnd+1n \le d+1個の場合にそれらを包含する円を正確に見つけることは比較的簡単であるため、そのような関数が存在すると仮定する。実際の実装では、これが思ったほど単純ではないが、最小包含円問題の核心ではない。

擬似コード 3

(c,r)(c,r) = welzl(P,S)\left( P, S \right)

  • Input: 与えられた点の集合P={pk}k=1nRdP = \left\{ p_{k} \right\}_{k=1}^{n} \subset \mathbb{R}^{d}とサポーターの候補SPS \subset Pを受け取る。ヒントで述べたように、Sd+1\left| S \right| \le d+1である。
  • Output: PPのすべての点を包含する最も小さい円の中心ccと半径rrのタプル(c,r)(c,r)を得る。中心がccで半径がrr閉じた球D=B[c,r]D = B \left[ c,r \right]と表す。

(c,r)(c,r) = trivial(S)\left( S \right)

  • Input: Sd+1\left| S \right| \le d+1の点の集合SPS \subset Pを受け取る。
  • Output: SSのすべての点を包含する最も小さい円の中心ccと半径rrのタプル(c,r)(c,r)を得る。welzlに比べて単純であるという仮定に従い、trivialの擬似コードは別途記述しない。

function welzl(P,S)\left( P, S \right)
  S:=S := \emptyset
  if P=P = \emptyset or S=d+1\left| S \right| = d+1 then
    return trivial(S)\left( S \right)
  else
    choose pPp \in P
    D:=D := welzl(P{p},S)\left( P \setminus \left\{ p \right\}, S \right)
    if pDp \in D then
      return DD
    end if
  end if
  return welzl(P{p},S{p})\left( P \setminus \left\{ p \right\} , S \cup \left\{ p \right\} \right)
end function


welzlは再帰関数として記述されるため、実際のプログラムではtrivialから計算が始まることになる。welzlの擬似コードで登場するchooseは、choosexXx \in Xのように書かれ、集合XXから要素xx一様ランダムに選ぶキーワードkeywordである。

最後にwelzl(P{p},S{p})\left( P \setminus \left\{ p \right\} , S \cup \left\{ p \right\} \right)をリターンすること自体が、PPにある点を一つずつ取り除いてSSに入れてみてサポートを見つけるプロセスであることが分かれば、このアルゴリズムを理解したことになる。

説明

最小包含円の制約条件を文字通りに解釈してみよう。cpk2r\left\| c - p_{k} \right\|_{2} \le rを満たすccrrを見つけるということは、少なくとも与えられた点をすべて包むことができる中心centreccと半径radiusrrを見つけることを意味する。しかし、ユークリッド空間は非常に広いため、ccがどこであってもrrを無制限に大きくすれば、この制約条件は必ず満たせる。当然のことながら、私たちの関心事は、それをしながらrrを最小化すること、つまり与えられた点を包む最も小さいを見つけることである。

単純化の問題点

包含enclosingは、数学全般で広く使われている表現ではないが、発音そのままにインクロージングと言うにはあまりに長くて感じがこないため、任意に翻訳した。そもそもインクロージングenclosing自体がバウンディングboundingを圧倒しているわけではない。また、円盤diskも内部を含む閉じた球の意味で使われたが、実際の英語表現では単にボールballスフィアsphereもよく使われる。単語や翻訳にこだわらないようにしよう。

歴史

早くもライムント・ザイデルraimund Seidelによって線形計画法に基づく解法が知られていた。

1991年にエモ・ヴェルツルemo Welzlが彼の論文で再帰的なrecursiveアルゴリズムを提案し、いわゆるSOTAstate Of The Artを記録した。2022年現在でも、一般的な最小包含ディスク問題ではこのヴェルツルのアルゴリズムが最も優れているとされており、以降の多くの研究はこれを改良する形で行われてきた。

1999年にはベルント・ゲルトナーbernd Gärtnerが、ヴェルツルのアルゴリズムに従いつつも、二次計画法quadratic Programmingの応用を導入してこれを改善した。4 彼のコードはC++で書かれており、チューリッヒ連邦工科大学のウェブサイト5で実際の実装を見ることができる。

2003年にはカスパー・フィッシャーkaspar Fischerが、ゲルトナーとの研究で線形計画法シンプレックス法で登場するブランドのルールを導入し、高速なコードを作成した。6 2013年にはトーマス・ラーソンthomas Larssonが、近似的なものではなく、速度と堅牢性robustnessを備えた方法を提案した。7

ここまで紹介された研究を参照すると、ヴェルツル-ゲルトナー-フィッシャーと続く大きな流れを確認することができる。

応用

ヴェルツルアルゴリズムの代表的な応用は、チェックコンプレックスの構築である。


  1. Edelsbrunner, Harer. (2010). Computational Topology An Introduction: p73~75. ↩︎

  2. Welzl. (1991). Smallest enclosing disks (balls and ellipsoids). https://doi.org/10.1007/BFb0038202 ↩︎

  3. https://en.wikipedia.org/wiki/Smallest-circle_problem#Welzl's_algorithm ↩︎

  4. Gärtner. (1999). Fast and robust smallest enclosing balls. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.90.5783&rep=rep1&type=pdf ↩︎

  5. https://people.inf.ethz.ch/gaertner/subdir/software/miniball.html ↩︎

  6. Kaspar Fischer. (2003). Fast Smallest-Enclosing-Ball Computation in High Dimensions. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.90.5783&rep=rep1&type=pdf ↩︎

  7. Thomas Larsson. (2013). Fast and Robust Approximation of Smallest Enclosing Balls in Arbitrary Dimensions. https://doi.org/10.1111/cgf.12176 ↩︎