【发布时间】:2014-10-08 23:23:08
【问题描述】:
我有一个带有矢量化适应度函数的 GA,它按预期工作:
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并在那里显示输入N。然后您可以查看导致错误的值。也许如果你分享它们,我们(我)可以帮助你。 -
@JandeGier 我已经附加了我能找到的任何相关信息。谢谢。
标签: matlab vectorization genetic-algorithm