リストを操作する
リストを計画する
リストを作成する前に、シミュレーションモデルでリストが機能する物流の仕組みについてよく考えておくと役立つ場合があります。
- リストを使用する理由は何ですか?- シミュレーションモデルにおけるリストの目的を考えてみてください。リストを使用してフローアイテムを優先順位付けし、特定のフローアイテムを特定の固定リソースに送信するロジックを作成しますか?タスクシーケンスの管理と優先順位付けに使用しますか?コネクションレスルーティングに使用しますか?リストを使って何をするのかを考えると、より効果的なリストを作成するのに役立ちます。
- リストに何を入れますか?- リストにはフローアイテム、タスク、オブジェクトが含まれますか?この答えによって最初に作成すべきリストのタイプが決定します。技術的にはさまざまなタイプのオブジェクトをリストに混在させることができますが、リストを管理して1つのタイプのオブジェクトに集中することが推奨されます。
- リストにアイテムをプッシュ/アイテムからプルするのは何ですか?- アイテム、タスク、オブジェクトはどのようにリストにプッシュされますか?シミュレーションモデル内のどのイベントによってリストにプッシュされるのでしょうか?シミュレーションモデル内のどのイベントによってアイテムがリストからプルされるのでしょうか?
- リストエントリとバックオーダーのフィルタリングに使用される基準はどれですか?リストは単純なFIFO(先入れ先出し)ロジックを使用する予定ですか?またはリストエントリとバックオーダーのどちらをリストで優先するのかを判断するには、他の基準が必要ですか?
ツールボックスを使用する
主にツールボックスを使用してリストを作成および管理します。リストなどのツールコンポーネントの操作に関する一般的な情報については、「ツールボックスを使用する」を参照してください。このトピックでは、リストを削除して名前を変更する方法とその他の関連タスクについて説明します。
リストを作成する
リストを作成するには:
- [ツールボックス]で[追加]ボタン をクリックして、メニューを開きます。
- [グローバルリスト]をポイントし、作成するリストのタイプを選択します(詳細については、「リストのタイプ」を参照してください)。[リストのプロパティ]ウィンドウが開きます。
- ウィンドウの上部にあるボックスで、このリストにわかりやすい名前を付けてシミュレーションモデルで目的を識別できるようにします。
フィールドを追加、移動、削除する
フィールドはリストで各エントリに関するデータを追跡します。フィールドとは、リストアイテムをフィルタリングして優先順位を付けるクエリの作成に使用する構築ブロックです(詳細については、「主な用語 - フィールド」を参照してください)。
そのため、リストのフィールドを選択することは、リストを構築するうえで重要です。事前に構築されたフィールドを使用することも、独自のカスタムフィールドを作成することもできます。
フィールドを追加する
フィールドを追加するには:
- [リストのプロパティ]ウィンドウを開きます。
- [フィールド]タブで[追加]ボタン をクリックして、メニューを開きます。
- 追加するフィールドのタイプを選択します。
- 新しいフィールドが[フィールド]タブの下に表示されます。
- このフィールドの名前は、[式フィールド]ボックスで変更できます。
- FlexScriptに慣れている場合は、カスタムロジックを作成して、[式]ボックスにカスタム式を入力できます。また、このボックスの横にある矢印を使用して、ピックリストメニューから事前に構築された式を選択することもできます。
フィールドを移動する
フィールドを移動または再編成するには、フィールドの左にあるハンドルをドラッグして位置を変更します。
フィールドを削除する
フィールドを削除するには、フィールドの横にある[削除]ボタン をクリックします。
3Dオブジェクトをリストに接続する
プロパティウィンドウにあるさまざまなプロパティまたはトリガーでメニューオプション(ピックリスト)を使用し、3Dオブジェクトをリストに接続できます。3Dオブジェクトの接続に使用する方法は、リストにプッシュするのがフローアイテム、タスク、オブジェクトのどれであるかによって異なります。次のセクションでは、最も一般的な方法について説明します。
フローアイテムをリストにプッシュまたはプルする
固定リソースはフローアイテムをリストにプッシュまたはプルできます。主に固定リソースのプロパティウィンドウにある[フロー]タブを使用して、フローアイテムをプッシュまたはプルします。
フローアイテムをリストにプッシュするには:
- 固定リソースをクリックして、右側にプロパティを開きます。
- [出力]セクションで[ポートに送信]ボックスの横にある矢印をクリックして、メニューを開きます。
- [リストを使用]をポイントし、[アイテムリストにプッシュ]を選択してリストオプションを開きます。
- [リスト]ボックスの横にある矢印をクリックして、メニューを開きます。フローアイテムをプッシュするリストを選択します。
リストからフローアイテムをプルするには:
- 固定リソースをクリックして、右側にプロパティを開きます。
- [入力]セクションで[プル]チェックボックスをオンにします。
- [プル方法]ボックスの横にある矢印をクリックして、メニューを開きます。
- [リストを使用]をポイントし、[アイテムリストからプル]を選択してリストオプションを開きます。
- [リスト]ボックスの横にある矢印をクリックして、メニューを開きます。フローアイテムをプルするリストを選択します。
タスク実行者をリストにプッシュする
タスク実行者を別のタスクに割り当てられる場合はいつでも、タスク実行者をリストにプッシュできます。このリストでタスクを優先順位付けし、使用可能なタスク実行者に割り当てることができます。
タスク実行者をリストにプッシュするには、タスク実行者をシミュレーション実行の開始時にリストにプッシュし、別のタスクで作業可能になるたびに設定する必要があります。
- タスク実行者をクリックして、右側にプロパティを開きます。
- [トリガー]セクションで[追加]ボタン をクリックして、メニューを開きます。[リソース利用可能時]を選択します。
- [リソース利用可能時]トリガーの横にある[追加]ボタン をクリックして、メニューを開きます。[リストを使用]をポイントし、[タスク実行者リストにプッシュ]を選択してリストオプションを開きます。
- [リスト]ボックスの横にある矢印をクリックして、メニューを開きます。タスク実行者をプッシュするリストを選択します。
- タブの下部にあるプロパティウィンドウの[タスク実行者]セクションで、[シミュレーション開始時にOnResourceAvailableを起動]チェックボックスがオンになっていることを確認します。このチェックボックスをオンにすると、シミュレーションが開始されるとすぐにタスク実行者がリストにプッシュされます。
タスク実行者をリストからプルする
固定リソースに完了すべきタスクがある場合、タスク実行者をリストからプルできます。
- 固定リソースをクリックして、右側にプロパティを開きます。
- タスク実行者を使用するプロパティのボックスをオンにします([輸送を使用]、[処理にオペレーターを使用]など)。
- タスクに使用するオペレーターまたはタスク実行者を示すボックスを探します。このボックスの横にある矢印をクリックして、メニューを開きます。
- [リストを使用]をポイントし、[タスク実行者リストからプル]を選択してリストオプションを開きます。
- [リスト]ボックスの横にある矢印をクリックして、メニューを開きます。タスク実行者をプルするリストを選択します。
タスクまたは固定リソースをリストにプッシュおよびプルする
タスクまたは固定リソースをリストにプッシュ/リストからプルする場合は、処理フローツールの使用を検討します。詳細については、次のセクション「処理フローでリストを使用する」を参照してください。
処理フローでリストを使用する
FlexSimに事前に構築されていない方法でリストを使用する場合は、処理フローツールを使用してカスタムリストロジックを作成できます。処理フローツールは、タスクシーケンスを作成し、数値や文字列などの抽象的な値を使用するリストを操作する場合に特に効果的です。さらに、処理フローでは、リストからのプッシュやプルだけでなく、タスク実行者などのオブジェクトをより柔軟にコントロールできます。
処理フローツールの詳細については、「処理フローインターフェイスの概要」を参照してください。また、処理フローのリストの例については、「処理フローチュートリアル1」と「処理フローチュートリアル4」を参照してください。
シミュレーションの実行中にリストを表示する
シミュレーションの実行中にリストを開き、そのエントリを表示するには:
- ツールボックスでリストをダブルクリックして、[リストのプロパティ]ウィンドウを開きます。
- [一般]タブで[エントリを表示]、[バックオーダーを表示]ボタンをクリックします。
- 別のウィンドウが開き、リストのエントリまたはバックオーダーが表示されます。必要に応じてこのウィンドウをドッキングし、シミュレーション実行中に見やすくできます。詳細については、「ウィンドウとタブを並べ替える」を参照してください。
- シミュレーションを実行します。リストエントリとバックオーダーは、シミュレーションの実行中に動的に更新されます。
リストクエリを作成する
クエリはオプションですが、リストを最大限に活用するうえでクエリは重要です。クエリは、最初にリストからプルするリストエントリや、最初に処理するバックオーダーを決定するカスタムロジックです。また、クエリは、リストからプルされるリストエントリをフィルタリングまたは制限することもできます。使用可能なクエリの例については、「リストの特徴と主な用語」を参照してください。
クエリの追加先
[リストのプロパティ]ウィンドウでは、リスト自体にクエリを追加しません。クエリの追加先は、オブジェクトまたはリストからプルしている処理フローアクティビティです。
たとえば、フローアイテムをリストからプルするようにプロセッサを設定した場合は、プロセッサのプロパティウィンドウを開いてクエリを作成します。[フロー]タブで[プル方法]プロパティにクエリを追加します。
処理フローツールでクエリを追加する場合は、[リストからプル]アクティビティの[クエリ]プロパティにクエリを追加します。
クエリを作成する方法
リストクエリはSQL構文を使用します。SQLは主に、テーブルやデータベースに含まれるデータのクエリ、フィルタリング、優先順位付けに使用されてきたプログラミング言語です。これはFlexSimでリストが機能する仕組みとよく似ているため、SQLはリストをクエリするのに適しています。
SQLに慣れていれば、簡単にクエリを作成できます。慣れていない場合でも、関心のあるほとんどのリストクエリの作成に必要なのは、入門レベルのSQL構文のみです。
次の表に示すように、このコンテキストでは主に2つの句を使用してリストクエリを作成します。
句 | 目的 | 例 |
---|---|---|
WHERE | この句を使用してリストのエントリをフィルタリングします。つまり、特定の条件を満たすエントリだけがリストからプルされます。 | WHERE weight > 20 この例では、リストはオブジェクトの重量を表すオブジェクト上のラベルに対応するフィールドを使用します。20より大きい値のオブジェクトのみがリストからプルされます。 |
ORDER BY | この句を使用してリストのエントリを優先順位付けします。つまり、2つ以上のリストエントリの属性を比較し、最初にリストからプルするエントリを決定します。 | ORDER BY weight DESC この例では、リストはオブジェクトのweightラベルを使用して、リストから最初にプルするエントリを決定します。重量が最も重いオブジェクトが最初にプルされます。 |
SQLクエリを作成する方法の詳細については、「SQLクエリの概要」を参照してください。
ピックリストを使用してクエリを作成する
クエリを入力できるプロパティが表示されるたびに、ピックリストを使用できます。ピックリストには、有効なリストクエリの作成方法に関するヒントや提案が表示されます。ピックリストを使用してクエリを作成するには:
- リストクエリを入力できるプロパティを探します(詳細については、「クエリの追加先」を参照してください)。
- クエリボックスの横にある矢印をクリックして、ピックリストメニューを開きます。WHEREまたはORDER BYのいずれかをポイントすると、クエリで使用できるリストフィールドを提案するサブメニューが開きます。
- フィルタリングするフィールドをクリックします。クエリボックスに、選択した内容に基づいてサンプルクエリが表示されます。
- このサンプルクエリを基礎として使用し、独自のクエリを作成します。作成するクエリのフィルタリングと制限が正しく設定されるまで、クエリを編集できます。
クエリの例
シミュレーションモデルに3つのキューがあり、それぞれのキューが、値1、2、3を指定できるtypeというラベル名のフローアイテムをプッシュしているとします。キューは、アイテムを次のフィールドのアイテムリストにプッシュします。
プロセッサがこのリストからアイテムをプルするときに、クエリを使用する可能性があります。
WHERE type == 2 ORDER BY age ASC
このクエリのWHERE
句は、フローアイテムをtype
フィールドでフィルタリングします。この場合、プロセッサは、typeが2のアイテムのみをプルするようにプロセッサを制限します。したがって、プロセッサは2のアイテムのみをプルします。
ORDER BY
句は、次にage
フィールドを使用してリストからプルするアイテムに優先順位を付けます。age
フィールドには、フローアイテムがリストで待機している時間の長さに関するデータが含まれています。ASC
句は昇順を意味します。つまり、リストでの待機時間が最短のアイテムがプルされます。最も古いアイテムを最初にプルする場合は、代わりにDESC
(降順を意味します)を使用します。
この例では、プロセッサは/Queue3/Box~2
を最初にプルします。typeが2であり、リストで待機している時間が/Queue3/Box
よりも短いためです。
クエリをテストする
クエリをリストに適用する前にそのクエリをテストして、リストエントリが正しくフィルタリングおよび優先順位付けされているか確認できます。特定のクエリをテストするには:
- リストを開いてエントリを表示します(具体的な手順については、「シミュレーションの実行中にリストを表示する」を参照してください)。
- リストに複数のアイテムが表示されるまで、シミュレーションモデルを実行します。シミュレーションモデルを一時停止します。
- リストエントリウィンドウの任意の場所をクリックします。クイックプロパティパネルが変更され、[プルクエリをテストする]プロパティが表示されます。
- [クエリ]ボックスに、テストするクエリを入力します。
- Enterキーを押すと、入力したクエリに基づいてリストの順序が変更されます。最初にプルされるエントリはリストの一番上にあります。エントリの順序を確認して、期待に沿ったエントリがあることを確認します。
バックオーダーキューの方法
クエリを使用して最初にプルするリストエントリの優先順位付けと同じ方法で、特定の属性を持つバックオーダーを最初に処理するように優先順位を付けることもできます。たとえば、固定リソースのラベルまたはモデルのいくつかの条件に基づいて、バックオーダーに優先順位を付けることができます。
バックオーダーキューの方法を作成する場合、リストがバックオーダーのリストを評価してリストを再編成するときに注意が必要になる場合があります。シミュレーションモデルの条件によっては、バックオーダーが異なる方法で評価される可能性があるので注意してください。
バックオーダーキューの方法を作成するには:
- ツールボックスでリストをダブルクリックし、[リストのプロパティ]ウィンドウを開いて、[バックオーダー]タブを開きます。
- [バックオーダーキューの方法]ボックスにクエリを入力します。
- 必要に応じて[バックオーダー]タブの残りのプロパティを使用し、リストでバックオーダーリストが評価および再編成されるタイミングを変更できます。
- 独自のプラーのみ - このボックスはデフォルトでオンになっています。このボックスがオンの場合、プルするオブジェクトで利用可能なバックオーダーは一度に1つのみになります。
- バックオーダー処理の前に複数のプッシュを許可 - バックオーダーを評価して優先順位付けする前に、オブジェクトで複数のエントリをリストにプッシュする場合は、このチェックボックスを使用します。たとえば、バックオーダーが処理される前にリストにアイテムのバッチをプッシュする場合は、このチェックボックスを使用します。
- プッシュですべての値を再評価 - デフォルトでは、リストのバックオーダーはリストにプッシュされる新しい値のみを評価します。エントリがリストにある間に変更される可能性のある動的フィールドがある場合は、このチェックボックスを使用します。このボックスをオンにすると、何かがリストにプッシュされるたびに、すべてのリストエントリのフィールド値が再評価されます。
- バックオーダー再評価イベント - バックオーダーキューの方法でWHERE句を使用している場合のみ、再評価イベントを追加します。これらのイベントを追加して、シミュレーションのイベントによって評価されるバックオーダーを決定します。