在matlab中实现一个简单的大爆炸大爆炸(BB-BC)

时间:2013-04-27 11:01:58

标签: algorithm matlab mathematical-optimization

我想在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进行初始化 CM1xm矩阵 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中发现了什么问题?

0 个答案:

没有答案