解決Matlab(R2016a) Sheffield GATBX遺傳工具箱的一些問題

  • 簡介:學習遺傳算法並用Matlab實現算法的時候碰到了如下問題:
    未找到 'gadst'

  • 解決辦法:Google了一下解決辦法,就是說Matlab自帶的Toolbox裏面的是GA(另一個),所以我們用的gadst沒用balabala…然後呢,當然就是去下載Sheffield的GATBX工具箱咯。然而,下好再配置好後測試一下,又報錯:
    error
    打開文件夾看看:

error2

納尼 ????WTF!!!!!!!

雖然Matlab給出瞭解決辦法(要更改文件擴展名,請將目錄改變爲文件的文件夾,鍵入:
movefile crtbp.M crtbp.m_bad; movefile crtbp.m_bad crtbp.m,然後改變目錄返回。),但是這麼多文件怎麼改呢??好吧,我直接給改好後的文件吧。重新添加一下路徑,然後讓我們來測試一下吧!

目標是求 y = x.*cos(5*pi*x) + 3.5 在[-1,2.5]區間上的最大值。

目標函數文件: fun_sigv.m

% filename: fun_sigv.m
function y = fun_sigv(x)
y = x.*cos(5*pi*x) + 3.5;
end

算法實現腳本文件:yichuan.m

% filename: yichuan.m
% 遺傳算法的測試
opt_minmax = 1; %目標優化類型:1 最大化, -1最小化
num_ppu = 50; %種羣規模:個體個數
num_gen = 60; %最大遺傳代數
len_ch = 20; %基因長度
gap = 0.9; % 代溝
sub = -1; %變量取值下限
up = 2.5; %變量取值上限
cd_gray = 1; % 是否選擇格雷編碼方式: 1 是; 0 否
sc_log = 0; % 是否選擇對數標度: 1 是; 0 否
trace = zeros(num_gen, 2); % 遺傳迭代性能跟蹤器
fieldd = [len_ch; sub; up; 1-cd_gray; sc_log; 1; 1]; %區域描述器
chrom = crtbp(num_ppu, len_ch); % 初始化生成種羣
k_gen = 0;
x = bs2rv(chrom, fieldd); % 翻譯初始化種羣爲十進制
fun_v = fun_sigv(x); % 計算目標函數值
tx = sub:.01:up;
plot(tx, fun_sigv(tx)), xlabel('x'), ylabel('y'), title('一元函數優化結果'), hold on;

while k_gen < num_gen
    fit_v = ranking(-opt_minmax*fun_v); % 計算目標函數的適應度(基於秩的適應度計算)
    selchrom = select('rws', chrom, fit_v, gap); % 使用輪盤賭方式選擇
    selchrom = recombin('xovsp', selchrom); % 交叉(單點交叉)
    selchrom = mut(selchrom); % 變異(離散變異)
    x = bs2rv(selchrom, fieldd); % 子代個體翻譯
    fun_v_sel = fun_sigv(x); % 計算子代個體對應目標函數值
    [chrom, fun_v] = reins(chrom, selchrom, 1, 1, opt_minmax*fun_v,...
        opt_minmax*fun_v_sel); % 根據目標函數值將子代個體插入新羣種
    [f, id] = max(fun_v); % 尋找當前種羣最優解
    x = bs2rv(chrom, fieldd); %二進制串到實值的轉換
    f = f* opt_minmax;
    fun_v = fun_v * opt_minmax;
    k_gen = k_gen + 1;
    trace(k_gen, 1) = f; % 矩陣的秩,即對角元素之和
    trace(k_gen, 2) = mean(fun_v);
end

plot(x(id), f, 'r*'), figure, plot(trace(:, 1), 'r-*'), hold on;
plot(trace(:, 2), 'b-o'), legend('各子代種羣最優解', '各子代種羣平均值'),...
    xlabel('迭代次數'), ylabel('目標函數優化情況'), title('一元函數優化過程');

在命令行裏面輸入yichuan.m,就會出現結果:

result

問題終於解決了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章