Pybrain-reinforcement-learning-module

提供:Dev Guides
移動先:案内検索

PyBrain-強化学習モジュール

強化学習(RL)は、機械学習の重要な部分です。 強化学習により、エージェントは環境からの入力に基づいて行動を学習します。

強化中に相互作用するコンポーネントは次のとおりです-

  • 環境
  • エージェント
  • Task
  • 実験

強化学習のレイアウトは以下のとおりです-

強化学習モジュール

RLでは、エージェントは環境と繰り返し対話します。 各反復で、エージェントは報酬のあるオブザベーションを受け取ります。 次に、アクションを選択し、環境に送信します。 各反復での環境は新しい状態に移行し、毎回受け取った報酬は保存されます。

RLエージェントの目標は、できるだけ多くの報酬を収集することです。 反復の間、エージェントのパフォーマンスは、適切に機能するエージェントのパフォーマンスと比較され、パフォーマンスの違いは報酬または失敗のいずれかを引き起こします。 RLは基本的に、ロボット制御、エレベータ、通信、ゲームなどの問題解決タスクで使用されます。

PybrainでRLを操作する方法を見てみましょう。

迷路*環境*で作業します。これは、1が壁で0が自由フィールドである2次元のnumpy配列を使用して表されます。 エージェントの責任は、フリーフィールド上を移動してゴールポイントを見つけることです。

以下は、迷路環境での作業の段階的な流れです。

ステップ1

以下のコードで必要なパッケージをインポートします-

from scipy import *
import sys, time
import matplotlib.pyplot as pylab # for visualization we are using mathplotlib

from pybrain.rl.environments.mazes import Maze, MDPMazeTask
from pybrain.rl.learners.valuebased import ActionValueTable
from pybrain.rl.agents import LearningAgent
from pybrain.rl.learners import Q, QLambda, SARSA #@UnusedImport
from pybrain.rl.explorers import BoltzmannExplorer #@UnusedImport
from pybrain.rl.experiments import Experiment
from pybrain.rl.environments import Task

ステップ2

以下のコードを使用して迷路環境を作成します-

# create the maze with walls as 1 and 0 is a free field
mazearray = array(
   [[env = Maze(mazearray, (7, 7)) # create the environment, the first parameter is the
maze array and second one is the goal field tuple

ステップ3

次のステップは、エージェントを作成することです。

エージェントはRLで重要な役割を果たします。 getAction()メソッドとintegratedObservation()メソッドを使用して、迷路環境と対話します。

エージェントには、コントローラー(状態をアクションにマップする)と学習者がいます。

PyBrainのコントローラーはモジュールのようなもので、入力はステートであり、アクションに変換されます。

controller = ActionValueTable(81, 4)
controller.initialize(1.)
*_ActionValueTable_* には2つの入力、つまり状態とアクションの数が必要です。 標準的な迷路環境には、北、南、東、西の4つのアクションがあります。

次に、学習者を作成します。 エージェントで使用する学習者にSARSA()学習アルゴリズムを使用します。

learner = SARSA()
agent = LearningAgent(controller, learner)

ステップ4

この手順では、環境にエージェントを追加しています。

エージェントを環境に接続するには、タスクと呼ばれる特別なコンポーネントが必要です。 *タスク*の役割は、環境内の目標と、エージェントがアクションに対する報酬を得る方法を探すことです。

環境には独自のタスクがあります。 使用したMaze環境にはMDPMazeTaskタスクがあります。 MDPは*「マルコフ決定プロセス」*の略で、エージェントが迷路での位置を知っていることを意味します。 環境はタスクのパラメーターになります。

task = MDPMazeTask(env)

ステップ5

環境にエージェントを追加した後の次のステップは、実験を作成することです。

ここで、タスクとエージェントを相互に調整できるように、実験を作成する必要があります。

experiment = Experiment(task, agent)

今、私たちは以下に示すように実験を1000回実行するつもりです-

for i in range(1000):
   experiment.doInteractions(100)
   agent.learn()
   agent.reset()

次のコードが実行されると、環境はエージェントとタスクの間で100回実行されます-

experiment.doInteractions(100)

各反復の後、新しい情報をタスクに返し、エージェントに渡す情報と報酬を決定します。 forループ内でエージェントを学習してリセットした後、新しいテーブルをプロットします。

for i in range(1000):
   experiment.doInteractions(100)
   agent.learn()
   agent.reset()
   pylab.pcolor(table.params.reshape(81,4).max(1).reshape(9,9))
   pylab.savefig("test.png")

ここに完全なコードがあります-

*maze.py*
from scipy import *
import sys, time
import matplotlib.pyplot as pylab

from pybrain.rl.environments.mazes import Maze, MDPMazeTask
from pybrain.rl.learners.valuebased import ActionValueTable
from pybrain.rl.agents import LearningAgent
from pybrain.rl.learners import Q, QLambda, SARSA #@UnusedImport
from pybrain.rl.explorers import BoltzmannExplorer #@UnusedImport
from pybrain.rl.experiments import Experiment
from pybrain.rl.environments import Task

# create maze array
mazearray = array(
   [[env = Maze(mazearray, (7, 7))

# create task
task = MDPMazeTask(env)

#controller in PyBrain is like a module, for which the input is states and
convert them into actions.
controller = ActionValueTable(81, 4)
controller.initialize(1.)

# create agent with controller and learner - using SARSA()
learner = SARSA()

# create agent
agent = LearningAgent(controller, learner)

# create experiment
experiment = Experiment(task, agent)

# prepare plotting
pylab.gray()
pylab.ion()

for i in range(1000):
experiment.doInteractions(100)

agent.learn()
agent.reset()

pylab.pcolor(controller.params.reshape(81,4).max(1).reshape(9,9))
pylab.savefig("test.png")

出力

*python maze.py*

Python迷路

自由フィールドの色は、反復ごとに変更されます。