【发布时间】:2020-10-05 05:33:39
【问题描述】:
我有一个简单的游戏,其中有一个球在屏幕上弹跳,玩家可以左右移动屏幕并向上射箭以弹出球,每次玩家击球时,球会爆裂并分裂成两个较小的球,直到它们达到最小尺寸并消失。 我正在尝试使用基于 python 整洁库的遗传算法和关于 flappy bird https://www.youtube.com/watch?v=MMxFDaIOHsE&list=PLzMcBGfZo4-lwGZWXz5Qgta_YNX3_vLS2 的本教程来解决这个游戏,所以我有一个配置文件,我必须在其中指定网络中必须有多少输入节点,我曾想过将玩家的 x 坐标、玩家的 x 坐标与球的 x 坐标之间的距离以及玩家的 y 坐标与球的 y 坐标之间的距离作为输入。
我的问题是在游戏开始时我只有一个球,但经过几次移动后我可以在屏幕上有更多的球,所以我应该有更多的输入节点,屏幕上的球越多我必须向网络提供的输入坐标越多。
config-feedforward.txt 文件
"""
# network parameters
num_hidden = 0
num_inputs = 3 #this needs to be variable
num_outputs = 3
"""
python 文件
for index,player in enumerate(game.players):
balls_array_x = []
balls_array_y = []
for ball in game.balls:
balls_array_x.append(ball.x)
balls_array_x.append(ball.y)
output = np.argmax(nets[index].activate(("there may be a number of variable arguments here")))
#other...
最终代码
for index,player in enumerate(game.players):
balls_array_x = []
balls_array_y = []
for ball in game.balls:
balls_array_x.append(ball.x)
balls_array_y.append(ball.y)
distance_list = []
player_x = player.x
player_y = player.y
i = 0
while i < len(balls_array_x):
dist = math.sqrt((balls_array_x[i] - player_x) ** 2 + (balls_array_y[i] - player_y) ** 2)
distance_list.append(dist)
i+=1
i = 0
if len(distance_list) > 0:
nearest_ball = min(distance_list)
output = np.argmax(nets[index].activate((player.x,player.y,nearest_ball)))
【问题讨论】: