排班matlab,用yalmip工具箱设计一个排班问题时出现了一些问题,有大神能帮忙

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

代码在下面

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);

请问一下怎么回事

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值