AnyLogic Cloud 2.4.0 – 最適化実験

Gregory Monakhov は、AnyLogic Cloud および Anylogic 9 の開発担当者です。以前はテクニカル サポートで 7 年間勤務していたため、顧客のニーズをよく理解しており、それらが継続的に満たされることが重要と考えています。

弊社の最新リリースはここにあり、多くの興味深い機能を開発しています。その中で、本ブログ投稿のテーマは、新しい実験タイプである最適化とレプリケーションを使用した最適化実験です。モデルを AnyLogic Cloud にアップロードし、これらの新しい実験を実行する方法を段階的に詳しく説明します。

コンテンツ:

  1. 最適化実験とは
  2. 徐々に現実化するアイデア
  3. 最適化実験に必要な機能
  4. 最適化実験の実行方法
  5. 確率モデル
  6. さらなる進化

最適化実験

AnyLogic Cloud 製品の開始当初から、弊社は最適化実験をサポートしたいと熱望していました。AnyLogic Cloud が最初にリリースされた 2017 年には、ユーザーは New experiment メニューで “Optimization experiment” を選択すると、“Coming soon” というメッセージが表示されました。当時、それを実現するのにそれほど時間はかからないと信じていました。

この実験タイプは、モデルの実行結果がオプティマイザーに渡され、次のモデル入力値のセットを生成するため大変複雑です。また、AnyLogic Cloud の分散型の性質により、各モデルの実行が個別の安全な空間で実行されるため、状況は特に複雑になります。この方法では、(AnyLogic デスクトップのように) オプティマイザーをモデル自体に組み込むことはできません。それも別のサービスにする必要があります。

この実験を実装するために、弊社は市場で入手可能なさまざまなソリューションについて広範な研究開発を実施しました。残念ながら、ブラック ボックス最適化の結果が悪かったり、パフォーマンスが不十分であったり、その他の問題により、多くが拒否されました。ある時点で、弊社は研究開発に終止符を打ち、New 実験メニューから “Optimization experiment” を削除しました。

徐々に現実化するアイデア

2023年になると、完全に新しい AnyLogic 8 開発 チームと AnyLogic Cloud 開発チームが再始動します。AnyLogic 8 と Cloud はどちらも同じ最適化モジュールを共有しており、相互運用可能である必要があり、誰にとっても刺激的な課題が数多くあります。

例えば、最適化実験を実装するために、入力ウィジェットや出力チャートなどの既存のメカニズムが十分にあるか、パフォーマンスを向上させるために負荷分散を調整する必要があるか、 最適化アルゴリズムとの対話にはどのインターフェイスを使用する必要があるか、および 初期リリースではどの機能を利用できるようにする必要があるか等があります。

「最適化」という課題は多くの議論を引き起こし、ユーザーが何を望んでいるのかなどについて激しい議論が巻き起こりました。最終的に、パレートの法則に従い、「機能の 80%」に相当する開発作業の内、 20% にあたるコアの開発に焦点を当てることにしました。このようにして開発した機能を顧客に提供し、フィードバックを収集し、フィードバックに基づいてさらなる改善をしていきます。

最適化実験において実行可能な最小限の機能

この「機能の 80%」とは? Anylogic の最適化実験に関するハウツー ビデオがあり、目的、決定変数、要件、実験結果などの主要な最適化機能がすべて含まれています。AnyLogic Cloud 実験フレームワークの用語では、モデル出力、モデル入力、実験ダッシュボードとなります。

  1. 目的 = モデルの出力
  2. 決定変数 = モデルの入力
  3. 要件 = モデルの出力
  4. 実験結果 =モデル出力と最良のモデル入力値は実験ダッシュボード上で視覚化されます。

ここで注意が必要なのは、最適な入力値が実験の出力の一部であることです。ただし、これは実行可能な最適化実験に必要な最小限の機能セットです。もちろん、最適化実験 API、制約、最適化実験の進行状況のライブ表示など、他にも多くの機能があります。ただし、これらはコア機能ではないため、コア機能とは別にリリースすることができます。

AnyLogic Cloud で最適化実験を実行する方法

AnyLogic Cloud はモデル実行プラットフォームであるため、まず、構成済みのモデルを Cloud にアップロードする必要があります。開発中の AnyLogic 9 で作業する場合は、特別な準備をせずに “Open experiments” ボタンを押すだけで済みます。

ただし、AnyLogic 8 の場合は、Objective 式と Requirements 式が、分析パレットで使用できる Output 要素にカプセル化されていることを確認する必要があります。次に、Run Configuration オブジェクトでそれぞれのモデルの入力と出力を定義する必要があります。サンプルモデルを使用してこれを詳しく見てみましょう。

AnyLogic 8 モデルの準備

この Activity Based Cost Analysis サンプル モデルは、学習目的で設計された単純な製造モデルです。ここでは、リソースユニットの数、コンベア速度、平均プロセス遅延時間に応じて製品あたりのコストを最適化します。

AnyLogic 8 での最適化実験の設計方法は次のとおりです:

目的値とそれぞれの 4 つのパラメーター (決定変数) を定義する式 root.totalCostPerProduct() があります。

目的値とパラメーターが強調表示されたプロパティ ビュー

AnyLogic 8 での最適化実験

さらに、Requirements セクションには要件式 root.seizeA.queue.capacity - root.seizeA.queue.size() があります。

要件式が強調表示された requirements セクション

最適化実験の要件

上記の要件が有効な場合、シミュレーション実行の終了時に Seize ブロック キューがいっぱいになるはずです。

ご存じかもしれませんが、モデルを AnyLogic Cloud にエクスポートする場合、AnyLogic 8 実験とそのコードはエクスポートされません。AnyLogic Cloud は、モデルの入力と出力に基づいて動作する独自の実験フレームワークを使用します。入力と出力は、各モデルで使用できる Run Configuration オブジェクトで定義されます。これは、そのオブジェクトが Activity Based Cost Analysis モデルにどのように表示されるかです。

AnyLogic 8 Run Configuration エディターの図解

Run Configuration エディター(クリックして拡大)

Cloud で最適化実験を作成するには、Run Configuration エディターに何を入力する必要があるかを見てみましょう。まず、目的の式があり、これを Output 要素にカプセル化する必要があります。

プロパティ ビューの Output 要素にカプセル化された目的式

目的関数付き Output 要素

モデルパラメーターは常に Run Configuration に表示されるため、ここで新しい要素を作成する必要はありません。

最後にキュー サイズの要件があるため、Output 要素 (分析パレットを参照) を Main キャンバスにドラッグ アンド ドロップし、そこでそれぞれの式を指定する必要があります。

プロパティビューの Output 要素にカプセル化された要件式

要件式を含む Output 要素

したがって、すべての要素を Run Configuration で指定したら、それらを関連する入力および出力セクションにドラッグできます。

実験用に表示された、入出力を含む Run Configuration エディター

完了した Run Configuration オブジェクト(クリックして拡大)

この時点で、モデルを AnyLogic Cloud にエクスポートする準備が整いました。Run Configuration プロパティのそれぞれのハイパーリンクを使用してモデルをエクスポートできます。モデルがエクスポートされると、AnyLogic は AnyLogic Cloud でモデルの ウェブ ページを自動的に開きます。実験サイドバーでシミュレーション実験をクリックすると、次の図が表示されます。ご覧のとおり、Inputs セクションには 4 つの決定変数すべてが含まれています。

入力を表示する AnyLogic Cloud のシミュレーション ダッシュボード

新しくエクスポートされたモデルの AnyLogic Cloud のシミュレーション実験ダッシュボード

Outputs セクションに目的と要件が含まれているかどうかを確認してみましょう。歯車アイコンをクリックし、単一値ウィジェットで出力のリストを確認します。これは次のようになります。


単一値出力を選択する方法を示す gif
AnyLogic Cloud で利用可能な単一値出力

必要な入力と出力がすべて利用可能であるので、AnyLogic Cloud で最適化実験を設計する準備が整いました。

AnyLogic Cloud での最適化実験の設計

他の実験と同様に、最適化実験は実験サイドバーの New experiment ボタンを使用して作成できます。ダイアログ ウィンドウで、実験名として “Optimize total cost” を指定し、実験タイプとして Optimization を指定します。

実験タイプが選択された New experiment ダイアログ ウィンドウ

New experiment ダイアログ ウィンドウ

実験が作成されたら、実験名の近くにある歯車アイコンをクリックし、Inputs、Requirements、および Outputs のダッシュボード ウィジェットを構成します。

入力セクションの設定

  1. Manufacturing parameters:
    • Resource A capacity – Discrete range
    • Resource B capacity – Discrete range
    • Mean processing time – Continuous range
    • Conveyor speed – Continuous range
  2. Requirements:
    • Queue size requirement – 目のアイコンをクリックして表示します。

入力と要件が強調表示された入力ダッシュボード構成

入力ダッシュボード構成(クリックして拡大)

出力セクションの設定

ここには、目的と要件の出力を持つ 2 つの単一値ウィジェットがあります。これらのウィジェットに加えて、最適な入力値を視覚化する棒グラフを作成してみましょう。このためには、“Add output” ボタンをクリックし、表示されたウィジェットで棒グラフの種類を指定します。

次に、“Select input” ドロップダウン リストをクリックして、Resource A の容量、Resource B の容量入力、Mean processing time、および Conveyor speed の入力を 1 つずつ選択します。最後に、ウィジェット名を “Optimal inputs” として指定し、ウィジェットのサイズを調整します。以下にその様子を示します。

棒グラフを使用して図示された出力ダッシュボード構成

出力ダッシュボード構成(クリックして拡大)

実験ダッシュボードの Inputs と Outputs を構成したら、実験を保存して実験構成の最終段階に進み、決定変数とその他の入力値を定義します。

Resource Capacity の入力には、step = 1 で 1 ~ 20 の範囲を指定しましょう。Mean processing time は 1 から 12 まで変化し、Conveyor speed は 5 から 15 まで変化します。その他の実験設定は次のとおりです。

  1. Experiment settings:
    • Objective: minimize output total cost per product
    • Number of iterations: 500
  2. Requirements:
    • Queue size requirement – は less than or equal to 0

このように表示されます。

定義された入力値を含む実験ダッシュボード

定義された入力値を含む実験ダッシュボード(クリックして拡大)

これで実験を実行する準備が整いました。

AnyLogic Cloud での最適化実験の実行

実験を実行するには、Cloud ツールバーの Run ボタンを押して、実験が完了するまで待ちます。内部では、Cloud は次の方法でオプティマイザーと対話します。

  1. オプティマイザーは、実行する入力値のセットを Cloud に指示します。
  2. Cloud は、実験がすでに実行されているかどうか、およびそれぞれの結果がすべての実行結果とともにデータベースで利用可能であるかどうかをチェックします。「はい」の場合、結果はモデルを再実行せずにオプティマイザーに送信されます。それ以外の場合、Cloud はモデル実行のそれぞれのセットを実行します。
  3. オプティマイザーは出力を処理し、Cloud に別の入力値のセットを提供します。
  4. このプロセスは、反復回数のしきい値に達するか、オプティマイザーに実行する新しい入力値のセットがなくなるまで繰り返されます。

実験が完了すると、実験結果が入力された出力セクションが表示されます。

棒グラフを含む最適化実験結果

最適化実験結果(クリックして拡大)

他の実験と同様に、Cloud は最適化実験の結果を保存します。これは、モデルの別のユーザーが同じ最適化実験ダッシュボードを作成 (または構成) した場合、実験結果が即座にダッシュボードに表示されることを意味します。

ただし、クラウド コンピューティングの分散的な性質により、オプティマイザーは再現可能な実行結果を保証しないことに留意することが重要です。この方法では、特に反復回数が比較的少ない場合には、同じ入力値のセットであっても異なる結果が得られる可能性があります。

AnyLogic Cloud での最適化実験結果の処理

実験が完了すると、次のことができるようになります:

  1. 最適な入力値でアニメーションを再生する。
  2. 最適化実験の結果を Excel ファイルにダウンロードする。
  3. 実験結果を他の実験の結果と比較する。

これらの機能を詳しく見てみましょう。

モデル アニメーションを再生するときに、モデルの実行を一時停止したり、モデル内の何かをその場で変更したりすることができます。これは、オプティマイザーによって提案されたソリューションを詳細に調査して、そのソリューションが本当に機能するかどうかを判断する場合、または最適化タスクを再検討する必要がある場合に非常に重要です。ここでは、Activity Based Cost Analysis のサンプル モデルで見つかった最適なソリューションに対してモデル アニメーションがどのように再生されるかを示します。


スライダーを変更してモデル パラメーターを調整する方法を示す GIF
最適解をアニメーションで再生します。スライダーを使用してモデルパラメーターをその場で調整できます

結果を含む Excel ファイルは、結果を Cloud からエクスポートし、Excel で後処理する場合に最適です。Excel ファイルには、実験ダッシュボードの構成に応じたすべてのモデルの入力と出力に関する情報が含まれています。

最適な入力値は、出力シートとそれぞれの出力ウィジェット シートで利用できます。これは、実行した最適化実験の結果を含む Excel ファイルです。

実験結果を表示する Excel スプレッドシート

結果を含む Excel ファイル

実験結果の比較機能を使用すると、異なる実験の結果を同じ画面上で視覚化できます。主に、さまざまなソリューションやシナリオを見積もるために使用されます。最適化実験では、比較機能は次の場合に役立ちます:

  1. さまざまな最適化シナリオを分析する。たとえば、受け取ったソリューションをさまざまな要件セットと比較します。
  2. 他のさまざまなシナリオ (たとえば、最適化実験の結果を使用した単純なシミュレーション実験の結果) を分析する。.

これを行うには、最適化実験のコピーを作成しましょう。この目的のために、実験ダッシュボードの Duplicate アイコンをクリックします。作成した実験で、キュー サイズ要件を “Not restricted” に指定し、実験を実行します。結果が得られたら、ツールバーの Compare ボタンを押し、サイドバーで両方の Optimization experiments を選択します。

C2 つの最適化実験の比較

2 つの最適化実験の比較(クリックして拡大)

確率モデルの最適化

確率モデルは、同じ入力セットで異なるランダム シード値を使用して実行するたびに異なる結果を生成するモデルです。この場合、出力の変化を把握するには、同じ入力セットを使用して実行を数回実行する必要があります。

この目的のために、レプリケーションによる最適化を使用できます。ここでの「レプリケーション」とは、同じ入力セットを実行する回数を意味します。この場合、オプティマイザーはすべてのレプリケーションの出力の平均値を考慮します。したがって、最良の解決策は、最良の平均値を持つ一連の複製 (反復) です。

実験は、通常の最適化実験と同様の方法で構成できます。反復ごとのレプリケーションの数を指定する必要があります。実験の結果は一連の実行であるため、実験で使用できる出力ウィジェットのセットは通常の最適化実験とは異なります。

結果を視覚化するには、散布図、ボックスプロット、密度プロット、平均および誤差棒グラフ、ヒストグラム、またはヒストグラム 2D を使用できます。実験結果を操作する最も便利な方法は、目的値を含む散布図またはボックスプロットを使用して結果を表すことです。散布図には、最良の反復のすべての複製のすべての客観的値が表示されます。データ ポイントの上にマウスを移動すると、最適な入力値が表示されます。

結果を示す散布図

反復実験による最適化の散布図

ボックスプロットは目的値を集計し、最小値、最大値、平均値、中央値、および Q1/Q3 四分位数を示します。オプティマイザーは平均値に基づいて最適なソリューションを選択するため、ボックスプロットで平均値を確認すると便利です。

結果を示すボックスプロット

反復実験による最適化のボックスプロット

これらはすべて、最適化と反復実験による最適化の注目すべき違いです。もちろん、前のセクションで説明したすべての手段は、後者の実験タイプにも使用できます。アニメーションを使用して最適なソリューションを再生し (この場合、最初のランダム シード値が使用されます)、実験結果を含む Excel ファイルをダウンロードし、実験結果を他の実験と比較できます。

さらなる進化

このブログでは最適化の実験に焦点を当ててきましたが、この最新リリースには他にもいくつかの改善点があり、リリース ノートに記載されています。他に何が追加されているかをご確認ください。最適化実験、その他の新機能、製品を改善するためのアイデアに関するフィードバックをお待ちしております。

弊社は進化し、常に時代の先を行くことを信じています。AnyLogic Cloud に新しい革新的な機能を追加し続けるにつれて、最新のエキサイティングなアップデートをお楽しみください。また、新しいリリース、ブログ投稿、イベントなどの最新情報を入手するには、毎月のニュースレターを購読することをおすすめします。

関連記事