統計コレクターは、モデル内のイベントを監視し、そのイベントに関するデータを収集するために使用されます。収集されたデータは最終的にテーブルに書き込まれます。テーブルに書き込まれると、そのデータを表示したり、チャートで使用したり、エクスポートしたりできます。
統計コレクターはツールボックスからアクセスできます。
統計コレクターは、ツリー内の任意のノードに一意のIDを生成できます。つまり、3Dオブジェクト、処理フローアクティビティ、フローアイテム、トークン、追跡変数の一意のIDを生成できます。これは、静的メソッドStatisticsCollector.getID()を使用して(多くの場合、ピックオプションにより)実行されます。この関数はツリーノードをとり、倍精度浮動小数点値に格納される正の整数を返します。IDは内部に格納されているため、同じツリーノードでgetID()を複数呼び出すと、常に同じID番号が生成されます。
2つのIDセットがあります。1つは、トークン、フローアイテム、リセット時に破棄されるようにフラグが立てられている他のすべてのノード用のセットです。このIDセットは1から始まり、1ずつ増加します。新しいノードでgetID()を呼び出すたびにIDが増加します。ただし、モデルがリセットされると、開始IDは1にリセットされます。
もう1つは、他のすべてのノード用のIDセットです。これは、より永続的であると見なされます。これらのノードのIDは、ノードのパスのハッシュを作成することによって生成されます。これらのIDは、実験ツールとオプティマイザーで実行されるシナリオと複製の間でも一貫性があります。
統計コレクターのパラメータの多くでは、コードが必要です。これらのコードフィールドのほとんどでは、dataという変数を表示します。この変数は独自のプロパティとラベルを持つ特殊オブジェクトです。統計コレクターで生成されたテーブルの各行、各列と関連付けられたデータの表示に使用します。評価対象のコールバックを引き起こすイベントの関連データの表示にも使用します。
data変数使用時の詳細については、「コールバック」セクションを参照してください。data変数のタイプとプロパティの詳細については、「StatisticsCollector.CollectedDataリファレンス」を参照してください。
統計コレクターではイベントをリッスンできます。通常はこの方法で統計コレクターがテーブルを更新します。イベントをリッスンするには、オブジェクトをそのオブジェクトのリッスンする特定のイベントと一緒に指定する必要があります。
リッスンする対象がグループの場合、統計コレクターはグループ内のすべてのオブジェクトをリッスンします。インスタンス化されたフローで処理フローブロックをリッスンする場合、統計コレクターはフロー内のすべてのインスタンス、未添付のイベントインスタンスをリッスンします。
モデル内で一定の基準と一致するオブジェクトをすべてリッスンする必要が生じることもあります。たとえば、特定のラベル値や特定のクラスタイプを付与されたオブジェクトすべてのイベントをリッスンする必要があるケースが考えられます。このようなケースでは、要件別にリッスンする方法を選択できます。リッスンする対象として直接的なオブジェクト参照を指定する代わりに、モデル内のすべてのオブジェクトで実行されるテストを指定する方法もあります。
場合によっては、リセット時に参照できないオブジェクトのイベントをリッスンする必要が生じることもあります。たとえば、フローアイテムまたはトークンでTrackedVariableラベルのOnChangeをリッスンする必要が生じる場合があります。フローアイテムまたはトークンでOnEnteringやOnExitingをリッスンする必要が生じる場合もあります。このようなイベントリスニングには、2つのイベントの指定が必要です。このうち1つ目のイベントは、リセット時に存在する要素で発生するイベントです。たとえば、キューのOnEntryをリッスンします。このイベントを使用するときは、一時オブジェクトをリッスン対象として指定する必要があります。具体的にはキューに入ったアイテムやそのアイテムのラベルなどが該当する可能性があります。最後に、一時オブジェクトでリッスンするイベントを指定する必要があります。このように、リセット時には存在しないオブジェクトのイベントをリッスンできるほか、時間をかけてモデルを実行することさえできます。
要件別のリッスン、一時オブジェクトのリッスンは、同時に成立する場合もあります。たとえば、あらゆるソースオブジェクトのOnExitをリッスンする場合などがこれに該当し、すべてのフローアイテムのOnEnteringをリッスンできます。
統計コレクターは次の3つの具体的なタイミングでロジックを実行するのみです。
モデルがリセットされると、統計コレクターではテーブルをクリアしてすべての行と列を削除します。するとコレクターが列のリスト([データ記録]タブで指定されている)を調べます。コレクターは列ごとに1つの列をテーブルに追加します。列セットごとにコレクターが、列設定値コールバックを評価し、戻り値ごとにテーブルに列を1つ作成します。最後にコレクターは、コレクターのリッスン対象となっているイベントすべてに対応するリスナーを作成します([イベントリッスン]タブで指定)。これらのイベントのいずれかが要件を使用している場合、モデル内のオブジェクト1つひとつについてオブジェクト要件コールバックが評価されます。コレクターは、リッスン対象のオブジェクトを特定すると、そのオブジェクトにリスナーを作成します。その後コレクターは、リスナーが起動した場合、どの列を更新する必要があるかを判定し、これが列のリンク要件コールバックを評価します。
イベントが発生すると、コレクターは、有効になったイベントパラメータをすべてdata変数に割り当ててから、そのイベントのイベント条件コールバックを評価します。この条件が失敗したときは、何も起こりません。成功したときは、コレクターが処理を続行します。このイベントが一時イベントの最初の一部分をなしている場合は、コレクターが一時オブジェクトコールバックを評価します。コレクターは一時オブジェクト一つひとつにリスナーを配置します。このイベントが一時イベントの最初の一部分には相当しない場合は、コレクターがすべてのラベルについてラベル値コールバックを評価します。その後、列のモードに沿ってコレクターが行を追加し、列を更新します。行が追加されるとき、行の並べ替えコールバック(存在する場合)が評価されます。その後、[行が追加されたとき]列のすべてで列値コールバックが評価されます。発生したイベントが列にリンクされている場合は、リンクされた列一つひとつについて列値コールバックが評価されます。
最後にコレクターのテーブルが反映される可能性があります。これが発生するタイミングは、このコレクターを参照するチャートがペイントするとき、またはこのコレクターのテーブルビューがペイントするとき、Table() APIまたはクエリを介してテーブルが評価されるときです。以上のいずれかが発生すると、コレクターが行ごとに列値コールバックを使用して「常に」列を評価します。このように、列は「常に」最新状態となります。
統計コレクターが内部ロジックを実行すると、多数のコールバックが評価されます。これらはコード値を持つ可能性のあるプロパティです。以下のテーブルでは、統計コレクターのロジック中に、使用されたコールバックすべてのリストが説明やこれらのコールバックの戻り値と一緒に表示されます。
コールバック | 説明 | 戻り値 |
---|---|---|
列セット値 | OnReset中に呼び出し現在の列セットで作成する行の数を決定します。 | 列名の配列を返します。統計コレクターが名前ごとに列を1つ作成します。この名前を任意で2要素配列に置換できます。この場合、1つ目の値が名前、2つ目の値が列と関連付ける値(あとでdata.colVal として利用可能になる)です。
|
オブジェクト要件 | OnReset中に呼び出し要件別イベントをリッスンしている場合、モデル内のオブジェクトごとに1度このフィールドが呼び出されます。 | リッスン対象とはしないオブジェクトの場合は、0を返すことができます。リッスン対象とするオブジェクトの場合は、1を返すことができます。オブジェクトの追跡対象変数ラベルなど、関連ノードをリッスンする必要がある場合は、該当するノードまたはノード配列を返すことができます。 |
リンク要件 | リセット中にリスナーが作成されるとき、または一時オブジェクトを検出するイベントに対応して、呼び出されます。列ごとに、コードでイベントにリンクされている場合は、現在の列に関してこの要件が評価されます。 | 現在のイベントでこの列が更新される場合、戻り値は1となります。それ以外の場合の戻り値は0となります。 |
イベント条件 | コレクターがリッスンしているイベントが発生するとき呼び出されます。この条件がパスすると、統計コレクターがロジックの先に進み、テーブルを更新するか、一時オブジェクトにリスナーを追加するかします。失敗した場合、統計コレクターはこのイベントに対応する形で追加のロジックを実行しません。 | 1が1つ戻された場合、条件はパスしています。失敗した場合は0が1つ戻されます。 |
一時オブジェクト | コレクターのリッスンしているイベントが発生すると呼び出され、そのイベントが一時オブジェクトの検索に使用されます。イベントパラメータを受け、一時オブジェクトが何かを判定するとき、このコールバックが使用されます。 | 一時イベントのあるオブジェクト、またはオブジェクト配列を返します。 |
イベントラベル | イベントが発生すると呼び出され、条件を渡します。data変数のラベルに返される値を何か、コレクターが割り当てます。あとでイベントラベルコールバックが以前のラベル値を参照できるように、イベントラベルが順番に評価されます。 | 現在のラベルでdata変数に持たせるよう指定した値が返されます。 |
行の並べ替え | テーブルに新しい列が追加され、行の並べ替えが使用されていると、呼び出されます。並べ替え基準の値がそれぞれ行のスコアとして使用され、新しく行が加わったときは、このスコアが行の並べ替えに使用されます。 | 数または文字列を返します。このフィールドで数を返す行が1行でもある場合は、すべての行で数を返す必要があります。文字列の場合も同様の制限がかかります。 |
列値 | テーブル内のあるセルで更新が必要になったとき、呼び出されます。このコールバックで返される値は何でも、テーブル内の現在の行と列に返されます。 | 列タイプと一致する値を返し、列のフォーマットに合わせてフォーマットできます。 |
ほとんどのコールバックではdata変数を使用できます。次のテーブルは、一つひとつのコールバック中に使用できるdata変数のプロパティを示しています。
一般に、各コールバック中は、プロパティを上限数まで使用できます。たとえば、行の並べ替え中はdata.rowValue
とdata.rowValueIndex
は使用できますが、並べ替えが終了していないため、data.rowNumber
は使用できません。
使用可能な動的プロパティは、コールバックが実行されるタイミングによって変化します。動的プロパティには、有効なイベントパラメータが必ずすべて含まれます。追加のラベルはラベルのコールバックが評価されるまで使用可能になりません。一時イベントの最初の部分が発生すると(イベント検出)、該当するイベントパラメータが保存され、一時イベント中、動的プロパティとして使用可能になります。
統計コレクターでは「一意の値」行モードを使用しているとき、行の値のリストを保持します。イベントが発生するとき、イベントによって行の値が表示されます。コレクターに該当する値の行がない場合は、その値の行を追加します。同じ値の関わるイベントが発生したときは、コレクターがその値の行を更新します。このようにコレクターは各行の値を追跡します。
状況によっては、コレクターが行の値の追跡を停止する方が有益な場合があります。あらゆるリッスン対象のイベントで、イベントによってテーブルが更新されたあと、行の値の追跡を停止するオプションが用意されます。この時点から行の値は追跡されなくなります。関連付けられた行は非アクティブになるため、イベント発生で更新されることも、反映される形で更新されること(「常に」列の場合)もなくなります。後のイベントでこの行の値を検出した場合は、その値が初出の場合と同じように、その値に対応して新しい行が追加されます。
行が非アクティブになると、新しい行の値でその行を再利用するかどうかを選択できます。新しい行が必要になったとき、新しい行を追加する代わりに、この非アクティブな行を上書きできます。2つの統計コレクターを併用し、2つ目の統計コレクターが1つ目の統計コレクターのイベントをリッスンしている場合は、1つ目のテーブルのサイズを比較的小さく抑えられるようにこのオプションの使用を検討する価値があります。
イベントの詳細については、「イベントリスニング」ページを参照してください。
統計コレクターには、次のイベントがあります。
このイベントは統計コレクターに新しい行が追加されたとき起動します。[行モード]が[列挙]に設定されている場合、このイベントは起動しません。列の更新モードが[行が追加されたとき]に設定されている場合は、このイベントが起動する前にこれらの値が設定されます。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
行番号 | 整数 | 新しい行の行番号 |
行の値 | バリアント | 新しい行と関連付けられた値 |
このイベントは、統計コレクターがリッスンするイベントの1つが所定の行で1つ以上の列を更新すると起動します。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
行番号 | 整数 | 新しい行の行番号 |
行の値 | バリアント | 新しい行と関連付けられた値 |
列の更新 | 配列 | 列に1つの値を含む配列n番目の列が更新された場合、配列のn番目の値が1となります。列が更新されていない場合、値は0となります。 |
以前の値 | 配列 | 列に1つの値を含む配列n番目の列が更新された場合、更新前にテーブルに含まれていた値が配列のn番目の値に組み込まれます。列が更新されていない場合、値は未定義となっており、使用できません。 |
統計コレクターには、さまざまなプロパティを含む3つのタブがあります。これらのタブのプロパティについては、次のセクションで詳しく説明します。
このタブでは、統計コレクターのテーブル内のデータを追加または更新するイベントのリストを指定できます。このタブでは、イベントごとに追加データを収集できるため、より多くのデータを記録できます。
[イベントリスニング]タブには、次のプロパティがあります。
統計コレクターがデータを収集するオブジェクトまたはタイマーイベントを一覧表示します。統計コレクターは以下をリッスンできます。
次の表は、イベントリストのボタンについて説明しています。
アイコン | 説明 |
---|---|
![]() |
新しいイベントをリストに追加するためのメニューが開きます。統計コレクターは、シミュレーションの実行中にこのイベントからデータを収集します。 |
![]() |
3Dモデル内のオブジェクト、処理フロー、ツールボックスをサンプリングしてイベントリストに追加します。 |
![]() |
イベントリストから選択したイベントを複製します。 |
![]() |
イベントリストから選択したイベントを削除します。 |
![]() ![]() |
イベントリストから選択したイベントの順序を変更します。 |
これらのプロパティを使用して、現在イベントリストで選択されているイベントの詳細を編集できます。次のプロパティは、イベントリストでオブジェクトイベントが選択されている場合にのみ表示されます。
これらのプロパティを使用して、現在イベントリストで選択されているイベントの詳細を編集できます。次のプロパティは、イベントリストでタイマーイベントが選択されている場合にのみ表示されます。
アイコン | 説明 |
---|---|
![]() |
新しいイベント時間を追加します |
![]() |
選択したイベント時間を削除します |
![]() ![]() |
選択したイベント時間の順序を変更します |
これらのプロパティを使用して、現在イベントリストで選択されているイベントの詳細を編集できます。次のプロパティは、イベントリストで追跡変数イベントが選択されている場合、またはオブジェクトの追跡変数値をリッスンしている場合に表示されます。
一時オブジェクトの検索に使用するイベントを定義するとき、これらのプロパティを使用できます。次のプロパティは、イベントリストで一時イベントが選択されている場合に表示されます。
一時イベントのポップアップ画面には、次のプロパティがあります。
イベントデータラベルを使用して、選択したイベントに関連する追加データを収集できます。たとえば、イベントにフローアイテムが含まれている場合は、フローアイテムのラベル値をイベントオブジェクトのラベルに割り当てることができます。
コレクターのすべてのイベントで同じラベル値が生成される場合は、1つのイベントデータラベルを各イベントにではなく、すべてのイベントに追加できます。
イベントデータラベルグループには、次のプロパティがあります。
アイコン | 説明 |
---|---|
![]() |
新しいイベントラベルを現在のイベントまたはすべてのイベントに追加します。 |
![]() |
選択したイベントラベルを削除します。共有ラベルを削除すると、すべてのイベントの共有ラベルが削除されます。 |
![]() ![]() |
リスト内のラベルの順序を変更します。 |
[データ記録]タブでは、(データオブジェクトのラベルで)収集されたデータをデータテーブルで使用する方法を指定できます。行を作成する方法と、その行の値を追加または更新する方法も指定できます。
[データ記録]タブには、次のプロパティがあります。
行グループには、次のプロパティがあります。
行モード | 説明 | 用途 |
---|---|---|
イベントごとに追加 | 統計コレクターがリッスンするイベントのいずれかが発生するたびに、データテーブルに行を追加します。データテーブルは、イベントが発生するたびに長くなります。 | この行モードはタイマーイベントに最適です。イベントタイマーが起動するたびに行が作成され、シミュレーション実行中のその時点で関連オブジェクトからデータを取得します。 統計コレクターによって現在記録されているすべてのイベントのログを単純に表示する場合にも、この行モードを使用できます。 |
一意の行の値 | 一意の値の行を追加します。値が一意の場合は、新しい行が作成されます。値が一意でない場合、データテーブルによって該当する行の特定の列の値が更新または入力されます。この行モードを選択すると、データイベントラベルなど、一意性を確認する値を選択します。 | この行モードは、フローアイテムまたはトークンがモデルや処理フローを移動するのを追跡するのに理想的です。フローアイテムまたはトークンがイベントを起動させると、必要に応じて行の列を新しい情報で更新できます。 この行モードはラベルの一意の値を追跡するのにも理想的です。たとえば、アイテムのラベルにある各SKU番号や各製品タイプなどに行を作成できます。 |
行を列挙 | [列挙された行]リストで指定された各オブジェクトの行を追加します。この行モードを選択すると、テーブルの行を構成するオブジェクトを[列挙された行]リストに入力できます。グループを追加すると、グループメンバーごとに1つの行が作成されます。 | この行モードは情報を収集するオブジェクトの数が固定されている場合に理想的です。たとえば、オブジェクトの合計スループットなどのオブジェクト統計を追跡する場合に理想的です。 |
アイコン | 説明 |
---|---|
![]() |
列挙リストにオブジェクトを追加します |
![]() |
列挙リストに追加するオブジェクト(またはグループ)をサンプリングします |
![]() |
選択したオブジェクトをリストから削除します |
![]() ![]() |
リスト内のオブジェクトの順序を変更します。リスト内の順序はテーブル内の順序を定義します。 |
このグループのプロパティを使用すると、統計コレクターのデータテーブルに列を追加できます。各列のプロパティは、値、更新タイミング、保管タイプ、表示形式を指定します。
列グループには、次のプロパティがあります。
アイコン | 説明 |
---|---|
![]() |
新しい列を追加します。 |
![]() |
リストから選択した列を複製します。 |
![]() |
リストから選択した列を削除します。 |
![]() ![]() |
リスト内の列の順序を変更します。このリスト内の列の順序は、データテーブル内の列の順序です。 |
このボタンをクリックすると、イベント/列の依存関係のポップアップ画面が開きます。このポップアップ画面には、統計コレクターのイベントリストが表示されます。イベントを選択し、イベントが更新する列を選択できます。[イベントをリンク]モードが[直接リンクを使用]に設定されている場合、該当する列のチェックボックスをオンにする形で、現在のイベントに対応して更新される列を指定できます。[イベントをリンク]モードが[列要件を使用]に設定されている場合は、リンク要件コールバックのコードを指定できます。
[一般]タブには、次のプロパティがあります。
このプロパティは、この統計コレクターの1つ以上のイベントが、タスク実行者処理フローまたは固定リソース処理フローの処理フローアクティビティに関連する場合にのみ適用されます。デフォルトでは、このオプションは、統計コレクターがそのアクティビティのすべてのインスタンスをリッスンするように指定します。リッスンするインスタンスを減らすために、サンプラーを使用してこの値を1つのオブジェクトまたはオブジェクトのグループに設定できます。統計コレクターは、このプロパティで指定されたインスタンスオブジェクトのみをリッスンします。[削除]ボタンを押すと、このプロパティはデフォルトの[すべてのインスタンス]にリセットされます。
このプロパティはオブジェクトフォーマットを使用する列に適用されます。オブジェクトフォーマットでは各オブジェクトへのパスを表示します。またこのプロパティでそのパスに出現する名前の最大数をコントロールします。このプロパティが0の場合はフルパスが表示されます。1の場合は、オブジェクトの名前のみが表示されます。このプロパティが2の場合は、オブジェクトの名前と親の名前が部分パスの形で表示されます。値が増えるにつれ、ツリーで上位に位置するノードがパスに含まれるようになります。
このチェックボックスをオンにすると、この統計コレクターはウォームアップ期間中に収集されたデータを維持します。
このチェックボックスをオンにすると、この統計コレクターはテーブルデータをハードドライブの内部ファイルに保存します。データテーブルのメモリ(RAM)使用量は5 MBに制限されます。
このボタンをクリックすると、この統計コレクターのデータテーブルのビューが開きます。
このボタンを使用すると、この統計コレクターのデータテーブルのCSVファイルを保存できます。
このリストには、この統計コレクターからのデータを描画しているダッシュボードチャートがすべて表示されます。このコレクターがどのチャートでも必要ない場合、リストは空になります。
このボタンをクリックすると、[接続されたダッシュボードチャート]リストで選択したチャートのプロパティウィンドウが開きます。