Resume ga

By default, ga creates a new initial population each time you run it. However, you might get better results by using the final population from a previous run as the initial population for a new run. To do so, you must have saved the final population from the previous run by calling ga with the syntax

[x,fval,exitflag,output,final_pop] = ga(@fitnessfcn,nvars);

The last output argument is the final population. To run ga using final_pop as the initial population, enter

options = optimoptions('ga','InitialPop',final_pop);
[x,fval,exitflag,output,final_pop2] = ... 
		ga(@fitnessfcn,nvars,[],[],[],[],[],[],[],options);

You can then use final_pop2, the final population from the second run, as the initial population for a third run.

For example, minimize Ackley's function, a function of two variables.

rng(100) % For reproducibiliity
[x,fval,exitflag,output,final_pop] = ga(@ackleyfcn,2);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

Examine the best function value.

disp(fval)
    3.5527

Try to get a better solution by running ga from the final population.

options = optimoptions('ga','InitialPopulationMatrix',final_pop);
[x,fval2,exitflag2,output2,final_pop2] = ... 
		ga(@ackleyfcn,2,[],[],[],[],[],[],[],options);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
disp(fval2)
    2.9886

The fitness function value improves significantly.

Try once again to improve the solution.

options.InitialPopulationMatrix = final_pop2;
[x,fval3,exitflag3,output3,final_pop3] = ... 
		ga(@ackleyfcn,2,[],[],[],[],[],[],[],options);
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
disp(fval3)
    2.9846

This time the improvement is insignificant.

Related Topics