MATLAB:遗传算法 - 初始用户提供的健身功能评估失败

时间:2014-10-08 12:41:22

标签: matlab vectorization genetic-algorithm

我有一个带矢量化适应度函数的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),导致{ {1}}显然是空的。

delaunayTriangulation

这似乎是GA不遵守初始种群播种范围的情况,即使它明显在指定范围内。有什么可以绕过这个?

1 个答案:

答案 0 :(得分:1)

我的第一个猜测是将CreationFcn设置为例如@gacreationuniform,但这不起作用:ga实现仍然显示默认行为并评估条目等于的向量下限值(如果这些下限是有限的)。

强制使用不同的第一个向量的解决方案是在选项的InitialPopulation字段中提供此向量。 (注意:确保你的初始向量确实满足边界和约束,否则,ga仍将使用他评估下界的方法)

我希望能解决你的问题。

顺便说一句,您可以包含一个约束来检查三角测量是否有效(使用nonlcon约束函数)。