モデルパラメータ
モデルパラメータとは
モデルパラメータは、モデルの入力変数です。モデルパラメータを使用することで、モデルの一部を簡単に調整できるようになります。たとえば、ワーカーの数と機器の位置を簡単に変更できるようにしたい場合、それらのモデル要素をパラメータで制御するようにモデルを構築することができます。パラメータ値を変更すると、その変更がモデルに反映されることをご確認いただけると思います。
共通のモデルパラメータには次のものが含まれます。
- 存在するワーカーの数
- 処理の特定部分に要する時間
- ジョブが完了するまでのシーケンス
- 特定の機器がアクティブかどうか
- 顧客の到着レート
モデルパラメータを作成する理由
モデルパラメータの作成には多くの利点があります。次のサブセクションでは、最も大きな理由についていくつか説明します。
モデルパラメータは変更しやすい
一般的にモデルの作成では、要件が変わったり、理解が深まったり、新しいニーズが見つかったときなど、多くの作業を繰り返す必要があります。将来的に起こる変更や、その変更をパラメータとして表現できるかを予測するのは難しいことです。ですが、モデルがその時点で不明な処理時間を要求することは珍しくありません。その処理時間をパラメータにした場合、その後により適切なデータが利用可能になったときに、新しいデータを使用するようにモデルを簡単に更新できます。
モデルパラメータは厳密
モデルパラメータは、特定の値のみを許容するように構成することができます。たとえば、上限および下限を設定できます。パラメータを無効な値に設定しようとすると、パラメータはその値を受け付けずに有効な値に設定されます。これによって間違いを防ぐことができます。また、パラメータの目的を伝えることにも役立ちます。
モデルパラメータはグローバル
モデルパラメータはグローバルです。つまり、単一の場所で定義したパラメータをモデルのあらゆる場所で使用することができます。たとえば、100台のマシンがすべて同じ処理時間を使用する場合、その処理時間のパラメータを1つ作成して、そのパラメータをそれらのマシンすべてに参照させることができます。その後、処理時間の変更が必要になったときには、パラメータの値を変更すると、それらのマシンすべてが新しい値を使用するようになります。
モデルパラメータは公開型
モデルパラメータでは値を公開することができます。これは、モデルを複数人で使用する場合に便利です。一般的には、パラメータの値を変更する方が、パラメータが変わることで変更が必要になる箇所をモデル内ですべて探し出すよりも遥かに簡単です。仮にそのパラメータを使用しているのが1箇所だけだとしても、そのパラメータを使用している場所を思い出すよりもパラメータを探す方がずっと簡単です。
実験ツールはモデルパラメータに依存
FlexSimには実験ツールがあります。このツールは、モデルパラメータをさまざまな値に設定して、値がモデルのパフォーマンスに与える影響を把握します。
モデルパラメータテーブル
すべてのモデルパラメータはモデルパラメータテーブルで定義されます。デフォルトでは、新規モデルには[パラメータ]という1つのパラメータテーブルが設けられています。これはツールボックスで確認できます。
また、ツールボックスの[追加] ボタンから、他のパラメータテーブルを追加することもできます。
このテーブルの各行は、1つのパラメータを表します。パラメータを追加したり削除したりする場合、単純にこのテーブルから行を追加または削除してください。パラメータを編集する場合、その行にある4つの列の1つを編集できます。
[名前]列では、パラメータの名前を定義できます。モデル内のすべてのパラメータには固有の名前を設定する必要があります。これは複数のパラメータテーブルがある場合でも同様です。また、名前を数字から始めたり名前にスペースを含めないことをお勧めします。
[値]列では、パラメータの現在値を定義できます。さらに、[値]列ではパラメータのタイプおよびパラメータ値への追加制約も定義できます。タイプを編集するには、編集するセルをクリックし、表示されたボタンをクリックします。
[表示単位]列および[説明]列には任意のテキストを設定できます。このテキストによって、モデルを使用する人にパラメータについてのヒントを与えることができます。
パラメータ値の種類
パラメータの値にはタイプがあります。次のサブセクションでは、各タイプについて詳細を説明します。
連続
[連続]タイプでは下限値と上限値が必要です。この値は、上下限値により定義される範囲内の任意の数値に設定できます。
このタイプは割合に基づくパラメータに最適です。たとえば、再作業を必要とするジョブの割合を制御するパラメータレートや特定のカテゴリに属する顧客の割合などがあります。
整数
[整数]タイプでは下限値と上限値が必要です。この値は、上下限値により定義される範囲内の任意の整数値に設定できます。
このタイプは、整数にしかならない値に最適です。たとえば、モデル内のワーカーの数や利用可能なツールの数があります。
離散
[離散]タイプでは下限値、上限値、およびステップサイズが必要です。この値は、下限値からnステップの任意の値に設定できます(nは非負整数)。値は上限値を超えることはできません。
このタイプは、1刻み以外で増加する値や、非整数値から増加を始める値に最適です。
バイナリ
[バイナリ]タイプは追加情報を必要としません。可能な値は0と1のみです。このタイプは、オンまたはオフになる値や真または偽になる値に最適です。たとえば、このタイプのパラメータはモデルのエリアのオンとオフを切り替える目的で使用できます。
オプション
[オプション]タイプでは、このパラメータで取りうる値として、1つ以上の式を指定できます。値は、1から、指定したオプション数までの整数値に設定できます。
[オプション]タイプは、順序付けられていない選択肢から値を選択する場合に役立ちます。たとえば、2つのフロアレイアウトからどちらかを選択するためにこのオプションを使用すると仮定します。最初のレイアウトが2番目よりも「少ない」わけではありません。これらは単純に別々の選択肢なのです。
この区別は、オプティマイザーには特に重要です。通常、オプティマイザーはパラメータ値の増減をパフォーマンス指標の増減と相関させようとします。オプションパラメータを使用すると、オプティマイザーはこの相関を行いません。
シーケンス
[シーケンス]タイプではシーケンス長が必要です。これは0より大きな整数である必要があります。値には、数値の配列のみを設定できます。その配列は1~nの値をすべて含む必要があります(nはシーケンス長)。また、各値は一度だけ含めることができるので、配列の長さはnになります。
[シーケンス]タイプはジョブシーケンスを順序付ける際に最適です。この値のタイプは、オプティマイザーでの使用を想定しています。オプティマイザーでは、変更を回避するために、最適なジョブシーケンスにする必要があるためです。
式
[式]タイプは任意の有効なFlexScript式に設定できます。このタイプは、顧客の到着率や処理時間など、分布に対して最適です。
パススルー
パススルーパラメータを使用すると、モデルのどのノードでもパラメータにできます。このタイプのパラメータに値を設定すると、特定のノードの値が設定されます。このタイプのパラメータから値を取得すると、特定のノードから値が取得されます。この種類のパラメータを使用する一般的なユースケースは、グローバルテーブルのセルの参照です。
カスタム
カスタムパラメータは、次のどの種類の値にも設定できます。
- 数値
- 文字列
- null値
- 配列
- マップ(キー値である文字列とともに使用)
カスタムパラメータは、次のどの種類の値にも設定できません。
- ノード値
- ノード値を含むマップまたは配列
- 文字列以外のキーとともに使用するマップ
さらにカスタムパラメータを使用すると、その値が設定されようとするときに起動されるOn Constraintトリガーを定義できます。このトリガーを使用すると、新しい値を検証できます。値が正しい場合、トリガーは新しい値を返します。新しい値が正しくない場合、トリガーは値の修復を試み、修復できない場合は有効なデフォルトを返します。このトリガーが返す値はすべて、パラメータの新しい値として使用されます。
モデルパラメータを使用する
モデルパラメータには標準の使用方法が2通りあります。1つ目はFlexScriptを介して値にアクセスする方法です。2つ目はパラメータ値のOnSetトリガーを使用する方法です。
FlexScriptを介してパラメータにアクセスする
「MyParameter」という名前のパラメータがある場合、その値には次のようにしてアクセスできます。
Model.parameters.MyParameter
また、次のように別の形式を使用することもできます。
Model.parameters["My Parameter"].evaluate()
上記2つのステートメントは同じ動作を行います。なお、[オプション]タイプのパラメータと[式]タイプのパラメータでは、evaluate()
メソッドを使用して最大3つのパラメータを式に渡すことができます。渡したパラメータは、式の中でparam(1)
や、param(2)
、param(3)
として利用できます。
共通のユースケースは、値として分布を持つ[式]タイプのパラメータを定義するときで、たとえば次のような場合です。
uniform(10, 20, param(1))
この場合、evaluate()
を使用して必要な値を渡すことができます。
Model.parameters["MyParameter"].evaluate(2)
OnSetトリガーを使用する
各パラメータ値にはOnSetトリガーが設けられています。このトリガーは、パラメータの値が変化すると起動します。これは、[リセット]ボタンを使用してモデルをリセットした場合にも起動します。
OnSetトリガーが起動すると、次の4つの値にアクセスできるようになります。
- [参照]フィールドの値
- パラメータの新しい値
- パラメータの古い値
- このOnSetの起動がモデルのリセットに起因するかどうかを示すフラグ
[参照]フィールドの[サンプラー] ボタンは、参照およびピックオプションを同時に設定する際に使用できます。たとえば、プロセッサをサンプリングし、変数をポイントしてからmaxcontentを選択した場合、[参照]はプロセッサに設定されて、OnSetはリセット時のmaxcontent変数に設定されます。