當試圖在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