遗传算法matlab程序
时间: 2023-10-15 18:05:15 浏览: 37
以下是一个简单的遗传算法MATLAB程序示例:
```matlab
% 遗传算法参数设置
pop_size = 50; % 种群大小
n_generations = 100; % 进化代数
n_variables = 2; % 变量数量
lb = [-5,-5]; % 变量下限
ub = [5,5]; % 变量上限
% 初始化种群
pop = repmat(lb,pop_size,1) + repmat((ub-lb),pop_size,1).*rand(pop_size,n_variables);
% 进化循环
for i=1:n_generations
% 计算适应度
fitness = sum(pop.^2,2);
% 选择父代
[~,idx] = sort(fitness);
parents = pop(idx(1:round(pop_size/2)),:);
% 交叉
children = zeros(size(parents));
for j=1:size(children,1)
p1 = parents(randi(size(parents,1)),:);
p2 = parents(randi(size(parents,1)),:);
children(j,:) = (p1+p2)/2;
end
% 变异
mutation_rate = 0.1;
mutation_amount = (ub-lb).*mutation_rate;
mutation = mutation_amount.*randn(size(children));
children = children + mutation;
% 合并父代和子代
pop = [parents;children];
% 限制变量范围
pop = max(pop,lb);
pop = min(pop,ub);
end
% 打印最优解
[~,idx] = min(fitness);
disp(['Optimal solution: x1=',num2str(pop(idx,1)),', x2=',num2str(pop(idx,2))]);
```
这个程序用于优化一个二元函数,其目标是最小化 x1^2+x2^2。程序中的遗传算法使用了经典的轮盘赌选择、单点交叉和高斯变异操作。