鸟群的动力学模型(Boids model)

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

在这里插入图片描述
在这里插入图片描述

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[:
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颹蕭蕭

白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值