【例項簡介】
仿生原理
天牛須搜尋是受到天牛覓食原理啟發而開發的演算法
天牛須搜尋的生物原理:
當天牛覓食時,天牛並不知道實物在**,而是根據
食物氣味的強弱來覓食。天牛有兩隻長觸角,如果
左邊觸角收到的氣味強度比右邊大,那下一步天牛
就往左飛,否則就往右飛。依據這一簡單原理天牛
就可以有效找到食物。
天牛須搜尋對我們的啟發:
食物的氣味就相當於乙個函式,這個函式在三維空間
每個點值都不同,天牛兩個須可以採集自身附近兩點
的氣味值,天牛的目的是找到仝局氣味值最大的點
仿照天牛的行為,我們就可以高效的進行函式尋優
仿生原理
天牛尋找食物**
真的再吃,會胖
右須訊號強,右運動
右須訊號強,右運動
左須訊號強左運動
右須訊號強,右運動
左須訊號強,左運動
出發吧,沿著
香味的方向,
去尋找披薩
演算法·天牛在三維空間運動,而天牛須搜尋需要對任意維
函式都有效才可以。因而,天牛須搜尋是對天牛生
物行為在任意維空間的推廣
●我們採用如下的簡化模型假設描述天牛:
1.天牛左右兩須位於質心兩邊
2天牛步長step與兩須之間距離d0的比是個固定常數即
step=c*d0其中c是常數。即,大天牛(兩須距離長)走大步
小天牛走小步。
天牛質心
3.天牛飛到下一步後,頭的朝向是隨機的
天牛左須
天牛右須
簡化模型
兩須之間的距離d0
建模(n維空間函式f最小化)
°第一步:對於乙個n維空間的優化問題,我們用xl表
示左須座標,xr表示右須座標,x表示質心座標,用
d0表示兩須之間距離。根據假設3,天牛頭朝向任意
因而從天牛右須指向左須的向量的朝向也是任意的
所以可以產生乙個隨機向量dir= rands(m,1)來表示它
對此歸一化:dir=dir/norm(dir);我們這樣可以得到
xl-xr=d0dir;顯然,xl,x還可以表示成質心的表
達式:xl=x+d0*dir/2;xr=x-d0*dir/2
天牛質心
天牛左須
天牛右須
簡化模型
兩須之間的距離d0
建模●第二步:對於待優化函式f,求取左右兩須的值:
eft-f(x); fright=f(xr);判斷兩個值大小,
口如果為了探尋的最小值,則天牛向著左須
方向行進距離
口如果為了探尋的最小值,則天牛向著右須
方向行進距離
口如上兩種情況可以採用符號函式統一寫成:
(注:其中
是歸一化函式)
建模基本步驟就這兩步。總結下:
odir= rands(n,1);dir=dir/norm(dir);%須的方向
xl=x+d0*dir/2;xr=x-d0*dir/2.%須的座標
迴圈迭o fleft=f(xl); fright=f(xr);%須的氣味強度
*dir
%下一步位置
◆幾點說明:
核心**如上,只有行
實用中可以設定可變步長,由於假設中我們認為
其中是常數,變
步長意味著
為變化的
關於步長
◆關於變步長,推薦如下兩種:
每步迭代中採用
,其中在之間靠近,通常可取
引入新變數和最終解析度
◆關於初始步長:初始步長可以盡可能大,最好與自變數最大長度相當
matlab程式
function bas(
● clear
allclose a
6初始化部分
eta=0.95;
e c=5 ratio between step and do
o step=1: initial step set as the largest input range
n=100. iterations
o k=20 space dimension
x=rands(k, 1);%/intial value
xbest=x
e fbest=f(xbest)
● tbest store≡ tbest;
x_store=[0; x; tbest]
isplay([o: ',xbest=[, num2str(xbest ), 1, fbest=, num2str(fbest)1)
【例項截圖】
【核心**】
演算法 貪心演算法
把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...
演算法 貪心演算法
集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...
演算法 貪心演算法
貪心演算法,又稱貪婪演算法 greedy algorithm 是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優解出發來考慮,它所做出的僅是在某種意義上的區域性最優解。貪婪演算法是一種分階段的工作,在每乙個階段,可以認為所做決定是最好的,而不考慮將來的後果。這種 眼下能夠拿到...