题目
最小化f(x),其满足g1,g2两个约束
对两个约束条件,设置不同的惩罚系数
采用matlab实现
1. 构造F(x)表达式
新建simple_fitness.m函数
matlab代码如下
function y = simple_fitness(x)
f = (x(1)-2)*(x(1)-2) + (x(2)-1)*(x(2)-1);
g1 = x(1) - 2*x(2) +1;
g2 = -0.25*x(1)*x(1) - x(2)*x(2) + 1;
%判断r1
if g1 == 0
r1 = 0;
else if abs(g1) < 0.01
r1 = 50;
else if abs(g1) < 0.1
r1 = 100;
else r1 = 500;
end
end
end
%判断r2
if g2 >= 0
r2 = 0;
else if g2 >= -0.01
r2 = 150;
else if g2 >= -0.1
r2 = 190;
else r2 = 500;
end
end
end
p = r1*g1*g1 + r2*g2*g2;
y = f + p;
end
2. 写main.m脚本
matlab代码
ObjectiveFunction = @simple_fitness;
nvars = 2;%变量个数
LB = [0]%定义域下限
UB = [1]%定义域上限
[x,fval] = ga(ObjectiveFunction,nvars,[],[],[],[],LB,UB)%调用ga函数
运行脚本
可得结果
3. 或者直接用工具箱
APP里选择Optimization
在solver那栏选择遗传算法(Gnetic Algorithm)
传入优化函数名,设置变量个数,上下界
点start即可得到结果
结果
x1取0.8344,x2取0.9122,优化函数取最小值1.3770
可以多次运行,每次结果会有些许偏差
本例是对matlab GA工具包的简单运用