基于matlab的多目标规划相关问题

多目标规划相关问题
本人初学MATLAB,刚学会线性规划问题求解,准备一起学一下多目标规划,但介绍多目标的不是很多,没找到很适合初学者的讲解,各位有推荐吗?
我试做了一题但做不出来,例题如下:

img


我写的MATLAB编码如下

f1 = [-2;-3];
f2 = [1;2]
a = [0.5,0.25;0.2,0.2;1,5;-1,-1];
b = [8;4;72;-10];
[x1,y1]=linprog(f1,a,b,[],[],[0;0])
y1=-y1;
[x2,y2]=linprog(f2,a,b,[],[],[0;0])
y3=[y1+y2];
fun = @(x)[-2,-3,1,2]*x;
[x,g] = fgoalattain(fun,rand(4,1),y3,abs(y3),a,b,[],[],zeros(1,4));

运行结果报错,显示A必须包含四个列,当我将rand(4,1)改成rand(1,4)时又报错

img


请问这个多目标规划题如何得解?我用的是线性加权法和fgoalattain函数,希望能用这两者得解,感谢指导!

有用希望点个采纳:
你有几个错误:
1.不需要写y1=-y1
2.y3应该是两个函数的目标值,应该是形成矩阵,而不是相加的形式。
3.匿名函数fun中,目标函数f1和目标函数f2的权重,应该写成2×2的矩阵,而不是1×4的矩阵,不然和变量x维度不匹配。
4.rand(4,1)对应的是变量的初值,只有两个变量应该写成rand(2,1),同样地,zeros(4,1)对应的是变量的最小值,只有两个变量应该写成zeros(2,1)
5.最后提醒一下,abs(y3)对应的是两个目标函数的权重,你可以按照需求自行修改。
修改后的代码如下:


clear
close all
clc

f1 = [-2;-3];
f2 = [1;2];
a = [0.5,0.25;0.2,0.2;1,5;-1,-1];
b = [8;4;72;-10];
[x1,y1]=linprog(f1,a,b,[],[],[0;0]);
[x2,y2]=linprog(f2,a,b,[],[],[0;0]);
y3 = [y1,y2];
fun = @(x)[-2,-3;1,2]*x;
[x,g] = fgoalattain(fun,rand(2,1),y3,abs(y3),a,b,[],[],zeros(1,4));
y3
x
g
 

运行结果:

img

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^