前書き
良い人は次世代を再現します(適応度関数の高い体を選ぶ確率は100%ではなく高くなります)
基本的な手順
コーディング:最適化される問題は数学言語(ソリューション空間でx1、x2)で記述され、遺伝的アルゴリズム空間で遺伝子文字列構造データにマッピングされます。
初期文字列構造データはランダムに生成されます。
個別:各文字列構造データ
選択:次世代への良好な特性の可能性が高くなります
クロスオーバー:新しい個人は親個人の特性を保持する可能性が高くなりますが、いくつかの変更と
突然変異があります:各個人は新しい変更を行う機会がありますローカル変数で、ソリューション空間の多様性を確保するため
Fitness.m
function [sol, fitnessVal] = fitness(sol, options)
x = sol(1);
fitnessVal = x + 10*sin(5*x)+7*cos(4*x);%最大值
%如果是求最小值fitnessVal = -1 * (x + 10*sin(5*x)+7*cos(4*x));
end
main.m
%% I. 清空环境变量
clear all %右侧
clc %下方
%% II. 绘制函数曲线
%可以先运行这一片段,看下最大值在什么位置
x = 0:0.01:9;
y = x + 10*sin(5*x)+7*cos(4*x);
figure
plot(x, y)
xlabel('自变量')
ylabel('因变量')
title('y = x + 10*sin(5*x) + 7*cos(4*x)')
%% III. 初始化种群
%如果是求最小值,就把目标函数变成1/y
initPop = initializega(50,[0 9],'fitness');%种群规模大小是50个;适应度函数值,目标函数就是适应度函数
%单独调试会形成initPop函数(50*2),第二列是第一列对应的适应度函数
%% IV. 遗传算法优化
[x, endPop, bpop, trace] = ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,...
'normGeomSelect',0.08,'arithXover',2,'nonUnifMutation',[2 25 3]);
%% V. 输出最优解并绘制最优点
x
plot (endPop(:,1),endPop(:,2),'ro')
hold on
%% VI. 绘制迭代进化曲线
figure(2)
plot(trace(:,1),trace(:,3),'b:')
hold on
plot(trace(:,1),trace(:,2),'r-')
xlabel('Generation'); ylabel('Fittness');
legend('Mean Fitness', 'Best Fitness')