我正在使用 pybrain 构建一个学习趋化性的代理(根据化学信号向食物移动)。代理由一个神经网络表示,它应该根据它与食物的距离来调整它的权重。输入是两个传感器神经元,输出是移动代理的两个运动神经元。因此,我有连续的状态和动作。奖励是与食物距离的倒数。
这是我的主循环的本质:
task = ChemotaxisTask(ChemotaxisEnv(), MAX_STEPS)
module = buildNetwork(2,2,2)
learner = HillClimber(task, module, maxEvaluations=MAX_TRIALS, mustMinimize=True, storeAllEvaluations=True, storeAllEvaluated=True, verbose=False)
learner.learn()
我尝试过的方法是:
- 用 Q 进行实验(因为我有连续的状态/动作,所以不起作用)
- 使用 Reinforce/ENAC 进行实验(梯度下降计算没有变化)
- 使用 Reinforce/ENAC 进行连续实验(见上文)
- 使用 HillClimber 进行 EpisodicExperiment(网络权重不变)
我决定尝试使用 EpisodicExperiment,因为它似乎最适合我的实验。
我终于可以看到网络权重发生了变化,但随着时间的推移,我的平均适应度并没有增加。我可能做错了什么?
这是我所有代码的 Gist 存储库:https ://gist.github.com/4477624
这是 pybrain 文档:http ://pybrain.org/docs/index.html 学习者文档(例如 Q、Reinforce、HillClimber)位于http://pybrain.org/docs/api/rl/learners.html。
代码本身位于https://github.com/pybrain/pybrain。学习者在https://github.com/pybrain/pybrain/tree/master/pybrain/rl/learners,实验在https://github.com/pybrain/pybrain/tree/master/pybrain/rl/实验。
但是,我正在使用带有 EpisodicExperiment 的优化学习器;这些位于https://github.com/pybrain/pybrain/tree/master/pybrain/optimization。
我相信您可以从那里找到通过文档和代码的方式。我正在使用的其他所有内容都在https://github.com/pybrain/pybrain/tree/master/pybrain/rl中。