我现在在当前任务中遇到了一个奇怪的 numpy 问题。我正在为一个班级制作一个蚁群 AI(基于 Google AI Ants Challenge),并且我正在使用一种基于扩散的方法,在这种方法中,我基本上在每个转弯时都会从食物/敌人的山丘上散发出一种气味。我一直在使用 numpy,因为每个回合基本上都包含进行大量矩阵操作,但我最近遇到了一个我无法弄清楚的奇怪错误。
在每个回合开始时,我会在运行扩散迭代之前更新与每种气味相关的字段:
# Here I update the "potential" field (hills_f) and the
# diffusion values (hills_l) for the hills scent. Diffusion values
# (lambda values) are 1 except for on ants, where they are higher
# or lower depending on their colony.
self.hills_f *= TURN_DECAY
self.hills_l = np.ones_like(self.hills_l)
# Update the lambda matrix
for r,c in ants.my_ants():
self.hills_l[r][c] = MY_HILLS_LAMBDA
for r,c in ants.enemy_ants():
self.hills_l[r][c] = ENEMY_HILLS_LAMBDA
所以这段代码在每回合开始时运行(以及类似的食物气味片段),但在随机回合(范围从 10-40),我得到以下错误:
Traceback (most recent call last):
File "long_file_path...", line 167, in run
bot.do_turn(ants)
File "MyBot.py", line 137, in do_turn
self.hills_l[r][c] = ENEMY_HILLS_LAMBDA
TypeError: 'numpy.float64' object does not support item assignment
看起来它随机变成self.hills_l
了两个 for 循环之间的标量,这对我来说没有任何意义。奇怪的是,食物气味有类似的代码,它永远不会崩溃,而且这个问题如此不确定。
如有必要,我可以发布更多代码,但我认为一切都应该在那里,特别是因为问题似乎发生在 for 循环之间。
谢谢!