目錄
一、理論基礎
二、核心程式
三、仿真測試結果
作者ID :fpga和matlab
擅長技術:
1.無線基帶,無線圖傳,編解碼
2.機器視覺,圖像處理,三維重建
3.人工智能,深度學習
4.智能控制,智能優化
5.其他
一、理論基礎
由于在一個MIMO系統中,使用者數量M大于可用的頻譜個數N,是以,必有一部分使用者存在頻譜共享的問題。目前,現有的關于頻譜配置設定的方法主要有基于競價的配置設定方法,基于博弈論的配置設定方法。這裡,有别于傳統的頻譜配置設定方法,這裡的配置設定方法,考慮了多種因素,我們分别假設為y1,y2,y3,。。。。。yn,并通過遺傳優化算法,計算一種配置設定方案,即M個使用者配置設定到N個頻譜上, 分别計算以不同因素進行劃分所得到的效益值V1,V2,V3,。。。。。Vn,,最後将這将這n個因素進行權重,得到其綜合效益值:
這裡,主要通過遺傳算法來優化,獲得不同的頻譜資源,分别配置設定多個不同的使用者。這裡,權值由預先設定得到。
因素1:不同使用者的目前的信道優劣情況,如果目前某部分使用者信道情況較差,為了進一步提升其通信品質,則優先将這部分使用者配置設定單獨的頻率資源,而對于信道情況較好的一部分使用者,可以允許多個使用者共用某一頻率。這樣可以保證更可能多的使用者能夠正常通信。
因素2:使用者的需求情況進行配置設定,如果目前使用者的通信屬于實時性需求較強的情況,則優先配置設定頻譜資源(這裡涉及到具體的業務模型,比如視訊,電話等各種業務)而對于實時性要求較低的情況(如短信,文字資訊等各種業務),則可以配置設定同一頻率,做類似同頻不同時的通信。
因素3:如果某些使用者配置設定了相同的頻率,則考慮同一頻率下不同使用者的排隊時長,時長越短,則說明目前配置設定政策較優。比如同一頻率,單個使用者發送100bit資訊,和100個使用者發送100bit資訊,用時肯定短。再比如,有2個頻率資源,5個使用者,在發送業務類似的情況下,那麼一個頻率配置設定2個使用者,一個頻率配置設定3個使用者的排隊時間,肯定優于1個資源配置設定一個使用者,其餘一個頻率配置設定四個使用者。
根據遺傳優化算法流程可知,其詳細步驟如下所示:
步驟一:選擇問題解的一個編碼,給出一個有N個染色體的初始群體。編碼的主要功能為确定用何種碼制,然後将問題參數編碼形成基因碼鍊,每一個碼鍊代表一個個體,表示優化問題的一個解。 根據編碼方式不同可以分為二進制編碼和實數編碼兩種類型,其中二進制編碼的優勢在于編碼方式簡單,便于遺傳算法的交叉和編碼操作。
步驟二:對群體中的每一個染色體,計算它的适應函數值。适應函數值為群體進化時的選擇提供了依據,一般來說适應度越高,解的素質越好。适應度函數可以根據目标函數而定。
步驟三:若停止規則滿足,則算法停止,否則計算機率P,并以此機率分布,從舊的種群pop(t)中随機選取N個染色體構成一個新的種群。選擇操作常見的操作方式有比例 選擇和排序選擇方式。
步驟四:通過交叉,得到N個染色體的交叉集合。交叉的主要功能從種群中随機選擇兩個染色體,按一定的機率進行基因交換,交換位置的選取是随機的。
步驟五:以較小的變異機率,使得某染色體的一個基因發生變異,形成新的群體mutpop(t+1)。令t=t+1,pop(t)=mutpop(t),重複第2步。
二、核心程式
rng(1)
%初始值
N1 = 10;
N2 = 10;
N3 = 10;
N4 = 10;
NUM = N1+N2+N3+N4;%40個使用者
M = 4;%4個頻率資源
%下面開始使用遺傳優化算法
%根據遺傳算法進行參數的拟合
MAXGEN = 201;
NIND = 50;
Nums = 3;
%每個值優化
Chrom = crtbp(NIND,Nums*10);
Areas = [1 ,1 ,1;
NUM,NUM,NUM];
FieldD = [rep([10],[1,Nums]);Areas;rep([0;0;0;0],[1,Nums])];
gen = 0;
for a=1:1:NIND
%計算對應的目标值
[Moneys,N1,N2,N3,N4] = func_obj(N1,N2,N3,N4);
Js(a,1) = Moneys;
end
Objv = (Js+eps);
gen = 0;
fit2 = [];
Price2 = [];
%%
while gen < MAXGEN;
gen
%定義交叉機率和變異機率
if gen == 0
Pe0 = 0.95;
pe1 = 0.002;
else
Pe0 = 0.95*1/(1+exp(-1e4*f));
pe1 = 0.002*1/(1+exp(-1e4*f));
end
FitnV=ranking(Objv);
%遺傳選擇
Selch=select('sus',Chrom,FitnV);
%遺傳交叉
Selch=recombin('xovmp', Selch,Pe0);
%遺傳變異
Selch=mut( Selch,pe1);
phen1=bs2rv(Selch,FieldD);
Moneys3 = [];
for a=1:1:NIND
N1(a) = floor(phen1(a,1))+1;
N2(a) = floor(phen1(a,2))+1;
N3(a) = floor(phen1(a,3))+1;
N4(a) = NUM - (N1(a) + N2(a) + N3(a));
%計算對應的目标值
if N4(a) >= 1 & N4(a) <= NUM
[Moneys,N1(a),N2(a),N3(a),N4(a)] = func_obj(N1(a),N2(a),N3(a),N4(a));
else
Moneys = 10000;
end
JJ(a,1) = Moneys;
end
Objvsel = JJ ;
[Chrom,Objv]= reins(Chrom,Selch,1,1,Objv,Objvsel);
gen = gen+1;
[VV,II] = min(Objv);
indx = find(JJ==10000);
JJ(indx) = [];
fmax = max(JJ);
fave = mean(JJ);
f = fmax-fave;
N1_ = N1(II);
N2_ = N2(II);
N3_ = N3(II);
N4_ = NUM - (N1_ + N2_ + N3_);
fit(gen) = 1/std([N1_,N2_,N3_,N4_]);
if gen <= 64
fit2(gen) = mean(fit(1:gen));
else
fit2(gen) = mean(fit(gen-64:gen));
end
end
clc;
%輸出配置設定結果
N1_best = N1(II)
N2_best = N2(II)
N3_best = N3(II)
N4_best = NUM - (N1_best + N2_best + N3_best)
ITER = [1:MAXGEN];