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
, окончательное население из второго запуска, как начальная генеральная совокупность для третьего запуска.
Например, минимизируйте функцию Ackley, функцию двух переменных.
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
На этот раз улучшение незначительно.