㈠ 最優化選擇法數學原理
2.2.1 目標函數
設觀測異常以ΔZk表示,k為觀測點序號,k=1,2,…,m,m為觀測點數。
設所選用的地質體模型的理論異常以 Z 表示,Z 是模型體參量和觀測點坐標的函數,即
Z=f(xk,yk,zk,b1,b2,…,bn)
式中:xk,yk,zk為觀測點的坐標;b1,b2,…,bn為模型體的參量,如空間位置、產狀、物性等,參量的個數為n。
模型體的初始參量用
理論曲線與實測曲線之間的符合程度,是以各測點上理論異常與實測異常之差的平方和(即偏差平方和)來衡量的,用φ表示,即
地球物理數據處理教程
目的在於求得一組關於模型體參量的修改量δ1,δ2,…,δn,來修改模型體給定的初值參量,即
地球物理數據處理教程
於是求出關於模型體參量的一組新值,而由這組新參量形成的模型體的理論異常與實測異常之間的偏差平方和將取極小,即是
地球物理數據處理教程
代入式(2.2.1)中將使φ值獲得極小,這時bi即為我們的解釋結果,這稱為最小二乘意義下的最優化選擇法。
我們稱φ為目標函數,用它來衡量理論曲線與實測曲線的符合程度。最優化方法的關鍵在於求取使φ值獲得極小參量的改正值δi,而f通常是bi的非線性函數,因而該問題歸結為非線性函數極小的問題。
2.2.2 求非線性函數極小的迭代過程
從上已知f為bi的非線性函數,那麼要求它與實測值之間的偏差平方和φ為極小的問題就稱為非線性極小問題,或稱為非線性參數的估計問題。如果是線性問題,參數估計比較簡單,通常進行一次計算即可求出參數的真值,而對非線性問題,參數估計卻要復雜得多,為了求解,通常將函數在參數初值鄰域內展成線性(忽略高次項),即所謂的線性化,然後再求得改正量δi(i=1,2,…,n),由於這是一種近似方法,因而不可能使φ一次達到極小,而需要一個迭代過程,通過反復計算而逐步逼近函數φ的極小值。
圖2.1 不同埋深時的重力異常
為了說明這個求極小的迭代過程,可以舉一個單參量的例子,即假如我們要確定引起重力異常Δgk的場源地質體的深度,假設場源為一個已知體積和密度的球體模型,如圖2.1所示,那麼φ就是球心埋深z的函數,如果球心埋深的真值為h,我們首先取初值為z(0),這時函數
地球物理數據處理教程
式中:Δgk為實測異常;g(z)是球心埋深為z的理論重力異常;φ隨z的變化情況示於圖2.2 中,要求使φ獲極小的z,即要求使
地球物理數據處理教程
的根。由於z(0)和φ(z(0))不能一次求出φ的極小來,通常採用迭代的辦法,如圖2.3所示,例如用牛頓切線法迭代求根,根據下式
地球物理數據處理教程
得到一個更近似於根的值z(1),但不等於h,因此需進一步再用上式,將z(1)作為新的初值z(0),可得到新的z(1)更接近於h,如此反復下去可以使z值無限接近於h,當滿足精度要求時,我們認為它近似等於h了,停止迭代,這時的z(1)就作為h值。
圖2.2 函數φ(z)隨z變化示意圖
圖2.3 用牛頓切線法求φ′(z)=0的根示意圖
2.2.3 單參量非線性函數的極小問題
單參量不僅是討論多參量的基礎,而且往往在求多參量極小時要直接用到單參量極小的方法,因此有必要作一介紹。
求單參量極小的方法很多,上面用到的牛頓切線法就是其中之一,在此我們介紹一種用得較多的函數擬合法,以及精度較高的DSC-Powell方法。
2.2.3.1 函數擬合法
2.2.3.1.1 二次函數擬合法
A.不計算導數的情況
設取三個參量值x1、x2、x3,它們對應的φ 值就應為φ1、φ2、φ3,過三個點(x1,φ1;x2,φ2;x3,φ3)作二次拋物線,應有下式
地球物理數據處理教程
聯立φ1、φ2、φ3的方程式,即可得出系數A、B、C來。
當A>0時,應有極小點存在,我們設極小點為d,那麼根據極小的必要條件有
地球物理數據處理教程
將A、B的表達式代入即得
地球物理數據處理教程
當x1、x2、x3為等距的三點時,上式可簡化為
地球物理數據處理教程
B.計算導數的情況
設已知兩個點的參量值x1和x2對應的函數值φ1、φ2,並已求得x1點的一階導數值φ′(x1),可用下列方法求極小點d:
地球物理數據處理教程
聯立φ1、φ2、φ′(x1)三個方程即可得A、B、C,代入極小點的表達式即可求得極小點。
為了簡化起見,不妨設x1為坐標原點(即x1=0),設x2=1,於是上面各式簡化成:
φ′(x1)=B
φ1=C
φ2=A+B+C
A=φ2-φ′(x1)-φ1
則
地球物理數據處理教程
2.2.3.1.2 三次函數擬合法
取兩個點的參量值x1和x2,及相應的φ1和φ2值,並已得到該兩點的一階導數值φ′(x1)和φ′(x2),我們選用一個三次多項式
φ=Ax3+Bx2+Cx+D
代入上面給出的4個條件,同樣,為了簡化起見,不妨設x1為坐標原點(即x1=0),設x2=1,則有
φ1=D
φ2=A+B+C+D
φ′(x1)=C
φ′(x2)=3A+2B+C
聯立求解,可定出4個系數A、B、C、D,按照求極小的必要條件
φ′=3Ax2+2Bx+C=0
當二階導數
φ″=6Ax+2B>0
時有極小存在,極小點d就為
地球物理數據處理教程
為了計算方便,令
v=φ′(x1)
u=φ′(x2)
S=-3(φ1-φ2)=3(A+B+C)
Z=s-u-v=B+C
W2=Z2-vu=B2-3AC
於是極小點d就可用下列形式表示:
地球物理數據處理教程
2.2.3.2 DSC-Powell 法
該法為比較細致的單參量探測法,精度比較高,計算工作量較大,大致可分為兩部分來完成,其探測(迭代)過程如圖2.4所示。
2.2.3.2.1 確定極小值所在的區間
採用的是一種直接探測法,做法可歸納如下。
第一步:給定探測方向x、初值點x0和初始步長Δx,計算φ(x0)和φ(x0+Δx),若φ(x0+Δx)≤φ(x0),轉向第二步;若φ(x0+Δx)>φ(x0),則取-Δx為步長Δx,轉向第二步。
第二步:計算xk+1=xk+Δx,計算φ(xk+1)。
第三步:如果φ(xk+1)≤φ(xk),以2Δx為新步長代替Δx,且用k代表k+1,轉向第二步。
如果φ(xk+1)>φ(xk),則以xm表示xk+1,以xm-1表示xk,將上步的xk作為xm-2,並計算
地球物理數據處理教程
第四步:在4個等距點(xm-2、xm-1、xm+1、xm)中,去掉四點中離φ(x)最小點最遠的那一點,即或是xm,或是xm-2,剩下的三點按順序以xα、xb、xc表示,其中xb為中點,那麼(xα,xc)區間即為極小值所在的區間。
2.2.3.2.2 用二次函數擬合法求極小點
將上面已確定的等距的 xα、xb、xc三點及 φ 值,用二次函數擬合法即用公式(2.2.3)求得極小點,令為x*點。再將xα、xb、xc、x*四點中捨去φ值最大的點,剩下的點重新令為α、b、c,則又得三點和它們相應的φ值,用公式(2.2.2)求其極小點x*,如此反復使用公式(2.2.2),逐步縮小極小值的區間,一直到兩次求得的極小點位置差小於事先給定的精度為止,x*點即為極小點。
圖2.4 DSC-Powell法示意圖
2.2.4 廣義最小二乘法(Gauss 法)
重磁反問題中的最優化方法,一般是指多參量的非線性最優估計問題,理論模型異常z=f(
地球物理數據處理教程
為極小。
設bi的初值為
地球物理數據處理教程
代入φ中,使φ獲得極小。
高斯提出了首先將f函數線性化的近似迭代方法,即將f在
地球物理數據處理教程
式中
地球物理數據處理教程
當
地球物理數據處理教程
要求
地球物理數據處理教程
將上式化為
地球物理數據處理教程
寫成方程組形式
地球物理數據處理教程
式中:
再寫成矩陣形式,有
地球物理數據處理教程
即
地球物理數據處理教程
其中
A=PTP
地球物理數據處理教程
式中:P稱為雅可比(Jacobi)矩陣,是理論模型函數對參量的一階導數矩陣。A為正定對稱矩陣,實際計算時,當實測異常值已給出,模型體的初值
上面推導出的方程(2.2.7)是將f線性化所得,因而只有當f為真正的線性函數時,
在高斯法應用中常常出現一種困難,即迭代過程不穩定,當
因此高斯法的一種改進形式如下,即不直接把
把這個改進的方法稱為廣義最小二乘法,它使迭代過程的穩定性有所改善,即使這樣當初值取得不好時,也有可能出現不收斂。
2.2.5 最速下降法
從前述已知,我們的目的是要求目標函數的極小,高斯法是利用將f函數線性化,建立一個正規方程(2.2.7)來求取修正量的,最速下降法是另一類型方法,它直接尋找φ函數的下降方向來求取修正量,所以它又稱為直接法,而高斯法又稱為間接法。
從目標函數φ出發來尋找其下降方向
地球物理數據處理教程
始終是大於或等於0,因此它一定有極小存在,我們首先考慮初值點
地球物理數據處理教程
希望尋找使Φ下降的方向,即要找新點
即要求φ(
且越大越好,那麼可得
地球物理數據處理教程
地球物理數據處理教程
式中
要使上式取極大,有
地球物理數據處理教程
上式說明了φ值下降最快的方向
要求從
地球物理數據處理教程
如果φ為二次函數時,λ可以直接解出,在重磁反問題中φ為非二次函數,且函數形式較復雜,一般無法直接解出λ,而採用近似法,先將φ(
地球物理數據處理教程
假設粗略認為φ的極小值為零,則極小點的λ應有
地球物理數據處理教程
這個方法計算簡單,但誤差較大,特別是
從上所述可將最速下降法敘述如下:從初值
由於這個方法是沿著初值點的最快下降方向,在該方向上如果採用單方向求極小的方法得到該方向上的極小點,那麼又稱「最優」、「最速」下降法。但需要指出的是,所謂「最速」是就初值點的鄰域而言,所謂「最優」是指在初值點的負梯度方向上,所以它的著眼點是就局部而言,就初值點鄰域而言,而對整體往往是既非「最優」,又非「最速」,而是一條曲折的彎路,難怪有人稱它為「瞎子下山法」,如圖2.5所示,當φ的等值面為拉長的橢球時更是如此。但它有一個十分可貴的優點,即在迭代的每一步都保證φ值下降,所以它是穩定收斂的,在φ函數復雜時,計算工作量較大些,對於大型計算機比較適用。
圖2.5 最速下降法迭代過程示意圖
圖2.6 修正量的方向
2.2.6 阻尼最小二乘法(Marguardt)
比較上述兩種方法可知,Gauss法修正量的步長大,當φ近於二次函數,可以很快收斂,但當φ為非二次函數,初值又給得不好時,常常引起發散。而最速下降法卻能保證穩定的收斂,但修正量的步長小,計算工作量大。當φ的等值面為拉長的橢球時,Gauss法的修正量
對於φ為二次函數的情況下,高斯法的修正量
阻尼最小二乘法是在Gauss法和最速下降法之間取某種插值,它力圖能以最大步長前進,同時又能緊靠負梯度方向,這樣既能保證收斂又能加快速度。它的基本思想是:在迭代過程的每一步,最好盡量使用Gauss法修正量方向
實現上述思想只要將方程
地球物理數據處理教程
改變為
地球物理數據處理教程
就能實現了。式中
地球物理數據處理教程
通過這一改變後,即原來的正規方程(2.2.7)系數矩陣的主對角線上加一正數,從而使條件數得到了改善。如果原來A是奇異的,而A+λI可成為正定的,設原來A的最大特徵值和最小特徵值為μmax和μmin,則條件數就發生了如下變化:
地球物理數據處理教程
使病態條件數改善,對於計算來說,是十分有利的。
從方程(2.2.7)可看出,右端項為
地球物理數據處理教程
而φ的負梯度向量
地球物理數據處理教程
所以
在方程(2.2.9)中,當λ=0時,即是(2.2.7)方程,這時
Marguardt向量
(1)當λ越來越大時,
地球物理數據處理教程
‖
(2)當λ由零逐漸增大時,
(3)對λ>0的任意正數,
圖2.7Δ0(λ)隨λ的變化情況示意圖
以上三個性質說明,當λ逐漸增大時,
下面介紹阻尼最小二乘法的迭代步驟,即實際計算過程。
(1)給出模型體參量初值
(2)開始迭代,λ=λ(0)/v
(3)計算A,(A+λI)及右端項
(4)求解方程(2.2.9)得
(5)計算
(6)比較φ(
若φ(
若φ(
該方法中阻尼因子λ的選擇十分重要,上述選法是一種簡單可行的方法,還有很多不同的選擇方法,可參閱有關的書籍。
㈡ 非線性規劃的深入解析
例1(投資決策問題)某企業有n個項目可供選擇投資,並且至少要對其中一個項目投資。已知該企業擁有總資金A元,投資於第i個項目需花資金ai元,並預計可收益bi元。試選擇最佳投資方案。
解:設投資決策變數為
則投資總額為∑aixi,投資總收益為∑bixi。因為該公司至少要對一個項目投資,並且總的投資金額不能超過總資金 ,故有限制條件
另外,由於 xi只取值0或1,所以還有
最佳投資方案應是投資額最小而總收益最大的方案,所以這個最佳投資決策問題歸結為總資金以及決策變數(取0或1)的限制條件下,極大化總收益和總投資之比。因此,其數學模型為:
上面例題是在一組等式或不等式的約束下,求一個函數的最大值(或最小值)問題,其中目標函數或約束條件中至少有一個非線性函數,這類問題稱之為非線性規劃問題,簡記為(NP)。可概括為一般形式
(NP)
其中x=[x1 ... xn]稱為模型(NP)的決策變數,f稱為目標函數,gi和hj 稱為約束函數。另外,gi(x)=0稱為等式約束,hj(x)<=0稱為不等式約束。 對於一個實際問題,在把它歸結成非線性規劃問題時,一般要注意如下幾點:
(i)確定供選方案:首先要收集同問題有關的資料和數據,在全面熟悉問題的基礎上,確認什麼是問題的可供選擇的方案,並用一組變數來表示它們。
(ii)提出追求目標:經過資料分析,根據實際需要和可能,提出要追求極小化或極大化的目標。並且,運用各種科學和技術原理,把它表示成數學關系式。
(iii)給出價值標准:在提出要追求的目標之後,要確立所考慮目標的「好」或「壞」的價值標准,並用某種數量形式來描述它。
(iv)尋求限制條件:由於所追求的目標一般都要在一定的條件下取得極小化或極大化效果,因此還需要尋找出問題的所有限制條件,這些條件通常用變數之間的一些不等式或等式來表示。 對實際規劃問題作定量分析,必須建立數學模型。建立數學模型首先要選定適當的目標變數和決策變數,並建立起目標變數與決策變數之間的函數關系,稱之為目標函數。然後將各種限制條件加以抽象,得出決策變數應滿足的一些等式或不等式,稱之為約束條件。非線性規劃問題的一般數學模型可表述為求未知量x1,x2,…,xn,使滿足約束條件:
gi(x1,…,xn)≥0i=1,…,m
hj(x1,…,xn)=0j=1,…,p
並使目標函數f(x1,…,xn)達到最小值(或最大值)。其中f,諸gi和諸hj都是定義在n維向量空間Rn的某子集D(定義域)上的實值函數,且至少有一個是非線性函數。
上述模型可簡記為:
min f(x)
s.t. gi(x)≥0i=1,…,m
hj(x)=0 j=1,…,p
其中x=(x1,…,xn)屬於定義域D,符號min表示「求最小值」,符號s.t.表示「受約束於」。
定義域D 中滿足約束條件的點稱為問題的可行解。全體可行解所成的集合稱為問題的可行集。對於一個可行解x*,如果存在x*的一個鄰域,使目標函數在x*處的值f(x*)優於 (指不大於或不小於)該鄰域中任何其他可行解處的函數值,則稱x*為問題的局部最優解(簡稱局部解)。如果f(x*)優於一切可行解處的目標函數值,則稱x*為問題的整體最優解(簡稱整體解)。實用非線性規劃問題要求整體解,而現有解法大多隻是求出局部解。 指尋求一元函數在某區間上的最優值點的方法。這類方法不僅有實用價值,而且大量多維最優化方法都依賴於一系列的一維最優化。常用的一維最優化方法有黃金分割法、切線法和插值法。
①黃金分割法又稱0.618法。它適用於單峰函數。其基本思想是:在初始尋查區間中設計一列點,通過逐次比較其函數值,逐步縮小尋查區間,以得出近似最優值點。
②切線法又稱牛頓法。它也是針對單峰函數的。其基本思想是:在一個猜測點附近將目標函數的導函數線性化,用此線性函數的零點作為新的猜測點,逐步迭代去逼近最優點。
③插值法又稱多項式逼近法。其基本思想是用多項式(通常用二次或三次多項式)去擬合目標函數。
此外,還有斐波那契法、割線法、有理插值法、分批搜索法等。 指尋求 n元實函數f在整個n維向量空間Rn上的最優值點的方法。這類方法的意義在於:雖然實用規劃問題大多是有約束的,但許多約束最優化方法可將有約束問題轉化為若干無約束問題來求解。
無約束最優化方法大多是逐次一維搜索的迭代演算法。這類迭代演算法可分為兩類。一類需要用目標函數的導函數,稱為解析法。另一類不涉及導數,只用到函數值,稱為直接法。這些迭代演算法的基本思想是:在一個近似點處選定一個有利搜索方向,沿這個方向進行一維尋查,得出新的近似點。然後對新點施行同樣手續,如此反復迭代,直到滿足預定的精度要求為止。根據搜索方向的取法不同,可以有各種演算法。屬於解析型的演算法有:①梯度法:又稱最速下降法。這是早期的解析法,收斂速度較慢。②牛頓法:收斂速度快,但不穩定,計算也較困難。③共軛梯度法:收斂較快,效果較好。④變尺度法:這是一類效率較高的方法。其中達維登-弗萊徹-鮑威爾變尺度法,簡稱 DFP法,是最常用的方法。屬於直接型的演算法有交替方向法(又稱坐標輪換法)、模式搜索法、旋轉方向法、鮑威爾共軛方向法和單純形加速法等。 這是一類特殊的非線性規劃。在前述非線性規劃數學模型中,若f是凸函數,諸gi都是凹函數,諸hj都是一次函數,則稱之為凸規劃。所謂f是凸函數,是指f有如下性質:它的定義域是凸集,且對於定義域中任意兩點x和y及任一小於1的正數α,下式都成立:
f((1-α)x +αy)α≤(1-α)f(x)+αf(y)
將上述不等式中的不等號反向即得凹函數的定義。所謂凸集,是指具有如下性質的集合:連結集合中任意兩點的直線段上的點全部屬於該集合。
對於一般的非線性規劃問題,局部解不一定是整體解。但凸規劃的局部解必為整體解,而且凸規劃的可行集和最優解集都是凸集。 幾何規劃一類特殊的非線性規劃。它的目標函數和約束函數都是正定多項式(或稱正項式)。幾何規劃本身一般不是凸規劃,但經適當變數替換,即可變為凸規劃。幾何規劃的局部最優解必為整體最優解。求解幾何規劃的方法有兩類。一類是通過對偶規劃去求解;另一類是直接求解原規劃,這類演算法大多建立在根據幾何不等式將多項式轉化為單項式的思想上。
㈢ 數字圖像中最近鄰域法是什麼意思
顧名思義,鄰域就是相鄰的區域。
比如你家鄰域就是你們樓上樓下左鄰右舍。
由於像素是離散的,鄰域也就有了具體的區域。
有八鄰域,有四鄰域,也有更多的區域,16,32的有的是。
[1
2
3;
4
x
5;
6
7
8]
1-8是八鄰域,2
4
7是4鄰域。
不同鄰域反應像素周邊信息,看你用到什麼,選取不同鄰域進行處理。
㈣ 圖像增強和復原的原理是什麼
圖像增強的方法可分成兩大類:頻率域法和空間域法。
前者把圖像看成一種二維信號,對其進行基於二維傅里葉變換的信號增強。採用低通濾波(即只讓低頻信號通過)法,可去掉圖中的雜訊;採用高通濾波法,則可增強邊緣等高頻信號,使模糊的圖片變得清晰。
後者空間域法中具有代表性的演算法有局部求平均值法和中值濾波(取局部鄰域中的中間像素值)法等,它們可用於去除或減弱雜訊。
㈤ 遺傳演算法的運算過程
遺傳操作是模擬生物基因遺傳的做法。在遺傳演算法中,通過編碼組成初始群體後,遺傳操作的任務就是對群體的個體按照它們對環境適應度(適應度評估)施加一定的操作,從而實現優勝劣汰的進化過程。從優化搜索的角度而言,遺傳操作可使問題的解,一代又一代地優化,並逼近最優解。
遺傳操作包括以下三個基本遺傳運算元(genetic operator):選擇(selection);交叉(crossover);變異(mutation)。這三個遺傳運算元有如下特點:
個體遺傳運算元的操作都是在隨機擾動情況下進行的。因此,群體中個體向最優解遷移的規則是隨機的。需要強調的是,這種隨機化操作和傳統的隨機搜索方法是有區別的。遺傳操作進行的高效有向的搜索而不是如一般隨機搜索方法所進行的無向搜索。
遺傳操作的效果和上述三個遺傳運算元所取的操作概率,編碼方法,群體大小,初始群體以及適應度函數的設定密切相關。 從群體中選擇優勝的個體,淘汰劣質個體的操作叫選擇。選擇運算元有時又稱為再生運算元(reproction operator)。選擇的目的是把優化的個體(或解)直接遺傳到下一代或通過配對交叉產生新的個體再遺傳到下一代。選擇操作是建立在群體中個體的適應度評估基礎上的,目前常用的選擇運算元有以下幾種:適應度比例方法、隨機遍歷抽樣法、局部選擇法。
其中輪盤賭選擇法 (roulette wheel selection)是最簡單也是最常用的選擇方法。在該方法中,各個個體的選擇概率和其適應度值成比例。設群體大小為n,其中個體i的適應度為,則i 被選擇的概率,為遺傳演算法
顯然,概率反映了個體i的適應度在整個群體的個體適應度總和中所佔的比例。個體適應度越大。其被選擇的概率就越高、反之亦然。計算出群體中各個個體的選擇概率後,為了選擇交配個體,需要進行多輪選擇。每一輪產生一個[0,1]之間均勻隨機數,將該隨機數作為選擇指針來確定被選個體。個體被選後,可隨機地組成交配對,以供後面的交叉操作。 在自然界生物進化過程中起核心作用的是生物遺傳基因的重組(加上變異)。同樣,遺傳演算法中起核心作用的是遺傳操作的交叉運算元。所謂交叉是指把兩個父代個體的部分結構加以替換重組而生成新個體的操作。通過交叉,遺傳演算法的搜索能力得以飛躍提高。
交叉運算元根據交叉率將種群中的兩個個體隨機地交換某些基因,能夠產生新的基因組合,期望將有益基因組合在一起。根據編碼表示方法的不同,可以有以下的演算法:
a)實值重組(real valued recombination)
1)離散重組(discrete recombination)
2)中間重組(intermediate recombination)
3)線性重組(linear recombination)
4)擴展線性重組(extended linear recombination)。
b)二進制交叉(binary valued crossover)
1)單點交叉(single-point crossover)
2)多點交叉(multiple-point crossover)
3)均勻交叉(uniform crossover)
4)洗牌交叉(shuffle crossover)
5)縮小代理交叉(crossover with reced surrogate)。
最常用的交叉運算元為單點交叉(one-point crossover)。具體操作是:在個體串中隨機設定一個交叉點,實行交叉時,該點前或後的兩個個體的部分結構進行互換,並生成兩個新個體。下面給出了單點交叉的一個例子:
個體A:1 0 0 1 ↑1 1 1 → 1 0 0 1 0 0 0 新個體
個體B:0 0 1 1 ↑0 0 0 → 0 0 1 1 1 1 1 新個體 變異運算元的基本內容是對群體中的個體串的某些基因座上的基因值作變動。依據個體編碼表示方法的不同,可以有以下的演算法:
a)實值變異
b)二進制變異。
一般來說,變異運算元操作的基本步驟如下:
a)對群中所有個體以事先設定的變異概率判斷是否進行變異
b)對進行變異的個體隨機選擇變異位進行變異。
遺傳演算法引入變異的目的有兩個:一是使遺傳演算法具有局部的隨機搜索能力。當遺傳演算法通過交叉運算元已接近最優解鄰域時,利用變異運算元的這種局部隨機搜索能力可以加速向最優解收斂。顯然,此種情況下的變異概率應取較小值,否則接近最優解的積木塊會因變異而遭到破壞。二是使遺傳演算法可維持群體多樣性,以防止出現未成熟收斂現象。此時收斂概率應取較大值。
遺傳演算法中,交叉運算元因其全局搜索能力而作為主要運算元,變異運算元因其局部搜索能力而作為輔助運算元。遺傳演算法通過交叉和變異這對相互配合又相互競爭的操作而使其具備兼顧全局和局部的均衡搜索能力。所謂相互配合.是指當群體在進化中陷於搜索空間中某個超平面而僅靠交叉不能擺脫時,通過變異操作可有助於這種擺脫。所謂相互競爭,是指當通過交叉已形成所期望的積木塊時,變異操作有可能破壞這些積木塊。如何有效地配合使用交叉和變異操作,是目前遺傳演算法的一個重要研究內容。
基本變異運算元是指對群體中的個體碼串隨機挑選一個或多個基因座並對這些基因座的基因值做變動(以變異概率P.做變動),(0,1)二值碼串中的基本變異操作如下:
基因位下方標有*號的基因發生變異。
變異率的選取一般受種群大小、染色體長度等因素的影響,通常選取很小的值,一般取0.001-0.1。 當最優個體的適應度達到給定的閾值,或者最優個體的適應度和群體適應度不再上升時,或者迭代次數達到預設的代數時,演算法終止。預設的代數一般設置為100-500代。
㈥ 各位大俠,請問什麼是雜交演算法啊是神經網路與遺傳演算法的結合謝謝
雜交?你指的是混合嗎?神經網路與遺傳演算法相混合的例子很多,還有其他智能演算法相混合的,比如說遺傳演算法和模擬退火演算法,變鄰域搜索演算法和禁忌搜索演算法的混合等。
如果你說的是遺傳演算法中的雜交,那麼雜交演算法應該指的就是遺傳演算法。
㈦ 求救,論文高手請不吝賜教
模擬退火是一種優化演算法,它本身是不能獨立存在的,需要有一個應用場合,其中溫度就是模擬退火需要優化的參數,如果它應用到了聚類分析中,那麼就是說聚類分析中有某個或者某幾個參數需要優化,而這個參數,或者參數集就是溫度所代表的。它可以是某項指標,某項關聯度,某個距離等等
Simulate Anneal Arithmetic (SAA,模擬退火演算法)
模擬退火演算法
模擬退火演算法來源於固體退火原理,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,內能減為最小。根據Metropolis准則,粒子在溫度T時趨於平衡的概率為e-ΔE/(kT),其中E為溫度T時的內能,ΔE為其改變數,k為Boltzmann常數。用固體退火模擬組合優化問題,將內能E模擬為目標函數值f,溫度T演化成控制參數t,即得到解組合優化問題的模擬退火演算法:由初始解i和控制參數初值t開始,對當前解重復「產生新解→計算目標函數差→接受或舍棄」的迭代,並逐步衰減t值,演算法終止時的當前解即為所得近似最優解,這是基於蒙特卡羅迭代求解法的一種啟發式隨機搜索過程。退火過程由冷卻進度表(Cooling Schele)控制,包括控制參數的初值t及其衰減因子Δt、每個t值時的迭代次數L和停止條件S。
1 . 模擬退火演算法的模型
模擬退火演算法可以分解為解空間、目標函數和初始解三部分。
模擬退火的基本思想:
(1) 初始化:初始溫度T(充分大),初始解狀態S(是演算法迭代的起點), 每個T值的迭代次數L
(2) 對k=1,……,L做第(3)至第6步:
(3) 產生新解S′
(4) 計算增量Δt′=C(S′)-C(S),其中C(S)為評價函數
(5) 若Δt′<0則接受S′作為新的當前解,否則以概率exp(-Δt′/T)接受S′作為新的當前解.
(6) 如果滿足終止條件則輸出當前解作為最優解,結束程序。
終止條件通常取為連續若干個新解都沒有被接受時終止演算法。
(7) T逐漸減少,且T->0,然後轉第2步。
演算法對應動態演示圖:
模擬退火演算法新解的產生和接受可分為如下四個步驟:
第一步是由一個產生函數從當前解產生一個位於解空間的新解;為便於後續的計算和接受,減少演算法耗時,通常選擇由當前新解經過簡單地變換即可產生新解的方法,如對構成新解的全部或部分元素進行置換、互換等,注意到產生新解的變換方法決定了當前新解的鄰域結構,因而對冷卻進度表的選取有一定的影響。
第二步是計算與新解所對應的目標函數差。因為目標函數差僅由變換部分產生,所以目標函數差的計算最好按增量計算。事實表明,對大多數應用而言,這是計算目標函數差的最快方法。
第三步是判斷新解是否被接受,判斷的依據是一個接受准則,最常用的接受准則是Metropo1is准則: 若Δt′<0則接受S′作為新的當前解S,否則以概率exp(-Δt′/T)接受S′作為新的當前解S。
第四步是當新解被確定接受時,用新解代替當前解,這只需將當前解中對應於產生新解時的變換部分予以實現,同時修正目標函數值即可。此時,當前解實現了一次迭代。可在此基礎上開始下一輪試驗。而當新解被判定為舍棄時,則在原當前解的基礎上繼續下一輪試驗。
模擬退火演算法與初始值無關,演算法求得的解與初始解狀態S(是演算法迭代的起點)無關;模擬退火演算法具有漸近收斂性,已在理論上被證明是一種以概率l 收斂於全局最優解的全局優化演算法;模擬退火演算法具有並行性。
2 模擬退火演算法的簡單應用
作為模擬退火演算法應用,討論貨郎擔問題(Travelling Salesman Problem,簡記為TSP):設有n個城市,用數碼1,…,n代表。城市i和城市j之間的距離為d(i,j) i, j=1,…,n.TSP問題是要找遍訪每個域市恰好一次的一條迴路,且其路徑總長度為最短.。
求解TSP的模擬退火演算法模型可描述如下:
解空間 解空間S是遍訪每個城市恰好一次的所有迴路,是{1,……,n}的所有循環排列的集合,S中的成員記為(w1,w2 ,……,wn),並記wn+1= w1。初始解可選為(1,……,n)
目標函數 此時的目標函數即為訪問所有城市的路徑總長度或稱為代價函數:
我們要求此代價函數的最小值。
新解的產生 隨機產生1和n之間的兩相異數k和m,若k (w1, w2 ,…,wk , wk+1 ,…,wm ,…,wn)
變為:
(w1, w2 ,…,wm , wm-1 ,…,wk+1 , wk ,…,wn).
如果是k>m,則將
(w1, w2 ,…,wk , wk+1 ,…,wm ,…,wn)
變為:
(wm, wm-1 ,…,w1 , wm+1 ,…,wk-1 ,wn , wn-1 ,…,wk).
上述變換方法可簡單說成是「逆轉中間或者逆轉兩端」。
也可以採用其他的變換方法,有些變換有獨特的優越性,有時也將它們交替使用,得到一種更好方法。
代價函數差 設將(w1, w2 ,……,wn)變換為(u1, u2 ,……,un), 則代價函數差為:
根據上述分析,可寫出用模擬退火演算法求解TSP問題的偽程序:
Procere TSPSA:
begin
init-of-T; { T為初始溫度}
S={1,……,n}; {S為初始值}
termination=false;
while termination=false
begin
for i=1 to L do
begin
generate(S′form S); { 從當前迴路S產生新迴路S′}
Δt:=f(S′))-f(S);{f(S)為路徑總長}
IF(Δt<0) OR (EXP(-Δt/T)>Random-of-[0,1])
S=S′;
IF the-halt-condition-is-TRUE THEN
termination=true;
End;
T_lower;
End;
End
模擬退火演算法的應用很廣泛,可以較高的效率求解最大截問題(Max Cut Problem)、0-1背包問題(Zero One Knapsack Problem)、圖著色問題(Graph Colouring Problem)、調度問題(Scheling Problem)等等。
3 模擬退火演算法的參數控制問題
模擬退火演算法的應用很廣泛,可以求解NP完全問題,但其參數難以控制,其主要問題有以下三點:
(1) 溫度T的初始值設置問題。
溫度T的初始值設置是影響模擬退火演算法全局搜索性能的重要因素之一、初始溫度高,則搜索到全局最優解的可能性大,但因此要花費大量的計算時間;反之,則可節約計算時間,但全局搜索性能可能受到影響。實際應用過程中,初始溫度一般需要依據實驗結果進行若干次調整。
(2) 退火速度問題。
模擬退火演算法的全局搜索性能也與退火速度密切相關。一般來說,同一溫度下的「充分」搜索(退火)是相當必要的,但這需要計算時間。實際應用中,要針對具體問題的性質和特徵設置合理的退火平衡條件。
(3) 溫度管理問題。
溫度管理問題也是模擬退火演算法難以處理的問題之一。實際應用中,由於必須考慮計算復雜度的切實可行性等問題,常採用如下所示的降溫方式:
T(t+1)=k×T(t)
式中k為正的略小於1.00的常數,t為降溫的次數
㈧ hadoop的maprece常見演算法案例有幾種
基本MapRece模式
計數與求和
問題陳述:
有許多文檔,每個文檔都有一些欄位組成。需要計算出每個欄位在所有文檔中的出現次數或者這些欄位的其他什麼統計值。例如,給定一個log文件,其中的每條記錄都包含一個響應時間,需要計算出平均響應時間。
解決方案:
讓我們先從簡單的例子入手。在下面的代碼片段里,Mapper每遇到指定詞就把頻次記1,Recer一個個遍歷這些詞的集合然後把他們的頻次加和。
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Recer
7 method Rece(term t, counts [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
這種方法的缺點顯而易見,Mapper提交了太多無意義的計數。它完全可以通過先對每個文檔中的詞進行計數從而減少傳遞給Recer的數據量:
1 class Mapper
2 method Map(docid id, doc d)
3 H = new AssociativeArray
4 for all term t in doc d do
5 H{t} = H{t} + 1
6 for all term t in H do
7 Emit(term t, count H{t})
如果要累計計數的的不只是單個文檔中的內容,還包括了一個Mapper節點處理的所有文檔,那就要用到Combiner了:
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Combiner
7 method Combine(term t, [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
12
13 class Recer
14 method Rece(term t, counts [c1, c2,...])
15 sum = 0
16 for all count c in [c1, c2,...] do
17 sum = sum + c
18 Emit(term t, count sum)
應用:Log 分析, 數據查詢
整理歸類
問題陳述:
有一系列條目,每個條目都有幾個屬性,要把具有同一屬性值的條目都保存在一個文件里,或者把條目按照屬性值分組。 最典型的應用是倒排索引。
解決方案:
解決方案很簡單。 在 Mapper 中以每個條目的所需屬性值作為 key,其本身作為值傳遞給 Recer。 Recer 取得按照屬性值分組的條目,然後可以處理或者保存。如果是在構建倒排索引,那麼 每個條目相當於一個詞而屬性值就是詞所在的文檔ID。
應用:倒排索引, ETL
過濾 (文本查找),解析和校驗
問題陳述:
假設有很多條記錄,需要從其中找出滿足某個條件的所有記錄,或者將每條記錄傳換成另外一種形式(轉換操作相對於各條記錄獨立,即對一條記錄的操作與其他記錄無關)。像文本解析、特定值抽取、格式轉換等都屬於後一種用例。
解決方案:
非常簡單,在Mapper 里逐條進行操作,輸出需要的值或轉換後的形式。
應用:日誌分析,數據查詢,ETL,數據校驗
分布式任務執行
問題陳述:
大型計算可以分解為多個部分分別進行然後合並各個計算的結果以獲得最終結果。
解決方案: 將數據切分成多份作為每個 Mapper 的輸入,每個Mapper處理一份數據,執行同樣的運算,產生結果,Recer把多個Mapper的結果組合成一個。
案例研究: 數字通信系統模擬
像 WiMAX 這樣的數字通信模擬軟體通過系統模型來傳輸大量的隨機數據,然後計算傳輸中的錯誤幾率。 每個 Mapper 處理樣本 1/N 的數據,計算出這部分數據的錯誤率,然後在 Recer 里計算平均錯誤率。
應用:工程模擬,數字分析,性能測試
排序
問題陳述:
有許多條記錄,需要按照某種規則將所有記錄排序或是按照順序來處理記錄。
解決方案: 簡單排序很好辦 – Mappers 將待排序的屬性值為鍵,整條記錄為值輸出。 不過實際應用中的排序要更加巧妙一點, 這就是它之所以被稱為MapRece 核心的原因(「核心」是說排序?因為證明Hadoop計算能力的實驗是大數據排序?還是說Hadoop的處理過程中對key排序的環節?)。在實踐中,常用組合鍵來實現二次排序和分組。
MapRece 最初只能夠對鍵排序, 但是也有技術利用可以利用Hadoop 的特性來實現按值排序。想了解的話可以看這篇博客。
按照BigTable的概念,使用 MapRece來對最初數據而非中間數據排序,也即保持數據的有序狀態更有好處,必須注意這一點。換句話說,在數據插入時排序一次要比在每次查詢數據的時候排序更高效。
應用:ETL,數據分析
非基本 MapRece 模式
迭代消息傳遞 (圖處理)
問題陳述:
假設一個實體網路,實體之間存在著關系。 需要按照與它比鄰的其他實體的屬性計算出一個狀態。這個狀態可以表現為它和其它節點之間的距離, 存在特定屬性的鄰接點的跡象, 鄰域密度特徵等等。
解決方案:
網路存儲為系列節點的結合,每個節點包含有其所有鄰接點ID的列表。按照這個概念,MapRece 迭代進行,每次迭代中每個節點都發消息給它的鄰接點。鄰接點根據接收到的信息更新自己的狀態。當滿足了某些條件的時候迭代停止,如達到了最大迭代次數(網路半徑)或兩次連續的迭代幾乎沒有狀態改變。從技術上來看,Mapper 以每個鄰接點的ID為鍵發出信息,所有的信息都會按照接受節點分組,recer 就能夠重算各節點的狀態然後更新那些狀態改變了的節點。下面展示了這個演算法:
1 class Mapper
2 method Map(id n, object N)
3 Emit(id n, object N)
4 for all id m in N.OutgoingRelations do
5 Emit(id m, message getMessage(N))
6
7 class Recer
8 method Rece(id m, [s1, s2,...])
9 M = null
10 messages = []
11 for all s in [s1, s2,...] do
12 if IsObject(s) then
13 M = s
14 else // s is a message
15 messages.add(s)
16 M.State = calculateState(messages)
17 Emit(id m, item M)
一個節點的狀態可以迅速的沿著網路傳全網,那些被感染了的節點又去感染它們的鄰居,整個過程就像下面的圖示一樣:
案例研究: 沿分類樹的有效性傳遞
問題陳述:
這個問題來自於真實的電子商務應用。將各種貨物分類,這些類別可以組成一個樹形結構,比較大的分類(像男人、女人、兒童)可以再分出小分類(像男褲或女裝),直到不能再分為止(像男式藍色牛仔褲)。這些不能再分的基層類別可以是有效(這個類別包含有貨品)或者已無效的(沒有屬於這個分類的貨品)。如果一個分類至少含有一個有效的子分類那麼認為這個分類也是有效的。我們需要在已知一些基層分類有效的情況下找出分類樹上所有有效的分類。
解決方案:
這個問題可以用上一節提到的框架來解決。我們咋下面定義了名為 getMessage和 calculateState 的方法:
1 class N
2 State in {True = 2, False = 1, null = 0},
3 initialized 1 or 2 for end-of-line categories, 0 otherwise
4 method getMessage(object N)
5 return N.State
6 method calculateState(state s, data [d1, d2,...])
7 return max( [d1, d2,...] )
案例研究:廣度優先搜索
問題陳述:需要計算出一個圖結構中某一個節點到其它所有節點的距離。
解決方案: Source源節點給所有鄰接點發出值為0的信號,鄰接點把收到的信號再轉發給自己的鄰接點,每轉發一次就對信號值加1:
1 class N
2 State is distance,
3 initialized 0 for source node, INFINITY for all other nodes
4 method getMessage(N)
5 return N.State + 1
6 method calculateState(state s, data [d1, d2,...])
7 min( [d1, d2,...] )
案例研究:網頁排名和 Mapper 端數據聚合
這個演算法由Google提出,使用權威的PageRank演算法,通過連接到一個網頁的其他網頁來計算網頁的相關性。真實演算法是相當復雜的,但是核心思想是權重可以傳播,也即通過一個節點的各聯接節點的權重的均值來計算節點自身的權重。
1 class N
2 State is PageRank
3 method getMessage(object N)
4 return N.State / N.OutgoingRelations.size()
5 method calculateState(state s, data [d1, d2,...])
6 return ( sum([d1, d2,...]) )
要指出的是上面用一個數值來作為評分實際上是一種簡化,在實際情況下,我們需要在Mapper端來進行聚合計算得出這個值。下面的代碼片段展示了這個改變後的邏輯 (針對於 PageRank 演算法):
1 class Mapper
2 method Initialize
3 H = new AssociativeArray
4 method Map(id n, object N)
5 p = N.PageRank / N.OutgoingRelations.size()
6 Emit(id n, object N)
7 for all id m in N.OutgoingRelations do
8 H{m} = H{m} + p
9 method Close
10 for all id n in H do
11 Emit(id n, value H{n})
12
13 class Recer
14 method Rece(id m, [s1, s2,...])
15 M = null
16 p = 0
17 for all s in [s1, s2,...] do
18 if IsObject(s) then
19 M = s
20 else
21 p = p + s
22 M.PageRank = p
23 Emit(id m, item M)
應用:圖分析,網頁索引
值去重 (對唯一項計數)
問題陳述: 記錄包含值域F和值域 G,要分別統計相同G值的記錄中不同的F值的數目 (相當於按照 G分組).
這個問題可以推而廣之應用於分面搜索(某些電子商務網站稱之為Narrow Search)
Record 1: F=1, G={a, b}
Record 2: F=2, G={a, d, e}
Record 3: F=1, G={b}
Record 4: F=3, G={a, b}
Result:
a -> 3 // F=1, F=2, F=3
b -> 2 // F=1, F=3
d -> 1 // F=2
e -> 1 // F=2
解決方案 I:
第一種方法是分兩個階段來解決這個問題。第一階段在Mapper中使用F和G組成一個復合值對,然後在Recer中輸出每個值對,目的是為了保證F值的唯一性。在第二階段,再將值對按照G值來分組計算每組中的條目數。
第一階段:
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...]])
3 for all category g in [g1, g2,...]
4 Emit(record [g, f], count 1)
5
6 class Recer
7 method Rece(record [g, f], counts [n1, n2, ...])
8 Emit(record [g, f], null )
第二階段:
1 class Mapper
2 method Map(record [f, g], null)
3 Emit(value g, count 1)
4
5 class Recer
6 method Rece(value g, counts [n1, n2,...])
7 Emit(value g, sum( [n1, n2,...] ) )
解決方案 II:
第二種方法只需要一次MapRece 即可實現,但擴展性不強。演算法很簡單-Mapper 輸出值和分類,在Recer里為每個值對應的分類去重然後給每個所屬的分類計數加1,最後再在Recer結束後將所有計數加和。這種方法適用於只有有限個分類,而且擁有相同F值的記錄不是很多的情況。例如網路日誌處理和用戶分類,用戶的總數很多,但是每個用戶的事件是有限的,以此分類得到的類別也是有限的。值得一提的是在這種模式下可以在數據傳輸到Recer之前使用Combiner來去除分類的重復值。
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...] )
3 for all category g in [g1, g2,...]
4 Emit(value f, category g)
5
6 class Recer
7 method Initialize
8 H = new AssociativeArray : category -> count
9 method Rece(value f, categories [g1, g2,...])
10 [g1', g2',..] = ExcludeDuplicates( [g1, g2,..] )
11 for all category g in [g1', g2',...]
12 H{g} = H{g} + 1
13 method Close
14 for all category g in H do
15 Emit(category g, count H{g})
應用:日誌分析,用戶計數
互相關
問題陳述:有多個各由若干項構成的組,計算項兩兩共同出現於一個組中的次數。假如項數是N,那麼應該計算N*N。
這種情況常見於文本分析(條目是單詞而元組是句子),市場分析(購買了此物的客戶還可能購買什麼)。如果N*N小到可以容納於一台機器的內存,實現起來就比較簡單了。
配對法
第一種方法是在Mapper中給所有條目配對,然後在Recer中將同一條目對的計數加和。但這種做法也有缺點:
使用 combiners 帶來的的好處有限,因為很可能所有項對都是唯一的
不能有效利用內存
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 for all item j in [i1, i2,...]
5 Emit(pair [i j], count 1)
6
7 class Recer
8 method Rece(pair [i j], counts [c1, c2,...])
9 s = sum([c1, c2,...])
10 Emit(pair[i j], count s)
Stripes Approach(條方法?不知道這個名字怎麼理解)
第二種方法是將數據按照pair中的第一項來分組,並維護一個關聯數組,數組中存儲的是所有關聯項的計數。The second approach is to group data by the first item in pair and maintain an associative array (「stripe」) where counters for all adjacent items are accumulated. Recer receives all stripes for leading item i, merges them, and emits the same result as in the Pairs approach.
中間結果的鍵數量相對較少,因此減少了排序消耗。
可以有效利用 combiners。
可在內存中執行,不過如果沒有正確執行的話也會帶來問題。
實現起來比較復雜。
一般來說, 「stripes」 比 「pairs」 更快
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 H = new AssociativeArray : item -> counter
5 for all item j in [i1, i2,...]
6 H{j} = H{j} + 1
7 Emit(item i, stripe H)
8
9 class Recer
10 method Rece(item i, stripes [H1, H2,...])
11 H = new AssociativeArray : item -> counter
12 H = merge-sum( [H1, H2,...] )
13 for all item j in H.keys()
14 Emit(pair [i j], H{j})
應用:文本分析,市場分析
參考資料:Lin J. Dyer C. Hirst G. Data Intensive Processing MapRece
用MapRece 表達關系模式
在這部分我們會討論一下怎麼使用MapRece來進行主要的關系操作。
篩選(Selection)
1 class Mapper
2 method Map(rowkey key, tuple t)
3 if t satisfies the predicate
4 Emit(tuple t, null)
投影(Projection)
投影只比篩選稍微復雜一點,在這種情況下我們可以用Recer來消除可能的重復值。
1 class Mapper
2 method Map(rowkey key, tuple t)
3 tuple g = project(t) // extract required fields to tuple g
4 Emit(tuple g, null)
5
6 class Recer
㈨ 鄰域的定義是唯一的嗎鄰域的定義與搜索效率及結 果有關聯嗎簡要說明你的結
不是。有關聯。
鄰域:鄰域是指集合上的一種基礎的拓撲結構。在集合論中,它是以點a為中心的任何開區間,記作:U(a)。在拓撲學和相關的數學領域中,鄰域是拓撲空間中的基本概念。有鄰域公理(鄰域公理是現代數學拓撲結構的基礎概念)、開鄰域和閉鄰域、去心鄰域等相關研究的著作。
廣義鄰域搜索演算法的統一結構:
1.對優化過程作兩方面分解處理:方面1、基於優化空間的分層(原問題分解為子問題求解,最後將各子問題的解逆向綜合為原問題的解)方面2、基於優化進程的分層(進程層次分為若干階段,各階段採用不同的搜索演算法或鄰域函數進行優化)目前混合演算法的結構類型主要可歸納為串列、鑲嵌、並行及混合結構。
串列結構。
鑲嵌結構。
並行結構(又分為同步式並行、非同步式並行、網路結構)。
同步式:各子演算法相對獨立但與主過程的通訊必須同步。
非同步式:子演算法與主過程的通訊不受其他子演算法的限制。
網路結構:各演算法分別在獨立的存儲器上執行獨立的搜索,演算法間的通信是通過網路相互傳遞的。