遗传算法matlab程序
时间: 2023-06-29 17:14:43 浏览: 80
以下是一个简单的遗传算法的 MATLAB 程序示例:
```
% 定义问题的目标函数
function f = fitness(x)
f = x^2 + 2*x + 1; % 例如,求解 f(x) = x^2 + 2x + 1 的最小值
% 遗传算法主程序
pop_size = 50; % 种群大小
num_gen = 100; % 迭代次数
pc = 0.8; % 交叉概率
pm = 0.01; % 变异概率
chrom_len = 20; % 染色体长度
lb = -10; % 变量下界
ub = 10; % 变量上界
pop = randi([0, 1], pop_size, chrom_len); % 初始化种群
best_fitness = Inf; % 最佳适应度初始化为无穷大
for i = 1:num_gen
% 计算种群中每个个体的适应度
fitnesses = arrayfun(@(j) fitness(bin2dec(num2str(pop(j, :)))), 1:pop_size);
% 找出种群中适应度最好的个体
[best_fit, best_idx] = min(fitnesses);
% 更新最佳适应度和最佳个体
if best_fit < best_fitness
best_fitness = best_fit;
best_individual = pop(best_idx, :);
end
% 选择操作
selection_prob = fitnesses / sum(fitnesses);
cum_prob = cumsum(selection_prob);
new_pop = zeros(size(pop));
for j = 1:pop_size
r = rand();
idx = find(cum_prob >= r, 1, 'first');
new_pop(j, :) = pop(idx, :);
end
% 交叉操作
for j = 1:pop_size/2
if rand() < pc
p1 = new_pop(j*2-1, :);
p2 = new_pop(j*2, :);
xover_pt = randi([1, chrom_len-1]);
new_pop(j*2-1, :) = [p1(1:xover_pt) p2(xover_pt+1:end)];
new_pop(j*2, :) = [p2(1:xover_pt) p1(xover_pt+1:end)];
end
end
% 变异操作
for j = 1:pop_size
if rand() < pm
idx = randi([1, chrom_len]);
new_pop(j, idx) = 1 - new_pop(j, idx);
end
end
% 更新种群
pop = new_pop;
end
% 输出最优解和最优适应度
x_best = bin2dec(num2str(best_individual)) / (2^chrom_len-1) * (ub-lb) + lb;
fprintf('最优解为 x = %f,最优适应度为 %f\n', x_best, best_fitness);
```
请注意,这只是一个简单示例,实际上的遗传算法程序可能会更复杂。此外,还应该根据具体问题进行参数调整和优化。
阅读全文