司欣格,包建東
(1.南京理工大學(xué) 機(jī)械工程學(xué)院,江蘇 南京 210094;2.南京理工大學(xué) 自動(dòng)化學(xué)院,江蘇 南京 210094)
根據(jù)形狀誤差的國家標(biāo)準(zhǔn)及國際標(biāo)準(zhǔn),直線度誤差定義為被測(cè)實(shí)際直線相對(duì)于理想直線的偏差,該理想直線應(yīng)符合最小條件[1].直線度的優(yōu)劣會(huì)影響產(chǎn)品的性能及壽命等指標(biāo),特別對(duì)于炮管,因此直線度誤差的評(píng)判是一個(gè)重要的課題.已經(jīng)有不少學(xué)者對(duì)于計(jì)算直線度誤差作了很多工作.目前,深孔軸線直線度誤差評(píng)定的方法也有很多.本文新研究了兩種算法——爬山法和微分進(jìn)化法來計(jì)算深孔軸線直線度誤差.對(duì)這兩種算法計(jì)算深孔軸線直線度誤差過程進(jìn)行仿真并對(duì)其結(jié)果進(jìn)行評(píng)定.
利用爬山算法和微分進(jìn)化算法搜索理想直線得到直線度,并和其他算法比較其優(yōu)劣性.采用實(shí)驗(yàn)中得到的不同坐標(biāo)的偏心距進(jìn)行仿真實(shí)驗(yàn).
目標(biāo)函數(shù)的確立建立于最小包容區(qū)域法[2].
假設(shè)直線方程
f(x)=kx+b.
(1)
與包容直線平行.
xi,yi為測(cè)量得到的數(shù)據(jù)
計(jì)算各點(diǎn)到直線(1)y軸方向的距離,即
εi=yi-f(xi).
(2)
求出εi中的最大值和最小值,令
g(x)=max(εi)-min(εi),i∈{1,2,3,…,10}.
(3)
滿足g(x)最小的直線為理想直線,g(x)為目標(biāo)函數(shù),得到的值越小,越滿足條件[3].又有
g(x)=max(εi)-min(εi)=
max(yi-f(xi))-min(yi-f(xi))=
max[yi-(kxi+b)]-min[yi-(kxi+b)]=
max(yi-kxi)-min(yi-kxi).
(4)
所以目標(biāo)函數(shù)ε(x)和直線截距b無關(guān).
即g(kc)與g(kc+length),g(kc-length)進(jìn)行比較,(kc為當(dāng)前位置).并向最優(yōu)的方向前進(jìn)一步,否則當(dāng)前位置即為最優(yōu)解位置.
爬山算法的優(yōu)點(diǎn)是避免遍歷,從某點(diǎn)判斷前進(jìn)的最優(yōu)方向來搜索出一條能夠達(dá)到最優(yōu)解的路徑[4].
歸一化[5],令
k=kmin+kc(kmax-kmin).
(5)
微分進(jìn)化算法相比遺傳算法最大的優(yōu)勢(shì)就在于能夠保留優(yōu)秀的變異個(gè)體[6].操作如下[7]:
1.3.1 變異操作
vi=xr1+F(xr2-xr3),i=1,2,…,NP,
(6)
式中:{xr1,xr2,xr3}是在父代種群中隨機(jī)選取的3個(gè)不同的個(gè)體,vi為變異后的個(gè)體,NP為種群規(guī)模,NP≥4,F∈[0,2](常量).
1.3.2 交叉操作
ui=[ui,1,ui,2,…,ui,D]:
i=1,…,NP,j=1,…,NP,
(7)
式中:randb∈[0,1](隨機(jī)數(shù));CR∈[0,1](常量);randj∈[1,D](隨機(jī)數(shù)).
1.1.3 選擇操作
(8)
本文使用的優(yōu)化算法基于搜索理想直線.
利用式(4)對(duì)KC進(jìn)行歸一化,對(duì)歸一化的KC進(jìn)行二進(jìn)制編碼,將隨機(jī)得到的向量KC當(dāng)作個(gè)體,對(duì)其進(jìn)行微分進(jìn)化.
實(shí)驗(yàn)數(shù)據(jù)來自文獻(xiàn)[8],通過光電測(cè)試對(duì)深孔不同位置的偏心距進(jìn)行測(cè)量,得到表1 數(shù)據(jù).
爬山算法實(shí)驗(yàn)參數(shù)如表2所示.
表2 爬山算法實(shí)驗(yàn)參數(shù)表
微分進(jìn)化算法實(shí)驗(yàn)參數(shù)如表3所示.
表3 微分進(jìn)化算法實(shí)驗(yàn)參數(shù)表
從表4 結(jié)果可以看出,爬山算法3次實(shí)驗(yàn)得到的直線度誤差雖然接近,但卻不同,說明目標(biāo)函數(shù)g(x)有很多極小點(diǎn).這也暴露了爬山算法搜索直線度的問題——易陷入局部最優(yōu).解決的辦法是采樣隨機(jī)重啟爬山算法.除此以外,爬山算法搜索的次數(shù)較多,效率較低.
從圖1 和表4 可以看出,微分進(jìn)化算法不到20步就收斂到最優(yōu)解,可以看出其效率之高,而且也能得到較為精確的值.圖像也反映了微分進(jìn)化算法只保留優(yōu)秀的個(gè)體.但在實(shí)驗(yàn)過程中,偶爾也會(huì)陷入局部最優(yōu),得到一個(gè)較大的值.解決的辦法是對(duì)微分進(jìn)化算法變異策略進(jìn)行改進(jìn),如文獻(xiàn)[9]的方法,增加跳出局部最優(yōu)的幾率.
圖1 微分進(jìn)化算法進(jìn)化過程
表4 仿真結(jié)果
表5 各算法計(jì)算結(jié)果
表6 結(jié)果比較
本文仿真結(jié)果與文獻(xiàn)[8]結(jié)果比對(duì)可知,爬山算法和微分進(jìn)化算法得到的精度都高于極值搜索法和分割逼近法.微分進(jìn)化算法得到的精度是最高的.
通過仿真實(shí)驗(yàn)可知,使用爬山算法和微分進(jìn)化算法計(jì)算深軸孔直線度都是可行的,而且能得到較高精度的值且具有較高的效率,爬山算法的效率要低于微分進(jìn)化算法.但是,針對(duì)兩種算法都有可能陷入局部最優(yōu)解的情況,還需要利用已有的方法對(duì)算法進(jìn)行改進(jìn).