# 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 that is available when you run this example.

```rng(100) % For reproducibiliity [x,fval,exitflag,output,final_pop] = ga(@ackleyfcn,2);```
```ga stopped because the average change in the fitness value is 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);```
```ga stopped because the average change in the fitness value is 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);```
```ga stopped because the average change in the fitness value is less than options.FunctionTolerance. ```
`disp(fval3)`
``` 2.9846 ```

This time the improvement is insignificant.