我有一個量化的健身功能的GA,預期其工作原理:MATLAB:遺傳算法 - 失敗的初始用戶提供的健身功能評價
objFunc = @(N) -fitfun(N, foo, NUM);
[ N, ~, ~, ~, ~, ~ ] = ga(objFunc, 3 * NUM, [], [], [], [], ...
[], [], [], options);
當引入界限,它沒有了:
UB = Inf(1, 3 * NUM);
LB = -UB;
for i = 3 : 3 : 3 * NUM
LB(i) = 3000;
UB(i) = 9000;
end
objFunc = @(N) -fitfun(N, foo, NUM);
[ N, ~, ~, ~, ~, ~ ] = ga(objFunc, 3 * NUM, [], [], [], [], ...
LB, UB, [], options);
相應的堆棧跟蹤:
> Error using delaunayTriangulation/convexHull
The triangulation is empty.
> Error in fitfun (line 66)
[ facets, volume(i) ] = convexHull(DT);
> Error in run_fitfun>@(N)-fitfun(N,foo,NUM) (line 127)
objFunc = @(N) -fitfun(N, foo, NUM);
> Error in createAnonymousFcn>@(x)fcn(x,FcnArgs{:}) (line 11)
fcn_handle = @(x) fcn(x,FcnArgs{:});
> Error in makeState (line 64)
Score = FitnessFcn(state.Population(initScoreProvided+1:end,:));
> Error in galincon (line 17)
state = makeState(GenomeLength,FitnessFcn,Iterate,output.problemtype,options);
> Error in ga (line 359)
[x,fval,exitFlag,output,population,scores] =
galincon(FitnessFcn,nvars, ...
> Error in run_fitfun (line 140)
[ N, ~, ~, ~, ~, ~ ] = ga(objFunc, 3 * NUM, [], [], [], [], ...
> Caused by:
Failure in initial user-supplied fitness function evaluation. GA cannot
continue.
要清楚,我已經設置'MutationFcn', @mutationadaptfeasible
,並且也嘗試了'Vectorized', 'off'
。
編輯:
事實證明,我在選項'PopInitRange', [ 5000; 7000 ]
集,但第一(?第零)代GA的顯示,輸入矢量具有LB(3000)設置爲每一個第三變量,導致delaunayTriangulation
明顯爲空。
N2 = reshape(N(i,:), 3, NUM).'
N2 =
1.0e+03 *
-0.0009 -0.0007 3.0000
0.0007 -0.0002 3.0000
-0.0005 0.0019 3.0000
0.0002 0.0005 3.0000
0.0021 -0.0009 3.0000
0.0009 0.0015 3.0000
-0.0007 -0.0005 3.0000
-0.0008 -0.0013 3.0000
-0.0004 0.0020 3.0000
-0.0001 0.0003 3.0000
0.0011 0.0010 3.0000
0.0015 0.0010 3.0000
0.0009 0.0013 3.0000
-0.0008 -0.0010 3.0000
-0.0005 0.0010 3.0000
-0.0002 0.0020 3.0000
-0.0003 -0.0001 3.0000
0.0002 0.0015 3.0000
-0.0008 0.0010 3.0000
-0.0007 0.0017 3.0000
0.0005 0.0018 3.0000
-0.0002 -0.0003 3.0000
-0.0006 0.0010 3.0000
-0.0000 0.0008 3.0000
-0.0006 -0.0012 3.0000
這似乎是GA不尊重最初的種羣播種範圍,即使它明顯在指定範圍內。有什麼辦法解決這個問題?
您可以編輯您的'fitfun'和disp已輸入'N'那裏。然後你可以看到什麼值導致錯誤。也許如果你分享他們,我們(我)可以幫助你。 – MeMyselfAndI 2014-10-08 13:07:48
@JandeGier我附上了我能找到的任何相關信息。謝謝。 – Slaiyer 2014-10-08 13:32:06