使用遺傳算法解決多變量函數優化問題!

        很多朋友在碰到多變量值優化的問題的時候不能很好的將問題轉化,利用有效編碼的方法將解的個數,解的編碼很好的很合理的進行設計,因此不能利用遺傳算法進行問題的求解!

       其實,簡單的來說,就是將多個變量的數值編碼編排進去,進行組合,只需要增長基因個體的長度,但是要明確每個變量具體的位置,然後讓每個變量轉化成二進制的等長編碼,組合在一起,就可以來運算了!

       當然,我們要利用一個矩陣去跟蹤每組迭代的結果的大小:

trace = zeros(3,MAXGEN);

       然後,要構造一個譯碼矩陣FieldD,由bs2rv函數將種羣Chrom根據譯碼矩陣換成時值向量,返回十進制的矩陣:

       且FieldD矩陣的結構如下:

FieldD=[len;lb;ub;code;scale;lbin;ubin];每個變量的含義最好搞清楚,不然得到的結果就不好了!
ObjV = Y.*sin(2*pi*X)+X.*cos(2*pi*Y); 當然我們也要有一個比較好的代價函數
這個是函數的主體部分:
while gen < MAXGEN
    FitnV = ranking(-ObjV);
    Selch = select('sus',Chrom,FitnV,GGAP);
    Selch = recombin('xovsp',Selch,px);
    Selch = mut(Selch,pm);
    XY = bs2rv(Selch,FieldD);
    X = XY(:,1);Y = XY(:,2);
    ObjvSel = Y.*sin(2*pi*X)+X.*cos(2*pi*Y);
    [Chrom,ObjV] = reins(Chrom,Selch,1,1,ObjV,ObjvSel);
    XY = bs2rv(Chrom,FieldD);
    gen = gen + 1;
    
    [Y,I] = min(ObjV);
    trace(1:2,gen) = XY(I,:);
    trace(3,gen) = Y;
end

當然我們也要先將目標函數顯示出來,看看基本的函數的形式:

 

還有就是設計遺傳算法的參數估計:基本上也都差不太多,更我上一篇博客基本一樣!

NIND = 40;
MAXGEN = 50;
PRECI = 20;
GGAP = 0.95;
px = 0.7;
pm = 0.01;

 

經遺傳算法之後,這個最優解的位置是:(圖中標記藍點的位置)

算法的迭代次數和優化的趨勢是:

 

最優解是:X = -1.2624 Y = 1.9999 Z = -3.2563
發佈了72 篇原創文章 · 獲贊 14 · 訪問量 89萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章