1

Anytime k-NN 分類器を実装したいのですが、特定の時間「classify(...)」メソッドを呼び出して一時停止し、メソッドが一時停止される前に利用可能な結果を​​取得して再開する方法が見つかりません。メソッドを特定の時間実行する、一時停止する、メソッドが一時停止される前に利用可能な結果を​​取得する、など... おおよその結果を取得するためにデータ構造を使用します。アルゴリズムがデータ構造をトラバースしている間に、最終的に実際のトレーニング データ ベクトルに遭遇します。

public class AnytimeKNN{
 public int classify(queryPoint, k){
   class_label;
   1. Assign an initial value to 'class_label'.
   2.while(not actual training data vectors are encountered){
     1. traverse the data structure
     2. assign a new value to 'class_label'
    }
  }
}

次の方法で、メイン メソッドから 'classify(..)' メソッドを呼び出したい:

  • メソッド「classify(..)」を開始します
  • 「class_label」に初期値が割り当てられたら、メソッド「classify(..)」を一時停止します。
  • 初期ラベルを取得する
  • メソッド 'classify(..)' を X 時間続ける
  • メソッド「classify(..)」を一時停止します
  • 新しい「class_label」を取得します
  • メソッド 'classify(..)' を X 時間再開します。

前もって感謝します!

4

1 に答える 1

1

並行プログラミングにおける典型的な生産者と消費者のシナリオのように思えます。Java では、2 つのバイナリ セマフォを使用してこれを解決できます。1 つは分類子に実行するように指示し、もう 1 つはメイン スレッドに次の結果を取得するように指示します。分類子は、メイン スレッドによってトリガーされるまで、セマフォで待機します。メインスレッドも同様に動作します。

もちろん、同時キューを使用するなど、他のオプションもあります。分類子はその結果をキューに入れ、メイン スレッドはそれらを取り出し、新しい結果がない場合は待機します。これは私のお気に入りの解決策ですが、一定の時間間隔でメソッドを開始および停止したい理由があるかもしれません。

于 2012-07-22T21:09:33.873 に答える