大家好, 欢迎学习本教程｡
好的, 我们计算了熵, 并把它加到熵列表中｡
现在我们要做的是根据集合max的概率分布随机抽取一个动作.
所以我们开始吧｡
这就是下一步｡
我们仍然在循环中, 因为我们仍然在这里的步骤上运行｡
所以你现在知道怎么玩动作了｡
我们首先会引入一个变量来表示这个动作,
然后我们会得到概率分布, 我们会用多重正态函数从这个概率分布中随机抽取.
然后我们将这些数据相加｡
所以需要注意的是, 作用量实际上是一个只有一个值的张量｡
但您不应将其视为一个简单的值｡
你应该把它看作是一个维度张量, 一个接一个地包含这个动作的值｡
因为它没有被挤压｡
现在仍然在同一个for循环中, 我们要得到与刚才执行的动作相关的对数概率｡
所以我在这里更新我的对数概率, 用上一个, 我们在这里计算的上一个对数问题｡
然后我将使用gather方法, 我将向其中输入一个和显示的动作,
因为我们想得到与这个动作相关的对数概率｡
作为第二个参数, 我将输入我的操作, 但它必须是getter函数所要求的变量,
而gather函数只使用张量整数作为索引｡
好吧, 我会的
现在, 我们得到了与所显示的操作关联的日志属性｡
现在下一步是把我们得到的附加到这个列表上｡
所以我们得到了这个值｡
这就是我们在这里得到的模型输出｡
然后我们还得到了原木道具｡
因此, 我们要将日志属性添加到日志属性列表中｡
我们已经把熵添加到熵列表中了｡
所以我们是好的, 奖励, 我们会得到它之后｡
因此, 我们现在将把值和日志属性附加到值列表和日志属性列表中｡
我们开始吧
我们拿着我们的价值清单｡
我们添加了append函数, 并添加了模型刚刚返回的值｡
好极了｡
然后对log probs进行相同操作｡
我们刚刚得到了新的日志问题, 我们将把它附加到日志问题列表中｡
所以在这个append函数中, 我们输入log prop我们刚才计算的log prop｡
好吧, 我会的
所以我们的名单现在已经更新了｡
现在我们要做的就是玩这个动作, 因为实际上就在这里,
我们是从概率分布中随机抽取的.
但实际上我们还没有播放它, 我们现在要播放它, 这样我们就可以达到新的状态, 从而获得新的传输,
并播放它｡
我们将以我们的环境为例, 因为我们在我们的环境中进行动作｡
然后我们将使用step方法, 并在其中指定要播放的动作｡
为了做到这一点, 我们采取行动, 我们把这个numpy加上, 因为这是阶跃函数所期望的｡
但这个回报｡
实际上是新的状态和新的奖励, 因为达到新的状态, 我们得到了新的奖励,
也得到了新的完成值来知道游戏是否完成.
好吧, 我会的
所以有了这个, 我们玩动作, 我们达到了新的状态, 我们得到了新的奖励｡
我们知道我们是否完成了游戏｡
说到游戏结束, 我们在这里加一些东西,
确保代理不会陷入某种状态.
要做到这一点, 我们要用下面的方法更新这个变量｡
这等于完成了, 或者我们要加上一个条件, 游戏的情节不能持续太长时间.
您将在主函数中看到, 最大事件长度参数将等于10, 000｡
我们不希望一集的时长超过10,000个单位｡
所以我们要在这里加上一集的长度, 也就是一集的长度,
我们要把这个条件写成大于最大值｡
单集长度｡
我们走吧｡
实际上最大剧集长度, 我们是从参数中得到的｡
因此, 我在这里添加params点params点最大集长度｡
这就意味着如果游戏结束或者情节长度大于设定的最大情节长度, 也就是10,000, 那么游戏就结束了,
我们将开始一个新的游戏.
那只是预防措施｡
说到预防措施, 我们要增加一个预防措施｡
这是为了把奖励限制在负1和正1之间｡
我们已经得到了奖励, 但我们要确保奖励在负1和正1之间｡
要做到这一点, 我们只需要更新奖励这样做, 采取最大, 然后采取奖励的人｡
还有一个
这里我们取最小奖励的最大值和一减一｡
我们会确保奖励在负1和正1之间｡
好吧, 我会的
所以另一个预防措施｡
而现在我们只想检查游戏是否完成, 在这种情况下, 我们将重新启动环境｡
我们为什么要现在检查呢？
因为我们刚进入了一个新的境界｡
我们刚刚通过了一个新的传输｡
所以我们需要检查, 通过这个新的传输后, 而游戏还没有完成｡
因此, 如果再次进行, 如果进行, 那么在这种情况下,
我们将通过将事件长度设置为零来重新启动环境, 并且状态也将被初始化并重新初始化｡
我们使用环境和重置功能｡
噢
现在我们摆脱这种状况｡
那只是检查｡
现在我们要做的是, 因为我们达到了一个新的状态, 这个新的状态是现在, 然后,
由, 雷, 因为记住, 状态是输入图像, 最初是由数组完成的｡
所以现在我们要做的就是把新的状态转换成火炬张量｡
所以我们要更新我们的状态, 我们要使用torch库,
当然还有from numpy函数, 来转换这个numpy数组, 把输入图像状态转换成torch张量｡
好极了｡
在结束for循环之前, 我们要做的最后一件事, 就是steps上的循环.
当然, 这是为了把奖励添加到奖励列表中｡
这是最不需要更新的东西｡
我们更新了这里所有的名单除了奖励｡
所以我们现在就去做｡
我们得到我们的奖励, 然后用append函数把刚收到的最后一个奖励加进去.
好极了｡
在我们结束循环之前, 我们只需要做最后一次检查｡
如果它完成了, 那么我们要停止探索｡
所以我们在这里添加一个break, 这意味着如果完成了, 我们就停止探索,
直接进入下一步, 更新共享模型｡
现在我们已经完成了for循环｡
现在代理已经完成了它的探索, 它将更新共享模型, 我们将在下一个教程中处理这个问题｡
在那之前, 好好享受吧｡
一､