matlab多变量遗传算法代码
时间: 2023-08-03 19:07:20 浏览: 72
基于遗传算法(GA)优化径向基神经网络(GA-RBF)的数据回归预测,多变量输入模型 matlab代码,优化参数为扩散速度
5星 · 资源好评率100%
以下是一个基本的 MATLAB 多变量遗传算法代码:
```matlab
function [best_x, best_fitness] = ga_multivar(fitness_func, num_vars, lb, ub)
% fitness_func: 适应度函数句柄
% num_vars: 变量数
% lb: 每个变量的下界
% ub: 每个变量的上界
% GA 参数
pop_size = 50; % 种群大小
num_generations = 100; % 迭代次数
mutation_rate = 0.01; % 变异率
crossover_rate = 0.8; % 交叉率
% 初始化种群
pop = repmat(lb, pop_size, 1) + rand(pop_size, num_vars) .* repmat(ub-lb, pop_size, 1);
% 计算适应度
fitness = arrayfun(fitness_func, pop);
for gen = 1:num_generations
% 选择
[~, idx] = sort(fitness, 'descend');
elite = pop(idx(1:5), :); % 保留前五个最优解
selected = pop(randsample(pop_size, pop_size-5, true, fitness./sum(fitness)), :);
% 交叉
for i = 1:2:pop_size-5
p1 = selected(i,:);
p2 = selected(i+1,:);
if rand() < crossover_rate
mask = randi([0 1], 1, num_vars);
c1 = mask .* p1 + (1-mask) .* p2;
c2 = mask .* p2 + (1-mask) .* p1;
selected(i,:) = c1;
selected(i+1,:) = c2;
end
end
% 变异
mutation_mask = rand(pop_size-5, num_vars) < mutation_rate;
mutation = rand(pop_size-5, num_vars) .* repmat(ub-lb, pop_size-5, 1);
selected(mutation_mask) = selected(mutation_mask) + mutation(mutation_mask);
% 更新种群
pop = [elite; selected];
fitness = arrayfun(fitness_func, pop);
end
% 返回最优解
[best_fitness, idx] = max(fitness);
best_x = pop(idx, :);
```
使用方法:
1. 定义适应度函数,例如:
```matlab
function f = my_fitness(x)
f = -sum(x.^2); % 最大化函数值,因此加上负号
```
2. 调用 `ga_multivar` 函数,例如:
```matlab
[best_x, best_fitness] = ga_multivar(@my_fitness, 2, [-10 -10], [10 10]);
```
这将使用 GA 求出对于函数 $f(x_1,x_2)=-x_1^2-x_2^2$ 的最大值(因此加上了负号)。变量 $x_1$ 和 $x_2$ 的范围为 $[-10,10]$。
阅读全文