遗传算法的matlab程序
时间: 2023-09-12 18:03:48 浏览: 32
以下是一个简单的遗传算法的 Matlab 程序,用于最小化函数 f(x) = x^2,其中 x 的范围为 [-10, 10]。
```matlab
% 遗传算法最小化函数 f(x) = x^2,x 范围为 [-10, 10]
% 初始化参数
pop_size = 50; % 种群大小
chrom_length = 10; % 染色体长度
pc = 0.8; % 交叉概率
pm = 0.01; % 变异概率
max_gen = 100; % 最大迭代次数
range = [-10, 10]; % 取值范围
% 随机生成初始种群
pop = rand(pop_size, chrom_length);
for i = 1:max_gen
% 计算适应度函数值
fitness = sum(pop.^2, 2);
% 选择
[sorted_fit, idx] = sort(fitness);
selected_pop = pop(idx(1:pop_size/2), :);
% 交叉
cross_pop = zeros(size(selected_pop));
for j = 1:pop_size/2
if rand < pc
k = j + pop_size/2;
p1 = selected_pop(j, :);
p2 = selected_pop(k, :);
c_point = randi(chrom_length-1);
cross_pop(j, :) = [p1(1:c_point), p2(c_point+1:end)];
cross_pop(k, :) = [p2(1:c_point), p1(c_point+1:end)];
else
cross_pop(j, :) = selected_pop(j, :);
cross_pop(j+pop_size/2, :) = selected_pop(j+pop_size/2, :);
end
end
% 变异
mut_pop = cross_pop;
for j = 1:pop_size
if rand < pm
m_point = randi(chrom_length);
mut_pop(j, m_point) = rand*(range(2)-range(1)) + range(1);
end
end
% 合并种群
pop = [selected_pop; mut_pop];
end
% 找到最优解
fitness = sum(pop.^2, 2);
[~, idx] = min(fitness);
x = sum((2.^(0:chrom_length-1)).*pop(idx, :));
x = (range(2)-range(1))*x/(2^chrom_length-1) + range(1);
fprintf('最优解 x = %.4f\n', x);
```