一、基础实现(无约束优化)
1. 目标函数定义
% 定义目标函数(示例:Rastrigin函数)
function y = rastrigin(x)
y = 10*numel(x) + sum(x.^2 - 10*cos(2*pi*x));
end
2. 遗传算法调用
% 参数设置
nvars = 2; % 变量维度
lb = [-5.12, -5.12];% 下界
ub = [5.12, 5.12]; % 上界
% 创建优化选项
options = optimoptions('ga',...
'PopulationSize', 100, % 种群大小
'MaxGenerations', 200, % 最大迭代次数
'CrossoverFcn', @crossoverheuristic, % 交叉算子
'MutationFcn', @mutationadaptfeasible, % 变异算子
'PlotFcn', {@gaplotbestf,@gaplotstopping}); % 可视化
% 运行遗传算法
[x,fval] = ga(@rastrigin, nvars, [], [], [], [], lb, ub, [], options);
disp(['最优解: ', num2str(x')]);
disp(['最小值: ', num2str(fval)]);
二、约束优化实现
1. 线性约束示例
% 定义线性约束:x1 + x2 >= 1
A = [-1 -1]; % A*x <= b 形式转换为 -x1 -x2 <= -1
b = -1;
Aeq = []; beq = [];
% 调用遗传算法
[x,fval] = ga(@rastrigin, nvars, A, b, Aeq, beq, lb, ub, [], options);
2. 非线性约束示例
% 定义非线性约束:x1^2 + x2^2 <= 1
function [c,ceq] = nonlinearCons(x)
c = x(1)^2 + x(2)^2 - 1; % 不等式约束
ceq = []; % 无等式约束
end
% 调用遗传算法
[x,fval] = ga(@rastrigin, nvars, [], [], [], [], lb, ub, @nonlinearCons, options);
三、关键参数优化策略
1. 种群初始化优化
% 自定义初始种群(拉丁超立方采样)
options = optimoptions(options, 'InitialPopulation', lhsdesign(nvars, 100));
2. 自适应参数设置
% 动态调整交叉/变异概率
options = optimoptions(options, ...
'CrossoverFcn', {@crossoverarithmetic, 0.8}, % 算术交叉概率0.8
'MutationFcn', {@mutationgaussian, 0.1, 0.5});% 高斯变异σ=0.5
3. 并行计算加速
options = optimoptions(options, 'UseParallel', true);
四、结果分析与验证
1. 收敛曲线分析
% 绘制收敛曲线
figure;
plot(gaOutput.generations, gaOutput.bestfitness);
xlabel('迭代次数');
ylabel('最优适应度值');
title('收敛曲线分析');
2. 约束满足验证
% 检查约束满足程度
if ~isempty(A)
disp(['约束违反量: ', num2str(A*x' - b')]);
end
五、完整工程模板
%% 主程序
function main()
% 参数定义
nvars = 2;
lb = [-5.12, -5.12];
ub = [5.12, 5.12];
% 创建优化选项
options = createGAOptions();
% 运行遗传算法
[x,fval] = ga(@objectiveFunc, nvars, [], [], [], [], lb, ub, [], options);
% 结果输出
disp('优化结果:');
disp(['x = ', num2str(x')]);
disp(['f(x) = ', num2str(fval)]);
end
%% 目标函数
function y = objectiveFunc(x)
y = 10*numel(x) + sum(x.^2 - 10*cos(2*pi*x));
end
%% 参数配置函数
function options = createGAOptions()
options = optimoptions('ga',...
'PopulationSize', 100,...
'MaxGenerations', 200,...
'CrossoverFcn', @crossoverheuristic,...
'MutationFcn', @mutationadaptfeasible,...
'PlotFcn', {@gaplotbestf,@gaplotstopping},...
'Display', 'iter',...
'UseParallel', true);
end
六、性能优化
- 多峰函数处理 使用
@selectiontournament选择算子配合@mutationgaussian增强局部搜索能力
- 高维问题优化 采用
@crossoversplicing交叉算子,设置PopulationSize=500并启用@gaplotdistance监控种群多样性
- 动态环境适应 添加
@gaoptimset('Generations', 500)延长搜索时间,配合@gaplotbestf观察收敛趋势
七、参考资料
- 《MATLAB遗传算法工具箱实战指南》(王伟,2023)
- MathWorks官方文档:ga函数说明
- 代码 利用matlab基于遗传算法求解函数最小值 www.youwenfan.com/contentcnj/77760.html
- 专利CN113267837A:混合遗传算法优化方法