Crow search algorithm(烏鴉搜索算法)

今天我準備和你們分享一下我讀Crow search algorithm(烏鴉搜索算法 )這篇文章的心得:
原文連接
這篇文章經過對烏鴉的智能行爲進行分析,提出了一種新的元啓發式優化器,稱爲烏鴉搜索算法(CSA)。CSA是一種基於人口的技術,它大概的思路就是烏鴉將多餘的食物儲存在藏身之處,並在須要食物時將其取回。本文還將CSA用於優化六個約束工程設計問題,分別是三杆桁架設計問題、壓力容器設計問題、張力/壓縮彈簧設計問題、焊接梁設計問題、齒輪系設計問題、貝爾維爾彈簧設計問題。這些問題具備不一樣的目標函數,約束和決策變量性質。將CSA得到的結果與各類算法(例如BA、GA、PSO、CDE、MBA等)的結果進行比較。結果代表,與其餘算法相比,CSA獲得的更好。web

一 介紹
介紹部分主要闡述了什麼是工程設計、什麼是優化技術、什麼是元啓發式、元啓發式可以解決的問題以及好處
工程設計被定義爲構建知足特定需求的產品的決策過程。大多數狀況下,工程設計問題包括具備大量決策變量的複雜目標函數。可行解決方案是全部設計的集合,其特徵在於設計參數(決策變量)的全部可能值。優化技術試圖從全部可用的可行解決方案中找到最佳解決方案。
根據格洛弗的慣例,全部現代天然靈感的方法都被稱爲元啓發式,元啓發式算法能夠解決大多數非線性和多模態的現實優化問題且都使用隨機化和局部搜索的某種權衡。
一些著名的元啓發式算法以下:基於天然選擇的遺傳算法(GA),基於鳥類植絨和魚類學校教育的社會行爲的粒子羣優化算法,和聲搜索(HS)基於音樂即興創做過程,布穀鳥搜索算法基於一些杜鵑物種的寄生寄生,基於微生物回聲定位行爲的蝙蝠算法(BA),基於動物搜索的羣搜索優化器(GSO)行爲,螢火蟲算法(FA)基於熱帶螢火蟲的閃光模式等。算法

二 烏鴉搜索算法
介紹烏鴉的習性:烏鴉會觀察其餘鳥類隱藏食物的地方,並在它們離開後偷走它。若是一隻烏鴉犯了偷竊行爲,它將須要採起額外的預防措施,例如移動藏身之處以免成爲將來的受害者。事實上,他們利用本身的小偷經驗來預測盜竊者的行爲,而且能夠肯定最安全的方法來保護他們的藏物處不被盜。
在本文中,基於上述智能行爲,開發了基於人口的元啓發式算法CSA。CSA的原則以下:
1.烏鴉以羣居的形式生活。
2.烏鴉記住了它們藏食物的位置。
3.烏鴉跟着領導者作偷取食物。
4.烏鴉保護他們的藏物處必定機率下不被偷竊。
假設一個d維環境中包括許多烏鴉。烏鴉的數量(羣容量)是N,而且在搜索空間中烏鴉i在時間(迭代)的位置由向量這裏寫圖片描述這裏寫圖片描述決定,當且僅當這裏寫圖片描述而且這裏寫圖片描述是最大迭代次數時成立。每隻烏鴉都有一個記憶,那就是隱藏位置的記憶。
假設在迭代時,烏鴉j想要訪問它的隱藏位置這裏寫圖片描述。在此次迭代中,烏鴉i決定跟隨烏鴉j接近烏鴉j的藏身之處。在這種狀況下,可能會發生兩種狀態:
狀態1:烏鴉j不知道烏鴉i正在追它。結果,烏鴉i將接近烏鴉j的藏身之處。 在這種狀況下,烏鴉i的新位置得到以下:
這裏寫圖片描述
其中ri是在0和1之間均勻分佈的隨機數,這裏寫圖片描述表示在迭代時的烏鴉i的飛行長度。
圖1顯示了該狀態的示意圖以及fl對搜索能力的影響。 fl的小值致使局部搜索(在這裏寫圖片描述附近; ),大值致使全局搜索(遠離這裏寫圖片描述)。如圖1(a)所示,若是選擇fl的值小於1,則烏鴉 i的下一個位置位於這裏寫圖片描述這裏寫圖片描述之間的虛線上。如圖1(b)所示,若是選擇fl的值大於1,則烏鴉i的下一個位置可能在超過這裏寫圖片描述的虛線上。
狀態2:烏鴉j知道烏鴉i正在追它。結果,爲了保護其隱藏處不被發現,烏鴉j將經過前往搜索空間的另外一個位置來欺騙烏鴉。
總的來講,狀態1和2能夠表示以下:
這裏寫圖片描述
其中rj是在0和1之間具備均勻分佈的隨機數,這裏寫圖片描述表示在迭代時的烏鴉j的感知機率。
fl<1
fl>1
圖1. CSA中狀態1在(a)fl <1和(b)fl> 1兩種狀況下的流程圖。烏鴉i能夠到達虛線上的每一個位置。安全

三 CSA實現優化
接下來咱們介紹CSA的實現步驟:
第1步:初始化問題和可調參數
定義了優化問題,決策變量和約束。而後,估計CSA的可調參數(羣體大小(N),最大迭代次數(這裏寫圖片描述),飛行長度(fl)和感知機率(AP))。svg

第2步:初始化烏鴉的位置和記憶
N個烏鴉隨機定位在d維搜索空間中做爲羣的一員。每一個烏鴉表示一個問題的可行解決方案,d是決策變量的數量。
這裏寫圖片描述
每一個烏鴉的記憶被初始化。由於在最初的迭代中,烏鴉沒有經驗,因此假設它們將食物隱藏在它們的初始位置。
這裏寫圖片描述
CSA算法的僞代碼以下:
CSA僞代碼函數

第3步:評估適應度(目標)功能
對於每一個烏鴉,經過將決策變量值插入目標函數來計算其位置的質量。性能

第4步:生成新位置
烏鴉在搜索空間中產生以下的新位置:假設烏鴉i想要生成一個新位置。爲了這個目的,這隻烏鴉隨機選擇其中一隻烏鴉(例如烏鴉j)並跟隨它以發現被這隻烏鴉隱藏的食物的位置(這裏寫圖片描述)。 烏鴉i的新位置由等式(2)得到。對全部烏鴉重複這個過程。測試

第5步:檢查新位置的可行性
檢查每一個烏鴉新位置的可行性。若是烏鴉的新位置是可行的,烏鴉會更新它的位置。不然,烏鴉停留在當前位置而且不會移動到生成的新位置。優化

第6步:評估新位置的適應度函數
計算每一個烏鴉的新位置的適應度函數值。ui

第7步:更新記憶
烏鴉更新他們的記憶以下:
這裏寫圖片描述
其中f(.)表示目標函數值。
能夠看出,若是烏鴉的新位置的適應度函數值優於記憶位置的適應度函數值,則烏鴉經過新位置更新其記憶。spa

第8步:檢查終止標準
重複步驟4到步驟7直到達到這裏寫圖片描述。當知足終止標準時,將目標函數值方面的記憶的最佳位置看成優化問題的解決方案。

四 CSA與GA、PSO、HS的比較
相比其餘三個算法,CSA只須要調整飛行長度和意識機率兩個參數,相對省時一些。
CSA不是一種貪婪算法,由於若是一個烏鴉產生一個不比當前位置好的新位置,它將移動到新位置。非貪婪算法能夠增長生成的解決方案的多樣性。
CSA包含記憶良好解決方案的存儲器,在CSA的每次迭代中,每隻烏鴉隨機選擇一隻烏鴉(也多是它本身)並向其隱藏位置移動(該烏鴉找到的最佳解決方案)。這意味着在CSA的每次迭代中,到目前爲止找到的最佳位置直接用於找到更好的位置。

五 數值例子
將CSA的優化能力運用並解決六個工程設計問題,包括三杆桁架,壓力容器,拉伸/壓縮彈簧,焊接梁,齒輪系和貝氏彈簧。
下面是CSA算法的流程圖:
這裏寫圖片描述
這裏寫圖片描述
表1顯示了用於解決這些問題的CSA的參數設置
表1
後面文章分別對這六個工程設計問題進行了介紹,並將CSA運用在這些問題上,在和其餘經典算法比較以後,發現CSA在很大程度上可以產生更有但願的結果。

表17顯示了CSA與PSO和GA在30次獨立運行中發現的結果的比較結果。能夠看出,在全部功能上,CSA在最佳索引方面優於其餘算法。在此表中,顯示了運行的平均時間。能夠看出,與相同數量的適應度評估相比,CSA比PSO和GA消耗更少的計算時間。
表17
做爲另外一項研究,研究了CSA不一樣參數設置對其性能的影響。表18和19表示不一樣AP和fl值對f1,f2和f3的得到結果的影響。從表18能夠看出,AP = 0致使CSA的性能較弱,由於已經消除了算法的多樣化能力。考慮到最佳指數,從研究參數設置接近f1,f2和f3的最佳指標分別是(AP = 0.05和fl = 1.5),(AP = 0.05和fl = 2.5)和(AP = 0.2和fl = 2)。考慮平均指數,從研究參數設置接近f1,f2和f3的最佳值分別是(AP = 0.05和fl = 2),(AP = 0.05和fl = 2.5)和(AP = 0.3和fl = 2)。在測試函數中,f1和f2是單峯的,而f3是多峯的。彷佛對於單峯函數,小的AP值致使更好的結果,而對於多模函數,最好使用較大的值來避免局部最優。若是使用AP的固定值(AP = 0.05)而且fl的值從1.5增長到2.5,則平均來講,CSA對f1,f2和f3的性能提升。若是AP的值設置爲0.2而且f1的值從1.5增長到2.5,則平均而言,f1上的CSA性能沒有提升,而在f3上,CSA的性能提升。所以,與其餘優化技術同樣,CSA的微調是一個依賴於問題的問題,應該經過試驗來完成。
表18
表19

六 結論
基於烏鴉的智能行爲,本文提出了一種新的元啓發式算法CSA。CSA是基於人口的優化算法,它至關簡單,只有兩個可調參數(飛行長度和感知機率),這反過來使其對不一樣工程領域的應用很是有吸引力。在CSA中,感知機率的參數直接用於控制算法的多樣性。與GA,PSO和HS相比,CSA具備更少的參數來調整,所以更容易實現。經過解決具備不一樣的目標函數,約束和決策變量性質的工程設計問題來評估CSA的有用性。仿真結果代表,所提出的新算法的性能是有前途的,由於它與其餘研究的算法相比產生了競爭結果。在一組基準函數中,觀察到雖然PSO被稱爲基於羣體的算法中的快速技術,但它並不優於CSA。從結果能夠看出,CSA的收斂速度很好,該算法在1s內找到了所研究問題的解。

算法的源代碼以下:
用matlab語言

format long; close all; clear all; clc

pd=2; %問題維度(決策變量的數量)
N=100; % 羣 (人口) 規模
AP=0.1; % 意識機率
fl=2; % 飛行長度 (fl)

[x l u]=init(N,pd); % 函數初始化

xn=x;
ft=fitness(xn,N,pd); % 函數適應度評估

mem=x; % 記憶初始化
fit_mem=ft; % 記憶位置的適應度


tmax=50; % 最大迭代次數 (itermax)
for t=1:tmax

    num=ceil(N*rand(1,N)); % 生成隨機候選烏鴉以追隨(追逐)
    for i=1:N
        if rand>AP
            xnew(i,:)= x(i,:)+fl*rand*(mem(num(i),:)-x(i,:)); % 爲烏鴉i生成一個新位置 (狀態 1)
        else
            for j=1:pd
                xnew(i,j)=l-(l-u)*rand; % 爲烏鴉i生成一個新位置 (狀態 2)
            end
        end
    end

    xn=xnew;
    ft=fitness(xn,N,pd); % 新解決方案的適應性評估函數

    for i=1:N % 更新位置和記憶
        if xnew(i,:)>=l & xnew(i,:)<=u
            x(i,:)=xnew(i,:); % 更新位置
            if ft(i)<fit_mem(i)
                mem(i,:)=xnew(i,:); % 更新記憶
                fit_mem(i)=ft(i);
            end
        end
    end    

    ffit(t)=min(fit_mem); % 在迭代t以前找到的最佳值
    min(fit_mem)
end

ngbest=find(fit_mem== min(fit_mem));
g_best=mem(ngbest(1),:); % 解決問題

運行截圖以下:
這裏寫圖片描述這裏寫圖片描述這裏寫圖片描述這裏寫圖片描述 最終收斂到一個很小的值