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