Возобновите 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

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

Похожие темы