合作协同进化(Cooperative Coevolution)是求解大规模优化算法一个有效的方法。将大规模问题分解为一组组较小的子问题。而合作协同进化的关键是分解策略。
合作协同进化算法请见:http://www.omegaxyz.com/2017/10/14/cooperative_coevolution/
PSO算法是粒子群优化算法。此文章是随机固定分组的合作协同进化利用PSO来优化。
比如有12个决策变量,我们固定随机优化3个决策变量,那么就将决策变量分成了4组。
MATLAB主函数代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
clear; clc; format long; %------给定初始化条件-------- global M global bound MaxDT=100; %最大迭代次数 global Dim Dim=22; %搜索空间维数(未知数个数) sub_dim= 11 ; M=30; %初始化群体个体数目 bound=1; %global answer %最后所有粒子的结果(包括特征与精确度) x=randn(M,Dim); %随机初始化位置 v=randn(M,Dim); %随机初始化速度 result = 1; while MaxDT ~= 0 subgroup = rnd_divide(Dim, sub_dim); for i=1:length(subgroup) [sub_x, sub_v, temp_result] = PSO(x(:,subgroup{i}), v(:,subgroup{i}), sub_dim, subgroup{i}); x(:,subgroup{i}) = sub_x; v(:,subgroup{i}) = sub_v; if(temp_result < result) result = temp_result; end end %可以在协同进化后进行一次全局优化 %[x, v, temp_result] = PSO(x, v, Dim); %if(temp_result < result) % result = temp_result; %end MaxDT =MaxDT - 1; end |
随机分组算法
1 2 3 4 5 6 7 8 9 10 |
% random grouping function group = rnd_divide(dim, subdim) dim_rand = randperm(dim); group = {}; for i = 1:subdim:dim index = dim_rand(i:i+subdim-1); group = {group{1:end} index}; end end |
其它函数依赖项与PSO算法相同,请见:http://www.omegaxyz.com/2018/01/17/matlab_pso/