Matlab遺傳演算法最佳化問題求解的範例程式碼,matlab遺傳演算法

來源:互聯網
上載者:User

Matlab遺傳演算法最佳化問題求解的範例程式碼,matlab遺傳演算法

代碼如下:

function m_main()clearclcMax_gen = 100;% 運行代數pop_size = 100;%種群大小chromsome = 10;%染色體的長度pc = 0.9;%交叉機率pm = 0.25;%變異機率gen = 0;%統計代數%初始化init = 40*rand(pop_size, chromsome)-20;pop = init;fit = obj_fitness(pop);[max_fit, index_max] = max(fit);maxfit = max_fit;[min_fit, index_min] = min(fit);best_indiv = pop(index_max, :);%迭代操作while gen<Max_gen    gen = gen+1;      bt(gen) = max_fit;    if  maxfit<max_fit;        maxfit = max_fit;        pop(index_min, :) = pop(index_max, :);        best_indiv = pop(index_max, :);    end    best_indiv_tmp(gen) = pop(index_max);    newpop = ga(pop, pc, pm, chromsome, fit);    fit = obj_fitness(newpop);    [max_fit, index_max] = max(fit);    [min_fit, index_min] = min(fit);    pop = newpop;    trace(1, gen) = max_fit;    trace(2, gen) = sum(fit)./length(fit);end%運行結果[f_max gen_ct] = max(bt)%求的最大值以及代數maxfitbest_indiv%畫圖% bthold onplot(trace(1, :), '.g:');plot( trace(2, :), '.r-');title('實驗結果圖')xlabel('迭代次數/代'), ylabel('最佳適應度(最大值)');%座標標註plot(gen_ct-1, 0:0.1:f_max+1, 'c-');%畫出最大值text(gen_ct, f_max+1,   '最大值')hold off    function  [fitness] = obj_fitness(pop)        %適應度計算函數        [r c] = size(pop);        x = pop;        fitness = zeros(r, 1);        for i = 1:r            for j = 1:c                fitness(i, 1) = fitness(i, 1)+sin(sqrt(abs(40*x(i))))+1-abs(x(i))/20.0;            end        end    end    function newpop = ga(pop, pc, pm, chromsome, fit)        pop_size = size(pop, 1);        %輪盤賭選擇        ps = fit/sum(fit);        pscum = cumsum(ps);%size(pscum)        r = rand(1, pop_size);        qw = pscum*ones(1, pop_size);        selected = sum(pscum*ones(1, pop_size)<ones(pop_size, 1)*r)+1;        newpop = pop(selected, :);        %交叉        if pop_size/2 ~= 0            pop_size = pop_size-1;        end                for i = 1:2:pop_size-1            while pc>rand                c_pt = round(8*rand+1);                pop_tp1 = newpop(i, :);pop_tp2 = newpop(i+1, :);                newpop(i+1, 1:c_pt) = pop_tp1(1, 1:c_pt);                newpop(i, c_pt+1:chromsome) = pop_tp2(1, c_pt+1:chromsome);            end                    end        % 變異        for i = 1:pop_size            if pm>rand                m_pt = 1+round(9*rand);                newpop(i, m_pt) = 40*rand-20;            end        end    endend



MATLAB編遺傳演算法來源程式

遺傳演算法執行個體:

也是自己找來的,原代碼有少許錯誤,本人都已更正了,調試運行都通過了的。
對於初學者,尤其是還沒有編程經驗的非常有用的一個檔案
遺傳演算法執行個體

% 下面舉例說明遺傳演算法 %
% 求下列函數的最大值 %
% f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] %
% 將 x 的值用一個10位的二值形式表示為二值問題,一個10位的二值數提供的解析度是每為 (10-0)/(2^10-1)≈0.01 。 %
% 將變數域 [0,10] 離散化為二範圍 [0,1023], x=0+10*b/1023, 其中 b 是 [0,1023] 中的一個二值數。 %
% %
%--------------------------------------------------------------------------------------------------------------%
%--------------------------------------------------------------------------------------------------------------%

% 編程
%-----------------------------------------------
% 2.1初始化(編碼)
% initpop.m函數的功能是實現群體的初始化,popsize表示群體的大小,chromlength表示染色體的長度(二值數的長度),
% 長度大小取決於變數的二進位編碼的長度(在本例中取10位)。
%遺傳演算法子程式
%Name: initpop.m
%初始化
function pop=initpop(popsize,chromlength)
pop=round(rand(popsize,chromlength)); % rand隨機產生每個單元為 {0,1} 行數為popsize,列數為chromlength的矩陣,
% roud對矩陣的每個單元進行圓整。這樣產生的初始種群。

% 2.2 計算目標函數值
% 2.2.1 將位元轉化為十進位數(1)
%遺傳演算法子程式
%Name: decodebinary.m
%產生 [2^n 2^(n-1) ... 1] 的行向量,然後求和,將二進位轉化為十進位
function pop2=decodebinary(pop)
[px,py]=size(pop); %求pop行和列數
for i=1:py
pop1(:,i)=2.^(py-i).*pop(:,i);
end
pop2=sum(pop1,2); %求pop1的每行之和

% 2.2.2 將二進位編碼轉化為十進位數(2)
% decodechrom.m函數的功能是將染色體(或二進位編碼)轉換為十進位,參數spoint表示待解碼的二進位串的起始位置
% (對於多個變數而言,如有兩個變數,採用20為表示,每個變數10為,則第一個變數從1開始,另一個變數從11開始。本例為1),
% 參數1ength表示所截取的長度(本例為10)。
%遺傳演算法子程式
%Name: decodechrom.m
%將二進位編碼轉換成十進位
function pop2=decodechrom(pop,spoint,length)
pop1=pop(:,spoint:spoint+length-1);
pop2=decodebinary(pop1);

% 2.2.3 計算目標函數值
% cal......餘下全文>>
 
對於matlab的基於遺傳演算法的路徑最佳化問題的代碼

演算法編寫和你的約束條件有關係的
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.