赞
踩
- % 步骤 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。