1

我想在 MATLAB 中实现一个简单的 BB-BC,但是有一些问题。
这是生成初始种群的代码:

pop = zeros(N,m);
for j = 1:m
    % formula used to generate random number between a and b
    %   a + (b-a) .* rand(N,1)
   pop(:,j) = const(j,1) + (const(j,2) - const(j,1)) .* rand(N,1);
end  

const(mx2)是一个包含控制变量约束的矩阵。m是控制变量的数量。生成随机初始种群。
这是在每次迭代中计算质心的代码

sum = zeros(1,m);
sum_f = 0;
for i = 1:N
    f = fitness(new_pop(i,:));
    %keyboard
    sum = sum + (1 / f) * new_pop(i,:);
    %keyboard
    sum_f = sum_f + 1/f;
    %keyboard
end
CM = sum / sum_f;

new_pop在每次迭代中保存新生成的种群,并用 初始化pop
CM是一个1xm矩阵。
fitness是为生成中的每个粒子提供适应度值的函数。适应度越低,粒子越好。
这是在每次迭代中生成新种群的代码:

for i=1:N
    new_pop(i,:) = CM + rand(1) * alpha1 / (n_itr+1) .* ( const(:,2)' - const(:,1)');
end

alpha10.9

问题是我运行代码进行100迭代,但适应度只是降低并变为负数。它根本不应该发生,因为所有粒子都在搜索空间中并且CM也应该在那里,但它超出了限制。
例如,如果这是限制 ( m=4):

const = [1 10;
     1 9;
     0 5;
     1 4];

然后运行产生这个CM

57.6955   -2.7598   15.3098   20.8473

这超出了所有限制。
我尝试CM在我的代码中进行限制,但它只是继续并坚持所有顶部边界,在这个例子中给出CM=

10     9     5     4

我很困惑。我的实现有问题还是我理解 BB-BC 有问题?

4

0 回答 0