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

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

Похожие темы