还有为啥权重为啥是根据第一目标值和第二目标值定的昂
不太懂
a=[-1,-1,0,0;0,0,-1,-1;3,0,2,0;0,3,0,2];%约束条件
b=[-30 -30 120 48]';
c1=[-100 -90 -80 -70];%fgoalattain函数以最小优化为目的,所以目标函数的数值目标(也就是下边的goal)是≤的时候,系数为+,目标函数是≥的时候,系数为-
c2=[0 3 0 2];
fun=@(x)[c1;c2]*x %匿名函数定义目标向量
[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))%求第一个目标函数的目标值
[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))%求第二个目标函数的目标值
g3=[g1;g2];
[x,fval]=fgoalattain(fun,rand(4,1),g3,abs(g3),a,b,[],[],zeros(4,1))
%结果 x1=19.0652 x2=10.9348 x3=31.4023 x4=0 第一目标值为5402.8 第二目标值为32.8
权重可以自定义设置,为[1,1]的时候就是同等重要,权重设置不同,结果可能也不同。
fgoalattain详细用法参考官方文档:https://ww2.mathworks.cn/help/optim/ug/fgoalattain.html