0

尝试在 MATLAB 中使用遗传算法求解器时,我收到以下“下标分配维度不匹配”错误:错误消息 Pastebin

现在,它说错误与最后的适应度函数有关,但是当我单独测试我的适应度函数时,它可以正常工作。如果有帮助,我还可以链接我的适应度和约束功能的代码。

非常感谢你!

4

1 回答 1

1

我想我知道发生了什么......因为 CDraft 的一个附件在 if 中,所以您并不总是返回相同长度的向量 - 即,您第一次返回一个约束向量,它为您的预分配矩阵约束输出,然后下一轮你给它一些不适合这个矩阵的东西,所以你得到错误。

线索在错误堆栈中:在堆栈的顶部,我们有

下标分配尺寸不匹配。

C:\Program Files\MATLAB\R2012b\toolbox\globaloptim\globaloptim\private\gaminlppenaltyfcn.p>i_convectorizer 中的错误(第 135 行)

显然这不是您编写的函数,并且检查您的函数没有什么会导致此错误。错误的结尾给出了另一个线索

原因:初始用户提供的适应度函数评估失败。GA 无法继续。

ga函数在处理用户提供的约束的代码位中报告错误。很可能这整段代码(对用户提供的函数和其他相关行的调用)都在一个try...catch返回此错误的语句中。像这样的东西:

try
    c = userConFun(x);
    if isempty(cHistory)
        cHistory = zeros(length(c), 1000); % or whatever
    end
    cHistory(:, currentIterationIndex) = c;
catch err
    error('Failure in user-supplied fitness function blah blah blah');
end

因此,看起来错误来自您的函数,即使它发生在您的函数返回之后。

于 2013-05-06T11:14:18.070 回答