gaПо умолчанию ga создает новое начальное заполнение при каждом его запуске. Однако можно получить лучшие результаты, используя конечное заполнение из предыдущего прогона в качестве начального заполнения для нового прогона. Для этого необходимо сохранить конечное заполнение из предыдущего прогона путем вызова ga с синтаксисом
[x,fval,exitflag,output,final_pop] = ga(@fitnessfcn,nvars);
Последний выходной аргумент представляет собой конечную совокупность. Бежать ga использование final_pop в качестве начальной совокупности введите
options = optimoptions('ga','InitialPop',final_pop); [x,fval,exitflag,output,final_pop2] = ... ga(@fitnessfcn,nvars,[],[],[],[],[],[],[],options);
Затем можно использовать final_pop2конечная популяция из второй серии, как начальная популяция для третьей серии.
Например, минимизируйте функцию Акли, функцию двух переменных.
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.
Проверьте наилучшее значение функции.
disp(fval)
3.5527
Попробуйте найти лучшее решение, запустив ga из конечного населения.
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
Значение фитнес-функции значительно улучшается.
Попробуйте еще раз улучшить решение.
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
На этот раз улучшение незначительное.