お世話になっております。 歩行者エージェントモデルを作成しようとしております。 基本的にエージェントは直線状に移動しますが、正面にエージェントがいる場合は歩行角度を変えて目の前のエージェントを回避するようなエージェントを作りたいと思っています。 以下のようなエージェントを作りましたが、このエージェントだと「周囲3マスにほかのエージェントがいる場合に回避行動をとる」というようになってしまうのでエージェントの動きが不自然になってしまいます。この条件を「自身の"前方に"ほかのエージェントが存在する場合に回避行動をとる」というような条件に変更したいと考えているのですが、どのように書いたらよいのかがわかりません。
エージェントの周囲全部を見るのではなく、前方にエージェントがいるときに...というようにするにはどのようにすればよいでしょうか。
def agt_step(self):
self.forward(self.speed)
#self.dirseed = random.randint(-1,1)
self.direction = self.direction + self.dirseed
neighbors = self.make_agtset_around_own(3, False, agttype=Universe.ped.w_west)
if count_agtset(neighbors) > 0: # もし周囲にエージェントがいれば
if self.flg_avoid == 0:
self.flg_avoid = 1 #回避モード
# self.move_space_around_own_sqgrid(int(1))
self.random = random.randint(0,1)
if self.random == 0:
self.direction = self.direction + 90 # 90度下むく
else:
self.direction = self.direction - 90 # 90度上むく
else:
self.flg_avoid = 0
self.direction = 180
self.forward(1)
例えば、進行方向(Direction)とターゲットとなるエージェントの方向(get_agt_direction)を比較して、前方にいるエージェントのみ反応するようにすればよいと思います。