実験ツール
概要と主要な概念
実験ツールは、さまざまな入力を使用したモデルの実行と結果の収集を自動化するツールです。実験ツールを使用するために、1つ以上ジョブを構成します。ジョブは、シナリオ(モデル入力のセット)を生成し、実行する各シナリオの複製の数を決定するための戦略を定義したものです。ジョブを実行すると、各シナリオの複製ごとに1回ずつモデルが実行され、その結果を結果データベースファイルに記録されます。結果は、[パフォーマンスの測定]ウィンドウに表示して調査することができます。
ジョブにはいくつかのタイプがあります。
ジョブ | 説明 |
---|---|
実験 | シナリオのセットと、シナリオごとに実行する複製の数を指定します。 |
最適化 | 目標を指定します。その目標の最適化を試みるシナリオが自動的に生成されます。 |
範囲ベース | パラメータのセットと、各パラメータの値の範囲を指定します。パラメータ値の順列ごとにシナリオが自動的に生成されます。 |
どのタイプでも複数のジョブを設定できますが、実験ツールを使用できるのは1つのジョブだけです。
詳細については、「実験についての主要な概念」トピックだけでなく、「ジョブの実行」トピックも参照してください。
少なくとも1つのジョブを実行したら、[パフォーマンス測定結果]ウィンドウを使用して結果データベースファイル内のデータを表示できます。
[ファイル]エリア
[ファイル]エリアは、実験ツールウィンドウの各タブの上にあります。結果データベースファイルのパスを表示して編集したり、ファイルを削除したりできます。[ファイル]エリアには、次のプロパティが表示されます。
結果データベースファイル
このフィールドには、結果データベースファイルへのパスが表示されます。指定されたファイルが存在しない場合は、次のジョブの実行時に作成されます。[デフォルトパスを使用]チェックボックスがオフになっている場合は、このフィールドを使用して、結果データベースファイルのカスタムパスを指定できます。
デフォルトパスを使用
結果データベースファイルのカスタムパスを指定するには、このチェックボックスをオフにします。このチェックボックスがオンになっている場合は、パスがモデルのファイルパスと名前に一致します。
結果ファイルを削除
このボタンをクリックすると、存在する場合に結果データベースファイルが削除されます。ファイルの削除は共通タスクであり、最後のジョブの実行以降にモデルが変更された場合に実行して、複数のモデルからの結果の混合を避ける必要があります。
結果を表示
1つ以上のジョブを実行した場合は、このボタンをクリックして[パフォーマンス測定結果]ウィンドウを開き、結果を表示します。フィルターを1つ以上定義した場合、[パフォーマンス測定結果]ウィンドウに適用するフィルターを選択できるメニューが表示されます。
[ジョブ]タブ
[ジョブ]タブを使用すると、実験ツールでジョブを追加、削除、並べ替え、および編集することができます。このタブの左側では、ジョブのリストを表示して編集することができます。このビューの右側では、選択したジョブを編集することができます。
[ジョブ]タブの左側には、次のプロパティが表示されます。
ジョブ
アイコン | 説明 |
---|---|
ジョブを追加します。ジョブは追加後に構成することができます。 | |
ジョブを複製します。 | |
選択されたジョブを削除します。 | |
選択されたジョブをリスト内で上下に移動します。 |
実験ツールのジョブのプロパティ
実験ジョブを選択した場合は、[ジョブ]タブの右側に次のプロパティが表示されます。
名前
[名前]フィールドを使用して、現在のジョブの名前を更新します。
ウォームアップ時間
[ウォームアップ時間]フィールドを使用して、各シナリオのウォームアップ時間を設定します。
停止時間
[停止時間]フィールドを使用して、各シナリオの停止時間を設定します。
シナリオごとの複製
このフィールドを使用して、シナリオごとに実行する複製の数を設定します。
パラメータ
[パラメータ]ツリーを使用して、[シナリオ]テーブルに表示するパラメータを選択します。他のすべてのパラメータは、すべてのシナリオに対する現在の値のまま残されます。ツリー内のチェックボックスをオンにすると、そのパラメータが[シナリオ]テーブルに列として追加されます。
シナリオカウント
[シナリオ]テーブルの上にある[シナリオカウント]フィールドを使用して、このジョブによって定義されるシナリオの数を指定できます。シナリオを追加または削除すると、[シナリオ]テーブル内の行が追加または削除されます。
削除/上へ/下へ
[削除]/[上へ]/[下へ]ボタン は、[シナリオ]テーブル内の選択されたシナリオを削除または並べ替えます。
選択したシナリオにモデルを設定
このボタンは、テーブル内の単一行を選択すると使用可能になります。このボタンをクリックすると、モデル内のパラメータがその列内の値に設定されます。
[シナリオ]テーブル
このテーブルを使用して、各シナリオ内の各パラメータの値を設定します。
最適化ジョブのプロパティ
最適化ジョブを選択した場合は、[ジョブ]タブの右側に次のプロパティが表示されます。
名前
[名前]フィールドを使用して、現在のジョブの名前を更新します。
ウォームアップ時間
[ウォームアップ時間]フィールドを使用して、各シナリオのウォームアップ時間を設定します。
停止時間
[停止時間]フィールドを使用して、各シナリオの停止時間を設定します。
パラメータ
[パラメータ]ツリーを使用して、オプティマイザーで変更可能なパラメータを選択します。他のすべてのパラメータは、最適化中に現在の値のまま残されます。
初期シナリオ
実験ジョブと同様に、実行するジョブのシナリオを定義できます。これらのシナリオはオプションです。これらのシナリオを定義すると、オプティマイザーにその検索の開始点を渡すことができます。これらを定義しなかった場合は、オプティマイザーが独自のアルゴリズムを使用して検索を開始します。
これらのシナリオの定義は、実験ジョブのシナリオの定義と同じです。詳細については、「実験ジョブ」セクションを参照してください。
実測時間
このプロパティは、最適化ジョブが実行するおおよその秒数を指定します。10分後に最適化を自動的に停止するには、600の値を使用します。何らかの他の停止条件が発生するまで最適化ジョブを実行するには、0の値を使用します。
最大反復数
このプロパティは、検索を終了する前に試すシナリオの最大数を指定します。何らかの他の停止条件が発生するまで最適化ジョブを実行するには、0の値を使用します。
複製モード
このプロパティは、最適化ジョブが複製を実行する方法を決定します。このモードには、次の3つのオプションがあります。
- 複製の固定数 - ジョブが生成したシナリオごとに同じ数の複製を実行することを示します。このモードを使用する場合は、シナリオごとに実行する複製の数を指定します。
- 目的の信頼度を達成 - ジョブは、すべての目標について特定の信頼度が達成されるまでシナリオごとに複製を実行する必要があることを示します。あるシナリオがランダム変動の影響をより多く受ける場合は、そのシナリオにはより多くの複製が必要です。このモードを使用する場合は、到達する信頼度を指定します。
- 最適外部信頼度 - あるシナリオが最適なシナリオから統計的に異なることが判明したらすぐに、ジョブがそのシナリオの複製の実行を停止することを除いて、[目的の信頼度を達成]と同様です。
繰り返し検索可能
検索を反復可能にする場合に、このチェックボックスをオンにします。反復可能な検索では、シナリオの同じシーケンスが生成されます。そのため、最適化の時間が長くなる可能性があります。このチェックボックスがオフになっている場合は、シナリオのシーケンスが、実行する各複製にかかる時間によって異なります。
制約
このテーブルを使用して、任意の制約を指定できます。制約は、trueでなければならない式です。最適化ジョブは、制約に違反するシナリオの生成を回避しようとします。
式には、任意のパラメータまたはパフォーマンス指標の名前を含めることができます。有効な例を以下に示します。
[PerformanceMeasure1] <= 1000
[PerformanceMeasure2] >= 50
[Param1] + [Param2] <= 10
行ヘッダーを使用して、制約の名前を設定できます。
目標
このテーブルを使用して、1つの以上のジョブの目標を定義できます。目標は次の4つのコンポーネントで構成されます。
- アクティブフラグ - アクティブな目標のみが最適化で使用されます。
- 関数 - 関数は値を計算する式です。多くの場合、関数は単なるパフォーマンス指標の値です。関数の目的は、モデルのスコアを生成することです。任意のパラメータまたはパフォーマンス指標を使用できます。
- 方向 - 方向は、関数の特定の意味を示します。方向が最大化の場合は、高い関数値を生成するシナリオが最適化において追求されます。方向が最小化の場合は、低い関数値を生成するシナリオが最適化において追求されます。
- 集計 - 集計によって、各複製からの関数値をどのように組み合わせてシナリオの関数値を計算するかが決定されます。
最適化ジョブを実行するには、少なくとも1つのアクティブな目標が必要です。
範囲ベースジョブのプロパティ
範囲ベースジョブが選択された場合は、次のプロパティを使用できます。
名前
[名前]フィールドを使用して、現在のジョブの名前を更新します。
ウォームアップ時間
[ウォームアップ時間]フィールドを使用して、各シナリオのウォームアップ時間を設定します。
停止時間
[停止時間]フィールドを使用して、各シナリオの停止時間を設定します。
シナリオごとの複製
このフィールドを使用して、シナリオごとに実行する複製の数を設定します。
総タスク
このフィールドには、ジョブで指定されたタスクの合計が表示されます。この値は、各パラメータが取りうる値の数(シナリオの数)と複製の数の積です。
パラメータ
[パラメータ]テーブルには、ジョブに含まれるモデルパラメータと、各パラメータが取りうる値のセットが表示されます。[追加]ボタン を使用すると、ジョブにパラメータを追加できます。[上]ボタン と[下]ボタン を使用すると、選択したパラメータの順序を入れ替えることができます。[削除]ボタン を使用すると、ジョブからパラメータを削除できます。
次のプロパティは、[パラメータ]テーブルでパラメータを選択した場合にのみ表示されます。
範囲のタイプ
このプロパティは、各パラメータに対する値のセットの指定方法を選択します。
順序
このプロパティは、値のセットの順序指定の方法を選択します。
最小
値のセットの最小値を指定します。連続、整数、離散、オプション、パススルーパラメーターと、[範囲のタイプ]が[反復可]の場合にのみ使用できます。
最大
値のセットの最大値を指定します。連続、整数、離散、オプション、パススルーパラメーターと、[範囲のタイプ]が[反復可]の場合にのみ使用できます。
ステップサイズ
値のセットのステップサイズを指定します。連続、整数、離散、オプション、パススルーパラメーターと、[範囲のタイプ]が[反復可]の場合にのみ使用できます。
[値]テーブル
選択したパラメータが式パラメータの場合、または[範囲のタイプ]が[特定の値]に設定されている場合、[値]テーブルが使用できます。このインターフェイスは、セット内の各値を指定するために使用します。
[実行]タブ
[実行]タブは、1つの以上のジョブを実行する場所です。次のプロパティがあります。
ジョブ
ジョブを選択します。これは、[実行]ボタンが押されたときに実行するジョブです。選択したジョブのタイプによって、このプロパティの下に表示されるプロパティも決定されます。
実行
選択されたジョブを実行します。
複数実行
実行する複数のジョブを選択可能なポップアップを開きます。複数のジョブを実行すると、ジョブはポップアップに表示された順序で順番に実行されます。
ジョブステータス
[ジョブステータス]グラフには、選択されたジョブのステータスが表示されます。選択されたジョブが実行中の場合は、ジョブの実行に合わせてグラフが更新されます。
最適化ジョブのプロパティ
最適化ジョブが選択された場合は、次のプロパティを使用できます。
ジョブステータス
最適化の[ジョブステータス]グラフには、反復あたり1ポイントが散布図として表示されます。反復は、シナリオだけでなく、次のようなそのシナリオに関する追加情報も表します。
- 反復番号
- すべての目標値
- 反復ランク(ランク1が最適なシナリオ)
- 破られた制約(もしあれば)
実行
[ジョブステータス]グラフに表示する実行を選択します。
X軸
水平のX軸として使用する値を選択します。
Y軸
垂直のY軸として使用する値を選択します。
色軸
色軸の値を選択します。グラフ上の各ポイントの色は、色のグラデーションから選択されます。最も高い値は黄色を表し、最も低い値は濃い紫色を表します。
凡例を表示
このチェックボックスをオンにすると、[ジョブステータス]グラフ上に凡例が表示されます。
最適な反復を表示
このチェックボックスをオンにすると、最適な反復に金色の星印が付けられます。目標が1つの場合は、1つの反復だけがマークされます。目標が複数の場合は、トレードオフ曲線上の各反復がマークされます。
点のサイズ
[ジョブステータス]グラフ上の各シナリオを示す点のサイズを設定します。
点の色
色軸に対して[なし]を選択した場合は、このプロパティを使用して反復の色を指定できます。
実験ジョブとしてエクスポート
グラフ内の点をクリックすることによって、シナリオを選択できます。複数のシナリオが選択されている場合は、それらのシナリオを定義する実験ジョブを作成できます。
CSVにエクスポート
[ジョブステータス]グラフの生成に使用されるデータを含むCSVファイルを保存します。
PNGのエクスポート
現在の[ジョブステータス]グラフを表示する画像ファイルを保存します。
範囲ベースジョブのプロパティ
実行
[ジョブステータス]グラフに表示する実行を選択します。
[フィルタリング]タブ
実験ツールの[フィルタリング]は、結果データベースファイルにあるシナリオを並べ替えたものです。フィルターの定義は任意です。フィルターの目的は、最も重要なシナリオや関心のあるシナリオに集中できるようにすることです。
フィルターには、名前とクエリという2つのコンポーネントがあります。名前は任意ですが、一般的にはフィルターの目的がわかる名前を付けるとよいでしょう。フィルターのクエリでは、フィルターにどのシナリオを含め、どのように並べ替えるかを指定します。
有効なフィルタークエリ
フィルターのクエリでは、SQLステートメントの次の部分のみを使用できます。
- WHERE
- ORDER BY
- LIMIT
フィルターに属しているシナリオのセットを見つけるために、FlexSimは次のクエリを実行します。
SELECT ID FROM Experiment.ScenarioProperties [filter query]
Experiment.ScenarioProperties
テーブルには次の列があります。
列 | 詳細 |
---|---|
ID | 結果データベースファイルにあるシナリオのID |
Name | 結果データベースファイルにあるシナリオの名前。 |
Jobs | シナリオの1つ以上の複製を実行したジョブのセット。 |
OptimalJobs | 少なくとも1回の実行でこのシナリオを最適と見なす最適化ジョブのセット。 |
RepCount | 完了したこのシナリオの複製の合計。 |
StopTime | このシナリオによって定義された停止時間。 |
WarmupTime | このシナリオによって定義されたウォームアップ時間。 |
OutReps | 出力コンソールに出力したすべての複製から成る配列。 |
SysReps | システムコンソールに出力したすべての複製から成る配列。 |
パラメータ | 各パラメータの列。シナリオのそのパラメータの値が含まれます。 |
パフォーマンスの測定 | 各パフォーマンス測定の列。シナリオのそのパフォーマンス測定の平均値が含まれます。 |
フィルターのクエリで、Experiment.ScenarioProperties
テーブルの任意の列を参照できます。
フィルターのクエリの例
一般的なタスクとして、パフォーマンス測定に基づくフィルタリングが挙げられます。
WHERE [PerformanceMeasure1] >= 100
WHEREステートメントでは、キーワードAND
やOR
を使用して、複数の基準を組み合わせることができます。次のクエリは、PerformanceMeasure1が50以上で、最適としてマークされているシナリオのみを残します。
WHERE [PerformanceMeasure1] >= 50 AND OptimalJobs.length
WHEREステートメントでは、キーワードBETWEEN
を使用して、範囲に基づくフィルタリングを行うこともできます。
WHERE [Parameter3] BETWEEN 50 AND 100
その他の一般的なタスクとして、結果のフィルタリング、並べ替え、制限があります。次のクエリは、ジョブExperiment1によって実行されたシナリオを抽出し、PerformanceMeasure1の値の大きい順に並べ替えた後、最初の5つのシナリオのみを残します。
WHERE "Experiment1" IN Jobs
ORDER BY [PerformanceMeasure1] DESC
LIMIT 5
フィルターを使用する場所
定義したフィルターを使用できる場所はいくつかあります。
- [パフォーマンス測定結果]ウィンドウでは、フィルターを使用して、表示するシナリオを指定できます。
- [シナリオチャート]では、フィルターを使用して、表示するシナリオを指定できます。
- 実験テーブルを照会するFlexQLクエリでは、
#
記号を使用したフィルターを使用できます。たとえば、次に示すのは、MyFilterというフィルターとSummaryという結果テーブルを想定した有効なクエリです。
角括弧の使用に注意してください。SELECT * FROM Experiment.[Summary#MyFilter]
#
文字を使用する場合は、角括弧を使用する必要があります。
プロパティ
[フィルタリング]タブには、次のプロパティがあります。
フィルターリスト
フィルターのリストを表示します。このエリアを使用して、フィルターの追加、複製、削除、および並べ替えを行うことができます。
名前
フィルターの名前を指定します。
クエリ
フィルターを定義するクエリを指定します。 ボタンを使用すると、便利なクエリスニペットを追加できます。
結果
このテーブルには、クエリ適用後のExperiment.ScenarioProperties
テーブルが表示されます。クエリを更新すると、このテーブルは更新され、フィルターに含まれるシナリオが表示されます。
実験ジョブとしてエクスポート
このボタンを押すと、現在のフィルターのシナリオが新しい基本の実験ジョブとしてエクスポートされます。
[詳細]タブ
[詳細]タブを使用すると、すべてのジョブに適用される追加の設定を構成することができます。次のプロパティがあります。
複製のストリームを繰り返す
複製を指定して、同じ乱数ストリームを使用するモデルの手動実行(実験ツールの複製ではありません)を設定します。これを有効にするには、ランダムストリームを繰り返す必要があります。
コアの最大数
実験ツールで使用するコアの最大数を指定します。値0は、使用可能なすべてのコアの使用が必要なことを示します。分散CPUを使用している場合、このプロパティは無視されます。
複製ごとにグラフを保存し、表を出力
このチェックボックスをオンにすると、各複製の最後で、実験ツールがダッシュボード統計、統計コレクター、および計算済みテーブルに関するデータをモデルに保存するため、後で結果の一部として表示できます。
各複製後に状態を保存
このチェックボックスをオンにすると、各複製の完全なシミュレーション状態がモデル実行の最後で結果データベースファイルに保存されます。後で、データベースから状態ファイルを抽出して、すべての複製の最終状態を表示できます。
各複製後に元の状態に戻す
このチェックボックスをオンにすると、FlexSimによって各モデルの実行の間にモデルが完全に再ロードされます。リセットするたびにモデルがまったく同じ状態に正しくリセットされず、後続の複製結果に影響を与える「スピルオーバー」状態を望まない場合は、このチェックボックスをオンにします。ただし、ツリーを完全に再ロードするため、各複製を実行するのに時間がかかる可能性があります。
分散CPUを使用する
ローカルマシンのCPUではなく、ネットワークまたはインターネット経由で使用可能なCPUを使用する場合は、このチェックボックスをオンにします。このチェックボックスがオンになっている場合は、実験ツールが[グローバル設定]で指定されたマシンを使用しようとします。詳細については、「クラウドでのジョブの実行」を参照してください。
クラウドノードの設定...
このボタンをクリックすると、[グローバル設定]ウィンドウが開きます。このウィンドウでは、実験ツールで使用可能なクラウドノードのリストを編集できます。
トリガー
実験ツールは、各ジョブのさまざまな時刻にトリガーを起動します。各トリガーの説明を以下に示します。
名前 | タイミング |
---|---|
On Start Of Job | ユーザーが[実行]ボタンをクリックした直後に起動されます。 |
On Start Of Replication | モデルが実行を開始する直前の子プロセスで起動されます。 |
On End Of Warmup | ウォームアップ時間に子プロセスで起動されます。 |
On End Of Replication | 実行が終了したときに子プロセスで起動されます。結果が子プロセスから返されたときにメインのプロセスで起動されます。param(3) が存在する場合は、トリガーが親プロセスで起動されます。そうでない場合は、子プロセスで起動されます。 |
On End Of Job | ジョブが終了したときに起動されます。 |