中利用無限循環(huán)將程序控制在主程序函數(shù)中,就出現(xiàn)了前面實驗結果中令人迷惑的情況。
注:他是一個膽大心細的人,觀察還挺仔細的。
摘要: 智能飛行器航跡規(guī)劃問題是一個大范圍多目標多約束的三維規(guī)劃問題,這類問題可以歸屬于路徑規(guī)劃問題,在滿足相應條件的同時要求在較短的時間內(nèi)以較短的路程到達目的地。本文把航跡的約束條件轉化到實際問題中,通過對A*算法的改進,建立起符合飛行器航跡規(guī)劃的兩種算法模型。通過兩種方案算法的比較,在兩種情況下,算法程序實現(xiàn)得到航跡規(guī)劃結果表和路徑圖。算法的有效性和復雜度分析結果表明,給出的求解算法是十分有效的。
1. 引言
智能飛行器飛行操作的多約束環(huán)境下的航跡快速規(guī)劃優(yōu)化技術,是研究智能飛行器控制的一個重要問題。但是由于系統(tǒng)結構的設置產(chǎn)生的限制,這類飛行器的定位系統(tǒng),對自身進行精準定位無法進行,定位誤差如果累計到一定程度,就可能導致整體任務失敗。所以在飛行過程中對定位誤差進行校正,是智能飛行器航跡規(guī)劃中一項重要步驟 [1]。本文研究智能飛行器在系統(tǒng)定位精度限制下的航跡快速規(guī)劃問題,即如何在軌跡規(guī)劃的過程中,將定位誤差限制在可接受范圍內(nèi),保證任務的順利完成。
假定飛行器的出發(fā)點為A點,目的地為B點。其航跡約束如下:
(1) 飛行器在空間飛行過程中需要實時定位,其定位誤差包括垂直誤差和水平誤差。飛行器每飛行1m,垂直誤差和水平誤差將各增加 δδ 個專用單位,,以下簡稱單位。到達終點時垂直誤差和水平誤差均應小于個單位,并且為簡化問題,假設當垂直誤差和水平誤差均小于 θθ 個單位時,飛行器仍能夠按照規(guī)劃路徑飛行。
(2) 飛行器在飛行過程中需要對定位誤差進行校正。飛行區(qū)域中存在一些安全位置(稱之為校正點)可用于誤差校正,當飛行器到達校正點即能夠根據(jù)該位置的誤差校正類型進行誤差校正。校正垂直和水平誤差的位置可根據(jù)地形在航跡規(guī)劃前確定??尚U娘w行區(qū)域分布位置依賴于地形,無統(tǒng)一規(guī)律。若垂直誤差、水平誤差都能得到及時校正,則飛行器可以按照預定航線飛行,通過若干個校正點進行誤差校正后最終到達目的地。
(3) 在出發(fā)地A點,飛行器的垂直和水平誤差均為0。
(4) 飛行器在垂直誤差校正點進行垂直誤差校正后,其垂直誤差將變?yōu)?,水平誤差保持不變。
(5) 飛行器在水平誤差校正點進行水平誤差校正后,其水平誤差將變?yōu)?,垂直誤差保持不變。
(6) 當飛行器的垂直誤差不大于 α1α1 個單位,水平誤差不大于 α2α2 個單位時才能進行垂直誤差校正。
(7) 當飛行器的垂直誤差不大于 β1β1 個單位,水平誤差不大于 β2β2 個單位時才能進行水平誤差校正。
(8) 飛行器在轉彎時受到結構和控制系統(tǒng)的限制,無法完成即時轉彎(飛行器前進方向無法突然改變),假設飛行器的最小轉彎半徑為200 m。
圍繞在上述軌跡約束條件下,本文為智能飛行器建立航跡規(guī)劃一般模型和算法。本文針對參考文獻 [1] 中的數(shù)據(jù),規(guī)劃分別滿足約束條件(1)~(7)和(1)~(8)時,飛行器運行的最優(yōu)航跡。另外,飛行器的飛行環(huán)境可能隨時間動態(tài)變化,雖然校正點在飛行前已經(jīng)確定,但飛行器在部分校正點進行誤差校正時存在無法達到理想校正的情況(即將某個誤差精確校正為0),例如天氣等不可控因素導致飛行器到達校正點也無法進行理想的誤差校正。若假設飛行器在部分校正點(文獻 [1] 中附件1和附件2中F列標記為“1”的數(shù)據(jù))能夠成功將某個誤差校正為0的概率是80%,如果校正失敗,則校正后的剩余誤差為min (error, 5)個單位(其中error為校正前誤差,min為取小函數(shù)),本文針對此情況重新規(guī)劃航跡。
2. 飛行器航跡規(guī)劃模型
在給定初始點A到終點B條件下,為確保測量飛機從A點通過校正點到達B點的全程距離最小 [2]。設 titi 時刻,飛行器當前位置與可達域校正點的距離為 A(ti)A(ti) [3],結合約束條件,建立飛行器航跡規(guī)劃模型:
按照本文參數(shù)特點,本文采用水平、垂直誤差交替校正的方式,為了將飛行器的誤差控制在較小的范圍內(nèi),應當先校正垂直誤差,然后校正水平誤差,之后依次輪流交替,直至到達終點B。
為求解最優(yōu)航跡問題,我們設計了兩套方案:
方案一:每次選擇可達域中最近的校正點,此方案能在某誤差得到校正的同時將另一誤差控制在最小范圍,使得各方向誤差距離極限仍有較大空間(記為“誤差余量”)能最大程度的保障飛行器抵達終點。但是由于每次選擇最短距離前進,過于保守,航跡規(guī)劃過程中會遇到某點S1可達域為空而無法繼續(xù)的情況。實際上,前面的規(guī)劃中若某些點能選擇大一點的距離前進,校正相同次數(shù)后或能到達S2,而S2可達域非空,可以繼續(xù)規(guī)劃航跡,即也許可以避開S1。
方案二:考慮飛行器當前位置到可達域校正點的距離和可達域校正點到達終點的直線距離,計算兩距離之和可得多個組合,假設各個校正點為當前位置,計算其是否存在可達域,去除不存在可達域的校正點對應的組合,在剩余組合中取最小組合。該方案屬于A*算法的應用,既考慮了當前飛行距離也預估了后續(xù)飛行距離,從全局考慮了飛行路徑,便于找到較優(yōu)路徑。但是可能遇到可達域為空的情況,此時無法繼續(xù)規(guī)劃路徑,因而不能抵達終點。
加上約束條件(8)之后,在飛行器遇到障礙物時,并且正處于全局最優(yōu)路徑上的時候,采用局部A*路徑規(guī)劃算法 [4],將障礙物區(qū)域表示為一個球體 [5]。則半圓危險度表示為:
當飛行器未遇到障礙物時,危險度為0,飛行器的誤差則與到障礙物中心的距離有關,距離越近越危險但誤差相對小。(1)式中, RmaxRmax 是障礙物的最大半徑, dvdv 是飛行器到障礙物中心的距離。
那么加上約束條件(8)之后,規(guī)劃模型為:
本文中轉彎帶來的副作用僅是縮小了校正點的工作域,因此方案一、二的算法規(guī)劃航跡適用兩種情況。
另外,飛行器的飛行環(huán)境可能隨時間動態(tài)變化,雖然校正點在飛行前已經(jīng)確定,但飛行器在部分校正點進行誤差校正時存在無法達到理想校正的情況(即將某個誤差精確校正為0)。因此,部分校正點存在校正失效的可能,會增大該方向誤差的值,進而減少其誤差余量,將影響后續(xù)校正點的選擇,會改變航跡甚至使得航跡規(guī)劃失敗。因校正失效的概率較低(只有20%),根據(jù)不同情況可以用兩種方法處理失效的校正:
1) 每次校正后加上概率誤差。
2) 極端情況,每次有可能校正失效時都按照校正失效處理,即必然失效。
3. 改進的A*算法
下面我們將在經(jīng)典的A*算法 [6] - [12] 的基礎上,提出了一種改進的A*算法,用于解決本文的飛行器航跡規(guī)劃問題。
A*算法是一種啟發(fā)式搜索算法。通過在搜索空間不斷評估路徑的估價函數(shù)值來啟發(fā)式搜索節(jié)點來構造最優(yōu)路徑。通常A*算法的常用估價函數(shù)表示為
其中,n為當前節(jié)點, f(n)f(n) 是從初始點經(jīng)由節(jié)點為n到目標點的估價函數(shù), g(n)g(n) 是在狀態(tài)空間中從初始節(jié)點到節(jié)點n的實際代價, h(n)h(n) 是從節(jié)點n到目標節(jié)點的估計代價。
A*搜索算法的搜索效率由搜索方向和搜索步長決定。為了提升搜索效率,需要從搜索方向、搜索節(jié)點確定改進。路徑的優(yōu)劣則主要依賴于估價函數(shù)的設計。所以我們從搜索節(jié)點和方向方面改進,結合本文要解決的問題,我們改進了校正點的選擇,例如每次選擇可達域中最近的校正點,并且本文需要加入水平、垂直的校正,在算法的搜索方向改進中,考慮如果當前校正了水平誤差,則水平誤差暫時無憂,能最快降低垂直誤差的機會就是下一次校正,如此交替進行,這樣就 能確保兩個誤差都盡可能小,所以改進后的算法的設計對極端情況承受能力較強,并將改進的算法的具體步驟設計在下文給出,除非另有說明,否則我們總是在本文中使用算法命名的符號。
第一方面,我們針對所有文獻 [1] 中的數(shù)據(jù),來分別規(guī)劃滿足約束條件(1)~(7)時,飛行器運行的最優(yōu)航跡,并綜合性考慮以下兩個優(yōu)化目標:
1) 通過算法來預判每個最優(yōu)路徑,使航跡長度盡可能小;
2) 通過算法來使經(jīng)過校正區(qū)域進行校正的次數(shù)盡可能少,并討論分析所用算法的有效性和復雜度。
第二方面,我們針對所有文獻 [1] 附件中的數(shù)據(jù)(參數(shù)與第一問的相同),分別規(guī)劃滿足條件(1)~(8)時飛行器的航跡,并綜合性考慮以下兩個優(yōu)化目標:
1) 通過算法來預判每個最優(yōu)路徑,使航跡長度盡可能小;
2) 通過算法來使經(jīng)過校正區(qū)域進行校正的次數(shù)盡可能少,并討論分析所用算法的有效性和復雜度。
最后根據(jù)一、二兩種方案設計出算法1和2,并根據(jù)通過軟件實現(xiàn)后得出的結果,畫出兩個方面的兩個數(shù)據(jù)集的航跡規(guī)劃路徑圖,見圖1~6,將結果(即飛行器從起點出發(fā)所經(jīng)過的誤差校正點編號,和校正前的誤差)依次填入航跡規(guī)劃的結果表中,見表1~8,并得出算法的時空復雜度,證明算法是有效可行的,見表9。
算法1
Step1:計算當前點A的可達域;
Step2:若可達域非空,轉Step3,否則,標記當前點為失敗點,轉Step5;
Step3:若終點在可達域中,結束程序,逆序輸出軌跡棧元素即可得到航跡規(guī)劃。否則,轉Step4;
Step4:選擇可達域中最近的點Aclose作為后繼點,將可達域存入可達域棧C中,將上一校正點Apre校正后的水平誤差pre_h和垂直誤差pre_v存入對應棧,以pre_h和pre_v為基礎加上Apre到A點所產(chǎn)生的誤差增量來更新對應誤差h、v,將后繼點加入軌跡棧,標記后繼點為當前點,轉Step1;
Step5:將軌跡棧中棧頂元素出棧(此元素與當前點一致,均為失敗點),再從棧頂出棧一個元素,標記為當前點,將可達域棧棧頂元素出棧,去除可達域中失敗點的信息(確保此點不會再有機會選中)之后作為新的可達域,將水平誤差棧和垂直誤差棧棧頂元素出棧,替換當前水平誤差h和垂直誤差v,轉Step2。
Figure 1. 1 (data 1) track route map
圖1. 一(數(shù)據(jù)1)航跡路徑圖
Figure 2. 1 (data 2) track route map
圖2. 一(數(shù)據(jù)2)航跡路徑圖
算法2
Step1:計算當前點A的可達域,若終點是在可達域轉Step2;否則轉Step3;
Step2:計結束程序,逆序輸出軌跡棧元素即可得到航跡規(guī)劃;
Step3:計計算當前點到達可達域各點的誤差,在此誤差值下,假設可達域各點Bi為當前點;
Step4:計計算Bi是否存在可達域,將存在可達域的點加入集合P;
Step5:計計算點A到P中各點的距離以及P中各點到終點的距離之和,以上一校正點Apre校正后的水平誤差pre_h和垂直誤差pre_v為基礎加上Apre到A點所產(chǎn)生的誤差增量來更新對應誤差h、v,取最小距離點作為后繼點,將后繼點加入軌跡棧,標記后繼點為當前點,進入Step1。
Figure 3. 2 (data 1) track route map
圖3. 二(數(shù)據(jù)1)航跡路徑圖
Figure 4. 2 (data 2) track route map
圖4. 二(數(shù)據(jù)2)航跡路徑
第三方面,我們解決飛行器在部分校正點進行誤差校正時存在無法達到理想校正的情況,假設飛行器到達該校正點時即可知道在該點處是否能夠校正成功,但不論校正成功與否,均不能改變規(guī)劃路徑,因此,部分校正點存在校正失效的可能,會增大該方向誤差的值,進而減少其誤差余量,將影響后續(xù)校正點的選擇,會改變航跡甚至使得航跡規(guī)劃失敗。因校正失效的概率較低,只有20%,根據(jù)不同情況可以用兩種方法處理失效的校正,并設計出算法3和算法4,它是以算法1和算法2為基礎調整校正時的誤差更新機制。
Figure 5. 3 (data 1) track route map
圖5. 三(數(shù)據(jù)1)航跡路徑圖
Figure 6. 3 (data 2) track route map
圖6. 三(數(shù)據(jù)2)航跡路徑圖
數(shù)據(jù) | 航跡路徑 |
數(shù)據(jù)1 | ['A', '503', '200', '136', '80', '237', '278', '375', '172', '340', '277', '501', 'B'] |
數(shù)據(jù)2 | ['A','140', '150', '114', '234', '222', '230', '225', '255', '123', '45', '160', '92', '93', '61', '292', 'B'] |
Table 1. Final track route 1
表1. 最終航跡路徑一
矯正點編號 | 矯正前垂直誤差 | 矯正前水平誤差 | 矯正點類型 |
0 | 0 | 0 | 出發(fā)點A |
140 | 5.6558 | 5.6558 | 垂直 |
150 | 6.7568 | 12.4126 | 水平 |
114 | 15.52 | 8.7632 | 垂直 |
234 | 4.5312 | 13.2944 | 水平 |
222 | 11.8136 | 7.2823 | 垂直 |
230 | 11.16 | 18.4422 | 水平 |
225 | 14.9956 | 3.8358 | 垂直 |
255 | 7.4652 | 11.3009 | 水平 |
123 | 15.9366 | 8.4714 | 垂直 |
45 | 10.0062 | 18.4776 | 水平 |
160 | 17.4913 | 7.4851 | 垂直 |
92 | 5.7762 | 13.2613 | 水平 |
93 | 15.2609 | 9.4847 | 垂直 |
61 | 9.8342 | 19.3189 | 水平 |
292 | 16.3881 | 6.5539 | 垂直 |
326 | 6.9605 | 13.5144 | 終點B |
Table 2. Track planning results Table 1: Data 1
表2. 航跡規(guī)劃結果表一:數(shù)據(jù)1
校正點編號 | 校正前垂直誤差 | 校正前水平誤差 | 校正點類型 |
0 | 0 | 0 | 出發(fā)點A |
503 | 13.3879 | 13.3879 | 垂直 |
200 | 0.8651 | 14.253 | 水平 |
136 | 14.2711 | 13.4061 | 垂直 |
80 | 4.2867 | 17.6928 | 水平 |
237 | 8.9145 | 4.6277 | 垂直 |
278 | 17.9422 | 22.57 | 水平 |
375 | 23.4841 | 5.5418 | 垂直 |
172 | 15.4964 | 21.0382 | 水平 |
340 | 21.6449 | 6.1485 | 垂直 |
277 | 12.0024 | 18.1509 | 水平 |
501 | 20.1663 | 8.164 | 垂直 |
612 | 8.49 | 16.654 | 終點B |
Table 3. Track planning results Table 1: Data 2
表3. 航跡規(guī)劃結果表一:數(shù)據(jù)2
算法 | 數(shù)據(jù)編號 | 校正點數(shù)量(個) | 航跡長度(米) |
算法1 | 1 | 31 | 169641 |
算法2 | 1 | 11 | 110358 |
算法1 | 2 | 31 | 1680639 |
算法2 | 2 | 15 | 850848 |
Table 4. Comparison of Algorithms 1 and 2 on Data 1 and 2
表4. 算法1和2在數(shù)據(jù)1和2上的對比
數(shù)據(jù) | 航跡路徑 |
數(shù)據(jù)1 | ['A', '503', '200', '136', '80', '237', '278', '375', '172', '340', '277', '501', 'B'] |
數(shù)據(jù)2 | ['A','140', '150', '114', '234', '222', '230', '225', '255', '123', '45', '160', '92', '93', '61', '292', 'B'] |
Table 5. Final track route 2
表5. 最終航跡路徑二
校正點編號 | 校正后垂直誤差 | 校正后水平誤差 | 校正點類型 |
0 | 0 | 0 | 出發(fā)點A |
503 | 0 | 13.3879 | 垂直 |
200 | 0.8651 | 0 | 水平 |
136 | 0 | 13.4061 | 垂直 |
80 | 4.2867 | 0 | 水平 |
237 | 0 | 4.6277 | 垂直 |
278 | 17.9422 | 0 | 水平 |
375 | 0 | 5.5418 | 垂直 |
172 | 15.4964 | 0 | 水平 |
340 | 0 | 6.1485 | 垂直 |
277 | 12.0024 | 0 | 水平 |
501 | 0 | 8.164 | 垂直 |
612 | 0 | 0 | 終點B |
Table 6. Track planning results Table 2: Data 1
表6. 航跡規(guī)劃結果表二:數(shù)據(jù)1
矯正點編號 | 矯正后垂直誤差 | 矯正后水平誤差 | 矯正點類型 |
0 | 0 | 0 | 出發(fā)點A |
140 | 0 | 5.6558 | 垂直 |
150 | 6.7568 | 0 | 水平 |
114 | 0 | 8.7632 | 垂直 |
234 | 4.5312 | 0 | 水平 |
222 | 0 | 7.2823 | 垂直 |
230 | 11.1599 | 0 | 水平 |
225 | 0 | 3.8358 | 垂直 |
255 | 7.4652 | 0 | 水平 |
123 | 0 | 8.4714 | 垂直 |
45 | 10.0062 | 0 | 水平 |
160 | 0 | 7.4851 | 垂直 |
92 | 5.7762 | 0 | 水平 |
175 | 0 | 8.3641 | 垂直 |
279 | 9.6878 | 0 | 水平 |
301 | 0 | 4.9531 | 垂直 |
61 | 12.3271 | 0 | 水平 |
292 | 0 | 6.5539 | 垂直 |
326 | 0 | 0 | 終點B |
Table 7. Track planning results Table 2: Data 2
表7. 航跡規(guī)劃結果表二:數(shù)據(jù)2
數(shù)據(jù)1 | 數(shù)據(jù)2 | ||||||
矯正點編號 | 矯正后 垂直誤差 | 矯正后 水平誤差 | 矯正點類型 | 矯正點編號 | 矯正后 垂直誤差 | 矯正后 水平誤差 | 矯正點類型 |
0 | 0 | 0 | 出發(fā)點A | 0 | 0 | 0 | 出發(fā)點A |
503 | 5 | 13.3879 | 垂直 | 157 | 0 | 9.4768 | 垂直 |
200 | 5.8651 | 5 | 水平 | 169 | 3.7014 | 0 | 水平 |
354 | 5 | 7.23 | 垂直 | 322 | 0 | 4.1481 | 垂直 |
80 | 19.8381 | 5 | 水平 | 252 | 3.8718 | 0 | 水平 |
237 | 5 | 9.6277 | 垂直 | 266 | 0 | 7.9939 | 垂直 |
282 | 18.6817 | 0 | 水平 | 270 | 6.4 | 0 | 水平 |
33 | 0 | 2.4699 | 垂直 | 89 | 0 | 7.5508 | 垂直 |
11 | 10.9239 | 0 | 水平 | 236 | 10.1274 | 0 | 水平 |
403 | 0 | 12.8409 | 垂直 | 132 | 0 | 9.7042 | 垂直 |
594 | 11.0291 | 0 | 水平 | 53 | 10.2592 | 0 | 水平 |
501 | 0 | 11.1969 | 垂直 | 112 | 0 | 5.2029 | 垂直 |
612 | 0 | 0 | 終點B | 268 | 2.1572 | 0 | 水平 |
? | ? | ? | ? | 273 | 0 | 5.0481 | 垂直 |
? | ? | ? | ? | 103 | 5.2292 | 0 | 水平 |
? | ? | ? | ? | 250 | 0 | 5.7711 | 垂直 |
? | ? | ? | ? | 243 | 6.9589 | 0 | 水平 |
? | ? | ? | ? | 73 | 0 | 3.5428 | 垂直 |
? | ? | ? | ? | 82 | 5.7316 | 0 | 水平 |
? | ? | ? | ? | 6 | 0 | 7.1847 | 垂直 |
? | ? | ? | ? | 249 | 9.0008 | 0 | 水平 |
? | ? | ? | ? | 274 | 0 | 2.8407 | 垂直 |
? | ? | ? | ? | 51 | 2.6237 | 0 | 水平 |
? | ? | ? | ? | 201 | 0 | 7.2799 | 垂直 |
? | ? | ? | ? | 12 | 8.7014 | 0 | 水平 |
? | ? | ? | ? | 321 | 0 | 7.1906 | 垂直 |
? | ? | ? | ? | 279 | 10.3589 | 1 | 水平 |
? | ? | ? | ? | 301 | 0 | 5.9531 | 垂直 |
? | ? | ? | ? | 38 | 9.8721 | 0 | 水平 |
? | ? | ? | ? | 110 | 0 | 3.9265 | 垂直 |
? | ? | ? | ? | 61 | 6.843 | 0 | 水平 |
? | ? | ? | ? | 292 | 0 | 6.5539 | 垂直 |
? | ? | ? | ? | 326 | 0 | 0 | 終點B |
Table 8. Track planning results Table 3: Data 1 and Data 2
表8. 航跡規(guī)劃結果表三:數(shù)據(jù)1和數(shù)據(jù)2
算法 | 時間復雜度 | 空間復雜度 |
算法1 | N2 | N |
算法2 | N3 | N |
Table 9. Space-time complexity of Algorithm 1 - 4
表9. 算法1~4的時空復雜度
算法3
Step1:計算當前點A的可達域;
Step2:若可達域非空,轉Step3,否則,標記當前點為失敗點,轉Step5;
Step3:若終點在可達域中,結束程序,逆序輸出軌跡棧元素即可得到航跡規(guī)劃。否則,轉Step4;
Step4:選擇可達域中最近的點Aclose作為后繼點,將可達域存入可達域棧C中,將上一校正點Apre校正后的水平誤差pre_h和垂直誤差pre_v存入對應棧,以pre_h和pre_v為基礎加上Apre到A點所產(chǎn)生的誤差增量來更新對應誤差h、v,若后繼點為可能失效點,將對應誤差加上bia進行二次校正,將后繼點加入軌跡棧,標記后繼點為當前點,轉Step1;
Step5:將軌跡棧中棧頂元素出棧(此元素與當前點一致,均為失敗點),再從棧頂出棧一個元素,標記為當前點,將可達域棧棧頂元素出棧,去除可達域中失敗點的信息(確保此點不會再有機會選中)之后作為新的可達域,將水平誤差棧和垂直誤差棧棧頂元素出棧,替換當前水平誤差h和垂直誤差v,轉Step2。
算法4
Step1:計算當前點A的可達域,若終點是在可達域轉Step2;否則轉Step3;
Step2:結束程序,逆序輸出軌跡棧元素即可得到航跡規(guī)劃;
Step3:計算當前點到達可達域各點的誤差,在此誤差值下,假設可達域各點Bi為當前點;
Step4:計算Bi是否存在可達域,將存在可達域的點加入集合P;
Step5:計算點A到P中各點的距離以及P中各點到終點的距離之和,以上一校正點Apre校正后的水平誤差pre_h和垂直誤差pre_v為基礎加上Apre到A點所產(chǎn)生的誤差增量來更新對應誤差h、v,若后繼點為可能失效點,將對應誤差加上bia進行二次校正,取最小距離點作為后繼點,將后繼點加入軌跡棧,標記后繼點為當前點,進入Step1。
4. 數(shù)值結果
本節(jié)利用已知數(shù)據(jù)來驗證算法1~4的有效性。我們的數(shù)值實驗是應用Python和Matlab軟件進行計算。
5. 總結
本文使用了一種新的改進的A*算法,算法模型在第一方面中,很好地降低兩個誤差增長所帶來的風險,如當前校正了水平誤差,則水平誤差暫時無憂,能最快降低垂直誤差的機會就是下一次校正,如此交替進行,能確保兩個誤差都盡可能小,算法的設計對極端情況承受能力較強,得出的路徑總長較短,耗費的時間較少,見表1~4。第二方面中,考慮轉彎帶來的副作用僅是縮小了校正點的工作域,因此還可利用問題1的算法規(guī)劃航跡,此時需將各個數(shù)據(jù)對應的參數(shù)減小0.63個單位,在問題1算法的基礎上規(guī)劃航跡,減少了工作量,并能得出很好的路徑,見表5~7。在第三方面中,考慮到部分校正點存在校正失效的可能,在正常情況和極端情況,每次有可能校正失效時都按照校正失效處理,大大增加了算法的可行性和覆蓋性,得出安全可行的路徑,見表8。總體來說,算法1~4在空間存在有解航跡時必能保證抵達終點,可以快速找到較優(yōu)軌跡甚至最優(yōu)軌跡,兩個算法模型優(yōu)勢互補,既能兼顧快速尋優(yōu)的需求,也能保障有解必達終點的安全性。
審核編輯:湯梓紅
評論
查看更多