大家好, 欢迎学习本Python教程｡
好了, 今天我们要做一个更新函数, 当眼睛达到一个新的状态时,
它会更新所有需要更新的东西｡
所以当它达到新的状态时, 你知道, 我们需要更新动作｡
最后一个动作会成为显示的新动作, 但最后一个状态也会成为新状态｡
最后, 最后的奖励｡
这就成为了我们在玩游戏时得到的新奖励｡
这就是选择一个操作后立即发生的逻辑路径, 我们需要更新转换的所有元素, 当然,
我们将获得一个新的转换｡
因此, 我们必须将这个新的转换附加到内存中｡
最后, 我们也会更新我们的奖励窗口, 你知道,
以保持对培训的进展是如何进行和探索是如何进行的眼睛｡
但对你们来说最重要的是现在我们终于可以把我们正在实现的AI和我们的地图联系起来了,
因为如果我们回到我们的地图, 记住游戏类中有一个很大的更新函数｡
这就是我们用赛车来做游戏的地方, 定义赛车犯错时该如何惩罚.
但在这个博弈课上, 我们注意到了这个更新函数在这个更新函数中我们注意到这条线的动作等于大脑点的更新, 奖励少,
信号少.
这正是我们要做的｡
我们即将使这个更新函数, 将采取最后的奖励和最后的信号, 以获得下一个行动发挥｡
因此, 我们不仅要更新过渡的所有不同元素,
而且主要是我们将扮演我们在获得最后一个奖励和最后一个信号时应该扮演的动作｡
当然, 在这个更新函数中, 我们将使用之前实现的选择操作函数｡
我们将在未来的更新功能中集成选择动作功能, 我们将在进行所有更新的同时选择正确的动作｡
所以这一点非常重要, 要把它和地图联系起来｡
现在, 我们要做的是最终把人工智能和游戏联系起来, 我们在这门课上做的游戏.
我们现在要做的就是直接把这个更新取到最后, 我们是最后一个信号,
因为这正是我们要用这两个参数来构造的函数｡
提醒一下, 大脑是我们的视觉对象｡
也就是说, 它是类的对象｡
我们现在要做的就是复制这个更新, 减少奖励, 减少信号, 这将是我们要做的下一个函数,
所以我把它粘贴在这里｡
为了谨慎起见, 我想给予一些与我们这里的名称不同的名称｡
你知道, 我们这里的奖励少｡
我不想把最后一个奖励和这个混淆｡
这可能很危险｡
所以我要用奖励来代替最后一个词｡
顺便说一句, 信号也是这样｡
让我们输入信号或新信号, 以指定我们希望在达到新状态时进行更新, 从而获得新信号｡
当然, 这个奖励是我们在这里得到的最后一个奖励, 你知道, 当我们进入一些沙子或者更糟的时候,
太接近地图的一边｡
这就是我们定义最后奖励的地方｡
最后一个奖励将作为更新函数的输入｡
这就是为什么我们这里的奖励较少｡
但在这里我只是给论证奖励换了个名字, 以免混淆.
最后一句话｡
好吧, 我会的
这就是更新函数｡
现在让我们进去做这两件事｡
也就是说, 更新过渡的所有元素, 当然, 还要选择操作｡
好吧, 我会的
那么, 我们首先需要更新什么？
正如您所理解的, 我们希望在达到新状态时进行更新｡
因此, 我们首先要更新的显然是这个新状态｡
这就是我们正在达到的新境界｡
所以我把这个新状态称为, 新状态然后等于.
那么我们怎样才能得到这个新的状态呢？
当然, 这取决于信号, 传感器刚刚检测到的新信号｡
提醒一下, 状态是信号本身, 由传感器的三个信号组成, 信号一,
信号二和信号三, 正方向和负方向｡
那是我们的州｡
所以一定要明白, 信号就是状态｡
但现在它是一个简单的五元素列表｡
因为这将是神经网络的输入, 记住我们要把它转换成火炬张量｡
所以这正是我们现在要做的｡
我们要把我们的火炬库再拿过来｡
张量类｡
我们走吧｡
它会把我们的新信号转换成火炬张量｡
那么最好确保火炬张量的所有元素都是浮点数｡
所以我会做一个类型转换, 把它们转换成浮点数, 就像这样,
然后最后试着得到我们下一步要做什么的反射｡
当然, 这是为了创建假维度, 添加与批次对应的维度｡
当然, 我们用压缩函数来实现这个过程, 我们必须输入这个假维度的索引, 这个索引是我们想要的,
也就是零｡
好吧, 我会的
现在我们有了新的状态, 由三个传感器的三个信号加上方向减去方向组成｡
当然, 这将取决于我们在这一行通过更新函数获得的新信号｡
最后一个信号, 我们得到三个信号加上方向减去方向｡
提醒一下, 这三个信号是传感器周围探测到的气味密度｡
好吧, 我会的
我们刚刚得到了新的状态, 这意味着我们到达了新的状态, 现在我们必须进行下一次更新｡
那么根据你的说法, 我们现在需要更新什么？
在达到这种新状态后, 现在更新什么才是合乎逻辑的？
我们现在需要更新的是记忆｡
为什么会这样呢？
这是因为在每一个时刻t, 一个转移是由当前状态t, 下一个状态t, 加1, 奖励r,
t和动作a, t组成的｡
现在我们已经有了, 我们已经有了, 我们已经有了, 我们刚刚得到了, 转变的最后一个元素,
T加1｡
所以通过得到这个新的状态, T加1, 我们得到了一个全新的记忆转变｡
因此我们必须把这个全新的过渡添加到内存中, 因为这只是我们的下一个过渡｡
所以我们必须马上更新记忆｡
因此, 我要做的是从replay内存类中创建内存对象, 因此我要用self｡
引用该对象的内存｡
但是因为我使用了self, 所以我必须在update函数中包含self｡
所以现在你可以真正看到自我的作用了｡
每当你使用一个你在init函数中创建并初始化的变量时｡
所以self dot内存现在我们需要更新它｡
根据你的说法, 我们要如何更新它？
好消息是我们已经做了一个函数来做这个｡
它是将事件或转换附加到内存的推送函数｡
这正是我们现在要用到的｡
我们将使用push函数将我们刚刚进行的新转换附加到内存中｡
所以这里我不取等号因为我们要用一个方法所以我们可以直接用点推.
首先, 我将加入这个跃迁, 这个新的跃迁, 我们刚刚得到的, 它是最后一个状态, 所以,
self, 那么, lessstate｡
这就是S-T, 这就是已经存在的｡
然后这个转变的下一个元素当然是我们刚刚达到的新状态｡
因此, 因为它不是我们在init函数中创建和初始化的对象的变量, 所以我们不在这里放置self｡
我们直接把新的状态｡
然后, 过渡的下一个元素是动作, 我们已经有了最后一个动作,
也就是这个自我的最后一个动作｡
所以它当然等于零, 但是它当然会被select action函数更新｡
但这是这一个｡
那么接下来就是自我打点的最后一个动作了｡
但现在要小心｡
我们在这个过渡中包括的元素都应该是火炬舞者｡
如你所见, 这就是最后一次约会的情况｡
是个火炬舞者｡
新立也是火炬舞者｡
所以这对动作来说一定是一样的｡
当然, 还有奖励｡
但现在你会想, 它怎么可能是一个火炬舞者, 考虑到它只是一个数字, 你知道,
动作是01或2, 但事实上, 这不是一个问题｡
我们仍然可以把这个01或02变量转换成火炬舞者｡
这就是我们所说的长张量｡
长整型是一种类型, 它是包含整数的张量｡
因为最后一部分是整数, 所以它是零一或二｡
我们现在要拿的是图书馆火炬｡
然后我们用长张量类来创建一个新的对象, 这个对象就是长张量本身｡
而通过把自我最后的作用函数作为输入, 它会创造出这个长项主体,
但它仍然会把零一或二包含进一个长的张量客体中｡
这只是为了与过渡保持一致｡
它应该只包含传感器因为我们使用的是PyTorch和神经网络
所以我们必须使用传感器, 这样我们就可以使用长张量｡
还有最后一个转换, 我们必须确保这个长答案里面的是整数, 为了确保这一点,
即使我们已经知道最后一部分是0,
1或2, 为了确保我们要再次进行这个int类型的转换, 我们把我们自己的最后一个操作转换成整数｡
我们走吧｡
然后我们必须把整数自最后作用量放进括号里, 这样我们就得到了一个长张量, 它是最后作用量, 01,
2本身｡
所以关键点是, 这就是你如何通过触摸, 把一个简单的数字, 01或2, 转换成一个张量｡
好吧, 我会的
最后, 过渡的最后一个元素, 当然, 这也是我们得到的最后一个奖励｡
这就是我们在init函数中创建的最后一个奖励变量, 它初始化为零,
然后在这里更新, 当我们进入负奖励状态, 或者我们离目标更远时,
它也是负奖励状态.
如果我们离目标更近了, 那就是积极的奖励｡
如果我们太靠近地图的一边, 最糟糕的惩罚是, 那是一个可怕的负奖励, 减一｡
仅此而已｡
所以让我们把这个转变自我的最后一个元素——奖赏加进去｡
所以我复制了这个粘贴, 现在我们要做另一个转换, 当然和这个完全一样｡
只不过既然奖励不是整数而是一个浮点数, 我们就简单地作一个火炬张量的换算｡
但是如果没有整型数, 我们会保留括号,
因为, 首先我们要把这个数放入一个列表中, 然后这个列表会作为火炬张量类的输入｡
但我们不需要在转换中做这个因为最后的奖励是一个浮点数｡
所以我们要做的就是简单的把火炬点张量加到张量上, 然后加上括号｡
我们要把括号和圆括号合起来｡
我们走吧｡
总结一下我们刚刚达到的新状态和奖励, 我们观察到一个新的转变事件, 我们添加到记忆中｡
并且该转换包含关于新状态的最后状态｡
SD加一, 最后一个动作打了80和最后一个奖励｡
好的, 我会的
好吧, 我会的
现在我们的记忆更新已经完成了｡
所以, 让我们休息一下, 我们将在下一个教程中处理下一个更新｡
在那之前, 好好享受吧｡
一､