遗传算法matlab程序sinx求极大值
时间: 2024-02-29 11:30:34 浏览: 64
遗传算法求函数极大值(matlab实现).docx
以下是基于遗传算法的 Matlab 程序,用于求解函数 f(x) = sin(x) 在给定区间 [a, b] 中的最大值:
```matlab
% 遗传算法求解 f(x) = sin(x) 在 [a, b] 中的最大值
clc;
clear;
close all;
% 初始化参数
popSize = 50; % 种群规模
maxGen = 100; % 最大迭代次数
pc = 0.7; % 交叉概率
pm = 0.01; % 变异概率
a = 0; % 区间左端点
b = pi; % 区间右端点
% 初始化种群
pop = rand(popSize, 1) * (b - a) + a;
% 迭代
for gen = 1:maxGen
% 计算适应度
fitness = sin(pop);
% 选择
[fitness_sorted, idx] = sort(fitness, 'descend');
pop_sorted = pop(idx);
pop_sel = pop_sorted(1:popSize/2);
% 交叉
pop_crs = zeros(popSize/2, 1);
for i = 1:2:popSize/2
if rand < pc
j = i + 1;
alpha = rand;
pop_crs(i) = alpha * pop_sel(i) + (1 - alpha) * pop_sel(j);
pop_crs(j) = alpha * pop_sel(j) + (1 - alpha) * pop_sel(i);
else
pop_crs(i) = pop_sel(i);
pop_crs(i+1) = pop_sel(i+1);
end
end
% 变异
pop_mut = pop_crs;
for i = 1:popSize/2
if rand < pm
pop_mut(i) = rand * (b - a) + a;
end
end
% 合并
pop = [pop_sel; pop_mut];
end
% 输出结果
[fitness_best, idx] = max(sin(pop));
x_best = pop(idx);
fprintf('最大值为 %f,取得于 %f\n', fitness_best, x_best);
```
程序中,popSize 表示种群规模,maxGen 表示最大迭代次数,pc 表示交叉概率,pm 表示变异概率,a 和 b 分别表示求解区间的左右端点。在程序中,种群中的每个个体表示一个 x 值,适应度函数为 f(x) = sin(x)。在每一次迭代中,程序根据个体的适应度进行选择、交叉和变异操作,产生新的种群。最终,程序输出在给定区间中的最大值和取得最大值的 x 值。
阅读全文