バッチ

概要と主要な概念

[処理フロー]モジュールでは、[バッチ]アクティビティが入るトークンを収集し、トークンのグループ(バッチ)に並べ替えます。バッチの準備が完了すると、[バッチ]アクティビティは次のアクティビティにバッチをリリースします。

[バッチ]アクティビティは基本的に3Dモデルの[コンバイナ]と[セパレータ]と同様に機能し、トークンの結合と分離の両方が可能です。

簡単なグループ化とリリースに[バッチ]アクティビティを使用するのは比較的簡単です。しかし、[バッチ]アクティビティにはかなり複雑な方法でバッチを収集、並べ替え、リリースできる追加機能があります。[バッチ]アクティビティの機能について、詳細情報は次のトピックをご覧ください。

以下、このトピックは[バッチ]アクティビティとプロパティの参照ページとなります。

バッチを整理する

[バッチ]アクティビティは入るトークンを収集し、指定した基準に基づいてバッチに整理できます。[バッチ]アクティビティの次のプロパティは、バッチがトークンを整理する方法に直接関連します。

  • バッチ数量 - このプロパティはバッチの目標値を設定します。この値に達するまでバッチはトークンの収集を続け、その値に達するとバッチがリリースされます。
  • 数量詞 - このプロパティは、バッチ数量の計算方法を決定する基準を設定します。
  • グループ化の基準 - このプロパティは、入るトークンを整理し、バッチにグループ化する基準を設定します。
  • オーバーフロー - このプロパティは、入るトークンでバッチが[バッチ数量]を超えた場合にどうするかを決定します。

このことを念頭に置き、[数量詞]には、トークンを収集し整理する2つの異なるメソッドがあります。

  • トークンの数でバッチ - このオプション(デフォルト)を選択すると、[バッチ数量]は、[バッチ]アクティビティに到着するトークンの数に基づいて決まります。トークンが入るたびに、バッチの現在の数量が1つずつ増加します。トークンの数が[バッチ数量]プロパティで指定された値に達すると、バッチがリリースされます。
  • トークンのラベルでバッチ - このオプションを選択すると、[バッチ数量]は入るトークンのラベルの値に基づいて決まります。この場合、トークンはラベルに保存されている数値でバッチ数量を増やすことができます。

上の方法については、それぞれ次のセクションで説明します。

トークンの数でバッチ

バッチ処理の最も簡単な(そしてデフォルトの)方法は、トークンの数で収集することです。つまり、入るトークンそれぞれが[バッチ数量]に対して1つ分のスペースを占めます。トークンの数が[バッチ数量]プロパティで指定された値に達すると、バッチがリリースされます。

次のとおり、[バッチ]アクティビティがトークン数で収集するように設定します。

  1. バッチ]アクティビティをクリックして選択します。
  2. [クイックプロパティ]で、[数量詞]に[トークンの数]と表示されていることを確認します。
  3. バッチ数量]ボックスをクリックし、各バッチで収集するトークンの数を入力します。

トークンのラベルでバッチ

このオプションを選択すると、[バッチ数量]は入るトークンのラベルの値に基づいて決まります。この場合、トークンは、ラベルに記載されている任意の数値でバッチ数量を増やすことができます。たとえば、[数量詞]が[token.Weight]に設定され、入るトークンにWeightという名前のラベルがあり、数量が200である場合、トークンがバッチに追加されるときに現在のバッチ数量を200増やします。

次のとおり、バッチがラベル値で収集するように設定します。

  1. ラベルを割り当てる]アクティビティまたはそれ以前の処理フローのアクティビティで、バッチ処理に使用されるラベルを作成するようにします。
  2. 処理フローの[バッチ]アクティビティをクリックして選択します。
  3. [クイックプロパティ]で[数量詞]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントすると、現在処理フローにある全ラベルが記載されたサブメニューが開きます。メニューから目的のラベルをダブルクリックするか、矢印キーとEnterキーを使用して選択します。
  4. 数量詞]ボックスにtoken.YourLabelNameコマンドが表示されます。たとえば、ラベルの名前がWeightの場合、ボックスにはtoken.Weightと表示されている場合があります。あるいは、「token.Weight」とボックスに入力することもできます。次のように、このボックスに引用符を使用して文字列を入力することもできます"Weight"
  5. バッチ数量]ボックスをクリックし、目標のバッチ数量を入力します。たとえば、[バッチ]アクティビティで合計重量が300グラムに達するまでトークンを収集する場合は、ここに「300」と入力します。

これで、トークンがバッチに入るたびに各トークンの指定されたラベルの値が現在のバッチ数量に加算されます。バッチ数量が指定された限度に達すると、バッチがリリースされます。たとえば、[バッチ]アクティビティが[Weight]という名前のラベルを使用してトークンを収集しており、指定された[バッチ数量]が300であるとします。この場合、リリースするために合計重量300を収集する必要があることになります。[バッチ]アクティビティに入る最初のトークンに値200の[Weight]ラベルがあり、2番目のトークンの[Weight]ラベル値が100の場合、2番目のトークンがバッチに追加された後にバッチがリリースされます。これは、両トークンの[Weight]ラベルの合計が各バッチの目標重量である300になるためです。

バッチのオーバーフローオプション

ラベル単位でバッチ処理をする場合、指定した[バッチ数量]よりも多くなり、バッチがオーバーフローする可能性があります。オーバーフローが起こると、[バッチ]アクティビティのオーバーフローロジックがトリガーされます。

バッチがオーバーフローするとどうなるかについて、前のセクションと同じ例で説明します。先の例では、[Weight]ラベルの合計が300になると[バッチ]アクティビティがバッチをリリースするように設定されていました。最初のトークンの[Weight]ラベル値が200で、2番目のトークンの[Weight]ラベル値が150の場合、両トークンの[Weight]ラベルの合計は350となります。350はそのバッチの目標重量を超えてしまうため、バッチのオーバーフローロジックがトリガーされます。

オーバーフローが発生すると、[バッチ]アクティビティの動作は[オーバーフロー]プロパティに制御されます。このプロパティのメニューには次のオプションがあります。

  • 分割しない、過剰分をリリース - バッチは変更されずにリリースされます。このオプションを選択すると、過剰分を含めバッチがリリースされます。たとえば、バッチ数量を300に設定し、バッチに入るトークンで50オーバーフローした場合、バッチは350リリースされます。このオプションを使用すると、バッチでトークンラベルが変更されません。ラベルの変更には、[ラベル集約]方法を使用します。
  • 分割しない、一部をリリース - オーバーフローしたバッチをリリースするのではなく、[バッチ]アクティビティが一部のバッチのみをリリースします。バッチをオーバーフローさせた入るトークンは、次のバッチに入れられます。バッチ数量が300に設定され、現在のバッチ数が200であった先の例でこのロジックについて説明します。入るトークンの値は150で、バッチが50オーバーフローします。この場合、現在のバッチは数量200でリリースされ、入るトークンは新しいバッチに数量150で配置されます。このオプションを使用すると、バッチでトークンラベルが変更されません。ラベルの変更には、[ラベル集約]方法を使用します。
  • 過剰数量を保持 - 現在のバッチが必要な数量のみリリースされます。新しいトークンが作成され、過剰数量を含むラベル付きの新しいバッチに配置されます。すべてのラベルとラベル値は、最後のトークン(オーバーフローの原因となったもの)から新しいトークンにコピーされます。たとえば、バッチ数量を300に設定し、トークンを入力してバッチが50オーバーフローした場合、バッチは数量300でリリースされます。次に、数量50のラベルを含むほぼ同一の新しいトークンを使用して、新しいバッチが開始されます。このオプションでは、バッチがトークンの数量詞ラベルを変更し、過剰数量を追加のバッチに移動させます。最初のバッチですでに待機していたトークンのラベルは変更されません。ラベルの変更には、[ラベル集約]方法を使用します。
  • 過剰数量を破棄 - 最後のトークンのラベル値は、バッチが[バッチ数量]プロパティで指定された量になるまで減らされます。すなわち、オーバーフローした量を破棄します。このオプションでは、バッチは最後のトークンの数量詞ラベルのみを変更し、他のラベルは変更されません。ラベルの変更には、[ラベル集約]方法を使用します。

オーバーフローロジックは、[数量詞]プロパティで指定されたラベル値にのみ影響し、トークンの他のラベルは影響を受けません。トークンを保持したまま新しいバッチでリリースされると、[ラベル集約]も影響を受けることがあります。詳細については、「発信バッチにラベルを割り当てる」を参照してください。

グループ化する

新しいトークンが[バッチ]アクティビティに到着すると、[グループ化の基準]プロパティが評価され、一致するバッチにトークンが配置されます。一致するバッチが見つからない場合、新しいバッチが作成されます。デフォルトでは、[グループ化の基準]は[なし]に設定され、バッチは一度に1つだけ作成されます。ただし、指定した基準に基づいてトークンを並べ替える場合は、[グループ化の基準]プロパティを使用できます。たとえば、トークンのラベル値、名前、またはトークンがリンクされたオブジェクトに基づいて、トークンをバッチに並べ替えることができます。通常、これは入るトークンのラベルですが、グローバルテーブルまたは他の値を参照することもできます。

次の表に示すように、[グループ化の基準]には数値、文字列、またはオブジェクトを使用できます。

タイプ 説明
数字 トークンのラベル数値などの数字に基づき、トークンをバッチにグループ化できます。数字は整数または浮動小数点数にできます。また、正負どちらでもかまいません。
テキスト 文字列(テキストの別名)に基づきトークンをバッチにグループ化できます。たとえば、処理フローの前に[ラベルを割り当てる]アクティビティを行い、[バッチ]と呼ばれるトークンにそれぞれ新しいラベルを割り当て、一定割合のトークンに「First Batch」または「Second Batch」という文字列を割り当てることができます。
オブジェクト オブジェクトに基づきトークンをバッチにグループ化できます。たとえば、トークンには特定のトークン(Processor1、Processor2、またはProcessor3)のバッチを処理する必要がある3Dモデルのプロセッサを参照する、[ProcessBy]というラベルが付いている場合があります。

[バッチ]アクティビティに表示されるバッチは、古いものから順に、上から下、右から左に表示されます。

複数のトークンをリリースしてトークンを破棄する

[バッチ]アクティビティには、バッチのリリース方法をコントロールするさまざまなオプションがあります。バッチがリリースされると、[バッチ]アクティビティの次のプロパティが使用されます。

[バッチ]アクティビティでは、バッチ処理が完了すると任意の数のトークンがリリースされます。このオプションは、材料を収集して結合し、結合された材料を一定の部分数に均等に分割するプロセスをシミュレーションするのに便利です。たとえば、[バッチ]アクティビティを設定し、元のトークンをひとまとめにしてから別個の部分に分割したかのように5つのトークンを収集して3つのトークンをリリースできます。

[リリースするトークンの数]プロパティを使用し、リリースするトークンの数を変更できます。この数はバッチで収集されたトークンの数と同じか、それよりも多く、または少なく設定できます。下3つの各シナリオについて、バッチ内で何が起きているかを理解することが重要です。

リリースするトークンの数が収集されたトークンの数と等しい場合

これは3つのうち最も単純なシナリオです。3つのトークンがバッチで収集され、[リリースするトークンの数]が3に設定されている場合、バッチに追加された元のトークン3つすべてが到着したときと同じ順序でリリースされます。これは、一連のトークンを同期させる方法として有用です。

[数量詞]がラベル値に設定されている場合は、各バッチのトークン数が異なる場合があります。バッチで収集されたすべてのトークンをリリースするには、[バッチされたトークンの数]オプションを選択するか、[リリースするトークンの数]ボックスに0以下の任意の数を返します。

リリースするトークンの数が収集されたトークンの数より多い場合

[リリースするトークンの数]ボックスで指定した数がバッチで収集されたトークンの数より多い場合、[バッチ]アクティビティは新しいトークンを作成してリリースします。このような新しいトークンには初期ラベルがありませんが、[ラベル集約]を使用して、新しいトークンにラベルを作成できます。詳細については、「発信バッチにラベルを割り当てる」を参照してください。新しいトークンは、[バッチ]アクティビティを最後に離れます。

リリースするトークンの数が収集されたトークンの数より少ない場合

[リリースするトークンの数]がバッチで収集されたトークンの数より少ない場合、適切なトークンの数になるまでトークンが破棄されます。破棄するトークンと保持するトークンを決定する際、[バッチ]アクティビティは次のルールを順に使用してトークンの優先順位を付けます。

  1. 同じバッチに子を持つトークンは、その子に優先して保持されます。(親子関係を有するトークンの詳細については、「サブ処理フロー」を参照してください)。
  2. 子の数が多いトークンが、少ないトークンに優先して保持されます。
  3. 共有アセットを多く割り当てられたトークンが、少ないトークンに優先して保持されます。

[バッチ]アクティビティでトークンに優先順位を付けると、優先順位が結果として最も低いトークンが破棄されます。

[バッチ]アクティビティでトークンが破棄されると、[終了]アクティビティと同様に機能することに注意してください。

  • [バッチ]アクティビティが、[サブフローを実行]アクティビティに親を持つトークンを破棄すると、親アクティビティに子が終了したことが通知されます。
  • トークンに割り当てられた共有アセットは、すべて割り当てが解除されます。
  • トークンが子を持つ場合、子がすべて破棄されるまで破棄されません(アクティビティには残りますが、後続のバッチには含まれません)。

トークンが[バッチ]アクティビティからリリースされる前に、過剰なトークンが破棄されます。

発信バッチにラベルを割り当てる

デフォルトでは、[バッチ]アクティビティに出入りするトークンはラベルを保有し、新しいラベルは追加されません。新しく作成されたトークンにはラベルが割り当てられませんが、[ラベル集約]を使用すると、[バッチ]アクティビティでは、新しいラベルを割り当てたり、バッチに含まれていたトークンのラベルをすべての発信トークンに集約したりできます。バッチが[バッチ数量]の値に達しているため、すべてのトークンを収集するまで、[ラベル集約]は行われません。

ラベル集約の使用法としては、1つに結合されるすべての部分の総重量を計算するというものが挙げられます。各トークンが1つの部分を表し、それぞれが[Weight]という名前のラベルを持つ場合、ラベル集約を使用してバッチに追加された全トークンの総重量を合計し、全発信トークンに割り当てる[BatchWeight]といった新しいラベルを作成します。

次のとおり、発信バッチにラベルを割り当てます。

  1. バッチ]アクティビティをクリックして選択します。
  2. [クイックプロパティ]の[ラベル集約]グループの下にある[追加]ボタン をクリックして、新しいラベルを追加します。新しい行がテーブルに表示されます。
  3. 元のラベル]列で、[labelName]と書かれたテキストのセルをダブルクリックします。データのソースとして使用されるバッチのトークンにラベルの名前を入力します。たとえば、入るトークンにすべて[Weight]という名前のラベルがある場合は、そのラベル名をここに入力します。
  4. 新しいラベル]列で、[labelName]と書かれたテキストのセルをダブルクリックします。発信トークンに割り当てるラベルの新しい名前を入力します。たとえば、新しい名前は[BatchWeight]です。
  5. 集約]列では、新しいラベルの値を計算または割り当てる方法を選択します。[バッチID]というテキストのセルをクリックしてメニューを開きます。メニューから適切なオプションを選択します。たとえば、全バッチトークンの[Weight]ラベルの合計を計算する場合は、このメニューで[合計]を選択します。

以下は参照事項です。

元のラベル - データのソースとして使用される、バッチにするトークンのラベル名。各トークンのこのラベル値は、集約値の計算に使用されます。ラベルがトークンに存在しない場合、戻り値は0になります。注:このエントリは[バッチID]と[トークンカウント]の集約タイプには使用されません。

新しいラベル - 新しい値が書き込まれるラベルの名前。発信バッチの各トークンには、この名前のラベルと割り当てられた値が与えられます。

集約 - バッチにリリースされた全トークンの[新しいラベル]に割り当てられる値。実行できる値は次のとおりです。

  • バッチID - [バッチ]アクティビティからリリースされた各バッチは、[バッチID]が1から1つずつ増加します。[バッチID]は、所定の[バッチ]アクティビティで生成されたバッチ間で必ず一意になります。
  • トークンカウント - バッチで収集されたトークンの数。[数量詞]プロパティが[トークンの数]に設定されている場合、この値は[バッチ数量]値と等しくなります。
  • 最後の値 - 最後にバッチに入るトークンの[元のラベル]ラベル値を取得します。
  • 最初の値 - 最初にバッチに入るトークンの[元のラベル]ラベル値を取得します。
  • 配列を作成 - バッチで収集された全トークンのラベル値を取得し、値の配列を作成します。ラベルがトークンに存在しない場合、NULL値が配列に設定されます。
  • 合計 - バッチにある全トークンの[元のラベル]値を合計します。
  • 平均 - バッチにある全トークンの[元のラベル]値の平均値を取得します。
  • 最小 - バッチにある全トークンの[元のラベル]値の最小値を取得します。
  • 最大 - バッチにある全トークンの[元のラベル]値の最大値を取得します。
  • 標準偏差 - バッチにある全トークンの[元のラベル]値の標準偏差を取得します。
  • 平方偏差 - バッチにある全トークンの[元のラベル]値の平方偏差を取得します。
  • カウント - バッチにある[元のラベル]というラベル名のトークンの数を取得します。

バッチを早期にリリースする

[バッチ]アクティビティには、[最大待機時間]と[最大アイドル時間]の両プロパティがあります。これらのプロパティで、トリガーを開始するまでの開始基準と待機時間を定義できます。バッチがいずれかの時間に達し、[OnWaitTimerFired]トリガーまたは[OnIdleTimerFired]トリガーのいずれかを呼び出すと、バッチを早期にリリースすることが可能ですが、必須ではありません。バッチがリリースされない場合、バッチは[バッチ数量]に達するまでトークンを収集し続け、それから通常どおりにリリースされます。

[最大待機時間]および[最大アイドル時間]プロパティでバッチを参照できます。releasebatch()コマンドを呼び出して、[OnWaitTimerFired]トリガーまたは[OnIdleTimerFired]トリガー内か、モデルにある任意の場所からバッチを早期にリリースできます。[failed]が1の場合、バッチはすぐにバッチの全トークンをリリースしてラベル集約を実行しないか、[リリースするトークンの数]プロパティを評価します。[failed]が0の場合、バッチは正常にリリースされ、[リリースするトークンの数]を評価してバッチにあるトークンのすべてのラベル集約を実行します。releasebatch()コマンドには、[バッチ]アクティビティの任意のコネクターからリリースされたトークンを送信する機能もあります。コネクターは、インデックスまたは名前で参照できます。releasebatch()コマンドでは、getactivity()を使用してアクティビティを参照することで、[バッチ]アクティビティに直接接続されていないアクティビティにトークンをリリースすることもできます。

これらのプロパティの詳細については、「最大待機時間」と「最大アイドル時間」を参照してください。

コネクター

[バッチ]アクティビティでは、任意の数のコネクターを使用できますが、完了したバッチは必ず最初のコネクターから出ます。手動でリリースされたバッチのみ、別のコネクターから出ることができます。詳細については、「アクティビティを追加および接続する」を参照してください。

プロパティ

次の画像は、[バッチ]アクティビティのプロパティを示しています。

これらの各プロパティについては、次のセクションで説明します。

名前

アクティビティの名前を変更するために使用します。このプロパティの詳細については、「名前」を参照してください。

フォント

このボタン を使用すると、アクティビティの背景色プロパティとフォントプロパティを編集するウィンドウが開きます。このプロパティの詳細については、「フォント」を参照してください。

統計

このボタン でアクティビティの統計ウィンドウが開きます。このプロパティの詳細については、「統計」を参照してください。

バッチ数量

[バッチ数量]ボックスはバッチの目標値を設定します。この値に達するまでバッチはトークンの収集を続け、その値に達するとバッチがリリースされます。詳細については、「バッチを整理する」を参照してください。

数量詞

[数量詞]ボックスは、バッチ数量の計算方法を決定する基準を設定します。[トークンの数]または入るトークンのラベルで収集できます。詳細については、「バッチを整理する」を参照してください。

リリースするトークンの数

バッチが収集を完了したときにリリースされるトークンの数量を指定します。

グループ化の基準

[グループ化の基準]ボックスは、入るトークンをバッチにグループ化する基準を設定します。

オーバーフロー

[オーバーフロー]設定は、収集中にバッチ数量を超える値がどうなるかをコントロールします。[トークンの数]で収集する場合はこのオプションを利用できません。詳細については、[バッチオーバーフローオプション]をご覧ください。

ラベル集約

このプロパティで、バッチがリリースされる際にトークンのラベルを作成および変更できます。バッチのリリース時にトークンが破棄された場合でも、バッチに追加された全トークンに対して、[集約]列に設定されたとおりに操作が実行されます。操作が実行されると、バッチにリリースされるすべてのトークンに結果の値が設定されます。詳細については、「発信バッチにラベルを割り当てる」を参照してください。

最大待機タイマーの使用

[最大待機タイマー]は、バッチが最初に作成されるときに評価されます。[開始基準]が偽と評価してタイマーが作成されない場合、真と評価するまで、トークンがバッチに追加されるたびに最大待機タイマーが評価されます。詳細については、「バッチを早期にリリースする」を参照してください。

最大アイドルタイマーの使用

[最大アイドルタイマー]は、トークンがバッチに追加されるたびに評価されます。詳細については、「バッチを早期にリリースする」を参照してください。