説明

任意の実数群から探索点の最近傍値を探索する方法

【課題】任意の実数群から探索点の最近傍値を高速に探索する。
【解決手段】実数群(x[1],x[2],x[3]…x[n])から、探索点qの最近傍値を探索する方法であって、探索用データベースを作るステップと、探索データベースを探索するステップとを含む。探索用データベースは、実数群の区間(x[1]〜x[n])をバケットで隙間無くかつ等間隔でm個に区分したバケット列を有する。各バケットには、バケット番号と、その中に含まれる実数の個数であるバケットサイズとが記憶される。各バケットには、バケットサイズがゼロでなくかつ当該バケットに最も近いバケットのバケット番号を示すラストフィルドバケットが記憶される。探索ステップは、探索点qが属するバケットを計算し、そのバケットのバケットサイズが0でない場合、当該バケット内から最近傍値を計算する。バケットサイズが0の場合、ラストフィルドバケットから最近傍値を計算する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータを利用した計算方法であり、任意の実数群から探索点の最近傍値を高速に探索することができる方法に関する。
【背景技術】
【0002】
コンピュータを用いた数値計算において、実数が小さいものから順番に並んでいる実数群(x[1],x[2], x[3] … x[n])に対して、ある探索対象となる探索点qが与えられ、その探索点qに最も近い最近傍値を前記実数群の中から探索しなければならない場合がある。このような状況の例としては、コンピュータを使用した例えば空力シミュレーション計算において、運動する物体(ラグランジュ要素)の表面座標を、構造格子(オイラー要素)の座標系に取り込む場合等が挙げられる。
【0003】
しかしながら、上記実数群(x[1],x[2], x[3] … x[n])のサイズが大きくなった場合(例えばnが1億を超えるような場合)、探索対象となる実数qの数が多い場合(例えば100万を超える様な場合)、又はこのような探索を繰り返し何度も行う場合、計算時間が数時間にも及ぶ場合がある。従って、計算コストを低減するために、従来より、上述の計算時間を短縮する試みが種々提案されている。
【0004】
従来、この種の課題を解決するために、大きく分けて下記二つの方法が提案されている。第1の方法は、実数x[1] からx[n]まで順番にqと値の大小を比較し、大小関係が逆転する値が見つかるまで探索する方法である。この場合、例えば、下式に示す条件を満たすインデックス( ipoint )が見つかれば、そのインデックス( ipoint ) が解となる。
x[ipoint] ≦ q < x[ipoint+1]
【0005】
また、他の方法として、2分法(bisection method)又はkd-tree methodが提案されている。これらの方法は、近年、良く使用されている探索手法であり、上記方法よりも効率良く探索点qに近い数を見つけることができる。
【0006】
さらに、近年では、これらの二つの手法を組み合わせたANN(Approximate Nearest Neighbor)解法も提案されている。
【0007】
関連する先行技術としては次のものがある。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2003−242151号公報
【非特許文献】
【0009】
【非特許文献1】荒井英剛、他2名共著、「空間分割と直交変換の統合による高次元最近傍探索の高速化」 社団法人情報処理学会研究報告 2006/3/16
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、従来の方法では、探索する対象が増え多次元になるほどその効果が減少し、30次元程度からほぼ全探索に近くなる。また、探索規模が大きくなるほど、ツリー構造が複雑化し、探索範囲も大きくなり計算に多くの時間を要するという欠点がある。
【0011】
本発明は、以上のような問題点に鑑み案出なされたもので、探索に先立ち、前記実数群の区間(x[1]〜x[n])を小領域であるバケットで隙間無くかつ等間隔に区分した探索用データベースを作成し、そこに所定の情報を記憶させることにより、計算時間を大幅に短縮しうる任意の実数群から探索点の最近傍値を探索する方法を提供することを目的とする。
【課題を解決するための手段】
【0012】
本発明のうち請求項1記載の発明は、実数が小さいものから順番に並んでいる実数群(x[1],x[2], x[3] … x[n])に対して、ある探索対象となる探索点qが与えられ、その探索点qに最も近い最近傍値を前記実数群の中から探索する方法であって、コンピュータ装置の記憶部に、探索用データベースを作る前処理ステップと、前記コンピュータ装置が前記探索データベースを使用して前記探索を行う探索ステップとを含み、前記探索用データベースは、前記実数群の区間(x[1]〜x[n])を小領域であるバケットで隙間無くかつ等間隔でm個に区分されたバケット列を有し、前記各バケットには、先頭バケットから末尾バケットまで順番に割り当てられた固有のバケット番号と、各バケットの中に含まれる前記実数の個数であるバケットサイズとが記憶されるとともに、少なくとも前記先頭バケットを除いた各バケットには、前記バケットサイズがゼロでなくかつ当該バケットに最も近いバケットのバケット番号を示すラストフィルドバケットが記憶され、前記探索ステップは、前記探索点qが属するバケットを計算する第1のステップと、前記計算されたバケットのバケットサイズを参照する第2のステップと、前記参照されたバケットサイズが0でない場合、当該参照されたバケットから最近傍値を計算する一方、前記参照されたバケットサイズが0の場合、そのバケットのラストフィルドバケットが示すバケットから前記最近傍値を計算する第3のステップとを含むことを特徴とする。
【0013】
また請求項2記載の発明は、前記最近傍値は、前記探索点を超えない該探索点に最も近い値とし、前記探索用データベースには、前記ラストフィルドバケットとして、当該バケットよりも先頭バケット側で当該バケット番号に最も近いバケット番号が記憶されている請求項1記載の最近傍値を探索する方法である。
【0014】
また請求項3記載の発明は、前記探索用データベースの少なくともバケットサイズが0でないバケットには、そのバケット内の実数のうちの最小値及び最大値がさらに記憶されている請求項2記載の最近傍値を探索する方法である。
【0015】
また請求項4記載の発明は、前記第2のステップにおいて、参照されたバケットサイズが0でない場合、前記探索点qと、そのバケットの最小値とを比較し、探索点qが最小値よりも小さい場合には、そのバケットのラストフィルドバケットの最大値を最近傍値とする請求項3記載の最近傍値を探索する方法である。
【0016】
また請求項5記載の発明は、前記第2のステップにおいて、参照されたバケットサイズが0でない場合、前記探索点qと、そのバケットの最小値とを比較し、前記探索点qが最小値以上の場合には、そのバケットに含まれる実数に対してx[ ipoint ] ≦q<x[ ipoint + 1 ]となるx[ ipoint ] を最近傍値とする請求項3又は4記載の最近傍値を探索する方法である。
【0017】
また請求項6記載の発明は、複数の多次元の座標値(x,y,z…)が与えられており、探索点q(x1,y1,z1)が与えられたとき、前記座標値を各次元毎の実数群に分け、
各実数群に対して請求項1乃至5のいずれかに記載された探索方法を適用することで前記探索点qの各座標に最も近い最近傍値を各次元の実数群の中からそれぞれ探索することを特徴とする最近傍値を探索する方法である。
【発明の効果】
【0018】
本発明では、実数が小さいものから順番に並んでいる実数群(x[1],x[2], x[3] … x[n])に対して、ある探索対象となる探索点qが与えられ、その探索点qに最も近い最近傍値を前記実数群の中から探索する方法として、コンピュータ装置の記憶部に、探索用データベースを作るステップと、前記コンピュータ装置が前記探索データベースを使用して前記探索を行う探索ステップとを含む。
【0019】
前記探索用データベースは、前記実数群の区間(x[1]〜x[n])を小領域であるバケットで隙間無くかつ等間隔でm個に区分されたバケット列を有し、前記各バケットには、先頭バケットから末尾バケットまで順番に割り当てられた固有のバケット番号と、各バケットの中に含まれる前記実数の個数であるバケットサイズとが記憶される。また、探索用データベースは、少なくとも前記先頭バケットを除いた各バケットに、バケットサイズがゼロでなくかつ当該バケット番号に最も近い近接バケット番号を示すラストフィルドバケットが記憶される。なお先頭バケットには、例えばラストフィルドバケットとして、自らのバケット番号を記憶させることができる。
【0020】
次に、探索ステップでは、前記探索点qが属するバケットを計算する第1のステップと、前記計算されたバケットのバケットサイズを参照する第2のステップと、前記参照されたバケットサイズが0でない場合、当該参照されたバケットから最近傍値を計算する一方、前記参照されたバケットサイズが0の場合、そのバケットのラストフィルドバケットが示すバケットから前記最近傍値を計算する第3のステップとを含む。
【0021】
バケットは、等間隔で設定されている。従って、前記第1のステップは、単純な一次式で所定のバケットを見つけることができる。
【0022】
また、第3のステップでは、参照されたバケットのバケットサイズが0ではない場合、当該バケットに含まれる実数から、また、バケットサイズが0の場合にはそのバケットに記憶されているラストフィルドバケットに含まれる実数から最近傍値をそれぞれ計算できる。従って、第3のステップでは、いずれの場合でも、一つのバケットだけを対象とし、その中の実数から最近傍値を見つければ良い。このため、計算時間を大幅に低減することができる。
【図面の簡単な説明】
【0023】
【図1】本発明の探索を行うコンピュータ装置のブロック図である。
【図2】本発明の探索方法の処理手順を示すフローチャートである。
【図3】実数群及び探索用データベースの構造を示す線図である。
【図4】探索用データベースを作成する処理手順を示すフローチャートである。
【図5】ラストフィルドバケットを決定する処理手順の一例を示すフローチャートである。
【図6】探索ステップの処理手順の一例を示すフローチャートである。
【図7】空力シミュレーションのモデルを視覚化した線図である。
【図8】バケット座標とバケット番号との関係を示すグラフである。
【発明を実施するための形態】
【0024】
以下、本発明の実施の一形態が図面に基づき説明される。
本発明は、実数が小さいものから順番に並んでいる実数群(x[1],x[2], x[3] … x[n])に対して、ある探索対象となる探索点qが与えられ、その探索点qに最も近い最近傍値を前記実数群の中から探索する方法である。本実施形態の方法では、コンピュータ装置を使用して行われる。なお、前記実数群は、x[1]からx[n]まで連続した規則性はないものとする。
【0025】
コンピュータ装置1は、図1に示されるように、中央演算装置2、作業用メモリである主記憶装置3、ハードディスク等の補助記憶装置4、キーボードないしマウス等の入力手段5、ディスプレイやプリンタ等を含む出力手段6及びこれらを接続するバス7とを含む。前記補助記憶装置には、本発明に係る方法を該コンピュータ装置1に実行させるためのプログラムが記憶されている。ただし、本発明は、このような態様に限定されるものではない。
【0026】
本発明の探索方法は、図2に示されるように、探索用データベースを作る前処理ステップS1と、前記コンピュータ装置が前記探索データベースを使用して前記探索を行う探索ステップS2とが含まれる。
【0027】
前記前処理ステップS1は、探索ステップS2の前に一度だけ実行される。そして、この前処理ステップS1において、探索ステップS2で必要になる探索用データベースが作成される。
【0028】
探索用データベースは、図3に視覚化して示される。図3では、実数が小さいものから順番に並んでいる実数群(x[1],x[2], x[3] … x[n])がある。前記探索用データベースは、前記実数群の区間(x[1]〜x[n])を小領域であるバケットBで隙間無くかつ等間隔でm個に区分されたバケット列Brを有する。
【0029】
[バケット]
バケットBは、1次元の空間と言え、実数y1と実数y2を用いてy1≦ x[] <y2を満たす空間として表すことができる。各バケットはいずれも同じ空間サイズを有し、前記実数群の区間(x[1]〜x[n])を隙間無くかつ等間隔で分割している。
【0030】
[バケット番号]
また、各バケットBには、先頭バケットから末尾バケットまで順番に割り当てられた固有のバケット番号が定義される。この実施形態では、先頭バケットのバケット番号が1、末尾バケットのバケット番号がm、これらの間でバケット番号が1ずつ増加している。
【0031】
[バケットサイズ]
さらに、各バケットには、その中に含まれる前記実数の個数であるバケットサイズが記憶される。この実施形態では、バケット番号1、2、6、9及び10のバケットにそれぞれ1つの実数x[1]、x[2]、x[3] 、x[4] 、x[5] が含まれているので、これらのバケットサイズにはいずれも”1”が記憶される。また、実数を一つも含まないバケットには、”0”が記憶される。
【0032】
[ラストフィルドバケット]
さらに、少なくとも前記先頭バケットを除いた各バケットには、ラストフィルドバケットが記憶される。ラストフィルドバケットは、前記バケットサイズがゼロでなくかつ当該バケット番号に最も近い近接バケット番号を示すラストフィルドバケットが記憶される。ここで「最も近い」とは、3つの意味を含むものとする。一番目の意味は、文字通り、当該バケットに最も近いという意味、二番目の意味は、当該バケットの先頭バケット側で最も近いという意味、三番目の意味は当該バケットの末尾バケット側で最も近いという意味である。本発明では、これらのいずれかの意味を選択して、実施することができる。
【0033】
このラストフィルドバケットは、実数群をx[1]からx[n]までスキャンし、y1≦ x[i] <y2を満たすか否かを調べていく課程の中で、一番最後にバケットサイズが≠0となったときのバケットを、メモリ上に「ラストフィルドバケット」として記憶させておく。なお先頭バケットには、ラストフィルドバケットとして、自らのバケット番号を記憶させることができる。
【0034】
さらに、探索用データベースの少なくともバケットサイズがゼロでないバケットBには、そのバケット内の実数のうちの最小値及び最大値がさらに記憶されている。バケットサイズが1の場合、最小値及び最大値はいずれも同じ値である。
【0035】
次に、この前処理ステップS1において探索用データベースを作成する具体的な処理手順の一例を図4に示す。
【0036】
中央演算装置2は、前記実数群(x[1],x[2], x[3] … x[n])を主記憶装置3に読み込む(ステップS11)。
【0037】
次に、中央演算装置2は、前記実数群の区間(x[1]〜x[n])を前記バケットで隙間無くかつ等間隔でm個に区分する(ステップS12)。これにより、1、2、3、… mのバケット番号を有するバケットが作られる。前記mは、0よりも大きい整数であり、ユーザにより決定される。そして、整数mは、予め入力手段5からコンピュータ装置1に入力されている。通常、前記整数mは、実数の組(x[1]、x[2]、 x[3] … x[n])の個数nの数倍大きな値をとるように定められるのが望ましい。
【0038】
次に、中央演算装置2は、入力された前記整数mに基づき、前記主記憶装置3に、バケット番号、バケットサイズ、ラストフィルドバケット、最小値及び最大値を記憶するための領域をそれぞれm個割り当てる(ステップS13)。
【0039】
次に、中央演算装置2は、前記実数群(x[1],x[2], x[3] … x[n])を各々のバケットに代入するとともに、割り当てられた主記憶装置3の各領域にそれぞれの値を記憶させる(ステップS14)。この処理では、先ず、バケット総数を示す前記整数mと、実数の最小値x[1]、同最大値x[n]とを用いて、下式(1)にて各バケットの間隔Δxが計算される。
Δx=(x[n] − x[1])/m …(1)
【0040】
次に、中央演算装置2は、実数x[1]からx[n]まで、順番に次の計算を行う。即ち、現在の実数の値をx[i]とすると、x[i]がどのバケットに属しているのかを見つけるため、下記式(2)の計算を行う。
ibucket = #切捨て((x[i] − x[1])/ Δx)+1 …(2)
(ここで、「#切り捨て」は、関数であり、戻り値として、小数点以下を切り捨てた整数値を返すものとする。)
【0041】
ここで、 ibucket のバケット番号を持つバケット(これを[ibucket]として示す。)には、1つの実数x[i] を含むことが分かる。従って、中央演算装置2は、下記式(3)により、当該バケット[ibucket]に記憶されているバケットサイズの値を一つ増やす処理を行う。
バケットサイズ[ibucket] = 現在のバケットサイズ+1 … (3)
【0042】
また、この処理で新たにバケット[ibucket]内にx[i]が入るので、中央演算装置2は、最小値又は最大値を書き換える必要が生じたときには、それらの値を書き換える。
【0043】
次に、バケットサイズ、最小値、最大値が全てのバケットに対して決定されるが、この例では、いくつかのバケットは、そのバケットサイズが0となり、実数x[]とは無関係になっていることが分かる。この様なバケットサイズ=0のバケットについては、無視して検索対象から除外するのが得策である。
【0044】
次に、中央演算装置2は、先頭バケットを除いて、各バケットのラストフィルドバケットを計算し、かつ、記憶させる(ステップS15)。この実施形態では、ラストフィルドバケットは、バケットサイズがゼロでなくかつ当該バケットに先頭バケット側で最も近い(即ち、前記二番目の意味)バケットのバケット番号として定義される。これは、現在のバケットのバケット番号をk、ラストフィルドバケットをpとすると次の条件aないしcで表すことができる。
(a)p<k
(b)バケット番号pのバケットサイズ≠0
(c)k−pが最小値
【0045】
また、中央演算装置2がラストフィルドバケットを決定する処理手順の一例は図5に示される。
【0046】
次に、中央演算装置2は、変数LFB及び変数kにそれぞれ1を代入し(ステップS20、S21)、バケット番号kについて、バケットサイズが0より大きいかを判断する(ステップS22)。
【0047】
ステップS22で結果が真(Y)の場合、中央演算装置2は、バケット番号kのラストフィルドバケットの値に、現在の変数LFBの値を代入する(ステップS23)。その後、中央演算装置2は、変数LFBの値を、現在のバケット番号kに更新し(ステップS24)、ステップS25を実行する。
【0048】
他方、ステップS22で結果が偽(No)の場合、バケット番号kのラストフィルドバケットの値に、現在の変数LFBの値を代入するが(ステップS26)、変数LFBの値は更新せずに、ステップS25を実行する。
【0049】
ステップS25では、現在のバケット番号kが末尾バケット(即ち、k=m)かを判断し、結果が真(Yes)の場合には処理を終える。他方、ステップS25の結果が偽(No)の場合、変数kに1を加算し(ステップS27)、末尾バケットになるまでステップS22以降を繰り返す。
【0050】
以上の処理により、前処理ステップが完了し、探索用データベースが作成される。なお、探索用データベースは、アクセス速度が早い主記憶装置3上に設けられるのが好ましいが、補助記憶装置に作成されても良い。
【0051】
次に、前記探索ステップでは、前記探索用データベースを使用して、図6の処理が行われる。先ず、探索点qが与えられたとき(ステップS30)、中央演算装置2は、前記探索点qが属するバケットのバケット番号(ibucket)を計算する(第1のステップ:ステップS31)。この計算は、バケットが等間隔で設定されているため、単純な下記式(4)の一次式で所定のバケット見つけることができる。
ibucket = #切捨て((q − x[1])/ Δx)+1 …(4)
ここで、「#切り捨て」は、関数であり、戻り値として、小数点以下を切り捨てた整数値を返すものとする。また、Δxは、上記式(1)で表される。
【0052】
次に、中央演算装置2は、前記計算されたバケット(ibucket)のバケットサイズを参照し、0か否かを判断する(ステップS32)。もし、バケットサイズが0でない場合(ステップS32でNo)、当該参照されたバケットの中から最近傍値を計算する(ステップS33、S34)。
【0053】
具体的には、参照されたバケットサイズが0でない場合、前記探索点qと、そのバケットの最小値とを比較し、探索点qが最小値よりも小さい場合(ステップS33でYes)、そのバケットのラストフィルドバケットの最大値を最近傍値とする(ステップS35)。
【0054】
また、ステップS33でNo、即ち、バケットサイズが0でなく、かつ、探索点qがそのバケットの最小値以上の場合には、そのバケットに含まれる実数に対してx[ ipoint ] ≦q<x[ ipoint + 1 ]となるx[ ipoint ] を最近傍値とする(ステップS34)。
【0055】
一方、中央演算装置2は、前記参照されたバケットサイズが0の場合(ステップS32でYes)、そのバケットのラストフィルドバケットが示すバケットから前記最近傍値を計算する(ステップS35)。
【0056】
このように、本実施形態の方法によれば、ステップS32以降、一つのバケットだけを対象とし、その中の実数から最近傍値を見つけることができる。このため、計算時間を大幅に短縮することができる。
【0057】
なお、上記実施形態では、前記最近傍値は、前記探索点qを超えずかつ該探索点に最も近い値として定義されているが、例えば、最近傍値は、前記探索点qを下回らない該探索点に最も近い値として定義されても良い。この場合、前記ラストフィルドバケットは、当該バケットよりも末尾バケット側で当該バケットに最も近いバケット番号を記憶させれば良い。また、ステップS35については、「最大値」を「最小値」と読み替えれば良い。また、ステップS33については、「最小値」を「最大値」と読み替える。さらに、ステップS34については、x[ ipoint ] ≧q>x[ ipoint-1 ]となるx[ ipoint ] を最近傍値とすれば良い。
【実施例】
【0058】
[実施例1]
次に、図7を用いて具体的な実施例について述べる。
図7には、二次元のゴルフボールの空力シミュレーションの計算モデルが視覚化して示され、ゴルフボールをモデル化したラグランジュ要素からなるゴルフボールモデル10と、このゴルフボールモデル10の周囲の空気の流れを再現する空間場である直交格子からなるオイラー要素からなる空気モデル11とを含む。
【0059】
ゴルフボールモデル10は、節点10aと、これらを継ぐ辺10bとによって定義される。節点10aは、(x、y)の座標値を持つ。
【0060】
また、空気モデル11は、予め設定された格子に区分されているが、この実施形態では、ゴルフボールモデル10の表面近傍の空気の流れをより詳細に解析するために、ゴルフボールモデル10に近い部分は比較的小さいピッチの格子をなし、ゴルフボールモデル10から遠ざかるについてピッチが大きくなっている。このように、空気モデル1は、非均等なピッチの格子構造を持つ。
【0061】
いま、任意のy座標値(y1)上のゴルフボールモデル10の節点のx座標値が、探索点qとして与えられ、この探索点qを超えずかつこの探索点qに最も近い空気モデル11のx座標を最近傍値として探索するものとする。
【0062】
表1には、空気モデルのx座標を、実数群のx座標として扱った探索用データベースファイルを視覚化して示す。
【0063】
【表1】

【0064】
この実施例の探索用データベースは、バケットの間隔Δx=1.6とした。また、バケット番号は先頭バケットを1とし、末尾バケットまで1ずつ増えるように番号付けされている。そして、例えばバケット番号1のバケットには、前記実数群から0以上かつ1.6未満の値が取り込まれる。また、探索用データベースには、前述のバケットサイズ、ラストフィルドバケット、最小値及び最大値がそれぞれ記憶されている。
【0065】
また、図8には、バケットx座標と、バケット番号とのグラフを示している。表1及び図8から明らかなように、この実施例では、バケット番号が小さいバケットほど、多くの実数が格納されるように定められているが、このような態様に限定されるものではない。
【0066】
いま探索点qのx座標値が52である場合、この値がどのバケット(ibucket)に属しているのかが、前記式(2)により計算される。この結果、探索点qが属するバケットは、バケット番号33であることが分かる。
ibucket = #切捨て((52 − 0)/ 1.6)+1=33
(ここで、「#切り捨て」は、関数であり、戻り値として、小数点以下を切り捨てた整数値を返すものとする。)
【0067】
次に、中央演算装置は、バケット番号33のバケットサイズを調べる。結果は”0”であるため、そのラストフィルドバケットであるバケット番号31の最大値、即ち”49.284”を最近傍値として得る。
【0068】
他方、探索点qのx座標値が7の場合、そのibucketは”5”となる。バケット番号5のバケットサイズは”2”であり”0”ではない。従って、この場合、中央演算装置は、当該参照されたバケット番号5に格納されている実数から最近傍値を計算する。この例では、探索点q(=7)が、そのバケットの最小値(=6.498)よりも小さいか否かが判断される。この場合、結果は偽(False)となる。この場合には、バケット番号5に含まれる実数に対してx[ ipoint ] ≦q<x[ ipoint + 1 ]となるx[ ipoint ] が最近傍値として計算され、6.498をすぐに計算することができる。
【0069】
[実施例2]
次に、さらに大規模な計算モデルを用いて本発明の効果を述べる。
三次元の空気モデルAとして、x−y−zの各座標値の個数が、それぞれ252、100及び2502個(合計63050400個の座標値)の実数群に対して、3755598個のラグランジュ要素の節点座標値(探索点)を与え、それぞれの最近傍値の探索が行われた。
【0070】
また、三次元の空気モデルBとして、x−y−zの各座標値の個数が、それぞれ502、100及び3002個(合計150700400個の座標値)の実数群に対して、3755598個の探索点を与え、上記同様にそれらの最近傍値の探索が行われた。空気モデルBは、空気モデルAの約2.4倍の実数群を具えるものである。
【0071】
探索方法には、本発明方法の他、ANN(従来例)を用いた。ANNは、バケットサイズを1及び3の2種類でテストされた。テストの結果は、表2の通りであるが、本発明方法は、探索時間を顕著に削減できることが確認できた。なお、各空気モデルA、Bについての探索用データベース作成時間は、本発明方法では0.01秒以下、従来例では約5秒であった。
【0072】
【表2】

【産業上の利用可能性】
【0073】
例えば、ゴルフボール(構造体)の周りの空気(流体)の流れ、タイヤ製造工程における押出機(構造体)の内部の可塑化したゴム(流体)の流れ等のシミュレーション(数値計算)を実施する場合、流体部分を構造格子のオイラーメッシュで定義する一方、構造体を非構造格子のラグランジュメッシュでモデル化し、ボールの回転や、スクリューの回転を考慮した計算を実施することは、モデル作成にかかる工数を低減でき、かつ、計算精度を上げやすい等のメリットがあり、非常に有用である。従って、大規模な数値計算を実施するときには、今後、構造格子の利用が増加すると考えられるが、構造格子を用いる場合、構造物が複雑な形状であると、流体と構造体の境界を認識する必要が生じ、計算コストが莫大になっていた。
【0074】
本発明は、この種の計算に最適に利用され、大幅に計算時間を短縮し、計算コストを低減できる。なお、ゴルフボールの流体解析は、通常、3次元空間で行う必要があるため、構造格子の構成は、直交座標系では(x,y,z)、円筒座標系では(r,z、θ)、球座標系では(r、θ、φ)となるが、それぞれの座標について、1次元毎に本発明の探索を行うことにより、大幅な計算時間短縮を実現しうる。具体的には、従来の探索手法(ANNや、kd-tree)を用いるよりも、2倍以上の速さで探索が可能になる。これは、例えば、ゴルフボールを回転させる移動境界の計算で、特に計算効率が高くなり、より多い格子数での計算が可能となるため、空間の近似精度が高まり、計算精度の向上をもたらす。また、ANN等の従来の手法では、構造物(ラグランジュ要素)が移動するたびに、探索の全ての工程を繰り返す必要があるが、本発明では、このような必要はない。
【符号の説明】
【0075】
1 コンピュータ装置
2 中央演算装置
3 主記憶装置
5 入力手段
6 出力手段

【特許請求の範囲】
【請求項1】
実数が小さいものから順番に並んでいる実数群(x[1],x[2], x[3] … x[n])に対して、ある探索対象となる探索点qが与えられ、その探索点qに最も近い最近傍値を前記実数群の中から探索する方法であって、
コンピュータ装置の記憶部に、探索用データベースを作る前処理ステップと、
前記コンピュータ装置が前記探索データベースを使用して前記探索を行う探索ステップとを含み、
前記探索用データベースは、前記実数群の区間(x[1]〜x[n])を小領域であるバケットで隙間無くかつ等間隔でm個に区分されたバケット列を有し、
前記各バケットには、先頭バケットから末尾バケットまで順番に割り当てられた固有のバケット番号と、
各バケットの中に含まれる前記実数の個数であるバケットサイズとが記憶されるとともに、
少なくとも前記先頭バケットを除いた各バケットには、前記バケットサイズがゼロでなくかつ当該バケットに最も近いバケットのバケット番号を示すラストフィルドバケットが記憶され、
前記探索ステップは、前記探索点qが属するバケットを計算する第1のステップと、
前記計算されたバケットのバケットサイズを参照する第2のステップと、
前記参照されたバケットサイズが0でない場合、当該参照されたバケットから最近傍値を計算する一方、前記参照されたバケットサイズが0の場合、そのバケットのラストフィルドバケットが示すバケットから前記最近傍値を計算する第3のステップとを含むことを特徴とする最近傍値を探索する方法。
【請求項2】
前記最近傍値は、前記探索点を超えない該探索点に最も近い値とし、
前記探索用データベースには、
前記ラストフィルドバケットとして、当該バケットよりも先頭バケット側で当該バケット番号に最も近いバケット番号が記憶されている請求項1記載の最近傍値を探索する方法。
【請求項3】
前記探索用データベースの少なくともバケットサイズが0でないバケットには、そのバケット内の実数のうちの最小値及び最大値がさらに記憶されている請求項2記載の最近傍値を探索する方法。
【請求項4】
前記第2のステップにおいて、参照されたバケットサイズが0でない場合、前記探索点qと、そのバケットの最小値とを比較し、探索点qが最小値よりも小さい場合には、そのバケットのラストフィルドバケットの最大値を最近傍値とする請求項3記載の最近傍値を探索する方法。
【請求項5】
前記第2のステップにおいて、参照されたバケットサイズが0でない場合、前記探索点qと、そのバケットの最小値とを比較し、前記探索点qが最小値以上の場合には、そのバケットに含まれる実数に対してx[ ipoint ] ≦q<x[ ipoint + 1 ]となるx[ ipoint ] を最近傍値とする請求項3又は4記載の最近傍値を探索する方法。
【請求項6】
複数の多次元の座標値(x,y,z…)が与えられており、探索点q(x1,y1,z1)が与えられたとき、前記座標値を各次元毎の実数群に分け、
各実数群に対して請求項1乃至5のいずれかに記載された探索方法を適用することで前記探索点qの各座標に最も近い最近傍値を各次元の実数群の中からそれぞれ探索することを特徴とする最近傍値を探索する方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2011−108113(P2011−108113A)
【公開日】平成23年6月2日(2011.6.2)
【国際特許分類】
【出願番号】特願2009−264202(P2009−264202)
【出願日】平成21年11月19日(2009.11.19)
【出願人】(000183233)住友ゴム工業株式会社 (3,458)
【Fターム(参考)】