2013-05-04 131 views
0

当试图在MATLAB求解使用遗传算法,我得到了下面的“下标赋值尺寸不匹配”错误:Error Message PastebinMATLAB遗传算法“下标赋值尺寸不匹配”错误

现在,它说有错误与最后的健身功能有关,但是当我单独测试我的健身功能时,它的运行没有错误。如果有帮助,我也可以链接我的健身和约束函数的代码。

非常感谢!

+1

在您的健身功能中设置断点并检查解算器传入的参数。这应该告诉你测试它的方式和它实际使用的方式有什么不同。 – wakjah 2013-05-04 12:19:16

+0

谢谢@wakjah。我这样做,但发现健身功能没有错。这些论据都是我期待的。另一方面,优化工作时,我评论了我的constrint函数15-41之间的线: (https://gist.github.com/shasdemir/18eaeda95833b6618113) 这很奇怪,因为约束函数工作时我在ga之外自己调用它。 我很疑惑...... – 2013-05-05 21:53:01

+0

错误听起来像是它来自内部完成的事情,在你的约束函数被调用之后(即,'c'被分配给矩阵中的某个位置,它)。输出“c”的长度不必与变量组(即24个元素)的长度相同吗?看起来像你正在返回一个47元素的矢量......(应该'2:timeLength'是'2:2:timeLength'?) – wakjah 2013-05-05 22:13:54

回答

1

我想我看到发生了什么...因为CDraft的一个附件是在if里面,你不总是返回相同长度的矢量 - 也就是说,你第一次返回一个约束矢量,它预先分配一个用于约束输出的矩阵,然后在下一次你回馈一些不适合这个矩阵的东西时,你会得到这个错误。

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

Subscripted assignment dimension mismatch.

Error in C:\Program Files\MATLAB\R2012b\toolbox\globaloptim\globaloptim\private\gaminlppenaltyfcn.p>i_convectorizer (line 135)

很显然,这是不是你写一个函数,并检查你的函数没有什么是应该引起这个错误。该错误的端给出了另一个线索

Caused by: Failure in initial user-supplied fitness function evaluation. GA cannot continue.

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 

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

+0

哎呀 - 需要更多代表uppote:p – 2013-05-06 11:49:16

+0

解决它通过添加'CDraft = [CDraft; -1];'作为那个if的'else'过程。 – 2013-05-06 12:10:42