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, окончательное население из второго запуска, как начальная генеральная совокупность для третьего запуска.

Например, минимизируйте функцию 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

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

Похожие темы