差分分组合作协同进化MATLAB代码

2023-05-16

合作协同进化已经引入协同进化算法,目的是通过分而治之的范式解决日益复杂的优化问题。理论上,协同改 变子成分的想法是十分适合解决大规模优化问题的。然而在实践中,没有关于问题的先验知识, 问题应如何分解是尚不清楚的。在本文中,我们提出一个自动分解策略,称为差分分组,可以揭示决策变量的底层交互结构和形成子成分,以使它们之间的相互依存关系保持到最低限度。我们在数学上展示这样一个分解策略如何从部分可分性的定义中产生。实证研究表明,这样的近最优的分解可以大大提高大规模的全局优化问题的解决方案的质量。最后,我们展示了这样一个自动分解是如何产生对多样的子成分的分布的更好的近似,导致一个对多样的子成分的计算预算的更高效的分配。
更多内容访问omegaxyz.com

索引词:合作协同进化,大规模优化,问题分解,不可分性,数值优化
点击查看合作协同进化算法概述
run.m

% Author: Mohammad Nabi Omidvar
% email address: mn.omidvar AT gmail.com
%
% ------------
% Description:
% ------------
% This files is the entry point for running the differential gropuing algorithm.

clear all;

% Specify the functions that you want the differential grouping algorithm to 
% identify its underlying grouping structure.
func = [20:-1:1];
for i=func
    func_num = i

    t1 = [1 4 7 8 9 12 13 14 17 18 19 20];
    t2 = [2 5 10 15];
    t3 = [3 6 11 16];

    if (ismember(func_num, t1))
        lb = -100;
        ub = 100;
    elseif (ismember(func_num, t2))
        lb = -5;
        ub = 5;
    elseif (ismember(func_num, t3))
        lb = -32;
        ub = 32;
    end

    opts.lbound  = lb;
    opts.ubound  = ub;
    opts.dim     = 1000;
    opts.epsilon = 1e-3;

    addpath('cec2010');
    addpath('cec2010/datafiles');
    global initial_flag;
    initial_flag = 0;

    [seps, nonseps, FEs] = dg('benchmark_func', func_num, opts);

    % filename = sprintf('./results/F%02d.mat', func_num);
    % save (filename, 'seps', 'nonseps', 'FEs', '-v7');
end

dg.m
更多内容访问omegaxyz.com

% Author: Mohammad Nabi Omidvar
% email : mn.omidvar AT gmail.com
%
% ------------
% Description:
% ------------
% dg - This function runs the differential grouping
%      procedure to identify the non-separable groups
%      in cec'2010 benchmark problems.o
%
% -------
% Inputs:
% -------
%    fun        : the function suite for which the interaction structure 
%                 is going to be identified in this case benchmark_func 
%                 of cec'2010.
%
%    fun_number : the function number.
%
%    options    : this variable contains the options such as problem
%                 dimensionality, upper and lower bounds and the parameter 
%                 epsilon used by differential grouping.
%    input3 - Description
%
% --------
% Outputs:
% --------
%    sep      : a vector of all separable variables.
%    allgroups: a cell array containing all non-separable groups.
%    FEs      : the total number of fitness evaluations used.
%
% --------
% License:
% --------
% This program is to be used under the terms of the GNU General Public License 
% (http://www.gnu.org/copyleft/gpl.html).
% Author: Mohammad Nabi Omidvar
% e-mail: mn.omidvar AT gmail.com
% Copyright notice: (c) 2013 Mohammad Nabi Omidvar


function [seps, allgroups, FEs] = dg(fun, fun_number, options);
   ub        = options.ubound;
   lb        = options.lbound;
   dim       = options.dim;
   epsilon   = options.epsilon;
   r         = ub - lb;
   dims      = [1:1:dim];
   seps      = [];
   allgroups = {};
   FEs       = 0;

   while (length(dims) >= 1)
       allgroups;
       n = length(dims)
       group = [dims(1)];
       group_ind = [1];

       p1 = lb * ones(1,dim);
       p2 = p1;
       p2(dims(1)) = ub;

       delta1 = feval(fun, p1, fun_number) - feval(fun, p2, fun_number);

       FEs = FEs + 2;

       for i=2:n
           p3 = p1;
           p4 = p2;

           temp = 0;
           p3(dims(i)) = temp;
           p4(dims(i)) = temp;

           delta2 = feval(fun, p3, fun_number) - feval(fun, p4, fun_number);

           FEs = FEs + 2;

           if(abs(delta1-delta2) > epsilon)
               group = [group ; dims(i)];
               group_ind = [group_ind ; i];
           end
       end

       if(length(group) == 1)
           seps = [seps ; group];
       else
           allgroups = {allgroups{1:end}, group};
       end

       if(length(dims) > 0)
           dims(group_ind) = [];
       end
   end
end

analyze.m

% Author: Mohammad Nabi Omidvar
% email address: mn.omidvar AT gmail.com
%
% ------------
% Description:
% ------------
% This file is used to analyze the performance of the differential
% grouping algorithm on CEC'2010 benchmark problems.
% This program reads the data files generated by differential 
% grouping and shows how many variables from each formed group
% are correctly identified and to which permutation group they
% belong.
%
%--------
% Inputs:
%--------
%    funs: a vector containing the functions ids the functions that you 
%          want to analyze.
%
% -----------
% References:
% -----------
% Omidvar, M.N.; Li, X.; Mei, Y.; Yao, X., "Cooperative Co-evolution with
% Differential Grouping for Large Scale Optimization," Evolutionary Computation,
% IEEE Transactions on, vol.PP, no.99, pp.1,1, 0
% http://dx.doi.org/10.1109/TEVC.2013.2281543
%
% --------
% License:
% --------
% This program is to be used under the terms of the GNU General Public License 
% (http://www.gnu.org/copyleft/gpl.html).
% Author: Mohammad Nabi Omidvar
% e-mail: mn.omidvar AT gmail.com
% Copyright notice: (c) 2013 Mohammad Nabi Omidvar


function analyze(funcs)
    more off;

    % Number of non-separable groups for each function in CEC'210 benchmark suite.
    numNonSep = [0 0 0 1 1 1 1 1 10 10 10 10 10 20 20 20 20 20 20 20];

    for f=funcs
        filename = sprintf('./results/F%02d.mat', f);
        p = 1:1:1000;
        load(filename);

        mat = zeros(length(nonseps), 20);
        drawline('=');
        fprintf('Function F: %02d\n', f);
        fprintf('FEs used: %d\n', FEs);
        fprintf('Number of separables variables: %d\n', length (seps));
        fprintf('Number of non-separables groups: %d\n', length (nonseps));

        filename1 = sprintf('./cec2010/datafiles/f%02d_op.mat', f);
        filename2 = sprintf('./cec2010/datafiles/f%02d_opm.mat', f);
        flag = false;
        if(exist(filename1))
            load(filename1);
            flag = true;
        elseif(exist(filename2))
            load(filename2);
            flag = true;
        end

        printheader();

        for i=[1:1:length(nonseps)]
            fprintf('Size of G%02d: %3d  |  ', i, length (nonseps{i}));
            m = 50;
            if(flag)
                for g=[1:1:20]
                    captured = length(intersect(p((g-1)*m+1:g*m), nonseps{i}));
                    fprintf(' %4d', captured);
                    mat(i, g) = captured;
                end
            end
            fprintf('\n');
        end

        mat2 = mat;
        [temp I] = max(mat, [], 1);
        [sorted II] = sort(temp, 'descend');
        masks = zeros(size(mat));
        for k = 1:min(size(mat))
            mask = zeros(1, length(sorted));
            mask(II(k)) = 1;
            masks(I(II(k)), :) = mask;
            %point = [I(k) II(k)];
            mat(I(II(k)), :) = mat(I(II(k)), :) .* mask;
            [temp I] = max(mat, [], 1);
            [sorted II] = sort(temp, 'descend');
        end
        mat = mat2 .* masks;
        [temp I] = max(mat, [], 1);
        if(ismember(f, [19 20]))
            gsizes = cellfun('length', nonseps);
            fprintf('Number of non-separable variables correctly grouped: %d\n', max(gsizes));
        else
            fprintf('Number of non-separable variables correctly grouped: %d\n', sum(temp(1:numNonSep(f))));
        end
        drawline('=');
        pause;
end

end
% Helper Functions ----------------------------------------------------------
function drawline(c)
    for i=1:121
        fprintf(1,c);
    end
    fprintf('\n')
end

function printheader()
    fprintf('Permutation Groups|  ');
    for i=1:20
        fprintf(' %4s', sprintf('P%d', i));
    end 
    fprintf('\n')
    drawline('-');
end
% End Helper Functions ------------------------------------------------------

更多内容访问omegaxyz.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

差分分组合作协同进化MATLAB代码 的相关文章

  • 稳定排序和不稳定排序

    选择排序 快速排序 希尔排序 堆排序不是稳定的排序算法 xff0c 而冒泡排序 插入排序 归并排序和基数排序是稳定的排序算法 首先 xff0c 排序算法的稳定性大家应该都知道 xff0c 通俗地讲就是能保证排序前2个相等的数其在序列的前后位
  • 程序员必备网站

    1 CSDN http www csdn net CSDN Chinese Software Developer Network 创立于1999年 xff0c 是中国最大的IT社区和服务平台 xff0c 为中国的软件开发者和IT从业者提供知
  • ora 01017问题解决办法

    SQL gt startup ORACLE instance started Total System Global Area 914358272 bytes Fixed Size 2088184 bytes Variable Size 5
  • 数据结构串的基本操作及KMP算法

    将串的基本操作C语言实现 xff0c 实现KMP算法算出NEXT函数和NEXTVAL的值 SqString h的基本内容 span class hljs keyword typedef span span class hljs keywor
  • JAVA经典面试题(来源于互联网)

    面向对象编程 xff08 OOP xff09 Java是一个支持并发 基于类和面向对象的计算机编程语言 下面列出了面向对象软件开发的优点 xff1a 代码开发模块化 xff0c 更易维护和修改 代码复用 增强代码的可靠性和灵活性 增加代码的
  • 规则绝对公平时,社会财富的流向谁?

    从知乎有一个很有趣的问题 xff1a 房间里有100个人 xff0c 每人都有100元钱 xff0c 如果每过一分钟 xff0c 每个人都要拿出一元钱随机给另一个人 xff0c 最后这100个人的财富分布是怎样的 xff1f 这个问题 xf
  • 2017程序员综合素质调研测试

    只要志愿选得好 xff0c 年年期末是高考 高等数学 线性代数 C语言 计算机导论 数据结构 离散数学 电子技术 C 43 43 程序设计 汇编语言程序设计 计算机组成原理 编译原理 操作系统 数据库原理 JAVA程序设计 Python 下
  • 机器学习非平衡数据集概述

    定义 xff1a 不平衡数据集 xff1a 在分类等问题中 xff0c 正负样本 xff0c 或者各个类别的样本数目不一致 研究不平衡类通常认为不平衡意味着少数类只占比10 20 实际上 xff0c 一些数据集远比这更不平衡 例如 xff1
  • 汇编语言32位加减乘除运算题

    用16位指令编制程序 xff0c 处理32位的加减乘除算术四则运算题 本文计算 xff08 3 X 43 Y Z xff09 5的值 值分别为 xff1a span class hljs built in x span dw span cl
  • 汇编语言字符串比较与查找

    答案仅供参考 xff0c 大家还是自己写比较好 汇编语言实现 用字符串处理指令编制程序 xff0c 处理字符串的比较和查找 xff0c 显示结果 要求 xff1a xff08 1 xff09 字符串的比较函数中 xff0c 一个字符串在数据
  • 汇编语言数据段查找ASCII码并回显

    实验要求 xff1a 在数据段预先存放16个十六进制的ASCII码 xff0c 首地址为ASC 从键盘输入一位十六进制数到BX xff0c 用ASC BX xff08 寄存器相对寻址 xff09 寻址方式找到对应数位的ASCII码 xff0
  • 汇编语言将正负数复制到不同的数组

    分离字数组ARRAY中的正 xff0c 负数 xff0c 把其中的正数复制到PDATA数组 xff1a 负数复制到NDATA数组 xff0c 并分别统计正 负数个数 DATAS SEGMENT array dw span class hlj
  • JAVA工程师最新面试题(来源于互联网)

    面向对象编程 xff08 OOP xff09 Java是一个支持并发 基于类和面向对象的计算机编程语言 下面列出了面向对象软件开发的优点 xff1a 代码开发模块化 xff0c 更易维护和修改 代码复用 增强代码的可靠性和灵活性 增加代码的
  • 关于内存溢出异常的查看以及解决办法

    内存溢出 又称为OOM OutOfMemoryError 处理内存溢出 首先要查看是否是由于内存泄露 Memory Leak 造成的内存溢出 Memory Overflow 可以使用内存影响分析工具 如 Eclipse Memory Ana
  • JAVA基本程序设计规范

    1 标识符是程序中用于命名诸如变量 常量 方法 类 包之类元素的名称 2 标识符是由字母 数字 下划线 和美元符号 构成的字符序列 标识符必须以字母或下划 开头 xff0c 不能以数字开头 标识符不能是保留字 标识符可以为任意长度 3 变量
  • 多目标优化问题概述

    图片不清楚请看多目标问题详解 xff1a 多目标问题详解 更多内容访问omegaxyz com 定义 xff1a 若干冲突或相互影响条件约束下在给定区域内寻找尽可能的最优解 xff08 非劣解 xff09 关键词 xff1a 条件约束 xf
  • NSGA2算法中文版详细介绍

    NSGA2主要是对NSGA算法的改进 NSGA是N Srinivas 和 K Deb在1995年发表的一篇名为 Multiobjective function optimization using nondominated sorting
  • 特征选择算法综述

    特征选择 xff08 feature selection xff09 作为一种常见的降维方法是模式识别的研究热点之一 它是指从原始特征集中选择使某种评估标准最优的特征子集 其目的是使选出的最优特征子集所构建的分类或回归模型达到和特征选择前近
  • 多目标优化详解【转载】

    欢迎大家访问我的网站发现更多内容omegaxyz com 多目标优化问题详解 生活中 许多问题都是由相互冲突和影响的多个目标组成 人们会经常遇到使多个目标在给定区域同时尽可能最佳的优化问题 也就是多目标优化问题 优化问题存在的优化目标超过一
  • Python 编写规范

    用IDE写Python编写时有时会有标记 xff0c 但是程序能正常运行 xff0c 这里的标记是python编写不规范 xff0c 下面给出一些规范写法 一行列数 PEP 8 规定为 79 列 xff0c 这个太苛刻了 xff0c 如果要

随机推荐

  • Python求解排列中的逆序数个数

    在一个排列中 xff0c 如果一对数的前后位置与大小顺序相反 xff0c 即前面的数大于后面的数 xff0c 那么它们就称为一个逆序 一个排列中逆序的总数就称为这个排列的逆序数 一个排列中所有逆序总数叫做这个排列的逆序数 也就是说 xff0
  • Python利用shelve模块设计简单数据库程序

    欢迎访问我的网站omegaxyz com 利用shelve模块写数据库文件在程序关闭时仍然能存储之前的数据 将所有内容都放到函数中会让程序更加结构化 主程序放在main函数中 xff0c 只有在if name 61 61 main 条件成立
  • Python抓取网页图片

    网上的代码基本上都是python2 xff0c 这里的代码使用的是python3注意没有urllib2这个库了 要先做几个个准备工作 xff1a 找到有图片的网站 指定电脑保存路径 利用浏览器工具查看网页代码中图片的保存路径 xff08 非
  • Python统计txt文件中的英文单词个数

    函数 xff1a example strip 分离此行的单词 sum 函数的第一个参数是一个列表 xff08 list xff09 第二个参数可以直接省去 python风格的代码只要一行 xff1a span class hljs buil
  • 苏宁易购执行总裁任峻在IT体系年会上的讲话

    尊敬的董事长 xff0c 各位苏宁同事 xff1a 大家晚上好 xff01 中国人传统的新春佳节很快就要到了 xff0c 非常高兴大家又可以难得的聚在一起 xff0c 共同迎新 首先还是要感谢大家的辛勤付出和对公司作出的贡献 xff0c 在
  • n阶行列式计算Python和C语言实现

    行列式在数学中 xff0c 是一个函数 xff0c 其定义域为det的矩阵A xff0c 取值为一个标量 xff0c 写作det A 或 A 无论是在线性代数 多项式理论 xff0c 还是在微积分学中 xff08 比如说换元积分法中 xff
  • Python使用wxpython制作简单文本编辑器

    欢迎大家访问我的网站发现更多内容 xff1a omegaxyz com 下面的python代码实现了一个简单的文本编辑器 xff0c 可以实现编辑加载和保存操作 真个界面是实用wxpython来构建的 wxpython是一个GUI图形界面的
  • Python读取系统文件夹内所有文件并统计数量

    大家先看一下Python os模块中的部分函数 python 路径相关的函数 os listdir dirname xff1a 列出dirname下的目录和文件 os getcwd xff1a 获得当前工作目录 os curdir 返回当前
  • Python获取指定目录下文件数量及总大小

    欢迎大家访问我的网站 xff1a omegaxyz com span class hljs keyword import span os totalSize 61 span class hljs number 0 span fileNum
  • Python脚本的“__name__”属性

    欢迎访问我的网站 xff1a omegaxyz com 每个Python脚本在运行时都有一个 name 属性 如果脚本作为模块被导入 xff0c 则其 name 属性的值被自动设置为模块名 xff1b 如果脚本独立运行 xff0c 则其 n
  • Python因数分解

    欢迎访问我的网站 xff1a omegaxyz com 把一个合数分解成若干个质因数的乘积的形式 xff0c 即求质因数的过程叫做分解质因数 分解质因数只针对合数 xff08 分解质因数也称分解素因数 xff09 求一个数分解质因数 xff
  • Python实现24点游戏

    欢迎访问我的网站 xff1a omegaxyz com 24点游戏是指随机选取4张扑克牌 xff08 不包括大小王 xff09 xff0c 然后通过四则运算来构造表达式 xff0c 如果表达式的值恰好等于24就赢一次 下面的代码定义了一个函
  • C++构造函数与析构函数

    构造函数 xff0c 就是用来初始化变量的 xff0c 它是用系统自动调用的 xff0c 要是没有写构造函数的话 xff0c 系统会为之生成一个默认的构造函数 xff0c 它的调用就是在声明变量的时候系统就自动地隐式调用 C 43 43 语
  • 胶水语言概述(以Python为例)

    什么是胶水语言 xff1f 胶水语言 xff08 是用来连接软件组件的程序设计语言 xff0c 通常是指脚本语言 胶水语言 xff08 glue language xff09 是用来连接软件组件的程序设计语言 xff08 通常是脚本语言 x
  • 软件工程师与码农的区别

    先说个题外话 xff0c 首先拥有这两种称呼的人都不是修电脑装软件的 本人认为计算机组装与维护 xff08 修电脑 xff0c 装软件 xff0c 装系统 xff0c office xff0c 基本C语言操作 xff09 是一个任何办公室白
  • html输入框输入限制

    JS判断只能是数字和小数点 1 文本框只能输入数字代码 小数点也不能输入 lt input nkeyup 61 34 this value 61 this value replace D g 39 39 34 onafterpaste 61
  • C++运算符重载详解

    更多内容访问omegaxyz com 为什么要对运算符进行重载 C 43 43 预定义中的运算符的操作对象只局限于基本的内置数据类型 xff0c 但是对于我们自定义的类型 xff08 类 xff09 是没有办法操作的 但是大多时候我们需要对
  • 合作协同进化算法概述(Cooperative Coevolution)

    合作协同进化 xff08 Cooperative Coevolution xff09 是求解大规模优化算法一个有效的方法 将大规模问题分解为一组组较小的子问题 而合作协同进化的关键是分解策略 分解策略的分类 随机分解 xff1a 随机选择基
  • C/C++移位运算符

    在一般的C语言教学中 xff0c 移位运算符很多情况下讲师直接跳过 xff0c 更多的会在汇编语言中系统得讲述 然而 xff0c 熟练掌握 高级语言中的移位很大程度上可以展现一个人的代码功底并且能提高编程效率 更多内容访问omegaxyz
  • 差分分组合作协同进化MATLAB代码

    合作协同进化已经引入协同进化算法 xff0c 目的是通过分而治之的范式解决日益复杂的优化问题 理论上 xff0c 协同改 变子成分的想法是十分适合解决大规模优化问题的 然而在实践中 xff0c 没有关于问题的先验知识 xff0c 问题应如何