python - NEAT 的 TypeError
问题描述
在尝试制作蛇 AI 时,我遇到了 NEAT 的 TypeError:
node_inputs.append(self.values[i] * w)
TypeError: can't multiply sequence by non-int of type 'float'
代码
class SnakeGame(object):
def __init__(self, genomes, config):
self.genomes = genomes
self.nets = []
for id, g in self.genomes:
net = neat.nn.FeedForwardNetwork.create(g, config)
self.nets.append(net)
g.fitness = 0
另一个函数但同一个类中的代码
def game(self):
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
data = self.nets[0].activate(self.getData())
output = data.index(max(data))
函数 getData 的样子
def getData(self):
data = [self.x_position, self.y_position, self.food_x, self.food_y, self.snakeLength]
return data
config-feedforward.txt 的部分代码
[NEAT]
fitness_criterion = max
fitness_threshold = 1000
pop_size = 2
reset_on_extinction = True
解决方案
这里的问题是'w'是浮动的。考虑以下示例:
"a" * 5 # this makes "aaaaa"
["a"] * 5 # this makes ["a", "a", "a", "a", "a"]
按照同样的逻辑,写类似["a"] * 5.5
. 如果你这样做,你会得到你上面写的错误。所以弄清楚为什么w
是浮点数而不是整数 - 可能是它的值是整数但表示为浮点数(例如5.0)。
推荐阅读
- algorithm - Floyd Warshall 算法在以下情况下的工作原理
- google-apps-script - 基于单个单元格值的 Google 电子表格中的重复行
- ios - 适用于 iOS 的 Cordova 项目的 iPhone 布局问题
- html - 如何在 Flexbox 中使用 Order
- linux - FTDI LibMPSSE SPI
- arrays - 如何参考 Swift 4 中的结构正确构造类中的函数?
- javascript - DOM 元素样式
- android - java.lang.Error:信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) Android 应用
- python - 为什么不能在同一代码中使用函数“pack”和“grid”
- reactjs - 如何为 BrowserRouter 和 Phoenix 项目使用通配符