司欣格,包建東
(1.南京理工大學 機械工程學院,江蘇 南京 210094;2.南京理工大學 自動化學院,江蘇 南京 210094)
根據形狀誤差的國家標準及國際標準,直線度誤差定義為被測實際直線相對于理想直線的偏差,該理想直線應符合最小條件[1].直線度的優劣會影響產品的性能及壽命等指標,特別對于炮管,因此直線度誤差的評判是一個重要的課題.已經有不少學者對于計算直線度誤差作了很多工作.目前,深孔軸線直線度誤差評定的方法也有很多.本文新研究了兩種算法——爬山法和微分進化法來計算深孔軸線直線度誤差.對這兩種算法計算深孔軸線直線度誤差過程進行仿真并對其結果進行評定.
利用爬山算法和微分進化算法搜索理想直線得到直線度,并和其他算法比較其優劣性.采用實驗中得到的不同坐標的偏心距進行仿真實驗.
目標函數的確立建立于最小包容區域法[2].
假設直線方程
f(x)=kx+b.
(1)
與包容直線平行.
xi,yi為測量得到的數據
計算各點到直線(1)y軸方向的距離,即
εi=yi-f(xi).
(2)
求出εi中的最大值和最小值,令
g(x)=max(εi)-min(εi),i∈{1,2,3,…,10}.
(3)
滿足g(x)最小的直線為理想直線,g(x)為目標函數,得到的值越小,越滿足條件[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)
所以目標函數ε(x)和直線截距b無關.
即g(kc)與g(kc+length),g(kc-length)進行比較,(kc為當前位置).并向最優的方向前進一步,否則當前位置即為最優解位置.
爬山算法的優點是避免遍歷,從某點判斷前進的最優方向來搜索出一條能夠達到最優解的路徑[4].
歸一化[5],令
k=kmin+kc(kmax-kmin).
(5)
微分進化算法相比遺傳算法最大的優勢就在于能夠保留優秀的變異個體[6].操作如下[7]:
1.3.1 變異操作
vi=xr1+F(xr2-xr3),i=1,2,…,NP,
(6)
式中:{xr1,xr2,xr3}是在父代種群中隨機選取的3個不同的個體,vi為變異后的個體,NP為種群規模,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](隨機數);CR∈[0,1](常量);randj∈[1,D](隨機數).
1.1.3 選擇操作
(8)
本文使用的優化算法基于搜索理想直線.
利用式(4)對KC進行歸一化,對歸一化的KC進行二進制編碼,將隨機得到的向量KC當作個體,對其進行微分進化.
實驗數據來自文獻[8],通過光電測試對深孔不同位置的偏心距進行測量,得到表1 數據.
爬山算法實驗參數如表2所示.

表2 爬山算法實驗參數表
微分進化算法實驗參數如表3所示.

表3 微分進化算法實驗參數表
從表4 結果可以看出,爬山算法3次實驗得到的直線度誤差雖然接近,但卻不同,說明目標函數g(x)有很多極小點.這也暴露了爬山算法搜索直線度的問題——易陷入局部最優.解決的辦法是采樣隨機重啟爬山算法.除此以外,爬山算法搜索的次數較多,效率較低.
從圖1 和表4 可以看出,微分進化算法不到20步就收斂到最優解,可以看出其效率之高,而且也能得到較為精確的值.圖像也反映了微分進化算法只保留優秀的個體.但在實驗過程中,偶爾也會陷入局部最優,得到一個較大的值.解決的辦法是對微分進化算法變異策略進行改進,如文獻[9]的方法,增加跳出局部最優的幾率.

圖1 微分進化算法進化過程

表4 仿真結果

表5 各算法計算結果

表6 結果比較
本文仿真結果與文獻[8]結果比對可知,爬山算法和微分進化算法得到的精度都高于極值搜索法和分割逼近法.微分進化算法得到的精度是最高的.
通過仿真實驗可知,使用爬山算法和微分進化算法計算深軸孔直線度都是可行的,而且能得到較高精度的值且具有較高的效率,爬山算法的效率要低于微分進化算法.但是,針對兩種算法都有可能陷入局部最優解的情況,還需要利用已有的方法對算法進行改進.