📅  最后修改于: 2020-12-10 05:18:29             🧑  作者: Mango
强化学习(RL)是机器学习中的重要组成部分。强化学习使代理根据环境的输入来学习其行为。
加固期间相互交互的组件如下-
强化学习的布局如下-
在RL中,代理在迭代中与环境对话。在每次迭代中,代理都会收到具有奖励的观察结果。然后,它选择操作并将其发送到环境。每次迭代时的环境都会移到新状态,并且每次收到的奖励都会保存下来。
RL代理的目标是收集尽可能多的奖励。在两次迭代之间,将代理的性能与以良好方式运行的代理的性能进行比较,并且性能上的差异会导致奖励或失败。 RL基本上用于解决问题的任务,例如机器人控制,电梯,电信,游戏等。
让我们看看如何在Pybrain中使用RL。
我们将在迷宫环境中工作,它将使用二维numpy数组表示,其中1是墙,0是自由场。代理人的责任是越过自由领域并找到目标点。
这是使用迷宫环境的分步流程。
使用以下代码导入我们需要的软件包-
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
使用以下代码创建迷宫环境-
# create the maze with walls as 1 and 0 is a free field
mazearray = array(
[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 1, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]]
)
env = Maze(mazearray, (7, 7)) # create the environment, the first parameter is the
maze array and second one is the goal field tuple
下一步是创建代理。
代理在RL中起着重要作用。它将使用getAction()和IntegratedObservation()方法与迷宫环境进行交互。
该代理具有一个控制器(它将状态映射到动作)和一个学习者。
PyBrain中的控制器就像一个模块,其输入是状态并将其转换为动作。
controller = ActionValueTable(81, 4)
controller.initialize(1.)
ActionValueTable需要2个输入,即状态和动作的数量。标准迷宫环境有四个动作:北,南,东,西。
现在,我们将创建一个学习者。我们将为与代理一起使用的学习者使用SARSA()学习算法。
learner = SARSA()
agent = LearningAgent(controller, learner)
此步骤是将代理添加到环境。
要将代理连接到环境,我们需要一个名为task的特殊组件。任务的作用是寻找环境中的目标以及代理商如何获得行动奖励。
环境有其自己的任务。我们使用的Maze环境具有MDPMazeTask任务。 MDP代表“马尔可夫决策过程” ,这意味着代理知道它在迷宫中的位置。环境将是任务的参数。
task = MDPMazeTask(env)
将代理添加到环境后的下一步是创建实验。
现在我们需要创建实验,以便我们可以使任务和代理相互协调。
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")
这是完整的代码-
迷宫
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(
[[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 1, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]]
)
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
每次迭代都会更改自由字段中的颜色。