強化学習に関する主要な概念
強化学習の概要
FlexSimモデルは、強化学習アルゴリズムのトレーニングと評価の環境として使用できます。
標準的な強化学習エピソードは、エージェントが環境を観察し、観察への応答としてアクションを実行して、報酬を受け取ってから、再度観察してアクションを起こし、報酬を受け取るというサイクルを、エピソードの完了まで繰り返します。
エージェントは通常、ランダムなアクションから行います(探索)。エージェントは報酬を受け取りながら、学習した事実に基づいて最適なアクションを起こし、報酬を最大化することを学習します(活用)。特定のアクションへの報酬は、ただちに与えられるとは限りません。たとえば、迷路で間違った方向に進路を変えても、行き止まりに到着するまでは分かりません。強化学習のアルゴリズムが異なると、後から与えられる報酬も変化しますが、報酬が最新のアクションと直接関連していない場合でも、これらは常に同一のベーシックフローに従っています。
多くの異なる強化学習アルゴリズムが利用可能ですが、エージェントが学習する方法はそれぞれについて多少異なります。アルゴリズムの例として、DQN(Deep Q Network)、DDPG(Deep Deterministic Policy Gradient)、PPO(Proximal Policy Optimization)、その他多くが挙げられます。
FlexSimには、特定の強化学習アルゴリズムの実装は用意されていません。その代わりに、それらのアルゴリズムをトレーニングするためのシミュレートされた環境として、FlexSimモデルと通信する機能と、その方法を示す例が用意されています。
はじめる
FlexSimを使用して強化学習をはじめるには、強化学習アルゴリズムからFlexSimと通信を行う方法を示すPythonスクリプトを使用します。強化学習アルゴリズムはどのプログラミング言語でも作成でき、どのような言語とツールでもFlexSimと通信できます。この例では、OpenAI Gymツールキットと、強化学習アルゴリズムのStable-Baselines3実装とともに、Pythonにより作成されたサンプルコードを使用します。ここに示すサンプルコードは、自分のプロジェクトの必要に合わせて自由にカスタマイズでき、別の言語、ライブラリ、パッケージ、実装を使用して同じタイプの通信プロトコルを実装することもできます。
- 最初に、flexsim_reinforcement_learning.zipをダウンロードします。
このzip圧縮されたアーカイブには、3つのPythonスクリプトが含まれています。
- flexsim_env.py:gym.EnvのサブクラスであるFlexSimEnvクラスで、カスタムの環境インターフェイスを実装します。このクラスには、ソケットを使用してFlexSimを起動し、通信するメソッドとプロパティがあります。
- flexsim_training.py:単一のmain()メソッドで、FlexSimEnvクラスを使用してstable_baselines3強化学習アルゴリズムをトレーニングし、トレーニング済みモデルを保存して、FlexSim環境との直接接続を使ってトレーニング済みモデルを評価する例を示しています。
- flexsim_inference.py:BaseHTTPRequestHandlerのサブクラスであるFlexSimInferenceServerクラスで、HTTPリクエストを処理するためのメソッドを実装しています。main()メソッドは、トレーニング中に保存されたトレーニング済みモデルをロードし、トレーニング済みモデルを使用できるHTTPサーバーをホストして、システムの観察に対応するアクションを指定する方法の例を示しています。これは例示を目的とした簡単な例で、実際の運用には推奨されません。ライブシステムには、よりセキュアなサーバーを実装する必要があります。
Python開発環境の構成
上述のPythonスクリプトには、標準ライブラリの一部ではないPythonパッケージとモジュールへの依存関係が含まれています。異なるPythonのバージョンのパッケージへの依存関係を管理するため、Visual Studio Code、Visual Studio、Anacondaなどの統合開発環境(IDE)ソフトウェアパッケージを使用して仮想環境を構成し、Pythonスクリプトを編成して実行できます。例を単純にするためにVisual Studio Codeを使用しますが、これは必ず必要なわけではありません。必要なら、依存関係のパッケージをインストールし、スクリプトを変更してから、別のIDEを使用して実行できます。
Visual Studio Code(VS Code)のバージョンが異なる場合、ここに示されているスクリーンショットとは多少異なる可能性がありますが、一般的な手順はどのIDEでもほぼ同じです。
- Visual Studio CodeのPythonチュートリアルに従って、VS Code、そのPython拡張機能、およびPython 3をダウンロードし、インストールします。
- RL Pythonの開発用のフォルダを作成し(たとえば、Documents/FlexSim 2022 Projects/RL)、VS Codeで開きます。
- 上記のPythonスクリプトを抽出して、フォルダにコピーします。
- [エクスプローラ]ペインでflexsim_env.pyをダブルクリックして開きます。
- 上端の[Pythonファイルの実行]ボタンを押して、スクリプトの実行を試みます。パッケージが存在しないため、「"gym"という名前のモジュールがありません」などのエラーが出力されます。
- パッケージが存在しないエラーを修正するには、[ターミナル]ペインを使用して、欠けているパッケージをインストールします。[ターミナル]ウィンドウに「pip install gym」コマンドを(鍵括弧なしで)入力し、Enterキーを押します。
- gymをインストールすると、numpyなど他の依存関係もインストールされます。インストールされていない場合、欠けている他の依存関係もインストールしてください。
- Python開発環境の構成が終了したら、トレーニングを開始できます。
また、Pythonインタープリタとデバッガをチュートリアルの記載に従って設定します。
オプションとして、インストールしたPythonパッケージを管理するための仮想環境を設定できます。ここで使用するカスタムパッケージはgymとstable-baselines3です。
正しいPythonインタープリタと環境を使用していることを確認してください。これらをインストールしても、パッケージが存在しないというエラーが出る場合は、スクリプトの実行に使用しているとは別の環境にパッケージをインストールしている可能性があります。上述のチュートリアルで、仮想環境についてと、VS CodeでPythonパッケージを管理する方法について、詳細を調べてください。