Asked by Saber_phy
on 15 Jun 2018

Hi

I am a student enrolled in the 2nd year physics Master's degree, i am a beginner in Matlab and i have the same problem like Mattias, can you help me and is it was possible to get your e-mail.

My problem is to make a fit of a nonlinear equation to data with the genetic algorithm and to minimize R, my model function is

R*(1-exp(-t/rate))

The industrial data Rexp and t are known: these are two vectors that give the variation of Rexp as a function of time (t)

rate also is known and equal to 40

I declared my function (fitnes function) as follows:

function S=ga_Newton(R)

t=[0 2 4 6 8 10 12 14 16 18 20 22 24 26 28];

Rexp=[1 .7987e-05 3.07996e-05 3.90531e-05 1.89562e-05 2.82794e-05 5.55377e-05

4.75723e-05 6.2447e-05 5.35282e-05 5.16775e-05 4.67144e-05 4.63215e-05 6.62753e-05

3.72551e-05 3.54374e-05];

for i=1:15

S(i) =sum((Rexp(i)-R*(1-exp(-t(i)./40)))^2);

end

The function

S (i) = sum ((Rexp (i) -R * (1-exp (-t (i) ./ 40))) ^ 2)

I use it in the methods of Gauss Newton and Levenberg marquardt and I got a good result of R which is in the order of 0.000059 but with the genetic algorithm I found no result.

Answer by Walter Roberson
on 15 Jun 2018

Accepted Answer

Replace

for i=1:15 S(i) =sum((Rexp(i)-R*(1-exp(-t(i)./40)))^2); end

with

S = sum((Rexp-R*(1-exp(-t./40))).^2);

Saber_phy
on 16 Jun 2018

Walter Roberson
on 16 Jun 2018

I have attached the exact files I used. Execution requires less than 3 seconds.

More generally, the approach I would use would be to use the Symbolic Toolbox to prepare the function to be minimized:

t=[0 2 4 6 8 10 12 14 16 18 20 22 24 26 28];

Rexp=[1.7987e-05 3.07996e-05 3.90531e-05 1.89562e-05 2.82794e-05 5.55377e-05 4.75723e-05 6.2447e-05 5.35282e-05 5.16775e-05 4.67144e-05 4.63215e-05 6.62753e-05 3.72551e-05 3.54374e-05];

syms R prediction = R*(1-exp(-t./40)); actual = Rexp; residue = sum((actual - prediction).^2); F = matlabFunction(residue);

nvars = 1; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = []; options = gaoptimset('PlotFcn', {@gaplotbestf @gaplotbestindiv @gaplotexpectation @gaplotstopping}, ... 'TolFun', 1e-13, 'Generations', 1000); [R, fval, exitflag, output] = ga(F, nvars, A, b, Aeq, beq, lb, ub, nonlcon, options);

fprintf('best R: %g\n', R); fprintf('best residue: %g\n', fval);

Note: you will not get especially close to the true minima. The true minima is at approximately 0.000128381339932429 which can be quickly determined:

[R, fval] = fminunc(F, 0)

Saber_phy
on 16 Jun 2018

thank you very much :) :)

Sign in to comment.

Answer by Saber_phy
on 10 Sep 2018 at 23:14

Hello;

My problem is to make a fit of a nonlinear equation to data with the genetic algorithm and to minimize ‘R’, and ‘rate’ at the same time, my model function is R*(1-exp(-t/rate)) The industrial data Rexp and t are known: these are two vectors that give the variation of Rexp as a function of time (t), first of all I will test my code by a single value of R and rate I declared my function (fitnes function) as follows:

function residue =fitness_XY(x) t=[0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120]; Rexp= 0.000157*(1-exp(-t/70)); residue=sum((Rexp-x(1)*(1-exp(-t./x(2)))).^2) ;

%genetic code

F=@fitness_XY nvars = 2; A= []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = [];

%Options options=gaoptimset('PlotFcn',{@gaplotbestf}, 'CrossoverFraction',0.01,'TolFun',1e-13,'Generations',300) ;

[x,fval,exitflag,output]=ga(F, nvars, A, b, Aeq, beq, lb, ub, nonlcon, options) ; fprintf('best R and rate: %g\n', x) ; fprintf('The number of generations was : %d\n', output.generations); fprintf('The number of function evaluations was : %d\n', output.funccount); fprintf('The best function value found was(best residue) : %g\n', fval);

at the end the code must return the exact value of R=0.000157 and rate=70 but it still running more than 30mn and return a false value, I don’t know where is the problem exactly

Saber_phy
on 12 Sep 2018 at 21:58

Walter Roberson
on 13 Sep 2018 at 3:28

"ga does not give an acceptable result within an acceptable time" is a valid conclusion.

You can use ga options to pass in a starting point: look at the initial population matrix parameter.

If it is reasonable to use a lower bound or upper bound on the values, you should do so. Even if it is just lower bound 0.

Saber_phy
on 13 Sep 2018 at 21:14

i already use the ga option and i used a lower and upper bound on the values and i got reasonable value.

thank you very much :)

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.