大家好, 欢迎学习本Python教程｡
好的, 现在我们要做一个push函数, 它可以完成两个任务｡
首先, 它将在存储器中附加新的过渡或新的事件｡
其次, 它将确保内存始终有100个转换｡
我说100是因为我们在上一个教程中给出了100个事件的例子, 但实际上, 这将远远超过100个｡
这将是相当可能10, 000或100, 000｡
等着瞧吧
但无论如何, 这个值将是容量｡
好的, 让我们把这个推函数｡
所以像往常一样, 我们从def开始定义一个新函数, 然后给予这个函数命名｡
我们称之为push, 这个函数有两个参数.
第一, 像通常那样, 自我即指对象和下一个｡
你觉得会是什么？
记住, 这个push函数将用于在内存中添加一个新事件｡
我们已经有记忆了｡
所以我们现在需要的变量是事件｡
这就是我们的参数, 我们的输入, 我们将把这个输入附加到内存中, 它是对象的变量｡
好的, 事件你可以称之为事件或转换｡
那是一样的｡
在接下来的代码部分中, 您将看到这个事件到底是什么, 它有什么形式？
实际上, 我现在可以告诉你, 这个事件, 这个我们添加到记忆中的过渡, 总共有四个元素｡
第一个状态是最后一个状态｡
第二个是新的状态, 即状态加1｡
第三个是最后一个动作80, 即显示的动作｡
而第四个是最后一个奖励, 最后一个获得的奖励｡
这是正确的｡
所以这就是这个活动的形式｡
好吧, 我会的
这就是我们所需要的, 因为我们只想把事件打开到内存中,
然后确保内存有容量元素｡
好吧, 我会的
现在让我们进入函数内部｡
因此, 我们要做的第一件事是将新事件附加到内存中｡
这很简单, 因为我们要用append函数.
所以这将是直接的｡
而当我们使用append函数时, 我们必须从我们想要向其追加内容的列表开始｡
而这个列表当然是记忆｡
所以我们从记忆开始｡
由于记忆是一个变量的对象, 我们在这里从self点记忆开始｡
我们走吧｡
所以self memory, 然后我们加一个点, 然后是append函数, 这是第一个｡
在append函数中, 我们输入要添加到内存中的内容, 当然就是我们的事件.
所以就算是在这里｡
这将把由最后一个状态､ 新状态､ 更少的部分和更少的奖励组成的新事件附加到存储器中｡
好吧, 我会的
所以这是第一件事｡
然后我们需要做的第二件事是确保内存始终包含容量元素｡
假设现在的容量为100, 000｡
这可能是我们将选择的容量, 因为100万个元素可能会使训练变慢｡
所以我们假设10万｡
现在, 我们要确保我们的记忆始终包含100, 000个转换, 100, 000个事件, 永远不会超过｡
当然, 一开始它会有一个, 然后是两个和三个, 但是一旦它达到100, 000个事件, 那么,
它将总是有100, 000个事件｡
为了确定它, 我们只需要建立一个F条件, 它有一个我们不想超过的上限｡
如果是这样的话, 我们在这里使用的ID是, 如果我们超过了极限, 那么,
我们将删除第一个转换, 内存的第一个事件, 因此我们将使用Len函数来获取内存的长度｡
这是内存中的元素数｡
所以这里在land函数中我们输入self点记忆｡
这就是记忆｡
如果自我记忆中的元素数量大于容量, 那么,
在这种情况下, 我们将删除第一个元素, 以确保记忆中总是有相同数量的容量元素, 并删除第一个元素｡
没有什么比这更简单的了｡
我们将使用另一个函数, 这就是del python技巧｡
因此, 我们要删除第一个转换, 它是内存中最旧的转换,
因为最后一个转换是我们附加的转换, 因此它是最新的转换｡
所以第一次跃迁是最古老的｡
所以这里我们要删除自学记忆和括号, 我们取记忆中索引为零的第一个元素｡
所以自我记忆为零｡
现在就去
有意思｡
我有一个小小的警告, 说有一个未定义的名称容量｡
这是因为这里的容量不是输入｡
必须是附加到对象的容量变量｡
因此在这里我们需要添加一个自我自我能力而现在警告消失了｡
所以现在你更了解自我的用途了｡
这实际上是引用对象来获取将要创建的对象的容量｡
这是重播内存类的一个实例｡
好了, 我们完成了这个推送函数｡
现在我们可以继续下一个函数, 即采样函数,
它将从最后一个容量元素的内存中随机采样｡
这样做将大大改善深度学习过程｡
好的, 让我们在下一个教程中做这个｡
在那之前, 好好享受吧｡
一､