天天看點

基于GA優化的競價博弈頻譜配置設定算法的matlab仿真

目錄

​​一、理論基礎​​

​​二、核心程式​​

​​三、仿真測試結果​​

作者ID  :fpga和matlab
擅長技術:
1.無線基帶,無線圖傳,編解碼 
2.機器視覺,圖像處理,三維重建 
3.人工智能,深度學習 
4.智能控制,智能優化
5.其他      

一、理論基礎

       由于在一個MIMO系統中,使用者數量M大于可用的頻譜個數N,是以,必有一部分使用者存在頻譜共享的問題。目前,現有的關于頻譜配置設定的方法主要有基于競價的配置設定方法,基于博弈論的配置設定方法。這裡,有别于傳統的頻譜配置設定方法,這裡的配置設定方法,考慮了多種因素,我們分别假設為y1,y2,y3,。。。。。yn,并通過遺傳優化算法,計算一種配置設定方案,即M個使用者配置設定到N個頻譜上, 分别計算以不同因素進行劃分所得到的效益值V1,V2,V3,。。。。。Vn,,最後将這将這n個因素進行權重,得到其綜合效益值:

基于GA優化的競價博弈頻譜配置設定算法的matlab仿真

      這裡,主要通過遺傳算法來優化,獲得不同的頻譜資源,分别配置設定多個不同的使用者。這裡,權值由預先設定得到。

       因素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];      

三、仿真測試結果

基于GA優化的競價博弈頻譜配置設定算法的matlab仿真

繼續閱讀