実験についての主要な概念

実験ツールについて

実験ツールは、さまざまな入力を使用したモデルの実行と結果の収集を自動化するツールです。実験ツールは、次のような種類の質問に回答するため役立ちます。

  • パフォーマンス指標はランダムな偏差についてどれだけの感受性があるか?
  • パラメータの値とパフォーマンス指標の値とのトレードオフはどのようなものか?
  • 最良の結果を導き出すパラメータの値は何か?
  • モデルはパラメータの値の異なる組み合わせでも正しく動作するか?

これらの質問は、モデルを何回も、それぞれ異なる入力値で実行し、結果を収集して比較することでのみ回答可能です。実験ツールは、このプロセスを単純かつ簡単で、退屈でないものにするよう設計されています。さらに、実験ツールはモデルの複数の構成を同時に実行できるため、時間を大幅に節約できます。

主な用語

このセクションでは、実験ツールに関係する主な用語の定義と説明を示します。ここでは用語を簡単に紹介し、詳しい説明は以後のセクションで行います。

実験ツールを使用するときは、次の処理に従います。

  1. ジョブの構成 - ジョブはシナリオを生成する方法を定義し、通常はシナリオごとに複数の複製が必要です。シナリオの複製を実行するのは、タスクと見なされます。
  2. ジョブの実行 - ジョブを実行すると、ジョブによって実行するタスクのリストが作成されます。実験ツールはタスクごとにモデルを1回実行し、結果を結果データベースファイルに格納します。
  3. 結果の探索 - ジョブの実行後に、各シナリオで生成された結果を参照し、シナリオを比較できます。

ジョブ

実験ツールには、1つ以上のジョブを定義できます。ジョブはシナリオを生成する方法を定義するとともに、各シナリオについていくつの複製を実行するかを決定します。

ジョブには2つのタイプがあります。実験ジョブと最適化ジョブです。実験ジョブでは、シナリオを直接定義し、各シナリオについていくつの複製を実行するかを指定できます。最適化ジョブでは、目的関数(例:スループットの最大化)を指定できます。このタイプのジョブはシナリオを自動的に生成し、目的関数を最適化するシナリオを探します。

シナリオ

シナリオは入力値のセットで、モデルに適用できます。これには次の情報が含まれています。

  • すべてのモデルのパラメータ値
  • モデルの停止時間
  • モデルのウォームアップ時間

シナリオとは、これらの値で構成されるタプルやベクトルと考えることができます。

P1 P2 ... PN 停止時間 ウォームアップ時間
3 7 ... 5.3 10000 500

実験ツールが実行されると、モデルのパラメータ値、停止時間、ウォームアップ時間を設定して、モデルにシナリオを適用します。その後でモデルを実行し、結果を記録します。停止時間とウォームアップ時間はいずれもシナリオの一部ですが、通常は異なるモデルのパラメータ値が、モデルのパフォーマンスにどのような影響を与えるかに注目します。モデルのパラメータ構成の詳細については、「モデルパラメータ」のトピックを参照してください。

各シナリオは、含まれる値によって識別できます。実験ツールは各シナリオについて、ハッシュという一意の識別子を生成します。ハッシュは数値と文字で構成されます。2つのシナリオで計算されるハッシュが同じなら、それらは同一のシナリオと見なされます。インターフェイスの多くの場所には、ハッシュの最後の8文字が表示されます。

利便性のため、シナリオに名前を指定することもできます。どのような名前でもよく、表示にのみ使用されます。シナリオのハッシュには含まれません。

複製

FlexSimのモデルは、シミュレーションに変動を取り入れるために、確率分布から生成されるランダムな数値を使用します。この変動はシステムの動作に影響を及ぼします。たとえば、処理時間が通常より長く、一時的なボトルネックを起こすことがあります。ランダム性を含めることで、モデルははるかに現実的かつ信頼性が高いものになります。ただし、これは同時に、モデルから生成される結果が、使用されるランダムな数値の影響を受けるということも意味します。言い換えれば、モデルの結果も変動します。

モデルの結果が変動するため、各シナリオについて複製を実行することが重要です。一部のシナリオは、他のシナリオよりもランダムな変動の影響を受けやすくなります。特定のシナリオについて結果の分布を理解するには、複製を実行するしかありません。

確率関数によって生成されるランダムな数値は、複製番号によって異なります。複製1については、FlexSimにより特定のランダムな数値のセットが生成されます。複製2については、FlexSimによりランダムな数値の別のセットが生成されます。以後同様に生成されます。

タスク

それぞれのジョブは、タスクのリストを生成します。各タスクはシナリオと複製番号で構成されます。実験ツールはタスクごとにモデルを1回実行し、結果を記録します。たとえば、3つのシナリオを定義し、各シナリオについて10の複製を要求するジョブは、30のタスクを生成します。

一部の大きく詳細なモデルでは、単一のタスクの完了に数分、または数時間を要することもあります。さいわい、実験ツールはタスクを同時に実行できます。デフォルトでは、同時に実行されるタスクの数は、使用されているマシンのCPUコアの数と同じです。追加CPUを持つマシンにネットワークやウェブでアクセス可能な場合、実験ツールがそれらのリモートマシンのCPUを使用してモデルを実行するよう設定できます。詳細については、「クラウドでのジョブの実行」を参照してください。

結果データベースファイル

実験ツールは、実行する各タスクについて結果を収集します。結果には次のものがあります。

  • すべてのパフォーマンス指標の値
  • ダッシュボードチャートのすべてのデータ
  • 統計情報コレクターと計算済みテーブルからのすべてのテーブル
  • システムコンソールと出力コンソールのすべてのメッセージ

通常、最も重要な結果はパフォーマンス指標の値です。有用なパフォーマンス指標の構成の詳細については、「パフォーマンスの測定」のトピックを参照してください。

結果は結果データベースファイルに格納されます。これは、実験ツールが最初のジョブを実行するとき、追加ファイルとして作成されます。デフォルトではモデルファイルと同じディレクトリに作成され、同じ名前です。各タスクの完了ごとに、結果がこのファイルに格納されるため、ジョブの実行につれてこのファイルは大きくなります。結果データベースファイルは各ジョブの実行の間も維持されるため、すべてのジョブで同じファイルが共有されます。

結果データベースファイルには、いくつかの利点があります。

  • タスクを実行する前に、実験ツールはそのタスクの結果が既にファイルに存在するかどうかをチェックします。存在する場合、実験ツールはそのタスクを再実行しないので、不要な計算を避けられます。
  • どのシナリオについても追加の複製は実行できるほか、結果に新しいシナリオをいつでも追加出ます。
  • ジョブにより、短時間で大量のデータが生成されることがあります。そのデータを別のファイルに格納すると、必要なRAMが減少し、元のモデルのファイルサイズには影響しません。

ベストプラクティス

以下のセクションでは、実験を設計する際に留意すべきいくつかのベストプラクティスについて説明します。

適切なデータ入力でモデルを構築する

モデル(出力)から良好なデータを得るには、モデル(入力)に適切なデータを確実に入力する必要があります。シミュレーションモデルが、ビジネスシステムの要件を適切に表す正確なデータと乱数の分布に基づいていることを確認してください。(詳細については、「データ収集方法」を参照してください)。

モデルを検証してエラーを削減する

実験を実行する前に、シミュレーションモデルを開始から終了まで少なくとも1回は実行してください。エラーを発生させずにシミュレーションモデルを実行できるようになると、実験ツールを使用する準備が整います。

コンピュータのメモリ制限を把握する

実験または最適化を数多く実行するほど、コンピュータに必要なメモリが増えます。実験ツールとオプティマイザーは、[詳細]タブでコアの数を制限しない限り、すべてのコアを使用します。多くのコアを使用すると、問題が発生する可能性があります。各コアには、単一モデルの実行と同じだけのメモリが必要です。たとえば、8つのコアを使用する場合、通常モデルの実行の8倍のメモリが必要になります。

そのため、コンピュータの容量を確認しておく必要があります。コンピュータが過負荷を引き起こさずに処理できるか、必要な時間よりも長く処理時間がかかるように実験を設計します。実験と最適化を数多く実行することで、得られる結果の信頼性を高められますが、コンピュータの容量に照らして適切なデータの必要性を評価する必要があります。