python - 如何在视频游戏中赋予 AI 控制权?

标签 python machine-learning pygame artificial-intelligence genetic-algorithm

所以我使用 PyGame 制作了 Pong,我想使用遗传算法让 AI 学习玩这个游戏。我希望它只知道其桨、球和控件的位置。我只是不知道如何让人工智能自己移动桨。我不想这样做:“如果球在你上方,就向上。”我希望它只是尝试随机的东西,直到它学会该怎么做。

所以我的问题是,如何让人工智能尝试控制并看看什么有效?

最佳答案

学习 Atari- Pong已成为强化学习中的标准任务。例如有 OpenAI baselines github 存储库实现了可插入各种任务的 RL 算法。

你绝对不需要这些高级算法来按照你描述的方式学习 Pong,但你可以从他们用来区分任务(强化学习术语中的“环境”)和 AI 部分( “控制者”或“代理”)。为此,我建议阅读OpenAI Gymn Documentation了解如何添加新环境。

简而言之,您可以使用一些 float (球的位置和速度,或者两个位置而不是速度和 Racket 的位置)。或者您可以使用离散输入(整数,或只是像素,更难学习)。这些输入可以连接到一个小型神经网络。

对于命令输出,最简单的事情就是预测向上或向下移动的概率。这是一个好主意,因为当您评估 Controller 时,它将有一些非零的得分机会,因此您的遗传算法可以将不同的 Controller (具有不同的权重)相互比较。只需对神经网络输出使用 sigmoid 函数,并将其解释为概率。

如果您将所有神经网络权重初始化为一个良好的随机范围,那么您可能可以通过足够长的时间尝试随机权重(即使没有 GA)来获得一个不会完全糟糕的乒乓球运动员。

PS:如果您不打算使用神经网络:如果您只需要实现前向传递,那么从头开始实现它们非常简单。例如。如果您不实现反向传播训练,而是使用 GA 来学习权重(或 evolution strategy ,或只是随机权重)。最困难的部分是为初始随机权重找到一个合适的范围。

关于python - 如何在视频游戏中赋予 AI 控制权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59525215/

相关文章:

Python 从列表中的搜索导出新的字典

python - 如何在 Python 中解析带有行跨度的 HTML 表?

sql - 搜索自然语言句子结构

machine-learning - 我应该从一个时期到另一个时期使用相同的训练集(卷积神经网络)

python - ValueError : Number of labels is 1. 使用 silhouette_score 时有效值为 2 到 n_samples - 1(含)

python - GL_LINES 没有显示在立方体顶部?

python - 使用 pyo3 的 python 扩展不会提高速度

python - 使用python和mysql时,SQL语句中并未使用所有参数

python - Pygame字体错误

python - pygame事件队列功能在鼠标输入时崩溃