这是一个关于编程风格而不是技术性的问题:我的C函数是否总是需要一个数组长度的参数,尽管函数不依赖于它?
所以无论是喜欢这样void foo(int* a, int size)
还是喜欢void foo(int* a)
例如,当函数只是操作数组的前128位时,函数是否需要一个数组长度,首先检查数组是否是正确的长度,或者我应该信任调用者,他遵循文档并只调用函数阵列的大小合适?
我是C的新手,所以我担心像缓冲区溢出这样的东西是可能的.为什么一个比另一个好的技术推理会很棒.谢谢!
我找不到OpenAI Gym环境“ CartPole-v0”和“ CartPole-v1”之间差异的确切描述。
两种环境都有专用于它们的单独的官方网站(请参见1和2),尽管我只能在Gym github存储库中找到一个没有版本识别的代码(请参阅3)。我还检查了通过调试器准确加载了哪些文件,尽管它们似乎都加载了相同的上述文件。唯一的区别似乎是它们在内部分配的max_episode_steps
和reward_threshold
,可以如下访问。CartPole-v0的值为200 / 195.0,而CartPole-v1的值为500 / 475.0。其余的乍一看似乎是相同的。
import gym
env = gym.make("CartPole-v1")
print(self.env.spec.max_episode_steps)
print(self.env.spec.reward_threshold)
Run Code Online (Sandbox Code Playgroud)
因此,如果有人可以为我描述确切的差异或将我转发到正在这样做的网站,我将不胜感激。非常感谢你!
我使用了一些 NEAT 算法为一些简单的游戏(例如 flappybird)编写了自己的 AI 代码。一切正常,我知道发生了什么。问题是我不知道如何处理结果。人工智能学到了一些东西,我想保存这个进度。TechwithTim YouTuber 说了一些关于使用 pickle 的事情,当我保存它时它对我有用。我什至可以从文件中加载它,但这就是我的结束。我不知道接下来要做什么,在知道在他之前玩游戏的那些鸟的情况下,只让一只鸟开始玩游戏。
保存在一个代码中
winner = p.run(game,50)
with open("winner.pkl", "wb") as f:
pickle.dump(winner, f)
f.close()
Run Code Online (Sandbox Code Playgroud)
用另一个代码打开:
with open("winner.pkl", "wb") as f:
genome = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)
使用时
print(type(genome))
Run Code Online (Sandbox Code Playgroud)
输出是
<class "neat.genome.DefaultGenome">
Run Code Online (Sandbox Code Playgroud)