遗传算法matlab代码
时间: 2023-09-08 21:14:31 浏览: 135
遗传算法matlab的代码
5星 · 资源好评率100%
好的,以下是一个简单的遗传算法MATLAB代码示例,用于最小化函数$f(x)=x^2$:
```
function [x, fval] = genetic_algorithm()
% 参数设置
popSize = 100; % 种群大小
numGen = 100; % 迭代次数
pCrossover = 0.8; % 交叉概率
pMutation = 0.05; % 变异概率
lowerBound = -10; % 变量下界
upperBound = 10; % 变量上界
% 初始化种群
pop = rand(popSize, 1) * (upperBound - lowerBound) + lowerBound;
% 进化过程
for i = 1:numGen
% 评估适应度
fitness = evaluate_fitness(pop);
% 选择操作
parents = selection(pop, fitness);
% 交叉操作
offspring = crossover(parents, pCrossover);
% 变异操作
offspring = mutation(offspring, pMutation, lowerBound, upperBound);
% 更新种群
pop = offspring;
end
% 返回最优解和最优函数值
[fval, index] = min(evaluate_fitness(pop));
x = pop(index);
end
% 评估适应度函数
function fitness = evaluate_fitness(pop)
fitness = pop.^2;
end
% 选择操作函数
function parents = selection(pop, fitness)
[~, index] = sort(fitness);
parents = pop(index(1:2:end));
end
% 交叉操作函数
function offspring = crossover(parents, pCrossover)
n = length(parents);
offspring = zeros(n, 1);
for i = 1:2:n
if rand < pCrossover
% 单点交叉
crossoverPoint = randi(n-1);
offspring(i) = [parents(i+1, 1:crossoverPoint); parents(i, crossoverPoint+1:end)];
offspring(i+1) = [parents(i, 1:crossoverPoint); parents(i+1, crossoverPoint+1:end)];
else
offspring(i:i+1) = parents(i:i+1);
end
end
end
% 变异操作函数
function offspring = mutation(offspring, pMutation, lowerBound, upperBound)
n = length(offspring);
for i = 1:n
if rand < pMutation
% 随机重置
offspring(i) = rand * (upperBound - lowerBound) + lowerBound;
end
end
end
```
这段代码实现了一个简单的遗传算法过程,包括初始化种群、评估适应度、选择操作、交叉操作和变异操作等。在评估适应度函数中,我们将适应度定义为每个个体的平方值;在选择操作中,我们采用了简单的轮盘赌选择算子;在交叉操作中,我们采用了单点交叉算子;在变异操作中,我们采用了随机重置算子。最后,我们返回最优解和最优函数值。
需要注意的是,这段代码中的遗传算法是一个非常简单的示例,仅用于演示遗传算法的基本流程。在实际应用中,我们需要根据具体问题进行适当的调整,并采用更加复杂的算子和策略,以获得更好的性能和效果。
阅读全文