ジョブの実行

実験ジョブについて

実験ジョブは、シナリオを生成する方法を定義するとともに、各シナリオについていくつの複製を実行するかを決定します。ジョブを実行するとき、実験ツールは各シナリオのそれぞれの複製についてモデルを1回実行し、結果を記録します。

このトピックの残りの部分を読む前に、「実験についての主要な概念」をお読みください。

実験ツールを開く

実験ツールを開くには

  1. FlexSimのメインメニューで、[統計]メニューをクリックします。
  2. 実験ツール]を選択します。

実験ツールを作成したら、[ツールボックス]で[実験ツール]をダブルクリックしてアクセスできます。

実験ツールのユーザーインターフェイスの概要

実験ツールのインターフェイスはウィンドウで、複数のタブがあります。次の表は、各タブの基本的な目的について説明しています。

タブ 目的
ジョブ [ジョブ]タブは、実験ツールのジョブのリストを管理します。このタブを使用して、ジョブの追加、構成、順序変更、削除を行えます。
実行 このタブでジョブを実行します。このタブには、実行中の各ジョブの進行状況もグラフとして表示されます。
詳細 このタブでは、すべてのジョブに適用される一般的なオプションを指定します。これらのオプションにより、収集するデータ、リモートCPUの構成と使用、実験トリガーの設定を行えます。ほとんどのユーザーでは、このタブの設定を変更する必要はありません。

実験ジョブ

最も一般に使用されるジョブタイプは実験ジョブです。実験ジョブでは、実行するシナリオのセットに加えて、各シナリオについていくつの複製を実行するかも指定できます。

実験ジョブを設定するには、次の操作を行う必要があります。

  • ジョブの[名前]を設定します。どのような名前でもかまいませんが、ジョブの目的の手がかりとなるような名前が適切です。
  • ウォームアップ時間]を設定します。ここで指定する値は、すべてのシナリオに適用されます。
  • 停止時間]を設定します。ここで指定する値は、すべてのシナリオに適用されます。
  • 複製]の数を設定します。ジョブは、定義した各シナリオについて、この数の複製を実行します。
  • 使用する[パラメータ]を選択します。パラメータを追加すると、[シナリオ]テーブルに列が追加されます。各シナリオには、すべてのパラメータが含まれることに留意してください。特定のパラメータを使用しない場合、実験ジョブはすべてのシナリオについて、パラメータの現在の値を使用します。
  • 実行する[シナリオ]を追加します。各シナリオはテーブルの行として定義されます。このテーブルを編集し、各シナリオについて各パラメータの値を設定できます。行ヘッダーを編集し、シナリオ名を設定できます。

ジョブを実行する前に、最低1つのパフォーマンス指標を定義したことも確認してください。詳細については、「パフォーマンスの測定」のトピックを参照してください。

実験ジョブの実行

実験を実行するには、次の画像に示すように、実験ツールの[実行]タブを使用します。次に、[ジョブ]フィールドを使用して実験ジョブを選択します。

以下のセクションでは、実験を実行するさまざまな段階について説明します。

実験ジョブの実行前

実験ジョブの実行前に、ジョブで定義されている任意のシナリオのステータスを確認できます。

グラフのタイトルと凡例の下に、ジョブによって生成されたタスクごとに1つのボックスがあります。これらのボックスはシナリオごとに分類され、そのタスクでの複製の数が表示されます。以前にジョブを実行していない場合、すべてのタスクが[提示済み]にマークされています。これは、それらのタスクに接続されている結果データベースファイルにデータがないことを意味します。このグラフには、各シナリオの名前とハッシュも表示されます。

チャートのいずれかのシナリオにマウスカーソルを動かすと、虫眼鏡のアイコン 🔍 が表示されます。このアイコンをクリックすると、各シナリオについての追加情報がポップアップウィンドウに表示されます。

実験ジョブの実行

[実行]ボタンをクリックしてジョブを実行します。この時点で、実験ジョブはすべてのタスクを実験ツールに提出します。実験ツールは、完了済みのタスクがあるかどうかをチェックし、完了済みのタスクは無視します。他のすべてのタスクは、この時点で結果データベースファイルに追加されます。グラフで、それらのタスクの表示が[提出済み]に変更されます。タスクが開始されると、タスクの進行状況バーが表示されます。進行状況バーには、モデルの時間がどの程度経過したかが、停止時間に対する割合として表示されます。モデルの実行が完了すると、結果が結果データベースファイルに記録され、このときタスクは[記録中]にマークされます。すべての結果が記録されると、タスクは[完了]にマークされます。

実験ジョブの実行後

ジョブの実行が完了したら、[結果を表示]ボタンをクリックすると、結果が別のウィンドウで開きます。[実験結果]ウィンドウには6つのタブがあります。

タブ 目的
パフォーマンス指標 このタブには、定義した各パフォーマンス指標の実験結果が表示されます。メニューを使用して、表示する特定のパフォーマンス指標を選択します。
ダッシュボード統計 このタブには、探索対象のシナリオや複製のダッシュボードチャートが表示されます。このタブを使用する前に、最初に関心のあるチャートをシミュレーションモデルのダッシュボードに追加する必要があることに注意してください。
統計テーブル このタブには各テーブル出力(統計コレクターまたは計算済みテーブル)のデータが表示されます。このテーブルには、すべてのタスクのデータが、シナリオと複製の順に並べ替えて含まれています。
結果テーブル このタブにはそれぞれの結果テーブルが表示されます。結果テーブルは構成可能なテーブルで、シナリオまたは複製が行として、パラメータとパフォーマンス指標が列として表示されます。
コンソール出力 このタブを使用して、実験を実行してもシミュレーションモデルにエラーがなかったことを確認します。このタブでは、任意のコンソールエラーメッセージについて複製ごとにコンソール出力を確認できます。このステップは必ず行ってください。
状態ファイル 状態ファイルを保存している場合、ここでアクセスできます。

次の画像は、結果の例を示したものです。

Alternative1とAlternative2の両方のシナリオが、Baselineシナリオよりもスループットが高いことが分かります。

複製またはシナリオの再実行

実験全体ではなく、特定のシナリオや複製だけを再実行したい場合が稀にあります。実験ツールの[実行]タブで、完了済みのシナリオや複製にマウスカーソルを動かすと、削除ボタン ❌ が表示されます。結果を削除してからジョブを実行すると、これらのタスクは再実行されます。

このような状況は稀です。モデルを再実行すべき理由は多くありません。具体的な例の1つとして、特定のシナリオや複製にバグが発生し、そのバグを修正した場合、関連するタスクを再実行します。この場合は、加えた変更が他のタスクの結果に影響しないことを保証する必要がありますが、この証明は困難です。通常はジョブ全体を再実行し、同じモデルからすべての結果を生成した方が安全です。

最適化ジョブ

最適化ジョブは、モデルが最適に動作するパラメータの値を探すときに便利です。実験ジョブとは異なり、シナリオを指定する必要はありません。その代わりに、変化させるパラメータと目標の2つを指定します。目標はスコアを算出する関数で、そのスコアを最大化するのか、最小化するのかも設定できます。

最適化ジョブを実行すると、最初にランダムなシナリオが生成され、それらのシナリオの複製が実行されます。タスクが完了すると、最適化ジョブは結果を分析し、より良いパフォーマンスの新しいシナリオが生成されます。十分な時間があれば、最適化ジョブは多くの場合、非常に良いパフォーマンスのシナリオを見つけることができます。

最適化ジョブは、次の手順で構成します。

  1. ジョブの[名前]を設定します。どのような名前でもかまいませんが、ジョブの目的の手がかりになるような名前が便利です。
  2. ウォームアップ時間]を設定します。ここで指定する値は、すべてのシナリオに適用されます。
  3. 停止時間]を設定します。ここで指定する値は、すべてのシナリオに適用されます。
  4. 使用する[パラメータ]を選択します。最適化ジョブは、指定されたパラメータの値のみを調整します。
  5. オプションとして、[初期シナリオ]を指定できます。最適化ジョブは、これらのシナリオを検索の初期に評価します。これによって、検索の開始位置を設定し、時間を節約できます。
  6. オプションとして、[制約]を指定できます。制約については、以後のセクションで解説します。
  7. 実測時間]と[最大反復数]を設定します。どちらも、最適化ジョブをいつ停止するかをコントロールします。実測時間は、最適化ジョブが実行されるだいたいの時間を秒数で指定し、その時間を超過するとジョブが停止します。10分間で最適化を停止するには、このフィールドに600と入力します。最大反復数は、シナリオを評価する最大回数を指定します。最適化ジョブは、この回数だけシナリオを評価した後で停止します。
  8. 複製モード]と[複製]の数を指定します。一定数の複製を実行するのが最も一般的な設定です。
  9. 1つ以上の[目標]を設定します。目標については、次のセクションで詳しく説明します。

目標を追加する

オプティマイザーで最も適したシナリオを判断できるように、何を成功とするかを定義する必要があります。このために、目標テーブルに特定の目標を追加します。

目標には簡単な関数が含まれます。たとえば、システムのスループットの最大化を目指していると仮定します。[Throughput]というパフォーマンス指標があるなら、式は[Throughput]のようになります。この関数には、任意のパラメータやパフォーマンス指標への参照を含めることができます。これらの名前は角括弧で囲みます。関数には基本的な数学演算を、たとえば[Throughput] * 300のように含めることができます。

それぞれの目標には[アクティブ]フィールドがあることに留意してください。アクティブな目標のみが、最適化で考慮されます。複数の目標がアクティブな場合、最適化ジョブは複数の目標を検索します。アクティブな目標が1つだけの場合、最適化ジョブは単一目標を検索します。最適化ジョブを実行するには、最低1つの目標をアクティブにする必要があります。

制約を追加する

制約は、特定のモデルが維持する必要のある条件をさらに指定する方法です。最適化ジョブは、定義した制約内で実行可能な構成のみを、最適にマークします。

制約は目標とはまったく異なるものです。目標はスコアを算出する関数で、最適化ジョブはスコアが高くなるパラメータを見つけようとします。制約は合否判定です。最適化ジョブは、特定のソリューションがすべてのテストに合格するかどうかを評価します。合格すれば、そのソリューションは実行可能と見なされます。ソリューションがいずれかのテストに失敗すれば、そのソリューションは実行不可能と見なされます。最適化ジョブは、実行可能な最良のソリューションを探します。

制約は、≤ や ≥ による比較を含む式です。制約の式の例をいくつか示します。

  • [OnTimeJobsPercent] >= 0.80
  • [ReworkParts] <= 10
  • [Utilization] >= 0.75
  • [PackTeamSize + ShipTeamSize] <= 30

場合によっては、最適化のときパフォーマンス標準を強制するために制約が置かれることがあります。最適化ジョブは非常に限定された内容に焦点を当てているため、制約なしでは役に立たない回答を出すことがあります。たとえば、スループットの最大化を目標にしたとき、最適化ジョブは従業員の数を非現実的に増やすという回答を導き出す可能性があります。スループットは非常に大きくなりますが、使用率は許容できないほど低くなる可能性があります。この問題を回避するために制約を追加し、使用率を特定のしきい値以上に保つことができます。パフォーマンス指標に関わる制約は、複製の実行後に評価されます。

別の例として、複数のパラメータ間にルールを適用するために制約が置かれることがあります。たとえば、最適化ジョブは各種チームのメンバー数を増やすことを許可されることがあります。ただし、合計人員数は30人未満に抑える必要があるとします。そこで、いくつかのパラメータの合計が特定の数値を下回ることを指定する制約を追加します。制約やパラメータの値のみに関わる制約は、複製を実際に実行しなくても評価できます。これらは、何が有効なシナリオかを最適化ジョブに伝える役割を果たします。

最適化ジョブの実行

最適化ジョブを実行するには、実験ツールの[実行]タブを使用します。正しいジョブを選択し、[実行]ボタンを押します。

最適化ジョブのステータスグラフ

最適化ジョブは、実験ジョブとはステータスグラフが異なります。このグラフには、各シナリオが散布図のポイントとして表示されます。デフォルトでは、X軸に繰り返し回数、Y軸に最初の目標が表示されます。どちらの軸も、パラメータ、パフォーマンス指標、目標の値など、シナリオに関連する値を表示するよう設定できます。

オプションとして、いずれかの目標の値に基づいて、各ポイントに色を設定できます。この機能は、パラメータ、パフォーマンス指標、目標の互いの関係を調べるために役立ちます。

最良のシナリオは、金色の星印でマークされます。目標が1つなら、星印のあるシナリオが、最適化ジョブの停止前に見つかった最良のシナリオです。複数の目標がある場合、トレードオフ曲線上にある各シナリオに星印が付けられます。トレードオフ曲線上にあるシナリオは、ある目標をそれ以上改善するには、別の目標が低下すると判明したものです。

ポイントをクリックしてシナリオを選択することもできます。シナリオの周囲にリングが表示されます。このリングの色は変化しないため、ポイントを選択してからX、Y、色軸を変更しても、選択したシナリオが表示されます。

結果の表示

すべてのジョブは結果データベースファイルを共有するため、実験ツールの[結果を表示]ボタンをクリックすると、[パフォーマンス測定結果]ウィンドウが表示されます。このウィンドウには、その結果を生成したジョブにかかわらず、すべての結果が表示されます。

クラウドでのジョブの実行

実験ツールは、リモートコンピュータを使用してモデルの複製を実行できます。通常は、ジョブを実行するとき、実験ツールは同じコンピュータでFlexSimの多くのインスタンスを起動します。その後でそれらのインスタンスと通信を行い、モデルの複製を実行します。リモートコンピュータを使用するとき、FlexSimは指定されたIP アドレスのサーバーにHTTPリクエストを送信します。これらの各サーバーはFlexSimインスタンスを起動し、その後で実験ツールはネットワークまたはインターネットを経由して、それらのインスタンスと通信を行います。

リモートコンピュータは次の要件を満たす必要があります。

  • リモートコンピュータでFlexSimウェブサーバーが実行されている。
  • リモートコンピュータにインストールされているFlexSimが正確に同じバージョンである。
  • リモートコンピュータのウェブサーバーのIPv4アドレスが、ローカルコンピュータの[グローバル設定]に指定されている。
  • リモートコンピュータがライセンスを保有している必要はありません

リモートコンピュータが構成されたら、実験ツールの[詳細]タブにある[分散CPUを使用する]チェックボックスをオンにします。

実験テーブルの照会

FlexQLを使用して、結果データベースファイルからのデータを照会できます。

テーブルタイプ クエリの例
結果テーブル。[パフォーマンス測定結果]ウィンドウの[結果テーブル]タブで、結果テーブルの追加、編集、削除を行えます。
SELECT * FROM Experiment.Summary
統計テーブル。これらのテーブルは、[パフォーマンス測定結果]ウィンドウの[統計テーブル]タブにあります。すべての統計コレクター、計算済みテーブル、人統計情報テーブル、チャートテンプレートが含まれます。
SELECT * FROM Experiment.[Stat Table Name]
レガシー実験テーブル。下位互換性のため、シナリオテーブルとパフォーマンス測定テーブルも照会できます。要約テーブルは、これらのテーブルに置き換わるもので、改良が加えられています。
SELECT * FROM Experiment.Scenarios
SELECT * FROM Experiment.PerformanceMeasures

これらの照会は、FlexScriptか計算済みテーブルを使用して実行できます。SQLクエリを使い慣れているなら、これらのツールを使用して結果データをさらに調べることができます。