?

人工生命轉向行為綜合性實驗設計與實現

2018-12-05 02:46吳登權孫良旭李林林劉夢迪
實驗技術與管理 2018年11期
關鍵詞:鄰域綜合性編程

吳登權, 孫良旭, 李林林, 劉夢迪, 袁 杭

(遼寧科技大學 軟件學院, 遼寧 鞍山 114051)

人工智能 (artificial intelligence)的概念 是1956年在Dartmouth學會上提出的。人工智能是研究、開發用于模擬、延伸和擴展人的智能的理論、方法、技術及應用系統的技術科學[1]。目前“人工智能+新工科”已經成為國內高校工科教育的研究熱點[2-3]。人工生命(artificial life) 的概念是由Christopher Langton在1987年“生成以及模擬生命系統的國際會議”上提出的。人工生命是自然生命的模擬、延伸或擴展,是具有類似自然生命內在性能或外部行為的人造系統,可以通過計算機相關技術實現多種形式的人工生命[4-7]。

人工智能輔助教學系統是現代科研的重要成果,是新技術的體現。將人工智能技術應用到教育教學上,有利于促進學生和教師的發展,促進教育領域方面的改革[8-9]。目前多數院校的計算機編程課程教學還存在著許多問題, 無法滿足學生的發展需求[10-11]。雖然在現有的計算機編程類綜合性實驗中能夠體現問題導向、任務驅動等好的實驗教學方法,但是問題或者任務本身多是數值計算或者信息管理問題,沒有新穎性和娛樂性,可視化效果不好,而且算法難度較低,業務邏輯簡單,技術實現容易,不能滿足學生在綜合性實驗中的問題、技術、難度和工作量等方面的要求。 本文選擇人工智能與游戲開發交叉的研究領域中新穎有趣的人工生命角色轉向行為作為研究問題,設計了人工生命角色轉向行為綜合性實驗,實現了典型的8種轉向行為,具體描述了轉向行為理論基礎、類庫設計和轉向行為實現,為解決計算機編程類課程綜合性實驗設計問題提供一個新穎有趣的解決方案。

1 轉向行為

轉向行為(steering behaviors)的概念是由Craig Reynolds在1999年游戲開發者大會上提出的[12]。在AI角色的環境周圍,轉向行為施加簡單的力,通過力的組合使AI角色進行類生命體般的運動,幫助AI角色以現實中的行為方式運動。轉向行為不使用路徑規劃或者全局計算相關的復雜策略,只使用局部信息,例如鄰居施加的力信息。這使個體的轉向行為更容易理解和實現,個體的組合能夠產生非常復雜的運動模式。

1.1 自主角色及行為

在動畫和游戲中,自主角色在其周圍的環境中需要按照類生命體的行為進行運動。轉向行為提供了解決方案,這些轉向行為很大程度上獨立于角色運動方式的細節,轉向行為組合可以實現更高層次的目標,例如從源點到目標點間的避障處理、路徑跟隨和排隊等。

自主角色是一種自治代理,用于計算機動畫和交互媒體,例如游戲和虛擬現實。這些代理代表故事或游戲中的一個角色,具有即興行為的能力,與動畫電影中的角色不同,動畫電影角色的行為都是事先通過腳本定義好的,也與游戲和虛擬現實中的“化身”不同,那些行為是人類玩家或者參與者實時引導的。在游戲中,自主角色有時被稱作非玩家角色。一個自主角色必須結合自主機器人的一些功能和劇場中即興人類表演者的一些技巧。這些角色通常并不是真正的機器人,也不是人類演員,而是共享了各自的一些屬性。

術語“行為”具有很多含義。它可以表示基于意識或本能的人類或者其他生物的復雜行為,也可以表示一個簡單機械系統很大程度上的預測行為,或者表示一個混沌系統的復雜行為。在虛擬現實和多媒體應用中,“行為”有時用來作為動畫的同義詞,在本文中,術語“行為”用來表示自主角色類生命體的行為。

1.2 轉向行為定義

轉向行為是一種移動自主角色的方式,使它看起來像具有智慧一樣。幾乎每一個游戲都使用轉向行為產生類似人類的行為。但是,實際上它沒有任何智能,僅僅是一種錯覺,全部都是通過數學計算實現的。

典型的轉向行為包括尋找(Seek)、逃離(Flee)、到達(Arrive)、漫游(Wander)、路徑跟隨(Path Following)、聚集(Cohesion)、對齊(Alignment)、分離(Separation),上述行為的說明如表1所示。

表1 轉向行為定義

2 實驗設計

2.1 向量定義

轉向行為所涉及到的力影響角色的速度和位置,使用向量表示角色的速度和位置。如圖1所示,一個角色的位置向量position (x,y)、速度向量velocity (a,b),角色更新后的位置向量計算偽代碼為:position=position+velocity。

圖1 位置和速度向量

位置向量用于表示角色的位置,其方向一般被忽略,角色的方向通過速度向量表示。速度向量的方向控制角色的朝向,而大小控制角色每幀移動的多少,越大角色移動越快。速度向量通過截斷處理可以保證其不會大于某個閾值,閾值一般為最大速度。

2.2 類設計

實驗中的核心類定義包括Vector2類、SteeringBehaviours類、SBC類和Vehicle類。各類的主要字段、屬性和方法如圖2所示。

Vector2類定義了2維向量,實現向量計算功能,包括向量長度、歸一化和截斷,向量之間的和、差、點積,向量與數值之間的加、乘和除。

SteeringBehaviours類定義了轉向行為方法,包括Seek、Flee、Arrive、Wander、Path Following、Cohesion、Alignment和Separation,方法返回完成上述轉向行為施加到角色上的轉向向量。

SBC(steer behavior controller)類定義了轉向行為控制器,管理所有角色的功能,包括輸出信息、初始化、轉向行為設置和運動更新。

圖2 核心類的類圖

Vehicle類定義了小車角色,包括位置、運動限制和轉向行為信息,以及參數設置、位置更新功能。

3 實驗實現

3.1 實現技術

由于轉向行為的實現獨立于編程技術,所以本文以.NET編程技術為例說明實驗實現過程,其他編程技術類似。

在Visual Studio 2017開發環境中創建WinForm項目,使用C#編程,利用.NET框架的Timer和Graphics類,周期性在窗體上繪制圖形,實現角色施加轉向行為后連續動態變化的界面效果。

3.2 轉向行為實現

3.2.1 Seek行為實現

Seek轉向行為如圖3所示,為了使角色獲得期望的速度向量(desired velocity),對角色(方塊)施加轉向向量(steering),改變當前速度向量(current velocity)方向,指向目標(target)。

轉向向量計算偽代碼為:

desired_velocity=normalize(target-position)*max_velocity

steering =desired_velocity-current_velocity

首先計算目標和角色的位置向量差,進行歸一化,乘以最大速度,計算期望速度向量,然后計算期望速度和當前速度向量差,獲得轉向向量。

3.2.2 Flee行為實現

Flee轉向行為如圖4所示,為了使角色獲得期望的速度向量,對角色施加轉向向量,改變當前速度向量方向,從目標指向角色。

圖4 Flee轉向行為計算

轉向向量計算偽代碼為:

desired_velocity = normalize(position-target) * max_velocity

steering =desired_velocity - current_velocity

Flee與Seek的desired_velocity向量正好相反,其他計算過程一致。

3.2.3 Arrive行為實現

Arrive轉向行為如圖5所示,當角色遠離目標時采取Seek行為,而當角色進入以目標為中心的減速區域(slowing area)時,角色逐漸減速,直到停到目標位置上。

圖5 Arrive轉向行為計算

轉向向量計算基于減速區域半徑和角色與目標距離,轉向向量計算偽代碼為:

desired_velocity = target - position

distance = length(desired_velocity)

if (distance

desired_velocity = normalize(desired_velocity) * max_velocity * (distance / slowingRadius)

}

else {

desired_velocity = normalize(desired_velocity) * max_velocity

}

steering =desired_velocity - current_velocity

3.2.4 Wander行為實現

Wander轉向行為如圖6所示,在角色速度向量方向上選擇一個點定義一個圓,在圓周上隨機選擇一個位移點,生成位移向量displacement,執行Seek,位移點的位置可以讓角色隨機向左右不同強度進行轉向。

圖6 Wander轉向行為計算

位移向量的計算基于隨機的位移角度和圓半徑Radius。圓心位置向量計算基于速度向量方向和角色與圓心距離Distance,轉向向量計算偽代碼為:

Angel=(Math.Random-0.5)*MaxAngel

displacement=vector(Radius*Math.Cos(Angel), Radius*Math.Sin(Angel))

circleCenter = velocity.clone()

circleCenter.normalize()

circleCenter.scaleBy(Distance)

steering=circlecentre+displacement

3.2.5 Path Following行為實現

Path Following轉向行為如圖7所示,路徑定義為多個點連接的曲線,依次選擇路徑上的每個點作為目標,執行Seek,直至到達路徑上的最后一個目標點。

圖7 Path Following轉向行為計算

轉向向量計算偽代碼為:

foreach(target in path){

steering= Seek(position , target)

velocity=velocity+steering

position=position+ velocity

}

3.2.6 Cohesion行為實現

Cohesion轉向行為如圖8所示,找到角色鄰域內的其他角色群體,計算群體的平均中心,作為目標點,執行Seek。

圖8 Cohesion轉向行為計算

轉向向量計算偽代碼為:

centre=vector(0,0)

count=0

foreach(othercharacter in localarea){

centre=centre+ othercharacter.position;

count=count+1

}

centre.scaleBy(1/count)

steering=Seek(position , centre)

3.2.7 Alignment行為實現

Alignment轉向行為如圖9所示,找到角色鄰域內的角色群體,計算群體平均速度,則轉向向量為群體平均速度與角色當前速度的向量差。

圖9 Alignment轉向行為計算

轉向向量計算偽代碼為:

desired_velocity =vector(0,0)

foreach(othercharacter in localarea){

desired_velocity = desired_velocity + othercharacter.current_velocity

}

steering= desired_velocity-current_ velocity

3.2.8 Separation行為實現

Separation轉向行為如圖10所示,當前角色首先找到鄰域內的其他角色,對于每一個鄰居角色,計算其對當前角色的排斥力。計算方法為當前角色與鄰域角色位置向量差,進行歸一化處理,獲得位置偏移向量,乘以權重1/r2,參數r可根據分離需求,例如相鄰距離,進行計算或設置,每一個鄰居角色的排斥力求和,最終獲得轉向向量。

圖10 Separation轉向行為計算

轉向向量計算偽代碼為:

steering=vector(0,0)

foreach(othercharacter in localarea){

repulsion=position - othercharacter.position

repulsion.normalize()

repulsion.scaleBy(1/r2)

steering = steering + repulsion

}

3.3 實現效果

通過設置角色數量、轉向行為和初始位置,人工生命轉向行為綜合性實驗的Seek、Flee、Arrivement、Wander、Path Following、Cohesion、Alignment、Seperation行為實現效果如圖11(a)—(h)所示。

圖11 轉向行為實現效果

圖11(a)中,角色逐漸向白色目標點靠近;圖11(b)中,角色一旦進入白色目標點鄰域,逐漸遠離目標點;圖11(c)中,角色逐漸向白色目標點減速靠近;圖11(d)中,角色根據圓上隨機點擾動進行隨機轉向;圖11(e)中,角色依次向指定路徑上的目標點靠近;圖11(f)中,角色向鄰域內的角色群體中心聚集;圖11(g)中,角色與鄰域內的其他角色運動方向對齊;圖11(h)中,角色與鄰域內的其他角色保持一定距離。通過對目前所實現的轉向行為的合理組合,可以實現更復雜、更高層次的角色行為。

4 結語

本文針對計算機編程類課程缺乏新穎有趣的綜合性實驗問題,選擇游戲中具有一定智能的人工生命作為研究對象,以實現游戲角色轉向行為為例,詳細描述了該綜合性實驗的算法基礎、實驗設計和編程實現過程。通過該綜合性實驗,可以完成對學生語言基礎語法、面向對象設計、數據結構、算法和用戶界面等知識點的訓練,具有一定的技術難度,又具有較強的趣味性,同時讓學生了解所學的數學知識在計算機編程中的實際應用,為解決目前計算機編程類課程綜合性實驗中存在的問題提供了一個新穎的解決方案。

猜你喜歡
鄰域綜合性編程
編程,是一種態度
元征X-431實測:奔馳發動機編程
編程小能手
稀疏圖平方圖的染色數上界
紡織機上誕生的編程
基于鄰域競賽的多目標優化算法
定制鋪絲新工藝降低成本提高綜合性能
關于-型鄰域空間
模糊PID在離合器綜合性能實驗臺中的應用
教師在綜合性學習中的作用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合