移動に関する主要な概念

移動システムの概要

このトピックでは、オペレーター、トランスポーター、TaskExecuterオブジェクトなど、タスク実行者の移動パスをコントロールするためのさまざまなツールの概要について説明します。

デフォルトでは、タスク実行者が2つのオブジェクト間を移動するとき、FlexSimは2点間の最短距離(つまり直線)を選択します。このデフォルトの移動ロジックでもシミュレーションのニーズを満たせる可能性はありますが、多くの場合、特に特定の平面図を使用している場合はそうではありません。タスク実行者がデフォルトの移動システムを使用すると、他のオブジェクトや壁などのバリアを通過して移動しようとしてしまう可能性があります。次の画像は、デフォルトの移動動作の例を示しています。

デフォルトの移動システムではなくFlexSimの移動ツールを使用すると、より正確な移動パスを作成できます。タスク実行者が使用する特定の移動パスを定義したり、タスク実行者が回避して移動する必要があるバリア(壁など)を作成したりできます。言い換えれば、タスク実行者のためのより正確な移動パスを作成することができるようになります。移動の正確さには2つの主な利点があります。

  • 正確な移動パスで統計が向上する - タスク実行者が2点間の最短距離を移動していない場合、移動時間が長くなる可能性があります。移動時間と距離の違いがわずかなように見えても、時間の経過とともにシミュレーションモデルの統計全体に大きく影響する可能性があります。正確な移動パスを使用することで、これらの統計が、シミュレーションしようとしている実際のビジネスシステムをより正確に表すようになります。
  • 正確な移動パスでビジュアルが向上する - タスク実行者が2つのオブジェクト間を直線的に移動すると、視覚的に不自然に移動しているように見えることがあります。たとえば、オペレーターが目的地にたどり着くために、オブジェクトや平面図の壁を通過する場合があります。移動システムを使用して、オブジェクトやバリアを回避するようにタスク実行者を移動させると、モデルがより視覚的に正確になります。

FlexSimには、タスク実行者用にさまざまな移動システムを作成するための2つの異なるツールがあります。

  • 移動ネットワーク - このツールを使用して、シミュレーションモデル内のある場所から別の場所に移動するためにタスク実行者が使用できる特定のパスを定義します。
  • A*ナビゲーション - このツールを使用して、タスク実行者に対する移動のバリアを作成します。A*システムに接続した固定リソースも、直接通過できないバリアとして扱われます。その後、A*ナビゲータはこれらのバリアと固定リソース周辺の移動しきい値を使用して、2つの場所間の最短距離を計算します。

次のセクションでは、2つの異なる移動ツールと、移動システムに関連するその他の重要な概念について詳しく説明します。

移動ネットワークの仕組み

上記のように、移動ネットワークツールを使用して、シミュレーションモデル内のある場所から別の場所に移動するためにタスク実行者が使用できる特定のパスを定義します。次の画像は、前の図で使用されていたものと同じモデルを示していますが、ここではタスク実行者が特定のパスを移動します。

このツールを使用するには、いくつかの基本的なステップに従います。

  1. モデルにネットワークノードを追加する - まず、ネットワークノードを(ライブラリから)ドラッグアウトして、シミュレーションモデルの重要なポイントに配置します。一般的に、タスク実行者が移動する必要がある固定リソースの隣にネットワークノードを配置します。次に、ネットワークノードを移動させたいパス(廊下など)の最初と最後に配置します。次の画像は、廊下の開始点と終了点にある2つの接続されていないネットワークノードの例を示しています。
  2. ネットワークノードを接続して移動パスを作成する - 固定リソース間に入出力ポート接続(A接続)を作成するのと同じ方法で、2つのノードを接続できます。ノードが接続されると、2つのノードを結ぶ線が表示されます。線には、そのパスで許可されている移動方向を示す方向矢印も表示されます。
  3. 固定リソースをネットワークノードに接続する - タスク実行者が固定リソースに移動する必要がある場合、移動ネットワークに接続されていることを確認する必要があります。A接続を使用して、近くのネットワークノードを固定リソースに接続します。固定リソースがノードに接続されたことを示す青い線が表示されます。
  4. タスク実行者をネットワークノードに接続する - A接続を使用して近くのネットワークノードをタスク実行者に接続します。このネットワークノードは、タスク実行者の移動ネットワークへのエントリポイントとして機能するため、そのタスク実行者をシミュレーションモデル内で開始リセット位置に近いノードに接続する必要があります。タスク実行者がノードに接続されたことを示す赤い線が表示されます。
  5. トラフィックコントローラーを追加して衝突を防ぐ - 多くのシミュレーションモデルはトラフィックコントローラーが不要ですが、多数の異なるタスク実行者が衝突する可能性がある混雑した移動交点がある場合、トラフィックを管理するトラフィックコントローラーオブジェクトを追加できます。ネットワークノードをトラフィックコントローラーに接続して、アクセスを制限するパスを定義します。すると、トラフィックコントローラーは、一度に特定のパスまたはエリアに入ることを許可される移動者の数を制限できます。
  6. その他の移動ネットワークのプロパティを変更する - 必要に応じて、ネットワーク全体または2つのネットワークノード間の接続のプロパティを調整できます。接続で、双方向トラフィックと一方向トラフィックのどちらを許可するかを決定できます。また、速い速度で移動するタスク実行者に遅い速度のタスク実行者を追い越させるかどうかや、追い越させない場合、パス上でそれらの間に許容されるスペース量を決定することもできます。
  7. 移動ネットワークを非表示にする - 最後に、移動ネットワークを非表示にして、移動ネットワークのパスでシミュレーションモデルが乱雑にならないようにすることができます。右クリックしてネットワーク表示モードを変更します。[なし]を選択すると、1つのノード(右クリックしたもの)を除いて、すべてのネットワークノードとパスが消えます。必要に応じて残りの1つのノードを使用して、表示を元に戻すことができます。

シミュレーションモデルをリセットして実行すると、タスク実行者がネットワーク上のある地点から別の地点に移動する必要があるときはいつでも、タスク実行者が移動ネットワークを利用するための最短パスが計算されます。

A*ナビゲーションの仕組み

上記のように、A*ナビゲーションシステムを使用して、タスク実行者の移動バリアを作成します。A*システムに接続した固定リソースも、直接通過できないバリアとして扱われます。その後、A*ナビゲータはこれらのバリアと固定リソース周辺の移動しきい値を使用して、2つの場所間の最短距離を計算します。次の画像は、前のセクションで使用したものと同じモデルを示していますが、ここではタスク実行者がバリアの周りの最短パスを計算して移動します。

このツールを使用するには、いくつかの基本的なステップに従います。

  1. モデルにA*ナビゲータを追加する - ライブラリから、[A* ナビゲータ]をモデルにドラッグします。ナビゲータはモデル内の任意の場所に配置できますが、ほとんどのユーザーはシミュレーションモデルの他の部分からわずかに離れた場所に配置する傾向があります。
  2. すべての固定リソースとタスク実行者をA*ナビゲータに接続する - 固定リソース間に入出力ポート接続(A接続)を作成するのと同じ方法で、2つのノードを接続できます。A*ナビゲータのプロパティ内の3Dオブジェクトを、メンバーとしてサンプリングすることにより接続することもできます。3Dオブジェクトがナビゲータに正常に接続されると、その下に紫色の背景が表示されます。
  3. 必要に応じてモデルにディバイダーやバリアを追加する - ディバイダーやバリアは、タスク実行者が回避しなければならない場所として機能します。ライブラリで、[ディバイダー]または[バリア]ボタンをクリックしてディバイダー作成モードまたはバリア作成モードに入ります。次に、モデル内をクリックしてディバイダーやバリアを描画します(モデルのメイングリッドをオフにし、代わりにA*グリッドビジュアルをオンにすると効果的な場合があります)。
  4. 固定リソースの移動しきい値がディバイダーやバリアを超えないようにする - オブジェクトの移動しきい値は、青い点で囲まれた赤い点で構成されます(A*が移動しきい値をどのように使用するかについての詳しい説明は、「A*移動しきい値」を参照してください)。移動しきい値の赤い点がA*のディバイダーやバリアの反対側にならないように、オブジェクトを移動します。そうでないと、タスク実行者が誤ったパスを移動してそのエントリポイントにたどり着く可能性があります。次の画像は、ディバイダーを超えて延びる移動しきい値の例を示しています。
  5. A*ビジュアルガイドを非表示にする - A*システムのテストの完了後、必要に応じてビジュアルを非表示にできます。これはA*ナビゲータのプロパティで行うことができます。

シミュレーションモデルが実行され、タスク実行者がグリッド内の1点から移動する必要がある場合、A*は検索アルゴリズムを実行してポイント間の最短経路を検索します。このアルゴリズムは基本的に、モデルをタスク実行者が移動する可能性のあるノードのグリッドに分割します。各ノードは、移動メンバーが移動できる可能性がある方向を指定します。このアルゴリズムは、ノード間を対角線方向に移動することを含め、移動方向のノードを検索して、どの方向が最も速いかを決定します。ノードのグリッドは、移動メンバーが移動できる場所を制限するバリアを作成することで変更できます。

次の画像は、いくつかのバリアがあるグリッドの例を示しています。

移動者がポイントAからポイントBに移動する必要がある場合、A*アルゴリズムは最短経路を計算します。このシナリオでは、考えられるパスが複数ありますが、マークされているパスだけが他のパスよりも明らかに短いことが分かるでしょう。A*は変化する状況に適応し、理想的なパスを検索することができます。

A*移動しきい値

A*ナビゲーションシステムは、移動しきい値を使用して2つのオブジェクト間の最短可能距離を計算します。固定リソースの移動しきい値は、タスク実行者がそのオブジェクトに向かっているときに移動できるエントリポイントを表します。

オブジェクトの移動しきい値は、計算されたパスゾーンと移動到着ゾーンの2つのゾーンで構成されています。次の画像は、オブジェクト上のこれら2つのゾーンを示しています。

この画像は、赤と青の点で囲まれたオブジェクトを示していることに注意してください。これらの点は、オブジェクトの移動しきい値を構成する2つのゾーンを示します。各ゾーンについては、次のテーブルで説明します。

ゾーン 説明
計算パスゾーン タスク実行者がこの固定リソースに移動する必要がある場合、A*ナビゲータは、移動者と計算されたパスゾーン内の任意の点との間の最短距離を計算します。移動者はこの最短経路に沿って移動を開始します。
移動到着ゾーン A*アルゴリズムでは、移動到着ゾーンはパスの計算には使用されませんが、移動到着ゾーン内のポイントは、いつ固定リソースに到着して移動が終わったか判断するために使用されます。移動者が青い点のいずれかまで移動するとすぐに、FlexSimは移動者が到着し、移動タスクが完了したと見なします。言い換えれば、A*アルゴリズムは最初に赤い点への最短パスを構築します。次に、構築されたパスに青い点が含まれている場合、アルゴリズムはパスを短くしてパス上の最初の青い点で停止させます。赤と青の点の違いは、固定リソースが特に長い場合(たとえば、オブジェクトのx軸のサイズがオブジェクトのy軸のサイズよりもかなり大きい場合など)、より明確になります。

A*を使用しているときには、移動しきい値が問題の原因となることがあり、不自然な移動動作やアニメーションが生じることがあります。一般的な移動しきい値の問題を解決する方法については、「移動しきい値のトラブルシューティング」を参照してください。

移動ツールを決める

移動ネットワークとA*ナビゲーションのどちらを使用するか決定する際には、シミュレーションプロジェクトにどのシステムが適しているか考慮する必要があります。ほとんどの場合、それは主に個人的な好みの問題になるでしょう。ただし、次のテーブルに示すように、システムごとにさまざまな利点と欠点があります。

移動ネットワーク A*ナビゲーション
利点
  • ユーザーがタスク実行者の移動パスをより詳細にコントロールできる
  • 移動ネットワークはそれほど多くの計算を実行する必要がないので、モデルをより速く実行できる
  • 移動者がパスを移動する方向を制限するために使用できる(一方向または双方向など)
  • 特定の移動パスに制限速度を設定できる
  • 仮想距離を作成し、ノード間の距離をモデル単位の実際の距離よりも長くまたは短くするために使用できる
  • 設定がかなり簡単で、ユーザーに代わってほとんどのロジックを処理できる
  • 目的地とそれらの間の考えられるパスが多数あるモデルの場合、A*は移動ネットワークより簡単に設定できる
欠点
  • セットアップに少し時間がかかる
  • 考えられるすべての目的地間にパスを作成するので面倒なことがある
  • トラブルシューティングに時間がかかることがある
  • モデルが大きく複雑な場合、A*アルゴリズムが理想的な移動パスを計算している間、モデルが減速する可能性がある
  • 計算の処理に時間がかかりすぎると、不自然なビジュアルが生成されることがある

最初に両方の方法を試してみて、シミュレーションモデルプロジェクトにどのシステムが最も適しているか確認してください。