mat = []; % 初始化矩阵
eps = 1e-20; % 设置eps值
for i = 1:1000
    [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
end
% 输出矩阵
disp(mat);

代码中对结果筛选的条件进行了调整,将原先的 abs(mat(k,3) - fopt) < eps 改为 mat(k,3) ~= fopt,即判断当前结果的第三个元素 fopt 是否与矩阵中已有结果的第三个元素 mat(k,3) 相同。这样可以筛选出与矩阵中已有结果的第三个元素不相等的新的结果,避免重复结果的存储。

该代码示例展示了如何使用 MATLAB 实现 PSO 算法,并通过矩阵存储和结果筛选来优化算法的效率。代码的优化可以帮助用户更好地理解和应用 PSO 算法,并提高算法的运行效率。

MATLAB PSO 算法实现:矩阵存储与结果筛选

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

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