2013-05-04 128 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