exponenta event banner

Резюме 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

На этот раз улучшение незначительное.

Связанные темы