多目标规划相关问题
本人初学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)时又报错
有用希望点个采纳:
你有几个错误:
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
运行结果:
p=[ 1 3 16 2 -4 -25 -60 ];