我正在尝试使用GA最小化一个函数,但它“看到”了不正确的适应性值。我的GA脚本如下所示:
ObjectiveFunction = @FF;
ConstraintFunction = @constraints;
nvars = 5;
LB = [1e9 1e9 0.1 -1 1e9];
UB = [1.3825E+12 6.45E+11 0.272 +1 1.12E+11];
options = optimoptions('ga','PlotFcn',{@gaplotbestf, @gaplotscores},'Display','Iter','FitnessLimit',0.25,'PopulationSize',20);
[HOM_MOD,FF_val] = ga(ObjectiveFunction,nvars,[],[],[],[],LB,UB,ConstraintFunction,options);
FF(健身功能)的第一行和最后一行如下:
function y = FF(moduli_short)
...
E = [3.73E+10 3.62E+10 3.81E+10 3.36E+09 1.83E+10];
y = abs(energies(1)-E(1))/E(1) + abs(energies(2)-E(2))/E(2) + abs(energies(3)-E(3))/E(3) + abs(energies(4)-E(4))/E(4) + abs(energies(5)-E(5))/E(5);
当评估第一代时,将显示图,但这些值没有任何意义。图中的适应度值约为-10 ^ 19,而从FF适应度可以看出,该值甚至不能为负。我从FF函数打印适应度值只是为了确保它们始终在5到1000之间,而不是-10 ^ 19。由于这种异常,代码从不收敛(并在无用的点上不断评估FF函数)。最后但并非最不重要的一点是,绘图不会超过第一代,并且命令窗口中的输出如下所示:
Best Max Stall
Generation Func-count f(x) Constraint Generations
没有任何后续内容。
我尝试了一个只有2个输入的简单代码,在这种情况下可以正常工作。有人对我为什么会遇到这个问题有任何猜测吗?