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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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