# MATLAB: Genetic Algorithm in Matlab – Not terminating as expected

genetic algorithm

I am trying to solve a problem using GA in Matlab and the optimization is running through the set number of generations and decreasing the function value as expected ( seen in figure below). But what is not expected is that it is not plotting the percent criteria of the generation me, for instance in the figure below It should be just under 40% done, but it is not. Here is my code:
    IntCon=[]; % Set integer variables    vfun=@(x)objective(x, univ_names, univ_data, weight_names, weight_data, net_names, net_data, normalized_name, normalized_data);    nonlcon=@(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)
Then, if I let it continue, it starts over at the beginning ( at a worse function value) and at this point it starts to think that it it has met some percentage of the termination criteria for the number of generations Then after letting it complete, I get: 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
So, somehow it picked a worse function value than it found in the first run! Why is it doing this "second" and "third run"?
In another example, I include the iteration information and it is obvious that it is not including the best function value from one generation to the next. For instance on the graph it shown that just after 50 generations it reduces the function value to almost 425 as seen in the bottom set of triangles on the graph below: But then it think that the min is 435.011? And these 50 generations are only one. Seen below: Generation f-count f(x) constraint Generations 1 1060 435.011 0 0 2 2100 434.396 0 0 3 3140 434.267 0 0 But, the output in the matlab terminal thinks that that after just about 50 generations on graph is 1 generation and it prints to the screen Then after the optiization is terminated it looks like: Any ideas? Thanks!

 [x,fval,exitflag,output] = ga(vfun,nvars,[],[],[],[],x_L,x_U,IntCon,options)