该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码在下面
function result= rostering(D,m,M,N,w,Q,U)
%下面的是要输出的决策变量
x=binvar(13,28,3,'full');
s=binvar(13,4,'full');
p1=sdpvar(1,13,'full');
p2=sdpvar(1,13,'full');
q1=sdpvar(1,13,'full');
q2=sdpvar(1,13,'full');
r=sdpvar(13,28,'full');
%下面是目标函数
sum1=0;
for i=1:13
sum1=sum1+p1(1,i)+p2(1,i);%第一项
end
sum2=0;
for i=1:13
for j=6:7:27
sum2=sum2+r(i,j);%第二项
end
end
sum3=0;
for i=1:13
sum3=sum3+q1(1,i)+q2(1,i);%第三项
end
Objective = U(:,1)*sum1+U(:,2)*sum2+U(:,3)*sum3;%这就是总的目标函数
%下面是限制条件
constrains=[];
%限制条件1
for j=1:29
for k=1:3
sumc1=0;
for i=1:13
sumc1=sumc1+x(i,j,k);
end
constrains=[constrains,sumc1>=D(j,k)];
end
end
%限制条件2
for i=1:13
for j=1:28
sumc2=0;
for k=1:3
sumc2=sumc2+x(i,j,k);
end
constrains=[constrains,sumc2<=1];
end
end
%限制条件3
for i=5:13
for j=1:27
constrains=[constrains,x(i,j,3)+x(i,j+1,1)<=1];
end
end
%限制条件4
for i=1:13
for j=6:7:20
sumc41=0;
for k=1:3
sum41=sum41+x(i,j,k)+x(i,j+2,k);
end
constrains=[constrains,sumc41<=1];
end
end
for i=1:13
for j=7:7:21
sumc42=0;
for k=1:3
sum42=sum42+x(i,j,k)+x(i,j+1,k);
end
constrains=[constrains,sumc42<=1];
end
end
%限制条件5
for i=5:13
for r=1:26
sumc5=0
for j=r:r+2
sumc5=sumc5+x(i,j,3);
end
constrains=[constrains,sumc5<=2];
end
end
%限制条件6
for i=1:13
sumc6=0
for j=1:28
for k=1:3
sumc6=sumc6+x(i,j,k);
end
end
constrains=[constrains,sumc6<=M];
constrains=[constrains,sumc6>=m];
end
%限制条件7
for i=5:13
sumc7=0
for j=1:28
sumc7=sumc7+x(i,j,3);
end
constrains=[constrains,sumc7<=N];
end
%限制条件8
for i=5:13
for j=1:26
sumc81=0;
sumc82=0;
for k=1:3
sumc81=sumc81+x(i,j+1,k);
sumc82=sumc82+x(i,j+2,k);
end
constrains=[constrains,x(i,j,3)-sumc81+sumc81<=1];
constrains=[constrains,x(i,j,3)+sumc81-sumc81<=1];
constrains=[constrains,x(i,j,3)+sumc81+sumc81<=2];
end
end
%限制条件9
for i=1:13
for j=6:7:20
sumc91=0;
sumc92=0;
sumc93=0;
for k=1:3
sumc91=sumc91+x(i,j,k);
sumc92=sumc92+x(i,j+1,k);
sumc93=sumc93+x(i,j+2,k);
end
constrains=[constrains,sumc91+sumc93<=1];
constrains=[constrains,sumc92+sumc93<=1];
end
end
%下面的是软性条件
%限制条件10
for i=1:13
sumc10=0;
for j=1:29
for k=1:3
sumc10=sumc10+x(i,j,k);
end
end
constrains=[constrains,sumc10==w+p1(1,i)+p2(1,i)];
end
%限制条件11
for i=1:13
for j=6:7:27
sumc11=0;
for k=1:3
sumc11(i,j)=sumc11+x(i,j,k)+x(i,j+1,k);
end
constrains=[constrains,sumc11==2*s(i,j)-r(i,j)];
constrains=[constrains,r(i,j)>=0];
end
end
%限制条件12
for i=5:13
sumc12=0
for j=1:28
sumc12=sumc12+x(i,j,3);
end
constrains=[constrains,sumc12==Q+q1(1,i)-q2(1,i)];
end
%下面是求解
options = sdpsettings('verbose',0,'solver','cplex');
sol = solvesdp(constraints,Objective,options);
end
运行之后,显示的错误如下
Error using subsref
Index exceeds matrix dimensions.
Error in ndsdpvar/subsref (line 35)
base = subsref(base,refs);
Error in rostering (line 35)
sumc1=sumc1+x(i,j,k);
请问一下怎么回事