% 步骤 1:定义目标函数和约束条件函数 当涉及到矩阵运算时将矩阵转化为行向量或列向量 即全部用x(i)表示
x = zeros(1,3);
objectiveFunc = @(x) [x(1)^2+x(2)^2+x(3)*x(2), x(1)+x(2)+x(3)]; % 最小化目标函数 多目标用逗号隔开 min……
constraintFunc = @(x) [x(1)+x(2)+x(3)-1, x(1)-x(2)-x(3)]; % 约束条件 多约束用逗号隔开 x(1)+x(2)+x(3) <= 1, x(1)-x(2)-x(3) <= 0
% 步骤 2:设置遗传算法选项
gaOptions = optimoptions( ...
'gamultiobj', ... % 算法,gamultiobj 表示多目标,与步骤 4中的函数名保持一致
'PopulationSize', 50, ... % 种群大小,即每一代的候选解个数
'MaxGenerations', 1000, ... % 最大迭代次数,即遗传算法的最大演化代数
'CrossoverFraction', 0.8, ... % 交叉分数,用于控制交叉操作发生的频率。在这个示例中,设置为0.8,表示80%的个体进行交叉操作
'MutationFcn', @mutationadaptfeasible ... % 突变函数,用于指定突变操作的方式
);
% 步骤 3:定义适应度函数和非线性约束条件函数
fitnessFunc = @(x) objectiveFunc(x); % 适应度函数不考虑约束条件
nonlconFunc = @(x) deal([], constraintFunc(x)); % 将约束条件转换为非线性约束条件
% 步骤 4:调用遗传算法函数
[x, fval] = gamultiobj(fitnessFunc, numel(x), [], [], [], [], [], [], nonlconFunc, gaOptions);
% 步骤 5:分析结果
disp('优化的解:');
disp(x);
disp('目标函数值:');
disp(fval);
运行结果:
优化的解:
0.4991 -0.4551 0.9550
0.4991 -0.4552 0.9550
0.4991 -0.4552 0.9550
0.4991 -0.4551 0.9550
0.4991 -0.4551 0.9550
0.4994 -0.4564 0.9560
0.4992 -0.4564 0.9562
0.4991 -0.4557 0.9556
0.4991 -0.4552 0.9550
0.4993 -0.4562 0.9559
0.4991 -0.4556 0.9555
0.4991 -0.4555 0.9553
0.4992 -0.4560 0.9559
0.4991 -0.4555 0.9553
0.4992 -0.4564 0.9562
0.4991 -0.4561 0.9562
0.4992 -0.4561 0.9559
0.4991 -0.4551 0.9550
目标函数值:
0.0216 0.9990
0.0216 0.9990
0.0216 0.9990
0.0216 0.9990
0.0216 0.9990
0.0214 0.9990
0.0211 0.9991
0.0213 0.9990
0.0216 0.9990
0.0213 0.9990
0.0214 0.9990
0.0215 0.9990
0.0212 0.9990
0.0215 0.9990
0.0211 0.9991
0.0210 0.9992
0.0212 0.9990
0.0216 0.9990