遗传算法matlab程序
时间: 2023-09-11 10:07:27 浏览: 34
以下是一个简单的遗传算法的MATLAB程序示例:
```matlab
% 遗传算法示例
% 问题:寻找函数 y = x*sin(10*pi*x)+2, 在区间 [0, 1] 上的最大值。
% 初始化参数
popSize = 50; % 种群大小
chromLen = 20; % 染色体长度
pc = 0.8; % 交叉概率
pm = 0.05; % 变异概率
maxGen = 100; % 最大迭代次数
% 初始化种群
pop = rand(popSize, chromLen);
% 迭代
for i = 1:maxGen
% 计算适应度
fitness = evaluate(pop);
% 选择
parents = select(pop, fitness);
% 交叉
offspring = crossover(parents, pc);
% 变异
offspring = mutate(offspring, pm);
% 合并父代和子代
pop = [parents; offspring];
% 保留最优解
[bestFit, bestIdx] = max(evaluate(pop));
bestInd = pop(bestIdx, :);
% 输出结果
fprintf('第 %d 次迭代,最优解:y = %f, x = %f\n', i, bestFit, decode(bestInd));
end
% 计算适应度
function fitness = evaluate(pop)
x = decode(pop);
fitness = x.*sin(10*pi*x)+2;
end
% 解码染色体为实数
function x = decode(pop)
x = bi2de(pop, 'left-msb')/(2^size(pop, 2)-1);
end
% 选择
function parents = select(pop, fitness)
[~, idx] = sort(fitness, 'descend');
parents = pop(idx(1:round(size(pop, 1)/2)), :);
end
% 交叉
function offspring = crossover(parents, pc)
offspring = parents;
for i = 1:2:size(parents, 1)
if rand < pc
% 随机选择交叉点
pos = randi([1, size(parents, 2)-1]);
% 交叉
offspring(i, pos+1:end) = parents(i+1, pos+1:end);
offspring(i+1, pos+1:end) = parents(i, pos+1:end);
end
end
end
% 变异
function offspring = mutate(offspring, pm)
for i = 1:size(offspring, 1)
for j = 1:size(offspring, 2)
if rand < pm
% 变异
offspring(i, j) = ~offspring(i, j);
end
end
end
end
```
这个程序实现了一个简单的遗传算法,用于寻找函数 y = x*sin(10*pi*x)+2, 在区间 [0, 1] 上的最大值。程序中包含了适应度计算、选择、交叉、变异等基本操作。你可以根据自己的需求进行修改和扩展。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)