Python游戏神经网络。如何设置输入

我正在用pygame制作一款坦克游戏,玩家可以操控坦克在墙壁之间移动并射击其他坦克。

我正在尝试找到一种方法来创建一个神经网络,可能使用强化学习来控制敌方坦克,这样游戏可以根据每个对象的属性来决定哪些坦克应该移动到哪里,是否应该射击等。

属性:敌人 -> x,y,宽度,高度,速度,健康和其他项目  墙 -> x,y,宽度,高度  子弹 -> x,y,宽度,高度,速度  玩家 -> x,y,宽度,高度,速度,健康  

我计划使用keras Python模块来创建神经网络,但是我找不到一种方法来设置输入数据,使其形状和大小正确,因为墙壁和子弹的数量是可变的。

我想做的是:

action = Network.predict(state)

其中
state = (Enemy, Player, Tuple_of_Wall_Data, Tuple_of_Bullet_Data)

而action是敌人应该移动的方向的选项,形式为
action = (Direction,Should_Shoot)

简而言之,我的问题是,如何设置神经网络的输入层,使其能够接受(1个敌人,1个玩家,多个墙壁,多个子弹),并使用强化学习训练神经网络,给敌人提供一个方向和是否应该开火的指示?


回答:

有三种典型的表示游戏状态的方法供AI代理使用:

  1. 内部游戏状态,基本上是你提议的 – 游戏中对象的列表及其原始属性。如果你想用机器学习来处理这个,你需要一种能够处理不同大小的架构,因此你可能会使用递归神经网络,一次处理一个对象。请注意,这可能是一种非常低效的表示方式。特别是作为人类,你不会得到这样的游戏状态,你不会得到一个对象流。

  2. 全局地图视图。如果游戏的地图足够小,可以整体作为输入馈送到代理中,最终得到一个完全可观察的问题,数据形式为W x H x K,其中W,H是地图的宽度和高度,K是对象类型的数量(因此你得到每个对象的一热编码)

  3. 代理的“视野”,这可能是现代RL中最流行的一种方法,代理再次以W x H x K的形式呈现,但现在W和H是其视野的大小(随代理移动)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注