假设我们要优化的非线性函数是f(x) = x^2 - 10*cos(2*pi*x) + 10
,这是一个具有多个局部极值的复杂函数。
% 遗传算法参数设置
popSize = 50; % 种群大小
chromLength = 20; % 染色体长度(即变量的二进制编码长度)
pc = 0.7; % 交叉概率
pm = 0.01; % 变异概率
maxGen = 100; % 最大迭代次数
lb = -10; % 变量下界
ub = 10; % 变量上界
% 初始化种群
pop = round(rand(popSize, chromLength));
% 适应度函数(即要优化的非线性函数)
objFcn = @(x) x.^2 - 10*cos(2*pi*x) + 10;
% 遗传算法主循环
for gen = 1:maxGen
% 解码操作,将二进制编码转换为实数
x = bs2rv(pop, [2.^(chromLength-1:0)]')*(ub-lb)/(2^chromLength-1) + lb;
% 计算适应度值
fitness = objFcn(x);
% 选择操作,这里使用轮盘赌选择法
[~, idx] = sort(fitness, 'desc