J'essaie de résoudre un problème en utilisant GA dans Matlab et l'optimisation se déroule sur le nombre de générations défini et en diminuant la valeur de la fonction comme prévu (voir la figure ci-dessous). Mais ce qui n'est pas attendu, c'est que ce n'est pas en traçant les critères du pourcentage de la génération, par exemple dans la figure ci-dessous. Cela devrait être juste en dessous de 40%, mais ce n'est pas le cas. Algorithme génétique dans Matlab - Ne se termine pas comme prévu
Voici mon code:
IntCon=[]; % Set integer variables
[email protected](x)objective(x, univ_names, univ_data, weight_names, weight_data, net_names, net_data, normalized_name, normalized_data);
[email protected](x)constraint(x,net_names, net_data);
pop = 40;
gen =50;
ini=rand(pop,nvars);
time = inf; % time in (s)
options = gaoptimset('TimeLimit', time, 'InitialPopulation',ini,'PopulationSize',pop,'Generations',gen,'PlotFcns',{@gaplotbestfun, @gaplotstopping});
[x,fval,exitflag,output] = ga(vfun,nvars,[],[],[],[],x_L,x_U,nonlcon,IntCon,options)
Alors, si je le laisse continuer, il recommence au début (à une valeur de fonction pire) et à ce stade, il commence à penser que ce qu'il a rencontré un certain pourcentage des critères de terminaison pour le nombre de générations
Puis après l'avoir laissé complète, je reçois: et
Optimization terminated: average change in the fitness value less than options.TolFun
and constraint violation is less than options.TolCon.
x =3.3242 1.8450 0.5918 0.6000
fval = 3.5208e+03
exitflag = 1
output =
problemtype: 'nonlinearconstr'
rngstate: [1x1 struct]
generations: 3
funccount: 6160
message: [1x140 char]
maxconstraint: 0
Donc, en quelque sorte, il a choisi une valeur de la fonction pire que ce qu'elle trouve dans la première manche! Pourquoi fait-il ce "deuxième" et "troisième passage"?
Dans un autre exemple, j'inclus les informations d'itération et il est évident qu'il n'inclut pas la meilleure valeur de fonction d'une génération à la suivante. Par exemple sur le graphique, il apparaît que juste après 50 générations, il réduit la valeur de fonction à presque 425 comme on le voit dans le jeu bas de triangles sur le graphique ci-dessous:
Mais il pense que le minimum est 435,011? Et ces 50 générations ne sont qu'une. Voir ci-dessous: contrainte génération F-count f (x) Génération 1 1060 435,011 0 0 2 2100 434,396 0 0 3 3140 434,267 0 0
Mais, la sortie dans le terminal de Matlab pense que cela après seulement environ 50 générations sur le graphique est une génération et il imprime à l'écran
Puis, après la optiization prend fin il ressemble:
Des idées? Merci!