线性规划问题约束条件错误

clear
p=optimproblem('ObjectiveSense','max');
c=[3100,3800,3500,2850];
a=[18,15,23,12];b=[480,650,580,390];
d=[10,16,8];e=[6800,8700,5300];
x=optimvar('x',4,3,'LowerBound',0);
p.Objective=c*sum(x,2);
p.Constraints.c1=[sum(x,2)<=a';sum(x,1)'<=d';(b*x)'<=e'];
p.Constraints.c2=[sum(x(:,1))/10==sum(x(:,2))/16
sum(x(:,2))/16==sum(x(:,3))/8];
[s,v]=solve(p)
xx=s.x

第二种有误,与第一种就是约束条件分开写了为啥就不行
clear
p=optimproblem('ObjectiveSense','max');
c=[3100,3800,3500,2850];
a=[18,15,23,12];b=[480,650,580,390];
d=[10,16,8];e=[6800,8700,5300];
x=optimvar('x',4,3,'LowerBound',0);
p.Objective=c*sum(x,2);
p.Constraints.c1=sum(x,2)<=a';
P.Constraints.c2=sum(x,1)'<=d';
P.Constraints.c3=(b*x)'<=e';
p.Constraints.c4=[sum(x(:,1))/10==sum(x(:,2))/16
sum(x(:,2))/16==sum(x(:,3))/8];
[s,v]=solve(p)
xx=s.x

代码中存在以下错误: 1. P.Constraints.c2应为p.Constraints.c2; 2. 约束条件中的等式应该用==而不是=; 3. 约束条件c4中的两个等式右边应该都是sum(x(:,3))/8而不是sum(x(:,3))/16; 4. 多个约束条件应该合并成一个optimconstr对象。因此,p.Constraints需要用cell数组来定义。

以下是修正后的代码:

clear
p = optimproblem('ObjectiveSense', 'max');
c = [3100, 3800, 3500, 2850];
a = [18, 15, 23, 12]; 
b = [480, 650, 580, 390];
d = [10, 16, 8]; 
e = [6800, 8700, 5300];
x = optimvar('x', 4, 3, 'LowerBound', 0);
p.Objective = c * sum(x, 2);
p.Constraints = {sum(x, 2) <= a', sum(x, 1) <= d', (b*x)' <= e',...
                 sum(x(:,1))/10 == sum(x(:,2))/16, sum(x(:,2))/8 == sum(x(:,3))/8};
[s, v] = solve(p);
xx = s.x;

其中,Constraints用了一个cell数组包含多个约束条件,每个条件之间用逗号隔开即可。