【问题标题】:Index Error in for loop, MATLABfor循环中的索引错误,MATLAB
【发布时间】:2013-10-09 09:59:59
【问题描述】:

我在下面运行这个程序,我不断收到“Tour1 = pop(kk(1:10),:);”行的错误“索引超出矩阵尺寸”。我不知道我错过了什么。任何人都可以帮忙吗? 谢谢

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

【问题讨论】:

  • 您需要先完成填充pop,然后才能在Tour1 中访问它。使用调试:>> dbstop if error 看看 kkpop 是什么

标签: matlab matrix evolutionary-algorithm


【解决方案1】:

只需在执行j 块之前放置最后的end

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,:);

【讨论】:

    【解决方案2】:

    您真的想在第一个 for 中包含第二个吗?

    在第一次执行外循环时,i 是一个。你填充pop (1, :),但没有更多。

    在内部循环中,您然后尝试访问pop (kk (1:10), :)kk (1:10) 在 [1..100] 内。但是对于 i > 1,没有 pop (i, :)

    【讨论】:

      猜你喜欢
      • 2019-09-15
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 2017-08-13
      相关资源
      最近更新 更多