ベルツルアルゴリズム: 最小内包ディスク問題の解法
定義
最小包含円
としよう。次元のユークリッド空間で与えられた有限な集合に対して、以下のような最適化問題を最小包含円問題smallest Enclosing Disk Problemという。
ヒント
これは正確には定理と呼ぶほどのものではないが、この問題を扱う際に知っておくと良い事実である。
- がアフィン独立である場合、円の境界にはの点が最少でから最大で個まで存在する。つまり、点が重なっていたり、3点以上が一直線上にあるような場合を除き、正確に個の点で最小包含円が一意に定まる。
- 例えば、次元平面では、円は正確に3つの点で一意に定まる。
- 一般に個の点が与えられた場合、アルゴリズムalgorithmではなく明示的な公式explicit formulaを見つけることは不可能とされている。境界上に最小包含円を一意に定める点をサポートsupportと呼ぶが、単に点を持っているだけでは誰がサポートかを知る方法がないためである。
- このように境界上の点をサポートと呼ぶのは、幾何学の問題で一般的である。サポートベクターマシンでは、サポートが境界上の点を意味する。
- したがって、この問題を解くアルゴリズムを開発するということは、境界上のサポートを見つけることを保証するか、それを迅速に見つける方法に関する研究と言っても過言ではない。ただし、現在使用されているアルゴリズムでは、その根本的なアイデアはほぼウェルツルのものに基づいており、その改良や変種をまとめて単にウェルツルアルゴリズムwelzl Algorithmと呼んでいる1。少なくともこの投稿で紹介されている後続の研究はすべてその系統に属している。
解法
ウェルツルアルゴリズム 2
ウェルツルアルゴリズムwelzl Algorithmは、最小包含円問題を解く再帰的なrecursive解法である。基本的には、点を一つずつ追加したり削除したりしながらサポートを見つけ、そのようにして得られた円が与えられたすべての点を包含しているかどうかを繰り返し確認する。
点が個の場合にそれらを包含する円を正確に見つけることは比較的簡単であるため、そのような関数が存在すると仮定する。実際の実装では、これが思ったほど単純ではないが、最小包含円問題の核心ではない。
擬似コード 3
= welzl
- Input: 与えられた点の集合とサポーターの候補を受け取る。ヒントで述べたように、である。
- Output: のすべての点を包含する最も小さい円の中心と半径のタプルを得る。中心がで半径がの閉じた球をと表す。
= trivial
- Input: の点の集合を受け取る。
- Output: のすべての点を包含する最も小さい円の中心と半径のタプルを得る。
welzl
に比べて単純であるという仮定に従い、trivial
の擬似コードは別途記述しない。
function welzl
if or then
return trivial
else
choose
welzl
if then
return
end if
end if
return welzl
end function
welzl
は再帰関数として記述されるため、実際のプログラムではtrivial
から計算が始まることになる。welzl
の擬似コードで登場するchoose
は、choose
のように書かれ、集合から要素を一様ランダムに選ぶキーワードkeywordである。
最後にwelzl
をリターンすること自体が、にある点を一つずつ取り除いてに入れてみてサポートを見つけるプロセスであることが分かれば、このアルゴリズムを理解したことになる。
説明
最小包含円の制約条件を文字通りに解釈してみよう。を満たすとを見つけるということは、少なくとも与えられた点をすべて包むことができる中心centreと半径radiusを見つけることを意味する。しかし、ユークリッド空間は非常に広いため、がどこであってもを無制限に大きくすれば、この制約条件は必ず満たせる。当然のことながら、私たちの関心事は、それをしながらを最小化すること、つまり与えられた点を包む最も小さい球を見つけることである。
単純化の問題点
包含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
ここまで紹介された研究を参照すると、ヴェルツル-ゲルトナー-フィッシャーと続く大きな流れを確認することができる。
応用
ヴェルツルアルゴリズムの代表的な応用は、チェックコンプレックスの構築である。
Edelsbrunner, Harer. (2010). Computational Topology An Introduction: p73~75. ↩︎
Welzl. (1991). Smallest enclosing disks (balls and ellipsoids). https://doi.org/10.1007/BFb0038202 ↩︎
https://en.wikipedia.org/wiki/Smallest-circle_problem#Welzl's_algorithm ↩︎
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 ↩︎
https://people.inf.ethz.ch/gaertner/subdir/software/miniball.html ↩︎
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 ↩︎
Thomas Larsson. (2013). Fast and Robust Approximation of Smallest Enclosing Balls in Arbitrary Dimensions. https://doi.org/10.1111/cgf.12176 ↩︎