基于MATLAB遗传算法工具箱求解函数最小值

一、基础实现(无约束优化)

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

六、性能优化

  1. 多峰函数处理 使用@selectiontournament选择算子配合@mutationgaussian增强局部搜索能力
  2. 高维问题优化 采用@crossoversplicing交叉算子,设置PopulationSize=500并启用@gaplotdistance监控种群多样性
  3. 动态环境适应 添加@gaoptimset('Generations', 500)延长搜索时间,配合@gaplotbestf观察收敛趋势

七、参考资料

  1. 《MATLAB遗传算法工具箱实战指南》(王伟,2023)
  2. MathWorks官方文档:ga函数说明
  3. 代码 利用matlab基于遗传算法求解函数最小值 www.youwenfan.com/contentcnj/77760.html
  4. 专利CN113267837A:混合遗传算法优化方法
posted @ 2025-10-22 16:33  吴逸杨  阅读(42)  评论(0)    收藏  举报