現在、現在の割り当てで 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
2 つの for ループの間でランダムにスカラーに変わるように見えself.hills_l
ますが、これは私には意味がありません。また、これまでクラッシュしない食品の香りの同様のコードがあり、この問題が非常に非決定論的に現れるのも奇妙です。
必要に応じてさらにコードを投稿できますが、特に for ループ間で問題が発生しているように見えるため、すべてがそこにあるはずです。
ありがとう!