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

时间:2017-06-25 14:13:24

标签: python machine-learning pygame keras reinforcement-learning

我正在游戏中进行坦克游戏,你可以在墙上移动坦克并射击其他坦克。

我正试图找到一种制作神经网络的方法,可能是对敌人的强化学习,这样游戏就可以决定哪些坦克应该移动到哪里,如果他们应该通过传递每个物体的属性来射击等。

Attributes:
Enemy -> x,y,width,height,speed,health and other items  
Wall -> x,y,width,height  
Bullet -> x,y,width,height,speed  
Player -> x,y,width,height,speed,health  

我计划使用keras python模块创建一个神经网络,但是我找不到设置它的方法,以便输入数据的形状和大小正确,因为会有可变数量的墙和子弹

我想做什么:

action = Network.predict(state)

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

并且行动是敌人应该以形式移动的选项 action = (Direction,Should_Shoot)

TLDR 我的问题是,我如何建立一个神经网络输入层,以便它可以采取(1个敌人,1个玩家,多个墙,多个子弹)并训练神经网络给敌人一个方向,如果它应该使用强化学习开火?

1 个答案:

答案 0 :(得分:1)

表示AI代理的游戏状态有三种典型方式:

  1. 内部游戏状态,几乎就是你提出的建议 - 游戏中的对象列表,以及它们的原始属性。如果想要使用ML,那么你需要一个处理不同大小的架构,因此你可能最终会得到循环神经网络,逐个处理对象。请注意,这可能是非常不理想的表示。特别是作为一个人类,你没有像这样的游戏状态,你没有得到一个对象流。

  2. 全球地图视图。如果游戏有足够小的地图,它可以作为代理的输入全部被填充,最终会有完全可观察到的问题,形式为W x H x K的数据,其中W,H是地图的宽度和高度,K是对象类型的数量(因此您可以获得每个对象的单热编码)

  3. Agent" vision",这可能是现代RL中最受欢迎的一个,其中代理再次以W x H x K呈现,但现在W和H是大小它的愿景(与代理一起移动)。