当试图在MATLAB求解使用遗传算法,我得到了下面的“下标赋值尺寸不匹配”错误:Error Message PastebinMATLAB遗传算法“下标赋值尺寸不匹配”错误
现在,它说有错误与最后的健身功能有关,但是当我单独测试我的健身功能时,它的运行没有错误。如果有帮助,我也可以链接我的健身和约束函数的代码。
非常感谢!
当试图在MATLAB求解使用遗传算法,我得到了下面的“下标赋值尺寸不匹配”错误:Error Message PastebinMATLAB遗传算法“下标赋值尺寸不匹配”错误
现在,它说有错误与最后的健身功能有关,但是当我单独测试我的健身功能时,它的运行没有错误。如果有帮助,我也可以链接我的健身和约束函数的代码。
非常感谢!
我想我看到发生了什么...因为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
因此,它看起来像错误来自你的函数,即使它发生在函数返回后。
哎呀 - 需要更多代表uppote:p – 2013-05-06 11:49:16
解决它通过添加'CDraft = [CDraft; -1];'作为那个if的'else'过程。 – 2013-05-06 12:10:42
在您的健身功能中设置断点并检查解算器传入的参数。这应该告诉你测试它的方式和它实际使用的方式有什么不同。 – wakjah 2013-05-04 12:19:16
谢谢@wakjah。我这样做,但发现健身功能没有错。这些论据都是我期待的。另一方面,优化工作时,我评论了我的constrint函数15-41之间的线: (https://gist.github.com/shasdemir/18eaeda95833b6618113) 这很奇怪,因为约束函数工作时我在ga之外自己调用它。 我很疑惑...... – 2013-05-05 21:53:01
错误听起来像是它来自内部完成的事情,在你的约束函数被调用之后(即,'c'被分配给矩阵中的某个位置,它)。输出“c”的长度不必与变量组(即24个元素)的长度相同吗?看起来像你正在返回一个47元素的矢量......(应该'2:timeLength'是'2:2:timeLength'?) – wakjah 2013-05-05 22:13:54