ソーシャルフォース動作
概要と主要な概念
ソーシャルフォース動作は、エージェントシステム内でエージェントに対してアクティブ化できる動作です。ソーシャルフォース動作は、システム内で各種の要因に基づいて、さまざまな方向にエージェントを「プッシュ」するフォースのセットを適用します。ソーシャルフォース動作は、1つ以上のフォースで構成されます。まず各フォースが個別に計算された後、すべてのフォースが集計され、エージェントに作用する累積的なフォースが求められます。
フォースの例として、エージェントをグループに引き留めようとする引力フォースや、エージェントが周囲のエージェントと近づきすぎないようにする反発フォースがあります。エージェントが他のエージェントと同じ方向に移動するようにする整列フォースも考えられます。または、エージェントが目的地に向けて、またはA*パスに沿って移動することを促す、目的ベースのフォースも考えられます。
エージェントに働くフォースのそれぞれが計算され、集計されて得られた累積的なフォースが、その方向にエージェントを加速させます。エージェントがタスク実行者の場合、フォースがエージェントの現在の移動方向と同期しているか、逆方向であるかに応じて、この加速がタスク実行者の加速度および減速プロパティにより制限されます。エージェントの速度は、タスク実行者の最大速度によっても制限されます。
動作設定
[動作]タブには、次のプロパティがあります。
更新間隔
システムがどの程度の頻度でフォースの式を更新するかを、選択した時間単位で定義します。
速度として強制
このチェックボックスをオンにすると、集計したフォースをエージェントの加速として適用する代わりに、エージェントの速度を結果のフォースに合わせて直ちに設定します。言い換えると、このチェックボックスをオンにした場合、集計されたフォースは技術的にはフォースではなく、結果として得られるエージェントの速度になります。このため、エージェントの運動量、すなわち以前の速度は無視され、エージェントは更新間隔ごとに新しく計算された速度に設定されます。
スレッディング
次の2つのオプションがあります。
- シングルスレッド - 動作がシングルスレッドのとき、各エージェントのフォースは1つのCPUスレッドで順に更新されます。
- マルチスレッド (実験的) - 動作がマルチスレッドのとき、エージェントのフォースは複数のCPUスレッドを使用して更新されます。更新が必要なエージェントが多数存在する場合、マルチスレッドを使用すると効果的です。ただし、エージェントシステムの初期リリース時点では、フォースのセットにランダムなフォースが含まれる場合、モデルは反復可能でないことに注意してください。反復性が必要な場合、現在のところはシングルスレッドを使用する必要があります。
フォース
このボタンをクリックするとメニューが開き、新しいフォースを選択してシステムに適用できます。利用可能な各種のフォースについては、「ソーシャルフォース」を参照してください。
アクティブルール
アクティブルールは、フォースを適用する基準を定義するために使用できます。たとえば、特定のタイプ、例として同じ動作がアクティブな周囲のエージェントにのみ適用されるフォースを設定できます。
ボタンをクリックすると、新しいアクティブルールが作成されます。アクティブルールが選択されると、ルールの名前が[アクティブルール]フィールドに表示されます。ルールの名前の横にある[X]ボタンをクリックすると、ルールを削除できます。ルールとカテゴリは次のとおりです。
セルフベースのアクティブルールは、エージェント自身のプロパティに基づいて適用されます。次のオプションがあります。
- 移動時のみ - このオプションは、エージェントがタスク実行者で、移動タスクを現在実行中のときのみフォースを適用します。
- アイドル時のみ - このオプションは、エージェントがタスク実行者で、移動タスクを現在実行していないときのみフォースを適用します。
- ラベル値 - このオプションは、エージェントに特定のラベルがあり、特定の値のときのみ、フォースを適用します。このオプションを選択すると、[ラベル名]、および一致する必要があるラベルの[値]のフィールドが表示されます。
近接ベースのアクティブルールは、特定の近接に基づいて適用されます。次のオプションがあります。
- 動作での近接 - このオプションは、定義された動作を持つ、または動作を一切持たない周囲のエージェントについてのみフォースを適用します。
- 一致するラベルでの近接 - このオプションは、エージェントのラベル値に一致するラベルを持つ周囲のエージェントについてのみフォースを適用します。
- ラベル値での近接 - このオプションは、選択したラベルが定義された値と一致する周囲のエージェントについてのみフォースを適用します。