2013-10-08 384 views
1

我有一個相當複雜的優化問題,建立了通過調用它像這樣比較MATLAB fmincon和GA(遺傳算法)結果:問題與GA

myfun = @(x5) 0.5 * (norm(C*x5 - d))^2 + 0.5 * (timeIntervalMeanGlobal * powerAbsMaxMaxGlobal * sum(x5(28:128),1))^2; 
[x5, fval] = fmincon(myfun, initialGuess, -A, b, Aeq, beq, lb, []); 

,我已經通過fmincon解決的成分遠長期在這裏印的,但這裏有尺寸

C: 49 x 128 
x5: 128 x 1 
d: 49 x 1 
timeIntervalMeanGlobal, powerAbsMaxMaxGlobal: constants 
initialGuess: 128 x 1 
A: 44541 x 128 
b: 44541 x 1 
Aeq: 24 x 128 
beq: 24 x 1 
lb: 128 x 1 

這工作代碼,但我沒有得到結果我和完全滿意。我想它使用內置在MATLAB,這就是所謂以類似的方式GA功能比較,但是我得到一個錯誤,當我嘗試這樣

[x5, fval] = ga(myfun, nvars, -A, b, Aeq, beq, lb, []); 

運行,其中nvars = 128有開始一個長約8個錯誤的清單,

??? Error using ==> mtimes
Inner matrix dimensions must agree.

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

結束有人可以請指導我如何正確地調用GA,並就爲什麼會與GA發生這種錯誤見解當相同的代碼不會導致fmincon錯誤時調用?我已經嘗試了所有的MATLAB幫助文件和例子,但是沒有更好的運氣。謝謝。

更新:我想我找到了問題,但我不知道如何解決它。 ga文檔說「適應函數應該接受長度爲nvars的行向量」。在我的情況下,myfun是適應函數,但是x5是一個列向量(所以是lb)。所以儘管在數學上我知道C * x5 = d與x5'* C'= d'相同,即使對於非方陣,我也不能用這種方式爲ga解算器制定問題。我想 - 它使過去的健身功能,但後來我得到的錯誤

The number of rows in A must be the same as the length of b.

如何在求解正確的格式搞定這個問題有什麼想法?謝謝!

+0

你對'nvars'的價值是什麼?你的mtimes錯誤意味着MATLAB抱怨矩陣乘法沒有第一個矩陣中的列數等於第二個矩陣中的行數。 –

+0

nvars = 128.這是一個常數,所以我不明白這會導致錯誤。謝謝。 – dustynrobots

+0

在我的收件箱中有一條評論我在這裏沒有看到「你能用nvars = 1來試試嗎?」。我做到了這一點,它擺脫了mtimes錯誤,但後來我得到另一個尺寸不匹配錯誤:???錯誤使用==> preProcessLinearConstr at 49 A中的列數必須與X0的長度相同。 – dustynrobots

回答

1

Got it!我不得不操縱適應度函數,以使它使用X5作爲一個行向量,即使它的列向量中的所有約束

myfun = @(x5) 0.5 * (norm(x5 * C' - d'))^2 + 0.5 * (timeIntervalMeanGlobal * powerAbsMaxMaxGlobal * sum(x5(28:128)))^2; 

唷!