Bonjour tous,
depuis peu j'essai de tester un peu les divers algorithmes fournis par matlab pour l'optimisation et il y en a un que je n'arrive pas à faire passer: c'est l'algo "ga".
Voici ci dessous le cas test que j'essai de lui faire passer (qui n'est pas très compliqué mais il me renvoi:
Optimization terminated: maximum number of generations exceeded.
D'après ce message d'erreur je comprends qu'il a fait pas mal de génération de population et ça ne lui à tout de même pas permit de converger, es ce bien ceci ?
Ce qui m'étonne un peu c'est que sur un exemple si simple je m'attendais à ce que ça fonctionne directement sans à avoir à bidouiller les options (avec les autres algo pas de problèmes...)
pourriez vous me dire s'il vous plait pourquoi j'ai ce genre de problèmes, comment y remédier et surtout comment le prévenir pour ne pas que ça m'arrive systématiquement dès que je change de fonction
Plus généralement, si vous pourriez m'expliquer les rudiments de l'algo "ga", c'est à dire quels sont les différents paramètres que l'on peut faire varier et quelle influence ceci à sur le résultat...
je vous remercie grandement pour votre aide !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| clear all;close all;clc;
global xdata ydata
xdata = (0:.1:10)';
ydata = 40 * exp(-.5 * xdata) + randn(size(xdata));
variableBidonPrRes=0;
x0=[10 4];
param=x0;
%pas testé les bornes car déjà au premier test marche pas :(
lb=[-10000 -1000]; ub=[10000 1000];
options = optimset('TolFun',1e-5,'MaxIter',100);
nbVariables=2;
Xf = ga(@(param)res(param,variableBidonPrRes),nbVariables);
FittedCurve = Xf(1).* exp(-Xf(2)* xdata);
figure (1);hold on
plot(xdata, ydata, '*')
plot(xdata, FittedCurve, '-r') |
1 2 3 4 5 6 7
| function dq = res(params,variableBidonPrRes)
global xdata ydata
A = params(1);
lambda = params(2);
FittedCurve = A .* exp(-lambda * xdata)+variableBidonPrRes;
ErrorVector = FittedCurve - ydata;
dq= sum(ErrorVector .^ 2); |
Partager