一、基礎實現(無約束優化)
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:混合遺傳算法優化方法