Shubert 函数最优解寻找:代码精度设置及实现

本文将探讨使用粒子群优化算法(PSO)寻找 Shubert 函数最优解,并重点关注代码中精度 eps 的设置方法。

问题:

寻找 Shubert 函数在以下区域内的最优解:

(-7.083506, -7.708314), (-7.708314, -7.083506), (-7.083506, -4.858066), (-4.858066, -7.083506), (-5.612079, -5.612079), (-4.858066, -2.337639), (-2.337639, -4.858066), (-3.091652, -3.091652), (-2.337639, -0.017212), (-0.017212, -2.337639), (-0.771225, -0.771225), (1.749214, -0.771225), (-0.017212, 1.503215), (1.503215, -0.017212), (1.749214, 1.749214), (1.503215, 3.974654), (3.974654, 1.503215), (2.220642, 2.220642)。

代码实现:

mat = []; % 初始化矩阵
eps = 1e-6; % 设置eps值
i = 1;
while i <= 10000 && size(mat, 1) < 18 % 当i小于等于1000且矩阵行数小于18时执行循环
    [xopt, yopt, fopt] = PSO(@Shubert, np, maxiter, bounds); % 调用PSO函数
    if isempty(mat) % 如果矩阵为空,直接将结果存入矩阵中
        mat = [xopt, yopt, fopt];
    else
        % 判断当前结果是否和矩阵中已有的结果相同
        flag = false;
        for k = 1:size(mat, 1)
            if abs(mat(k,1) - xopt) < eps || abs(mat(k,2) - yopt) < eps || (mat(k,3) ~=fopt) 
                flag = true;
                break;
            end
        end
        % 如果不相同,则将结果存入矩阵中
        if ~flag
            mat = [mat; xopt, yopt, fopt];
        end
    end
    i = i + 1;
end
% 输出矩阵
disp(mat);

精度 eps 的设置:

eps 的值取决于期望达到的精度。一般来说,eps 应该小于等于最小可区分量,即数字的最后一位。如果数据类型为双精度浮点数(double),则最小可区分量为 eps = 2.2204e-16。因此,可以将 eps 设置为 1e-16 或更小。

总结:

本文介绍了使用 PSO 算法寻找 Shubert 函数最优解,并详细解释了代码中精度 eps 的设置方法。用户可以根据实际需求调整 eps 的值,以获得期望的精度。


原文地址: https://www.cveoy.top/t/topic/nrSI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录