急網(wǎng)絡(luò)無人機(jī)部署方案選擇與Matlab實(shí)現(xiàn))
做5G應(yīng)急網(wǎng)絡(luò)無人機(jī)部署的人大概率都碰到過這樣一個(gè)問題方案聽起來都對(duì)可真到拍板的時(shí)候誰也說不清為什么選這個(gè)不選那個(gè)。覆蓋范圍要大、業(yè)務(wù)容量要高、續(xù)航得夠、成本還不能離譜再加上抗毀性和可靠性指標(biāo)一多決策就成了扯皮現(xiàn)場(chǎng)。我最早接手這類項(xiàng)目時(shí)也走了一段彎路后來逐步把層次分析法AHP引入到初步網(wǎng)絡(luò)規(guī)劃階段配合Matlab做快速計(jì)算把“拍腦袋選方案”變成了“打分排序選方案”整個(gè)過程可控、可解釋、可復(fù)現(xiàn)。這篇文章就把這套流程完整拆開講從理論建模、判斷矩陣構(gòu)造到Matlab源碼實(shí)現(xiàn)和實(shí)際運(yùn)行結(jié)果適合做應(yīng)急通信、無線網(wǎng)絡(luò)規(guī)劃、無人機(jī)行業(yè)應(yīng)用以及相關(guān)課題設(shè)計(jì)的同學(xué)參考。1. 無人機(jī)應(yīng)急網(wǎng)絡(luò)規(guī)劃先從決策需求說起1.1 5G應(yīng)急網(wǎng)絡(luò)里的無人機(jī)到底怎么部署應(yīng)急通信場(chǎng)景有很多種山區(qū)暴雨導(dǎo)致地面基站失聯(lián)、大型活動(dòng)現(xiàn)場(chǎng)短時(shí)間內(nèi)涌入大量人流、偏遠(yuǎn)地區(qū)臨時(shí)需要專網(wǎng)保障。這些場(chǎng)景有一個(gè)共同點(diǎn)地面通信基礎(chǔ)設(shè)施要么受損、要么根本不存在但又必須在幾小時(shí)內(nèi)恢復(fù)基本語音和數(shù)據(jù)服務(wù)。這時(shí)候無人機(jī)掛載輕量化5G基站升空就可以快速建立臨時(shí)覆蓋。這幾年這類方案已經(jīng)不是什么實(shí)驗(yàn)項(xiàng)目國內(nèi)外的應(yīng)急演練里都能看到它的身影。但無人機(jī)部署不是“飛一架上去”這么簡(jiǎn)單。飛多高、用幾架、怎么協(xié)同會(huì)直接影響網(wǎng)絡(luò)性能。我拆成三種典型形態(tài)來看高空單機(jī)廣覆蓋一架載重較大的無人機(jī)升到300米左右掛一個(gè)輕量化基站覆蓋半徑能做到5公里上下。優(yōu)點(diǎn)是覆蓋大、調(diào)度簡(jiǎn)單缺點(diǎn)是業(yè)務(wù)容量有限而且一旦這架飛機(jī)出問題整片區(qū)域就失聯(lián)了。中空多機(jī)組網(wǎng)三到五架無人機(jī)在150米左右高度組成鏈狀或網(wǎng)格狀覆蓋通過空地鏈路互聯(lián)。覆蓋和容量都排在中間位置冗余性也比單機(jī)好比較適合需要“恢復(fù)一片區(qū)域”的場(chǎng)景。低空集群讓十幾架小型無人機(jī)在80米以下高度密集部署每架覆蓋半徑不大但可以拼出高容量區(qū)域。這個(gè)方案容量最高、冗余性最強(qiáng)但成本高、協(xié)同復(fù)雜續(xù)航也短。這三種方案沒有絕對(duì)的好壞完全取決于應(yīng)急場(chǎng)景到底要什么。如果是地震后保證搜救隊(duì)伍通信可能更看重覆蓋和抗毀如果是一場(chǎng)大型演唱會(huì)臨時(shí)保障業(yè)務(wù)容量就變成第一優(yōu)先級(jí)。所以做初步網(wǎng)絡(luò)規(guī)劃本質(zhì)上是在多個(gè)目標(biāo)之間做權(quán)衡決策。1.2 為什么初步規(guī)劃階段適合用層次分析法在決定用AHP之前我其實(shí)試過幾種辦法先說結(jié)論在“初步規(guī)劃”這個(gè)時(shí)間點(diǎn)上AHP是性價(jià)比最高的。如果一開始就上粒子群或遺傳算法你得先定義一個(gè)完整的目標(biāo)函數(shù)把覆蓋、容量、成本、抗毀性全部量化成數(shù)學(xué)表達(dá)式還要給出初始化種群和迭代參數(shù)。這在項(xiàng)目前期根本不現(xiàn)實(shí)因?yàn)槟氵B精確的信道模型和地形數(shù)據(jù)都還沒有算出來的結(jié)果大概率也是“垃圾進(jìn)垃圾出”。如果直接做鏈路預(yù)算和覆蓋仿真又太慢。應(yīng)急場(chǎng)景給決策的時(shí)間窗口只有幾個(gè)小時(shí)你不可能光學(xué)射線追蹤模型就花上一天。而且仿真的前提是方案已經(jīng)基本確定否則算十種方案來回對(duì)比時(shí)間成本無法接受。AHP的核心價(jià)值在于它能把你腦子里的定性判斷結(jié)構(gòu)化。比如“覆蓋范圍比部署成本重要”這件事平時(shí)只能靠開會(huì)討論但用AHP你可以把這種判斷變成判斷矩陣?yán)锏臄?shù)字再通過一致性檢驗(yàn)判斷這些數(shù)字有沒有自相矛盾。計(jì)算量極小Matlab跑一次連一秒都不用結(jié)果還能清清楚楚打印出來給團(tuán)隊(duì)看。所以我說它是一個(gè)很好的“先粗選、后細(xì)算”的開頭工具。它不會(huì)替代后續(xù)的仿真和實(shí)測(cè)但它能幫你在數(shù)據(jù)不完整的時(shí)候先做出一個(gè)不后悔的方向性決策。2. 手把手搭建AHP決策模型2.1 三層結(jié)構(gòu)目標(biāo)、準(zhǔn)則、方案怎么定AHP模型的第一步是搭層次結(jié)構(gòu)。這個(gè)結(jié)構(gòu)通常分三層目標(biāo)層、準(zhǔn)則層、方案層。目標(biāo)層這一層非常直白本例中就是“選出最優(yōu)的5G應(yīng)急網(wǎng)絡(luò)無人機(jī)部署方案”。準(zhǔn)則層是我個(gè)人認(rèn)為整個(gè)模型里最關(guān)鍵的一層。準(zhǔn)則選得好不好直接決定決策結(jié)果有沒有參考價(jià)值。我給這個(gè)項(xiàng)目定了五個(gè)準(zhǔn)則覆蓋范圍C1用覆蓋半徑或覆蓋面積衡量應(yīng)急場(chǎng)景首先要讓人“找得到網(wǎng)”。業(yè)務(wù)容量C2用同時(shí)支持在線用戶數(shù)或小區(qū)吞吐量衡量決定網(wǎng)絡(luò)能不能真正用起來。續(xù)航駐空能力C3用連續(xù)駐空時(shí)間衡量應(yīng)急網(wǎng)絡(luò)不是飛幾分鐘就算完至少要撐到地面搶修完成。部署成本C4包含無人機(jī)平臺(tái)、掛載設(shè)備、運(yùn)輸、人力等綜合費(fèi)用預(yù)算約束是現(xiàn)實(shí)存在的??箽Э煽啃訡5用系統(tǒng)冗余度和故障切換能力衡量應(yīng)急場(chǎng)景最怕單點(diǎn)失效。方案層就是上面說的三個(gè)候選方案S1高空單機(jī)、S2中空多機(jī)、S3低空集群。它們?cè)谖鍌€(gè)準(zhǔn)則下的表現(xiàn)可以先用一個(gè)表定下來后面填判斷矩陣時(shí)心里就有數(shù)了。候選方案飛行高度覆蓋半徑在線容量駐空時(shí)間綜合成本冗余性S1 高空單機(jī)300m5km約200用戶6h約50萬低S2 中空多機(jī)150m8km約800用戶4h約120萬中S3 低空集群80m3km約1200用戶2h約200萬高這些數(shù)字在我這里是“初步規(guī)劃階段的經(jīng)驗(yàn)估值”不是最終設(shè)計(jì)值。但沒關(guān)系A(chǔ)HP要的就是這種量級(jí)的判斷而不是厘米級(jí)精度。2.2 判斷矩陣的標(biāo)度規(guī)則與構(gòu)造方法層次結(jié)構(gòu)搭好之后下一步就是構(gòu)造判斷矩陣這也是AHP最核心、最需要認(rèn)真對(duì)待的一步。判斷矩陣采用Saaty提出的1到9標(biāo)度法1表示兩個(gè)因素同等重要3表示前者比后者稍微重要5表示明顯重要7表示強(qiáng)烈重要9表示極端重要2、4、6、8是中間過渡值。反過來比較就填倒數(shù)比如覆蓋范圍對(duì)業(yè)務(wù)容量是3那業(yè)務(wù)容量對(duì)覆蓋范圍就是1/3。我拿實(shí)際生活打個(gè)比方。假如你選餐廳覺得口味比環(huán)境明顯重要就給口味和環(huán)境這一對(duì)比值填5反過來環(huán)境比口味就是1/5。這里的“5”不是數(shù)學(xué)意義上是五倍而是“排序意義上的顯著差異”這一點(diǎn)很多人理解偏了。準(zhǔn)則層的判斷矩陣我寫成這樣A [ 1 3 4 5 2 1/3 1 2 4 1/2 1/4 1/2 1 3 1/3 1/5 1/4 1/3 1 1/4 1/2 2 3 4 1 ]讀法就是第一行第一列永遠(yuǎn)是1表示覆蓋范圍和它自己同等重要第一行第二列是3表示覆蓋范圍比業(yè)務(wù)容量稍微重要第二行第一列自然是1/3。檢查一下對(duì)角線全是1對(duì)角線對(duì)稱位置互為倒數(shù)這是判斷矩陣的最基本規(guī)則。這里必須強(qiáng)調(diào)判斷矩陣?yán)锏臄?shù)字應(yīng)該來自場(chǎng)景需求而不是拍腦袋。做應(yīng)急網(wǎng)絡(luò)規(guī)劃時(shí)最好由項(xiàng)目經(jīng)理、網(wǎng)絡(luò)工程師、現(xiàn)場(chǎng)指揮一起打分把不同角色的訴求都量化進(jìn)去。代碼只是把人的判斷計(jì)算成排序如果輸入質(zhì)量不高輸出自然不可信。2.3 權(quán)重計(jì)算與一致性檢驗(yàn)的數(shù)學(xué)原理判斷矩陣構(gòu)造完成之后要從中提取出每個(gè)準(zhǔn)則的權(quán)重。最常用、理論最嚴(yán)謹(jǐn)?shù)姆椒ㄊ翘卣飨蛄糠āTO(shè)判斷矩陣為A它的最大特征值對(duì)應(yīng)的特征向量就是權(quán)重向量。直覺上可以這樣理解一個(gè)完全一致的判斷矩陣?yán)锔餍械谋戎店P(guān)系是嚴(yán)格固定的這個(gè)固定關(guān)系恰好體現(xiàn)在主特征向量里即使矩陣不完全一致主特征向量也仍然能代表“整體上”的權(quán)重關(guān)系。所以我先把A做特征值分解取出最大特征值對(duì)應(yīng)的特征向量再歸一化就得到了五個(gè)準(zhǔn)則的權(quán)重。但取權(quán)重之前必須先過一致性檢驗(yàn)這關(guān)。所謂一致性很好理解如果我認(rèn)為覆蓋比容量重要A比B重要容量比續(xù)航重要B比C重要那我就不應(yīng)該認(rèn)為覆蓋比續(xù)航還次要。判斷矩陣如果存在這種矛盾計(jì)算出來的權(quán)重就沒有意義。一致性指標(biāo)的計(jì)算方式如下CI (lambda_max - n) / (n - 1) CR CI / RI其中n是矩陣階數(shù)RI是平均隨機(jī)一致性指標(biāo)只和階數(shù)有關(guān)。n等于5的時(shí)候RI取1.12。CR小于0.1我們就認(rèn)為判斷矩陣的一致性可以接受如果CR大于0.1說明打分矛盾太多建議回到判斷矩陣去修改。從數(shù)學(xué)角度看當(dāng)矩陣完全一致時(shí)lambda_max恰好等于nCI就是0。所以CI實(shí)際上衡量的是矩陣偏離完全一致的程度。這個(gè)約束非常重要它不是走過場(chǎng)而是AHP比“隨便打個(gè)分求平均”更可靠的核心原因。3. Matlab源碼實(shí)現(xiàn)從主流程到核心函數(shù)3.1 主腳本的整體設(shè)計(jì)思路Matlab代碼并不復(fù)雜但結(jié)構(gòu)要清爽。我的做法是把任務(wù)拆成四步第一步輸入準(zhǔn)則層判斷矩陣第二步計(jì)算準(zhǔn)則權(quán)重并做一致性檢驗(yàn)第三步依次讀取五個(gè)方案層判斷矩陣分別計(jì)算方案在單準(zhǔn)則下的權(quán)重第四步把準(zhǔn)則權(quán)重和方案權(quán)重加權(quán)求和得到綜合得分并排序。寫代碼時(shí)我習(xí)慣把每一層矩陣都放在腳本最前面用清晰的變量名和注釋標(biāo)記好。這樣做的好處是你在做參數(shù)敏感性分析時(shí)只需要改動(dòng)腳本頂部的幾行數(shù)據(jù)不用深入函數(shù)內(nèi)部到處找。算例規(guī)模小沒有必要一開始就搞類、搞包一個(gè)腳本加兩個(gè)小函數(shù)是最舒服的節(jié)奏。還要注意方案層的判斷矩陣一共有五個(gè)分別對(duì)應(yīng)五個(gè)準(zhǔn)則存放順序要一致。我這里用的是Matlab的元胞數(shù)組cell按下標(biāo)順序存放既靈活又不容易混。3.2 判斷矩陣輸入與自動(dòng)校驗(yàn)寫計(jì)算函數(shù)時(shí)我加了幾道基礎(chǔ)的輸入校驗(yàn)。首先判斷矩陣必須是方陣否則沒法求特征值其次對(duì)角線元素必須全為1這是AHP的基本性質(zhì)最后矩陣階數(shù)不能超過9因?yàn)楹竺鏁?huì)用到的RI表只做到9階。這些校驗(yàn)雖然簡(jiǎn)單但能在實(shí)際使用中幫你省掉很多排查時(shí)間。你可能會(huì)問順序不對(duì)成什么程度會(huì)被校驗(yàn)攔住比如一個(gè)本該是5階的矩陣不小心填成4階特征值還是能算出來但結(jié)果完全錯(cuò)誤。加了校驗(yàn)程序會(huì)在第一步就報(bào)錯(cuò)而不是等到最后給你一個(gè)看似合理實(shí)則錯(cuò)誤的排序結(jié)果。3.3 權(quán)重計(jì)算、CR求解與排序輸出附源碼下面給出完整可運(yùn)行的源碼。主腳本負(fù)責(zé)組織流程和輸出結(jié)果ahp_eig函數(shù)負(fù)責(zé)單層權(quán)重計(jì)算和一致性判斷。%% AHP_5G_UAV_Deployment.m % 5G應(yīng)急網(wǎng)絡(luò)無人機(jī)部署方案AHP決策 % 層次分析法用于初步網(wǎng)絡(luò)規(guī)劃 clear; clc; close all; %% 1. 準(zhǔn)則層判斷矩陣 % C1 覆蓋范圍, C2 業(yè)務(wù)容量, C3 續(xù)航駐空, C4 部署成本, C5 抗毀可靠 A [ 1 3 4 5 2 1/3 1 2 4 1/2 1/4 1/2 1 3 1/3 1/5 1/4 1/3 1 1/4 1/2 2 3 4 1 ]; %% 2. 計(jì)算準(zhǔn)則權(quán)重并做一致性檢驗(yàn) [W, CR, lambda_max] ahp_eig(A); fprintf(準(zhǔn)則層權(quán)重: ); fprintf(%.4f , W); fprintf(\n最大特征值: %.4f, CR %.4f\n, lambda_max, CR); if CR 0.1 error(準(zhǔn)則層一致性檢驗(yàn)不通過請(qǐng)調(diào)整判斷矩陣); end %% 3. 方案層判斷矩陣 % 三個(gè)方案: S1 高空單機(jī)廣覆蓋, S2 中空多機(jī)組網(wǎng), S3 低空集群 % 依次對(duì)應(yīng) 5 個(gè)準(zhǔn)則 B cell(5, 1); B{1} [1 1/3 1/5; 3 1 1/3; 5 3 1]; % 覆蓋范圍 B{2} [1 1/4 1/5; 4 1 1/3; 5 3 1]; % 業(yè)務(wù)容量 B{3} [1 1/3 1/3; 3 1 1; 3 1 1]; % 續(xù)航駐空 B{4} [1 3 5; 1/3 1 3; 1/5 1/3 1]; % 部署成本 B{5} [1 1/3 1/4; 3 1 1/2; 4 2 1]; % 抗毀可靠 n_scheme size(B{1}, 1); S zeros(n_scheme, 1); for k 1:5 [Wk, CRk, ~] ahp_eig(B{k}); if CRk 0.1 fprintf(準(zhǔn)則%d對(duì)應(yīng)的方案判斷矩陣CR %.4f不通過\n, k, CRk); end fprintf(準(zhǔn)則%d下方案權(quán)重: %.4f %.4f %.4f, CR %.4f\n, ... k, Wk(1), Wk(2), Wk(3), CRk); S S W(k) * Wk; end %% 4. 綜合得分與排序 fprintf(\n 方案綜合得分 \n); [~, idx] sort(S, descend); for i 1:n_scheme fprintf(S%d: %.4f\n, i, S(i)); end fprintf(推薦方案: S%d\n, idx(1));function [W, CR, lambda_max] ahp_eig(A) % AHP_EIG 使用特征向量法計(jì)算AHP判斷矩陣權(quán)重和一致性比例 % 輸入: A - 判斷矩陣 % 輸出: W - 歸一化權(quán)重向量, CR - 一致性比例, lambda_max - 最大特征值 n size(A, 1); % 基礎(chǔ)校驗(yàn) if size(A, 2) ~ n error(判斷矩陣必須為方陣); end if any(abs(diag(A) - 1) 1e-6) error(判斷矩陣對(duì)角線元素必須為1); end if n 9 error(RI表只支持到9階矩陣); end % 特征值分解 [V, D] eig(A); lambda_vec real(diag(D)); lambda_max max(lambda_vec); [~, idx] max(lambda_vec); W abs(V(:, idx)); W W / sum(W); % 一致性檢驗(yàn) CI (lambda_max - n) / (n - 1); RI_table [0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45]; RI RI_table(n); CR CI / RI; if n 3 CR 0; % 一階、二階矩陣天然一致 end end這段代碼可以直接保存成兩個(gè)文件主腳本和一個(gè)函數(shù)文件。函數(shù)文件在Matlab中另存為ahp_eig.m即可。運(yùn)行后命令行會(huì)依次打印準(zhǔn)則層權(quán)重、每一個(gè)方案矩陣的CR值以及三個(gè)方案的綜合得分排序。3.4 可復(fù)用把代碼改造成函數(shù)如果你不想每次修改都打開腳本可以把主腳本也封裝成函數(shù)輸入是準(zhǔn)則層判斷矩陣和方案層判斷矩陣元胞數(shù)組輸出是權(quán)重、CR和綜合得分。我提供一個(gè)改造思路核心代碼不變只包一層外殼function [S, W, CR] ahp_5g_uav(A, B) % AHP_5G_UAV 一鍵計(jì)算無人機(jī)部署AHP決策 % 輸入: A - 準(zhǔn)則層判斷矩陣 % B - 方案層判斷矩陣元胞數(shù)組 % 輸出: S - 方案綜合得分, W - 準(zhǔn)則權(quán)重, CR - 準(zhǔn)則一致性比例 n_scheme size(B{1}, 1); [W, CR, ~] ahp_eig(A); S zeros(n_scheme, 1); for k 1:length(B) [Wk, ~, ~] ahp_eig(B{k}); S S W(k) * Wk; end [~, idx] sort(S, descend); fprintf(推薦方案: S%d\n, idx(1)); end這樣你以后做別的決策比如選基站位置、選回傳鏈路方案只需要換成自己的判斷矩陣和方案矩陣調(diào)用同一個(gè)函數(shù)就行。4. 真實(shí)案例用AHP從三個(gè)備選部署方案中選最優(yōu)4.1 場(chǎng)景假設(shè)與參數(shù)設(shè)定為了展示完整流程我構(gòu)造了一個(gè)貼近現(xiàn)實(shí)的場(chǎng)景某山區(qū)因暴雨引發(fā)道路中斷地面基站供電機(jī)房被洪水浸泡整個(gè)鄉(xiāng)鎮(zhèn)的通信基本癱瘓。應(yīng)急通信車沒法在短時(shí)間內(nèi)開到現(xiàn)場(chǎng)唯一可行的手段是無人機(jī)快速升空恢復(fù)該區(qū)域的5G覆蓋。初步判斷受影響區(qū)域半徑約3公里人口集中在幾個(gè)村子預(yù)計(jì)高峰時(shí)段同時(shí)在網(wǎng)用戶可能達(dá)到1000人以上需要至少撐過4小時(shí)的黃金救援期。在這個(gè)場(chǎng)景下三個(gè)備選方案分別是前面提過的S1高空單機(jī)、S2中空多機(jī)、S3低空集群。這些方案的參數(shù)是我根據(jù)公開產(chǎn)品資料和工程經(jīng)驗(yàn)估算的不同項(xiàng)目肯定有差異但用來做AHP演示足夠了。注意這里我用的是“初步規(guī)劃”思路不借助高精度地形和信道模型先把方向和大概率正確的方案選出來后續(xù)再做詳細(xì)設(shè)計(jì)。這就像裝修房子先確定“要不要砸墻”的大方向而不是一上來就確定每個(gè)插座的位置。4.2 運(yùn)行結(jié)果與分析我把前面那段代碼在Matlab環(huán)境里跑了一遍過程結(jié)果如下具體數(shù)值可能因Matlab版本和浮點(diǎn)計(jì)算