Matlab遗传算法性能测试

遗传算法,结合生物学遗传规则用于问题最优解求解,具有广泛的用途。

然而,由于其属于不确定性算法,故在搜索性能和最优解的稳定性上仍有待改善。

利用Matlab的遗传算法,编写代码如下:

function [ output_args ] = ga_test
clear;

%解:X = [0, 0, ...]
%nVar = 30
%dims: [-30, 30]
    function fitness = sphere(vals)
        prod = vals .* vals;
        fitness = sum(prod, 2);
    end

%f(x) = 1/4000 * sum^n_1(x_i)^2 - prod^n_1 * cos(x_i/sqrt(i)) + 1
%f* = 0, x* = [0, 0, ...];
%nVar = 30
%dims: [-600, 600]
    function fitness = griewank(vals)
        [h w] = size(vals);
        p1 = vals.^2;
        p1 = 1/4000 .* sum(p1, 2);

        t = sqrt([1:w]);
        p2 = vals ./ repmat(t, h, 1);
        p2 = cos(p2);
        p2 = prod(p2, 2);
        fitness = p1 - p2 + 1;
    end

%解: X* = [1, 1, 1, ...]
%nVar: 30
    function fitness = RosenBroek(vals)
        [k n] = size(vals);
        vals1 = vals(:, 1:n-1);
        vals2 = vals(:, 2:n);
        tmp = vals2 - vals1 .* vals1;
        tmp = 100 * tmp .* tmp;
        tmp1 = (vals1 - 1).^2;
        fitness = sum(tmp, 2) + sum(tmp1, 2);
    end

%许多局部最小值,最优解:X = [0, 0], 固定2个变量
%nVar = 2
    function fitness = Rastrigin (X)
        v = X.^2 - 10 .* cos(2 * pi .* X) + 10;
        fitness = sum(v, 2);
    end

%参数
popSize = 50; 				% 群规模
Run = 4;                    % 测试轮次
option = gaoptimset('PopulationSize', popSize); %, 'UseParallel', true);

Ans = {};
for r = 1:Run  %轮次
    Func = r;     % 测试适应度函数
    switch Func
        case 1
            Func = @sphere
            Xmin = -100;
            Xmax = 100;
            nVar = 30;
        case 2
            Func = @griewank
            Xmin = -600;
            Xmax = 600;
            nVar = 30;
        case 3
            nVar = 30;
            Func = @RosenBroek
            Xmin = -100;
            Xmax = 100;
        case 4
            nVar = 2;
            Func = @Rastrigin
            Xmin = -5.12;
            Xmax = 5.12;
    end;
    tic;
    [Ans{r}.bestGene, Ans{r}.bestFit] = ga(Func, nVar, [], [], [], [], repmat(Xmin, nVar, 1), repmat(Xmax, nVar, 1), [], option);
    costt = toc
    Ans{r}.costtime = costt;
end %可运行30轮,查看结果
for r = 1:Run
    fprintf('fit=%f, costtime=%f(s) \n', Ans{r}.bestFit, Ans{r}.costtime);
    %Ans{r}.bestGene
end;
end

运行结果:

Func =

@ga_test/sphere

Optimization terminated: average change in the fitness value less than options.TolFun.

costt =

4.2468

Func =

@ga_test/griewank

Optimization terminated: average change in the fitness value less than options.TolFun.

costt =

4.2952

Func =

@ga_test/RosenBroek

Optimization terminated: maximum number of generations exceeded.

costt =

14.4236

Func =

@ga_test/Rastrigin

Optimization terminated: average change in the fitness value less than options.TolFun.

costt =

0.2880

fit=0.000100, costtime=4.246814(s)

fit=0.000150, costtime=4.295222(s)

fit=1.511176, costtime=14.423554(s)

fit=0.000000, costtime=0.288025(s)

从运行时间来看,算法的性能不好。

故类似遗传算法、微分进化等方法,仍有待提出新的机制和算法以解决此类问题。

Matlab遗传算法性能测试

时间: 2024-08-01 11:59:10

Matlab遗传算法性能测试的相关文章

Matlab遗传算法优化问题求解的示例代码

代码如下: function m_main() clear clc Max_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] = ma

matlab遗传算法工具箱

转自http://blog.sina.com.cn/s/blog_5ebcc0240101pnrj.html matlab遗传算法工具箱函数及实例讲解 (2014-01-10 13:03:57)   分类: matlab 最近研究了一下遗传算法,因为要用遗传算法来求解多元非线性模型.还好用遗传算法的工具 箱予以实现了,期间也遇到了许多问题.借此与大家分享一下. 首先,我们要熟悉遗传算法的基本原理与运算流程. 基本原理:遗传算法是一种典型的启发式算法,属于非数值算法范畴.它是模拟达尔文的自然 选择

Matlab遗传算法优化问题求解的演示样例代码

代码例如以下: function m_main() clear clc Max_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] =

遗传算法总结(#看了就能懂和用系列#)

Word害我重写=_=顺便重新整理下思路 背景:写论文时用到遗传算法,花了近一周时间,还算理解了算法以及能够进行基础的编程实现(保持谦虚). 说明:具体的实现没敢细讲,主要是原理的方法上的介绍(讲解都算不上). 先说说算法学习,个人觉得首先需要了解这个算法是拿来干嘛的,然后学习它的理论原理,多看懂几遍总是好的:结合实际例子,接着把算法的每一块儿研究清楚,通篇理解后,自己试着编程实现,这样学起来感觉也还不错. 关于遗传算法原理:模拟自然界优胜劣汰的进化现象,把搜索空间(问题解的组成空间)映射为遗传

【分享】近4000份数学学习资源免费分享给大家

一直以来喜欢收集数学类的教程资源,于是费了好大劲从万千合集站上扒拉了下来,总结归类了一下,一共有将近4000本电子书.经测试,均可免费下载,可能会弹出小广告,可不必理会之.[仅供学术学习和交流,请无用于商业用途.]另外,如有可能,还请尽量支持正版纸质书.   数学史(54)     数学史.rar 55.6 MB   数学的起源与发展.rar 4.3 MB   费马大定理—一个困惑了世间智者358年的谜.pdf 9.5 MB   通俗数学名著译丛14-无穷之旅:关于无穷大的文化史.pdf 14.

GA(遗传算法)的Matlab程序原理(from:六分之一工作室)

z=f(x,y) 1. 编码(解决初始化种群),先创建一个数组pop(popsize stringlenth)有popsize表示染色体个数列stringlenth的前 一部分代表x的染色体,后一部分代表y的染色体.计算x,y染色体对所对应的十进制数值并记数组pop的第 stringlenth+1,stringlenth+2列,计算f(x,y)的值并计为数组pop的第stringlenth+3列,计算每个染色体的 复制概率并计为数组pop的第stringlenth+4列 function[pop

【二】遗传算法(GA)的MATLAB实现

essay from:https://wenku.baidu.com/view/ce45bbf44693daef5ef73df3.html 一.MATLAB编程实现GA 二.MATLAB函数调用实现GA 三.遗传算法的工具箱实现GUI 直接在命令行输入optimtool即可调用

[MATLAB] 利用遗传算法函数求目标函数的最优解

最近接触到了遗传算法以及利用遗传算法求最优解,所以就把这些相关的内容整理记录一下. 一.遗传算法简介(摘自维基百科) 遗传算法(英语:genetic algorithm (GA))是计算数学中用于解决最佳化的搜索算法,是进化算法的一种.进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传.突变.自然选择以及杂交等. 算法 选择初始生命种群 循环 评价种群中的个体适应度 以比例原则(分数高的挑中概率也较高)选择产生下一个种群. 改变该种群(交叉和变异) 直到停止循环的条件满足

遗传算法实例(Matlab实现)

遗传算法优化函数y=10*sin(5*x)+7*abs(x-5)+10,这个函数图像为: 下面看代码: (1)首先看主函数 function main() clear; clc; %种群大小 popsize=100; %二进制编码长度 chromlength=10; %交叉概率 pc = 0.6; %变异概率 pm = 0.001; %初始种群 pop = initpop(popsize,chromlength); for i = 1:100 %计算适应度值(函数值) objvalue = ca