Matlab GA оценивает неверные значения пригодности.Что может быть причиной этого? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь свернуть функцию с помощью 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 в бесполезных точках).И последнее, но не менее важное: графики не прогрессируют после 1-го поколения, а выходные данные в командном окне выглядят так:

                              Best       Max        Stall
Generation  Func-count        f(x)     Constraint  Generations

без чего-либо следующего.

Я попробовал более простойкод только с 2 входами, и он отлично работает в этом случае.У кого-нибудь есть догадки, почему я могу столкнуться с этой проблемой?

...