動物集群運(yùn)動行為模型_第1頁
動物集群運(yùn)動行為模型_第2頁
動物集群運(yùn)動行為模型_第3頁
動物集群運(yùn)動行為模型_第4頁
動物集群運(yùn)動行為模型_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、動物群體運(yùn)動行為模型概括自然界中多種生物都存在復(fù)雜的蜂群行為。生物學(xué)家對此進(jìn)行了大量研究,也取得了許多重要的研究成果。在一定程度上,群體行為是由群體智能主導(dǎo)的。所謂群體智能,是指許多簡單的個體組成一個群體,通過相互合作表現(xiàn)出智能行為的特征。在自然界中,動物和昆蟲經(jīng)常使用集體力量來躲避捕食者和覓食。本文的主要工作是通過建立適當(dāng)?shù)臄?shù)學(xué)模型并使用計算語言進(jìn)行模擬來研究群體的群體運(yùn)動。對于第一個問題,我們首先尋找它的理論基礎(chǔ)。國外專家主要使用歐拉法和拉格朗日法來研究聚類行為。通過相關(guān)理論的比較,發(fā)現(xiàn)本題研究的問題最好采用拉格朗日方法解決。為便于研究,本文選擇天然魚群為對象,建立自由游動模型,引入環(huán)境R

2、a模型,并在此基礎(chǔ)上建立靜態(tài)障礙物避讓模型。數(shù)值的調(diào)整改變了搜索參數(shù),達(dá)到控制狀態(tài)的行為選擇的目的,最終通過計算機(jī)模擬演示動物的群體運(yùn)動。對于第二個問題,在前面模型的基礎(chǔ)上,我們進(jìn)一步引入了智能體遇到捕食者時的群體運(yùn)動模擬算法?;谌斯~群自組織模型,建立相關(guān)天敵因素,然后根據(jù)約束因素分配權(quán)重,進(jìn)行迭代計算,實(shí)現(xiàn)魚群逃逸模擬。對于第三個問題,分析信息豐富的人群對群體運(yùn)動的影響,利用群體中的信息傳遞原理對群體運(yùn)動的決策進(jìn)行參考,簡化群體的溝通機(jī)制,給出魚是一種可以相互傳遞信息的通訊方式。它融合摘 要信息交互方法,建立動物群體覓食模型的信息交互模型,實(shí)現(xiàn)信息對群體決策運(yùn)動方向的影響。關(guān)鍵詞:群體行

3、為 群體智能 多智能體差分迭代 信息交互 群體覓食問題的背景和重述問題的背景在生態(tài)系統(tǒng)中,動物的個體行為相對簡單,但在成群之后表現(xiàn)出極其復(fù)雜的群體行為。機(jī)會。這種生物的群體運(yùn)動導(dǎo)致了對群體智能的探索。群體智能理論研究自1980年代出現(xiàn)以來,作為一個新興領(lǐng)域,受到越來越多科學(xué)家的關(guān)注,現(xiàn)已成為經(jīng)濟(jì)學(xué)、社會學(xué)、生物學(xué)等交叉學(xué)科的研究熱點(diǎn)。群體智能主要針對螞蟻、鳥群和其他群居生物的行為進(jìn)行觀察和研究。1.2 問題的重述通過觀看視頻并在網(wǎng)上搜索相關(guān)信息,這些動物群體在運(yùn)動過程中具有明顯的特征:群體中個體高度聚集,運(yùn)動方向和速度一致。重點(diǎn)思考動物群運(yùn)動的機(jī)理,建立描述動物群運(yùn)動的數(shù)學(xué)模型;建立數(shù)學(xué)模型來

4、描述魚類避開黑鰭礁鯊的運(yùn)動行為;假設(shè)有信息豐富的動物知道食物來源的位置和遷徙路線。進(jìn)一步分析該動物群如何實(shí)現(xiàn)群體運(yùn)動方向決策。2. 模型假設(shè)2.1 假設(shè)本文所提及的生物種群是一個獨(dú)立的生態(tài)部落;2.2假定天然魚的一般游動是隨機(jī)的;2.3 論文中提到的魚群數(shù)量短期內(nèi)沒有變化,即不考慮魚的出生率和死亡率;2.4 假設(shè)同種魚類的個體是同質(zhì)的,只考慮平均水平,不考慮個體差異;2.5 魚類種群不受環(huán)境變化(地震、海嘯等自然災(zāi)害)的影響;2.6 假設(shè)環(huán)境中的食物和障礙物是隨機(jī)分布的。3.符號說明設(shè)單位時間單位面積上的粒子遷移量粒子濃度擴(kuò)散性粒子數(shù)小組班次群體對其環(huán)境反應(yīng)的正常漂移量距離為 1 的群體中個體

5、之間的吸引力距離為 1 的群體中個體之間的排斥力個人素質(zhì)個人 i 的位置作用于個人的合力個人總數(shù)包括聚合或分散的力量下一個循環(huán)agent的游泳方向個體智能體接近魚群的游動方向(向心因子)對齊時魚游動的方向(對齊因子)避免碰撞的游泳方向(回避因子)agent 在當(dāng)前 t 中的游泳方向(慣性因子)第一個因素的權(quán)重( =1 , 2, 3, 4, 5, 7 )個體位置向量每一步的時間間隔Agent和 Agent之間的距離為向心對代理引起的期望運(yùn)動趨勢由對齊代理對引起的期望運(yùn)動趨勢避免碰撞引起的代理的期望運(yùn)動趨勢,靜態(tài)障礙物邊界的切線方向向量逃逸因子, ,和夾角Agent移動的最大速度Agent移動的最

6、小速度捕食者的最大速度最大偏轉(zhuǎn)角時間消耗的食物量消化率自上次用餐以來的時間表示魚的食欲大小的常數(shù)外部刺激的影響自上次交配以來的時間計算對潛在交配的感知影響害怕發(fā)現(xiàn)捕食者與發(fā)現(xiàn)的捕食者的距離兩條魚之間的距離遇到掠食者所需的旋轉(zhuǎn)角度四、問題分析在自然界中,有大量的動物成群結(jié)隊(duì)地移動或覓食。這些動物群體在運(yùn)動過程中具有明顯的特征:群體內(nèi)個體聚集性強(qiáng),運(yùn)動方向和速度一致。往往靠集體力量覓食求生,單個個體的行為缺乏智能,但由個體組成的群體卻表現(xiàn)出有效而復(fù)雜的智能行為,是群體智能的體現(xiàn)。本文研究的主要問題是建立一個模型來模擬動物的成群行為。首先,找到一些動物群的理論基礎(chǔ),如歐拉法和拉格朗日法,深入分析影響

7、群的原因,包括游泳和覓食的原理。 ,避障原則,然后建立RA模型,并用計算機(jī)演示集群行為。第二個問題,考慮魚群躲避黑鰭礁鯊的運(yùn)動行為,當(dāng)魚群遇到天敵時,通過個體逃逸與過程的相互作用來表達(dá)群體逃逸行為。當(dāng)代理發(fā)現(xiàn)捕食者時,它將向其他代理致消息。假設(shè)智能體接收到危險信號,它會分析捕食者的位置、方向以及自身的心理和生理,做出相應(yīng)的逃跑選擇。在第一個問題模型的基礎(chǔ)上,引入了智能體遇到捕食者時的群體運(yùn)動模擬算法?;谌斯~群自組織模型,建立相關(guān)天敵因素,然后根據(jù)約束因素分配權(quán)重,進(jìn)行迭代計算,實(shí)現(xiàn)魚群逃生模擬。對于問題3,對于所有的生物來說,無論是群居還是散居,總是因?yàn)樯娴男枰嗷ヂ?lián)系。為了研究信息豐

8、富的人的運(yùn)動方向,分析動物的信息交互,相互交流。對機(jī)理進(jìn)行了簡化分析。對于魚類的覓食行為,在上一題建立的模型的基礎(chǔ)上,重新分析了信息的豐富性如何影響種群的決策路徑。五、模型建立與解決5.1 建立數(shù)學(xué)模型,模擬動物的群體運(yùn)動。5.1.1理論基礎(chǔ)通過收集相關(guān)書籍資料可以知道,聚類問題的建模和研究方法主要分為以下兩類:(1) 歐拉法在歐拉的方法中,集群模型的每個個體成員都不是作為一個單獨(dú)的實(shí)體來研究的,而是通過密度的概念將整個種群描述為一個連續(xù)體。 Euler方法的理論基礎(chǔ)是Fick提出的經(jīng)典擴(kuò)散理論,其模型方程表示為:式中,單位時間、單位面積上沿該方向的粒子遷移量分別表示為粒子濃度和擴(kuò)散率。以及人

9、口通過垂直于 x 軸的平面的通量,表示人口的平移。同時,對流項(xiàng)不僅包括群中心漂移的速度項(xiàng),還增加了群成員之間的相互作用,如:在這個公式中, ,描述了該組響應(yīng)環(huán)境的常規(guī)漂移; ,描述距離為 的群體中個體之間的吸引力和排斥力。其他一些基于歐拉方法的研究工作是在上述聚類模型的基礎(chǔ)上做一些擴(kuò)展的討論??梢蕴砑拥降仁街械钠渌?xiàng)是來自同質(zhì)或環(huán)境資源的吸引力或排斥力。(2) 拉格朗日法拉格朗日方法的基本描述是每個個體的運(yùn)動方程,也是一種比較自然的建模和分析方法。例如,在拉格朗日方法中,牛頓運(yùn)動方程是一個典型的個體運(yùn)動方程:其中是個體的質(zhì)量,是個體 i 的位置,是作用在個體上的合力, 是個體的總數(shù)。它由聚集或

10、分散的力(即描述個體之間的吸引力或排斥相互作用)、與相鄰個體的速度和方向相匹配的力以及確定的環(huán)境影響(例如與環(huán)境相關(guān)的重力或行為施加的隨機(jī)干擾)組成的其他個人。是這些力量的總和。目前,大量的蜂群行為研究工作也是圍繞這些力的形式展開的。(3) 理論模型的比較與結(jié)論由于偏微分方程的理論比較發(fā)達(dá),歐拉法很容易對偏微分方程構(gòu)造的聚類模型進(jìn)行理論分析。聚類行為非常有效,密集且沒有明顯的不連續(xù)分布。但是,歐拉方法也有一個明顯的缺點(diǎn),那就是它忽略了個體的特征。因此,當(dāng)許多群體由數(shù)量有限的大體積或個體成員組成時,不適合使用基于歐拉方法的連續(xù)統(tǒng)模型,這些群體強(qiáng)調(diào)個體智力的特征,例如魚群、鳥群的成群行為等。歐拉模

11、型對群體所在物理空間連續(xù)性的假設(shè),大多適用于較小的生物群體。在分析魚群、鳥群、野獸群等較大生物的群體時,由于個體的大小,群體所占據(jù)的物理空間也會比較大,這也使得歐拉方法假設(shè)群體所在的物理空間是現(xiàn)實(shí)中的一個連續(xù)統(tǒng)一體。因此,本題采用基于拉格朗日方法的Agent模型來模擬動物群體的運(yùn)動。5.1.2模型構(gòu)建原則為了建立數(shù)學(xué)模型更準(zhǔn)確地模擬動物的群體運(yùn)動,我們以天然魚為原型,建立了人工魚群。通過觀看視頻和咨詢學(xué)習(xí)相關(guān)書籍資料,我們對人工智能魚群的運(yùn)動提出以下原則:一般游泳原理一個。就近原則,即盡可能靠近相鄰魚的中心;灣。對齊原則,盡量與相鄰魚的運(yùn)動方向一致;C。避免碰撞原則,盡量避免與相鄰的魚發(fā)生碰撞

12、。并且由于每條魚的運(yùn)動方向是隨機(jī)的,這三個規(guī)則只對下一瞬間改變魚的游動方向起到一定的作用,不能立即改變魚的游動方向,而原來的速度魚仍然被表達(dá)。慣性效應(yīng)。因此,在自由游泳的情況下,agent下一時刻的運(yùn)動速度方向主要由慣性速度、對齊速度、向心速度、回避速度四個因素的綜合作用決定,如下圖所示:(2) 魚類覓食規(guī)則魚成群結(jié)隊(duì)比獨(dú)處時更快地找到食物。如果淺灘的一個成員找到食物,其他成員也可以捕食它。當(dāng)魚群成員之間的距離勉強(qiáng)保持在視線范圍內(nèi)時,搜索范圍最大,自然魚群覓食時遵循以下兩條規(guī)則:一個。離心式:代理個體到魚的外圍近距離尋找食物;灣。追尾:當(dāng)其他魚群聚集在食物的位置時,代理會追尾并捕捉食物。(3)

13、Agent避開靜態(tài)障礙物的原理當(dāng) Agent 感知到靜態(tài)障礙物時,靜態(tài)障礙物只有位置信息,沒有運(yùn)動信息。代理計算它需要以當(dāng)前速度轉(zhuǎn)動多少角度才能避開距離障礙物最近的點(diǎn)。經(jīng)過多次測試和驗(yàn)證,這個轉(zhuǎn)彎角度通常在agent單步運(yùn)動能力的范圍內(nèi),即能耗最小、避障距離最近的路線。5.1.3建筑模型(1) 自由游泳模型的建立根據(jù)以上原理,考慮到各個規(guī)則對魚的影響不同,我們還需要對各個方向向量進(jìn)行加權(quán),采用層次分析法,以游泳原理中涉及的速度向量作為四個指標(biāo)來計算影響的代理。某一時刻運(yùn)動方向的各個方向指標(biāo)的權(quán)重因子。自由行走模型算法:公式成立如下:在其中是agent在下一個周期的游泳方向,agent在當(dāng)前t的

14、游泳方向(慣性因子),接近魚群的個體agent的游泳方向(向心因子),游泳方向?qū)R魚群時(對齊因子),游泳方向以避免碰撞(回避因子)。表示相應(yīng)的權(quán)重。采用層次法分析,得到判斷矩陣:指數(shù)慣性系數(shù)向心因子對齊因子避碰系數(shù)慣性系數(shù)1424/3向心因子1/411/21/3對齊因子1/2212/3避碰系數(shù)3/433/21可以通過層次分析法求解:主觀因素 W1客觀因素 W2重量0.33330.66671慣性系數(shù)2-0.50.3333向心因子-0.16670.33330.1667對齊因子0.33330.50.2222避碰系數(shù)0.50.66670.2778因此, , , , 。 ,慣性因素對下一刻魚的速度影響

15、最大。(2) Ra環(huán)境模型的建立由于 Agent 在魚群中,附近的魚對它的影響更加復(fù)雜。為了進(jìn)一步量化指標(biāo),便于模擬群體運(yùn)動的實(shí)現(xiàn),將Agent的環(huán)境因子模型Ra模型簡化如下:Ra 模型將個人與個人的交互描述為 3 個角色。設(shè)Agent和 Agent之間的距離為:在當(dāng)時是一種排斥作用,即回避的體現(xiàn),防止它們發(fā)生碰撞和沖突;那時,有一種吸引力,一種向心的表現(xiàn),保證了魚群成為一個整體;當(dāng)時處于相對平衡穩(wěn)定的狀態(tài),進(jìn)行速度匹配,避免打破平衡距離或潛在沖突,即對齊的體現(xiàn),保證魚的運(yùn)動方向一致。使用Ra模型,我們可以定義三個游泳規(guī)則的方向向量如下:每個原則屬性引起的預(yù)期運(yùn)動趨勢作為相應(yīng)的影響因素。假設(shè)組

16、中有 N 個代理 (1, 2,.N, ),代理的位置向量為,運(yùn)動向量為 ,每一步的時間間隔為 。1. 向心對Agent造成的預(yù)期運(yùn)動趨勢為:2. 對齊引起的agent的預(yù)期運(yùn)動趨勢為:3. 避碰引起的Agent的預(yù)期運(yùn)動趨勢為:將上述影響因素代入式(1),計算出下一時刻Agent的運(yùn)動方向。在:,相關(guān)算法用計算機(jī)語言編寫,時間微量化可模擬一般自由游魚群的運(yùn)動。上面兩張2D圖:左圖是紅藍(lán)魚隨機(jī)分布,右圖是動物群體行為后的圖像,左圖是藍(lán)魚,右圖是藍(lán)魚。魚群是紅魚群,包括10條紅魚和10條藍(lán)魚。 (程序見附件)(3) 魚類繞過靜態(tài)障礙物模型的建立感知定義:基于感知問題的復(fù)雜性,在虛擬環(huán)境中進(jìn)行了簡化

17、,設(shè)置如下:一個。 Agent感知食物,對掠食者和障礙物的感知是Agent運(yùn)動的方向,半徑為或半球,Agent直接從數(shù)據(jù)庫中讀取位置和運(yùn)動數(shù)據(jù);灣。代理在魚群中相互感知,感知一個有半徑的球體,通過代理之間的通信傳遞位置和運(yùn)動信息?;诙S平面的迂回算法:Step1當(dāng)Agent感知到此時速度方向有障礙物時,會以當(dāng)前位置為原點(diǎn)P形成一簇光線。Step2記錄射線集中與障礙物邊界只有一個交點(diǎn)的射線的方向矢量為, ,與射線集的夾角分別為。Step3當(dāng)時,將其作為障礙繞行因子,反之亦然。Step4將繞行因子添加到約束中,并根據(jù)約束因子重新分配權(quán)重。根據(jù)經(jīng)驗(yàn)算法,迂回因子的權(quán)重與魚與障礙物的距離成反比。引入

18、函數(shù)的量化如下:Step 5 計算下一時刻的速度,按照時間步法不斷迭代執(zhí)行,直到運(yùn)動方向沒有障礙物,返回自由泳。算法流程圖如下:.基于三維空間的繞道算法:將空間障礙物垂直于面向Agent的水平方向進(jìn)行投影,然后代入二維平面程序進(jìn)行計算迭代。上圖是一群鳥避開靜態(tài)障礙物的截圖。5.2.建立數(shù)學(xué)模型來描述魚類避開黑鰭礁鯊的運(yùn)動行為5.2.1相關(guān)因素的介紹定義 1. 最大速度:設(shè)智能體移動的最大速度為,最小速度為,捕食者的最大速度為 ,兩者之比為: 。定義 2. 最大偏轉(zhuǎn)角為, , K 為常數(shù),v 為線速度。定義3. 人工魚的行為函數(shù)是用來衡量每一個行為的參數(shù)度量描述。比如疲勞、饑餓、恐懼,就屬于魚的

19、心理狀態(tài),用下面的公式來量化:在其中,下劃線部分代表人工魚的部分沖動部分,代表時間,是消耗的食物量,以物理顆粒的數(shù)量或捕食性魚類的數(shù)量來衡量,是消化率,是一個常數(shù);吃飯后的時間;是一個常數(shù),表示魚的食欲大?。ㄝ^大的魚有較大的值);反映外部刺激的影響,例如對附近食物的感知;包含一個常數(shù)作為性欲的函數(shù);是自上次交配以來的時間;計算對潛在交配的感知影響;是一個常數(shù);并分別代表發(fā)現(xiàn)的掠食者的恐懼和距離; ,是標(biāo)稱值。5.2.2人工魚群自組織模型的建立在前人模型的基礎(chǔ)上,進(jìn)一步介紹了智能體遇到捕食者時的群體運(yùn)動模擬算法?;谌斯~群自組織模型,建立相關(guān)天敵因素,然后根據(jù)約束因素賦予權(quán)重,代入迭代計算,實(shí)

20、現(xiàn)魚群逃生模擬。當(dāng)魚群遇到天敵逃逸時,群體逃逸行為是通過個體逃逸與過程的相互作用來表現(xiàn)的。當(dāng)某個代理發(fā)現(xiàn)捕食者時,它會向其他代理致消息。假設(shè)Agent收到危險信號,它會分析捕食者的位置、方向、心理和生理,并做出相應(yīng)的逃跑選擇。下面將這種轉(zhuǎn)義行為模擬為:設(shè)代理的質(zhì)量為;遇到危險的時刻是;速度是逃跑時的預(yù)期速度;遇到捕食者時需要旋轉(zhuǎn)的角度為;在agent逃跑過程中防止碰撞的斥力為 則agent的移動速度和位置在時間上的變化可以用下式表示:同時,人工魚在逃逸過程中避免碰撞的斥力定義為,其中,為常數(shù);是兩條魚之間的距離。是一個指向的法向量。遇到捕食者時需要旋轉(zhuǎn)的角度為(數(shù)值由Agent的移動速度和捕食

21、者的移動速度決定),如圖,其中虛線為調(diào)整后的速度。如果那么_否則,如果那時否則_公式中的“-”表示偏離了捕食者的運(yùn)動方向,即如果捕食者在智能體的左側(cè),則智能體向右轉(zhuǎn),反之亦然。Step 1. 當(dāng)Agent感知到周圍有捕食者,或收到其他魚類的危險信息時,迅速確定捕食者的位置及其移動速度和方向步驟2. 計算集體逃生的疲勞、饑餓、恐懼和排斥步驟 3 。確定規(guī)避偏轉(zhuǎn)角和逃逸速度,并將它們作為逃逸因子代入約束第四步:結(jié)合疲勞、饑餓、恐懼和排斥,確定約束因素的權(quán)重步驟 5 。計算下一時刻的速度,按照時間步法迭代執(zhí)行,直到魚整體檢測到?jīng)]有捕食者,返回自由游動。如上圖:綠色代表天敵,其他四種顏色代表小魚。當(dāng)小

22、魚感覺到捕食者的存在,或者從其他魚類那里收到危險信息時,它們會迅速確定捕食者的位置及其移動速度和方向,然后蜂擁而至逃離捕食者。5.3.群體信息豐富的人群對群體運(yùn)動方向的影響探索5.3.1覓食環(huán)境中的信息交互動物不像人那樣會說話,因?yàn)樯婧头毖艿男枰?,它們也能夠交流。動物通過某些信號喚起或影響其他個體行為的方式是動物之間的交流。它們有多種溝通方式,包括視覺溝通、聽覺溝通、接觸溝通、電溝通和化學(xué)溝通等。本題綜合了上述溝通方式的抽象信息交互方式。當(dāng)一個智能體在覓食環(huán)境中發(fā)現(xiàn)食物時,它會發(fā)出尋找食物等消息,其他沒有找到食物的智能體如果感知到這樣的消息,就會聚集到消息發(fā)出的地方。在這個問題中,我們以魚類

23、覓食為研究對象。5.3.2魚類覓食中的信息傳遞機(jī)制為了便于模型建立,將交互過程定義為代理之間的消息傳遞,我們將通信機(jī)制簡化如下:1、代理通信圈:一個以自身質(zhì)心為中心,以最大吸引距離為半徑的球體;2、通訊對象:位于通訊區(qū)域內(nèi)的所有Agent;3、溝通過程:a) 當(dāng)每一步結(jié)束位置的坐標(biāo)發(fā)生變化時,更新成員庫;b) 將位置和運(yùn)動信息傳遞給所有通信對象;c) 所有通信對象都向其傳輸其位置、傳輸信息。4、通過與通訊對象的通訊,實(shí)現(xiàn)群內(nèi)Agent的本地交互。5.3.3群體信息交互模型的建立為了了解信息豐富的人對魚群運(yùn)動的影響,在前面的模型的基礎(chǔ)上,我們主要研究魚群的覓食行為:動物通過與同伴互動來尋找食物的

24、過程Step1建立魚類中富含魚類的比例;Step2計算魚的饑餓度和疲勞度;Step 3 將信息因子引入到信息豐富的人群中,將離心因子和追尾因子結(jié)合天然魚類的覓食特性,即離心因子和追尾因子,擴(kuò)展各自的約束條件,重新定義分配相應(yīng)的權(quán)重,并迭代計算;Step 4 調(diào)整信息豐富的人的比例,重復(fù)上述過程;Step5研究結(jié)果,得出結(jié)論。6. 模型評估由于偏微分方程的理論比較發(fā)達(dá),歐拉法很容易對偏微分方程構(gòu)造的聚類模型進(jìn)行理論分析。聚類行為非常有效,密集且沒有明顯的不連續(xù)分布。但是,歐拉方法也有一個明顯的缺點(diǎn),那就是它忽略了個體的特征。因此,當(dāng)許多群體由數(shù)量有限的大體積或個體成員組成時,不適合使用基于歐拉方

25、法的連續(xù)統(tǒng)模型,這些群體強(qiáng)調(diào)個體智力的特征,例如魚群、鳥群的成群行為等。 .在解決問題1時,遵循以上兩個理論,首先考慮動物群和運(yùn)動的原理:一般游泳原理、魚類覓食原理和代理避障原理。在此原理的基礎(chǔ)上,建立了自由游泳模型。 ,RA模型,避障模型。在模型的建立中,考慮了各種因素對魚類下一時刻游動的影響,采用層次法分析了權(quán)重比。第二個問題,在前一個模型的基礎(chǔ)上,引入了智能體遇到捕食者時的群體運(yùn)動模擬算法。基于人工魚群自組織模型,建立相關(guān)天敵因素,然后根據(jù)約束因素分配權(quán)重,進(jìn)行迭代計算,實(shí)現(xiàn)魚群逃逸模擬。這在很大程度上取決于人們的經(jīng)驗(yàn),主觀因素的影響非常大。它最多只能排除思維過程中的嚴(yán)重不一致,但不能排

26、除可能的片面性。比較判斷過程比較粗糙,不能用于精度要求較高的決策問題。第三個問題也是先分析動物信息傳遞的方式,建立與信息傳遞機(jī)制的群體信息交互模型,展開各自的約束并重新分配相應(yīng)的權(quán)重,迭代計算,得出結(jié)論。7. 參考文獻(xiàn)1胡曉東,董晨輝,MATLAB從入門到精通,人民郵電,2010.6;2 馬麗,MATLAB數(shù)學(xué)實(shí)驗(yàn)與建模,清華大學(xué),2010.1;3 姜道平,一欣,班曉娟,孟祥松,“基于群體狀態(tài)的Agent行為選擇”,科技大學(xué)信息工程學(xué)院;4 石明,群體行為建模與控制方法綜述,華東交通大學(xué)電氣與電子工程學(xué)院;5 于建平,周新民,明,“群體智能典型算法研究綜述”,師范大學(xué)數(shù)學(xué)與計算機(jī)學(xué)院;6 簡,

27、曾建超, 魚群行為建模與仿真,科技大學(xué)系統(tǒng)仿真與計算機(jī)應(yīng)用研究所;7 簡,“魚群行為建模與仿真碩士論文”,科技大學(xué)。8. 附錄8.1 層次分析法程序a= 1 1/22 1 ;x,y=eig(a);特征值=診斷(y);lamda=特征值(1);cil=(lamda- 2 )/1;crl=cil/ 0 ;w1=x(:,1)/sum(x(:,1); b 1 =1,4,2,4/3;1/4,1,1/2,1/3;1/2,2,1,2/3;3/4,3,3/ 2,1; x , y = eig ( b1 ) ;特征值 = diag ( y ) ;lamda = 特征值 (1) ;ci21=(query-4)/3;

28、cr21=ci21/0.9;w21=x(:,1)/sum(x(:,1); b 2 =1,1/2,1/3,1/4;2,1,2/3,1/2;3,3/2,1,3/4;4,2,4/ 3,1; x , y = eig ( b2 ) ;eigenvalue = diag ( y ) ;lamda = eigenvalue ( 1 ) ;ci22=(query-4)/3;cr22=ci21/0.9; w22=x(:,1)/sum(x(:,1); w_sum=w21,w22*w1; ci=ci21,ci22; cr=ci*w1/sum(0.9*w1);8.2用MATLAB編寫的二維魚群聚模型8.2.1主函數(shù)c

29、lcclear allclose allboids_params.pop_size = 10;Boids_params.num_rounds = 500;Boids_params.dist_param = 100;Boids_params.velocity_limit = 200;Boids_params.rand_speed_param = 50;Boids_params.bound_square_size = 700;boids_params.bound_speed_param =40;boids_params.bang_params.cycle = 80;boids_params.ban

30、g_params.duration = 0;boids_params.bang_params.power = 20;Boids_pop_blue = Boids_init(Boids_params.pop_size);Boids_pop_red = Boids_init(Boids_params.pop_size);mov = avifile( Boids_3.2_Hunter_Hunted.avi )抽動對于iRound=1:Boids_params.num_roundsBoids_params.current_round = iRound;Boids_pop = Boids_pop_blu

31、e; boids_pop_red;F = Boids_draw(Boids_pop, Boids_params);mov = addframe(mov,F);blue_center = Boids_get_center(Boids_pop_blue);red_center = Boids_get_center(Boids_pop_red);new_Boids_pop_blue = Boids_move_all_to_new_pos(Boids_pop_blue, red_center, 1, Boids_params);new_Boids_pop_red = Boids_move_all_to

32、_new_pos(Boids_pop_red, blue_center, 2, Boids_params);Boids_pop_blue = new_Boids_pop_blue;Boids_pop_red = new_Boids_pop_red;iRound結(jié)尾目錄移動 = 關(guān)閉(移動);8.2避避函數(shù)v4 = Boids_avoid_shark(Boid,shark_pos,Boids_params)%簡單的鯊魚逃生%if (norm(Boid.pos - Shark_pos) 0.5*Boids_params.bound_square_size)v4 = 0 0;別的v4 = (Boid

33、.pos - Shark_pos)*(1*0.5*Boids_params.bound_square_size)/ .(5*Boids_params.bound_square_size - norm(Boid.pos - Shark_pos);結(jié)尾%高級鯊魚逃生%Boid_shark_vec = Shark_pos - Boid.pos;scalar_prod = Boid_shark_vec(1)*Boid.v(1) + Boid_shark_vec(2)*Boid.v(2);如果(scalar_prod 0)v4 = 0 0;結(jié)尾8.2.3子函數(shù)繪圖功能函數(shù)F = Boids_draw(B

34、oids_pop,Boids_params)X = ;Y = ;SQUARE_SIZE = Boids_params.bound_square_size*2;Boids_center_mass = 0 0;對于iBoid = 1:Boids_params.pop_sizeBoids_center_mass = Boids_center_mass + Boids_pop(iBoid).pos;結(jié)尾Boids_center_mass = Boids_center_mass/Boids_params.pop_size;情節(jié)(Boids_center_mass(1),Boids_center_mass

35、(2),“或”); 堅(jiān)持,稍等;if (rem(Boids_params.current_round, Boids_params.bang_params.cycle) Boids_params.bang_params.duration)情節(jié)(Boids_center_mass(1),Boids_center_mass(2), “或” );堅(jiān)持; _結(jié)尾% Shark_pos.x = 1.0*Boids_params.bound_square_size*cos(2*Boids_params.current_round*pi/180);% Shark_pos.y = 0.4*Boids_param

36、s.bound_square_size*sin(5*Boids_params.current_round*pi/180);情節(jié)(shark_pos.x,shark_pos.y,og); 堅(jiān)持,稍等;對于iBoid = 1:size(Boids_pop,1)%X = X; boids_pop(iBoid).pos(1);%Y = Y; boids_pop(iBoid).pos(2);p0 = Boids_pop(iBoid).pos - Boids_pop(iBoid).v;p1 = Boids_pop(iBoid).pos;if (iBoid Boids_params.bound_square

37、_size*0.9 & Boid.v(1) 0Boid.v(1) = Boid.v(1) - Boids_params.bound_speed_param;結(jié)尾如果Boid.pos(1) -Boids_params.bound_square_size*0.9 & Boid.v(1) Boids_params.bound_square_size*0.9 & Boid.v(2) 0Boid.v(2) = Boid.v(2) - Boids_params.bound_speed_param;結(jié)尾如果Boid.pos(2) -Boids_params.bound_square_size*0.9 & B

38、oid.v(2) Boids_params.velocity_limitBoid.v = Boid.v*0.5*Boids_params.velocity_limit / norm(Boid.v);結(jié)尾new_Boid = Boid;位置實(shí)時更新功能function new_Boids_pop = Boids_move_all_to_new_pos(Boids_pop, Hazard, Hunter_Hunted, Boids_params);Boids_pop_size = size(Boids_pop,1);砰 = 0;if (rem(Boids_params.current_round,

39、 Boids_params.bang_params.cycle) Boids_params.bang_params.duration)砰 = 1;結(jié)尾new_Boids_pop = ;% Shark_pos(1) = 0.8*Boids_params.bound_square_size*cos(2*Boids_params.current_round*pi/180);% Shark_pos(2) = 0.8*Boids_params.bound_square_size*sin(2*Boids_params.current_round*pi/180);對于iBoid = 1:Boids_pop_

40、sizeBoid = Boids_pop(iBoid);v1 = Boids_rule1(Boids_pop, Boids_pop(iBoid),Boids_params, 砰);v2 = Boids_rule2(Boids_pop, Boids_pop(iBoid), Boids_params.dist_param);v3 = Boids_rule3(Boids_pop, Boids_pop(iBoid);v4 = Boids_avoid_shark(Boid, Hazard, Boids_params);如果(Hunter_Hunted = 2)v4 = -0.05*v4;別的v4 = 1

41、.5*v4;結(jié)尾Boid = Boids_limit_velocity(Boid, Boids_params);Boid = Boids_limit_position(Boid, Boids_params);Boid.v = Boid.v + v1 + v2 + v3 + v4;Boid.pos = Boid.pos + Boid.v ;new_Boids_pop= new_Boids_pop ;博德;結(jié)尾8.3可視化c+編寫的三維聚模型#include #include #include CFlock.h#include CBoid.h#include CBox.h#include “向量.

42、h”/ 靜態(tài)變量初始化/ 可見的朋友列表(每個flock boid重復(fù)使用的工作空間)CBoid * CBoid:VisibleFriendsList = NULL;/ 構(gòu)造函數(shù)和析構(gòu)函數(shù)/ 構(gòu)造函數(shù) #1。/ 創(chuàng)建一個具有隨機(jī)位置和速度的個體。CBoid:CBoid(短 id_v)#ifdef BOID_DEBUGmyprintf(nCBoid 構(gòu)造函數(shù) #1 為 boid %d 調(diào)用。n,id_v);萬一m_id = id_v;m_perception_range = Default_Perception_Range;/ 生成隨機(jī)位置各代產(chǎn)生的隨機(jī)位置m_pos.x = RAND() *

43、CBox:WorldPtr-GetBoxWidth()/3;m_pos.y = RAND() * CBox:WorldPtr-GetBoxHeight()/3;m_pos.z = RAND() * CBox:WorldPtr-GetBoxLength()/3;/翻轉(zhuǎn)位置以獲得更大的隨機(jī)性產(chǎn)生隨機(jī)速度如果 ( RAND() 0.5f) m_pos.x *= -1;如果 ( RAND() 0.5f) m_pos.y *= -1;如果 ( RAND() 0.5f) m_pos.z *= -1;/ 生成隨機(jī)速度m_vel.x = RAND();m_vel.z = RAND();/ 翻轉(zhuǎn)速度以獲得更大的

44、隨機(jī)性如果 ( RAND() 0.5f) m_vel.x *= -1;如果 ( RAND() 0.5f) m_vel.z *= -1;速度更新/ 根據(jù)速度計算速度m_speed = m_vel.length();/ 歸零方向初始方向m_ang.x = m_ang.y = m_ang.z = 0;/ 其他值m_num_flockmates_seen = 0;m_nearest_flockmate = NULL;m_dist_to_nearest_flockmate = 無窮大;m_num_enemies_seen = 0;m_nearest_enemy = NULL;m_dist_to_near

45、est_enemy = 無窮大;m_next = m_prev = NULL;產(chǎn)生一個特殊位置和速度#ifdef BOID_DEBUG打印數(shù)據(jù)();萬一/ 構(gòu)造函數(shù) #2。/ 創(chuàng)建一個具有特定位置和速度的個體。CBoid:CBoid (短 id_v,向量 * pos_v,向量 * vel_v,向量 * ang_v)#ifdef BOID_DEBUGmyprintf(nCBoid 構(gòu)造函數(shù) #2 調(diào)用了 boid %d.n,id_v);萬一m_id = id_v;m_perception_range = Default_Perception_Range;m_pos = pos_v;m_vel =

46、 vel_v;m_ang = ang_v;m_speed = vel_v-length();m_num_flockmates_seen = 0;m_nearest_flockmate = NULL;m_dist_to_nearest_flockmate = 無窮大;m_num_enemies_seen = 0;m_nearest_enemy = NULL;m_dist_to_nearest_enemy = 無窮大;m_next = m_prev = NULL;#ifdef BOID_DEBUG打印數(shù)據(jù)();萬一/ 析構(gòu)函數(shù)。/ 銷毀指定的 boid。CBoid:CBoid (void)#ifd

47、ef BOID_DEBUGmyprintf(nCBoid 析構(gòu)函數(shù)調(diào)用了 boid %xn,this);萬一/公共植絨方法/公共聚集方式/ FlockIt。/ 用于逐幀更新;頭寸沒有時間增量。void CBoid:FlockIt (int flock_id, CBoid *first_boid)向量acc;#ifdef BOID_DEBUG實(shí)時更新位置myprintf(n=n更新為 %dn, m_id);myprintf(前位置 = %f %f %fn,m_pos.x,m_pos.y,m_pos.z);萬一/ 第 1 步:更新我們的位置。1.根據(jù)速度更新位置/ 根據(jù)速度更新我們的位置/ 我們上

48、次計算的向量。m_oldpos = m_pos; / 保存我們之前的位置m_pos += m_vel; / 應(yīng)用速度。/ 第 2 步:見朋友。2.看到同類聚集/ 確定我們是否可以看到我們的任何 flockmate。見朋友(first_boid);/ 第 3 步:植絨行為。3.群體行為/ 我們看到我們的任何羊群伙伴了嗎?如果是,是時候?qū)嵤┝? 前三個規(guī)則(如果我們看不到任何人,它們無關(guān)緊要)如果(m_num_flockmates_seen)4.同類間保持間距/ 第 4 步:實(shí)施規(guī)則 #1(分離)。/ 嘗試與我們最近的羊群保持我們想要的距離。AccumulateChanges (acc, Keep

49、Distance();/ 第 5 步:實(shí)施規(guī)則 #2(對齊)。5.保持一定隊(duì)形/ 嘗試像我們最近的羊群一樣移動。AccumulateChanges (acc, MatchHeading();/ 第 6 步:實(shí)施規(guī)則 #3(內(nèi)聚)。6向中心凝聚/ 嘗試向羊群的中心移動。AccumulateChanges (acc, SteerToCenter();/ 第 6 步:第四條規(guī)則(敵人)7.遇到捕食者/ 如果我們應(yīng)該對敵人的羊群做出反應(yīng),確定/ 如果有的話,盡可能避免它們。如果(反應(yīng)敵人)SeeEnemies (flock_id);AccumulateChanges (acc, FleeEnemies

50、();8.保持原速巡航/ 第 7 步:巡航。/ Flockmates or not,敵人與否,弄清楚/ 如果一切由我們決定,我們會移動多快。AccumulateChanges (acc, Cruise();/ 第 8 步:約束加速度/ 如果我們的加速度變化大于我們允許的,約束它9.限制加速度if (acc.length() MaxChange) #ifdef BOID_DEBUGmyprintf(警告:約束 boid %x!n,this);萬一/ 絕對太多.限制到最大變化acc.SetMagnitudeOfVector (MaxChange);10.執(zhí)行新速度/ 第 9 步:實(shí)施。/ 這里是我

51、們應(yīng)用我們新計算的加速度向量的地方/ 創(chuàng)建一個新的速度向量以使用下一個更新周期。m_oldvel = m_vel; / 保存我們之前的速度/ 現(xiàn)在添加加速度m_vel += acc;11.約束Y軸速度/ 第 10 步:約束 Y 速度變化。/ 嘗試通過衰減 Y 軸速度來限制直線向上/向下飛行。/ 這不是絕對必要的,但確實(shí)會導(dǎo)致看起來更逼真的飛行。m_vel.y *= MaxUrgency;12.限制加速度/ 第 11 步:限制我們的速度。/ 如果我們的移動速度超過了我們允許的移動速度,請限制我們的速度。如果 (m_speed = m_vel.length() MaxSpeed) / 絕對太快了.

52、限制到最大速度#ifdef BOID_DEBUGmyprintf(警告: 約束 boid %x!n,this);myprintf(當(dāng)前速度 = %f 新速度 = %fn,m_speed, MaxSpeed);萬一m_vel.SetMagnitudeOfVector (MaxSpeed);m_speed = 最大速度;12.魚群翻滾、傾斜等動作/ 第 12 步:計算橫滾/俯仰/偏航。/ 在所有這些速度調(diào)整廢話之后計算我們的方向。計算機(jī)RPY();/ 第 13 步:世界邊界。13.邊界限制/ 如果我們在世界范圍之外徘徊,把我們放回去。你可能/ 不需要為你的世界這樣做,但這取決于你的實(shí)現(xiàn)。世界綁定(

53、);#ifdef BOID_DEBUGmyprintf(最終位置 = %f %f %fn,m_pos.x, m_pos.y, m_pos.z);myprintf(最終速度 = %f %f %fn,m_vel.x, m_vel.y, m_vel.z);myprintf(最終加速度 = %f %f %fn,acc.x, acc.y, acc.z);萬一/ 私有集群方法/個體如何反應(yīng)/ 巡航。/ 生成一個向量,指示一個群體 boid 將如何/喜歡移動,如果這完全取決于他并且他在下面/ 沒有其他任何類型的影響。矢量 CBoid:Cruising (void)矢量變化 = m_vel;浮動差異=(m_s

54、peed - DesiredSpeed)/ MaxSpeed;浮動緊迫性=(浮動)晶圓廠(差異);#ifdef BOID_DEBUGmyprintf(n內(nèi)部巡航n);myprintf( diff = %f 緊急度 = %fn,diff, 緊急度);myprintf( m_speed = %f 所需速度 = %fn,m_speed, DesiredSpeed);myprintf( 巡航初始變化向量 = %f %f %fn,change.x, change.y, change.z);如果(差異 0)myprintf(減速以滿足巡航速度.n); 別的 myprintf(加速滿足巡航速度.n);萬一/

55、 限制緊急程度if (urgency MaxUrgency)緊急= MaxUrgency;/ 現(xiàn)在添加一些“抖動”,以便每個 boid 都有一個/ 一點(diǎn)隨機(jī)性只是為了讓事情變得有趣。/ 如果我們碰巧開始,這也會讓我們動起來/ 事情完全靜止(這有點(diǎn)無聊)。浮動抖動 = RAND();如果(抖動0.45f)change.x += MinUrgency * SIGN(diff); else if (jitter 0 ? -1 : 1) );更新速度達(dá)到期望值#ifdef BOID_DEBUGmyprintf( 巡航的最終變化向量 = %f %f %fn,change.x, change.y, cha

56、nge.z);萬一返回(更改);遇到天敵逃脫/ 逃離敵人。/ 為一群群生成一個向量以避免/ 它看到的最近的敵人(不同羊群的群體)。矢量 CBoid:FleeEnemies (void)向量變化;#ifdef BOID_DEBUGmyprintf(nInside FleeEnemiesn);萬一/ 測試:我們離最近的敵人太近了嗎?如果(m_dist_to_nearest_enemy m_pos;/ 返回變化向量返回(更改);#ifdef BOID_DEBUGmyprintf( 巡航的最終變化向量 = %f %f %fn,change.x, change.y, change.z);萬一/ 保持距離

57、。/ 為一群群生成一個向量來維持他的/ 與他看到的最近的羊群同伴的期望間隔距離。防止與看到的同類相撞向量 CBoid:KeepDistance (void)浮動比率 = m_dist_to_nearest_flockmate/SeparationDist;/ 計算朝向我們最近的伙伴的向量矢量變化 = m_nearest_flockmate-m_pos - m_pos;#ifdef BOID_DEBUGmyprintf(nInside KeepDistancen);萬一/ 將計算的比率限制為我們的最小/最大緊急級別if (ratio MaxUrgency)比率= MaxUrgency;/ 測試:

58、我們離最近的羊群太近了嗎?#ifdef BOID_DEBUGmyprintf(dist_to_nearest_flockmate = %f Sep = %f ratio = %fn,m_dist_to_nearest_flockmate,SeparationDist,ratio);萬一如果(m_dist_to_nearest_flockmate SeparationDist) #ifdef BOID_DEBUGmyprintf(太遠(yuǎn)了!n);萬一/ 太遠(yuǎn)了.向我們的鄰居移動change.SetMagnitudeOfVector (ratio); 別的 #ifdef BOID_DEBUGmypr

59、intf(剛剛好!n);萬一/ 在 UNLIKELY 事件中,我們距離正確,什么也不做change.SetMagnitudeOfVector (0.0);/ 返回變化向量#ifdef BOID_DEBUGmyprintf( KeepDistance 的最終變化向量 = %f %f %fn,change.x, change.y, change.z);萬一返回(更改);與最近的同類保持一致/ 匹配標(biāo)題。/ 為一群要嘗試的群體生成一個向量/匹配最近的flockmate的標(biāo)題。向量 CBoid:MatchHeading (void)/ 復(fù)制我們最近的伙伴的標(biāo)題矢量變化 = m_nearest_floc

60、kmate-m_vel;#ifdef BOID_DEBUGmyprintf(nInside MatchHeadingn);萬一/ 歸一化然后縮放我們的向量變化一點(diǎn).之后/ 我們不能立即捕捉到一個新的標(biāo)題,可以嗎?change.SetMagnitudeOfVector (MinUrgency);/ 返回變化向量#ifdef BOID_DEBUGmyprintf( MatchHeading 的最終變化向量 = %f %f %fn,change.x, change.y, change.z);萬一返回(更改);遇到天敵/ 見敵人。/確定給定的flock boid可以看到的敵人flock boid。in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論