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
На этот раз улучшение незначительно.