Search code examples
matlabmatrixevolutionary-algorithm

Index Error in for loop, MATLAB


I am running this program below and I keep getting this error "Index exceeds matrix dimensions" for line "Tour1 = pop(kk(1:10),:);". I don't know what I have missed out. Can anyone help please. Thanks

for i = 1:100                               %Population Initialization
    pop(i,1) = 50 - rand*(50-1);
    pop(i,2) = 1 - rand*(1-0.1);
    pop(i,3) = 0.2 - rand*(0.2-0.01); 
    Kc(i) = pop(i,1); 
    T1(i) = pop(i,2); 
    T2(i) = pop(i,3); 

    fitness(i) = obj(Kc(i), T1(i), T2(i));

%% TOURNAMENT SELECTION

for j = 1:10                                   %Select first parent
    kk = randperm(100);
    Tour1 = pop(kk(1:10),:);
    temp1 = mat2cell(Tour1(j,:),1,ones(1,numel(Tour1(j,:))));
    ZET1(j) = obj(temp1{:});
end

[Val1 Ind1] = max(ZET1);
parent1 = Tour1(Ind1,:);

end

Solution

  • Just place the final end before executing the j block

    for i = 1:100                               %Population Initialization
        pop(i,1) = 50 - rand*(50-1);
        pop(i,2) = 1 - rand*(1-0.1);
        pop(i,3) = 0.2 - rand*(0.2-0.01);
        Kc(i) = pop(i,1);
        T1(i) = pop(i,2);
        T2(i) = pop(i,3);
        fitness(i) = obj(Kc(i), T1(i), T2(i));
    end
    
    for j = 1:10                                   %Select first parent
        kk = randperm(100);
        Tour1 = pop(kk(1:10),:);
        temp1 = mat2cell(Tour1(j,:),1,ones(1,numel(Tour1(j,:))));
        ZET1(j) = obj(temp1{:});
    end
    
    [Val1 Ind1] = max(ZET1);
    parent1 = Tour1(Ind1,:);