

import numpy as np
class Boids:
def __init__(self, Np, Na, home=[0,0]):
self.Np = Np # predator
self.Na = Na # agent
self.d = len(home)
self.home = np.array(home)
self.predators = np.random.random((Np, self.d*2))
self.agents = np.random.random((Na, self.d*2))
self.radius_repulsion = 1
self.radius_alignment = 0.1
def _pairwise_distances(self, X, Y):
D = -2 * X @ Y.T + np.sum(Y ** 2, axis=1) + np.sum(X ** 2, axis=1)[:, np.newaxis]
D[D < 0] = 0
return D
def _force(self):
Daa = self._pairwise_distances(self.agents[:,:self.d], self.agents[:,:self.d])
Dap = self._pairwise_distances(self.agents[:,:self.d], self.predators[:,:self.d])
Neibors_repulsion = (Daa < self.radius_repulsion).astype(int)
Neibors_alignment = (Daa < self.radius_alignment).astype(int)
Dr = (1/(Daa+np.eye(self.Na))) * Neibors_repulsion
Fr = np.diag(np.sum(Dr, axis=1))@ self.agents[:,:self.d] - Dr @ self.agents[:,:self.d]
Fh = self.home - self.agents[:

本文介绍了Boids模型,探讨了在没有外部干扰和加入捕食者条件下的群体行为变化。通过定义力场和距离函数,模拟了Agent与Agent之间的趋同、避障及与捕食者的关系。加入Ff项后,群体动态更丰富,而捕食者的存在改变了群体的动态平衡。
最低0.47元/天 解锁文章
451





