MODEL:
SETS:
XIANG/1..5/:S,B1,B2,B3,B4;
UV/1..21/:U,V;
BIAN(UV,XIANG):X,X0;
ENDSETS
DATA:
!@ole('C:\Users\Administrator\Desktop\222\线性规划2.xlsx',AA)=X0;
!@ole('C:\Users\Administrator\Desktop\222\线性规划2.xlsx',BB)=s;
ENDDATA
min=@SUM(XIANG:S);
@for(BIAN:@bin(X0));
!问题在此!!!;
!@for(XIANG:@bin(s));
!@for(XIANG:s=1);
s(1)=1;
s(2)=1;
s(3)=1;
s(4)=1;
s(5)=0;
@for(XIANG(I2):
@SUM(BIAN(I,J)|j#eq#i2:x0(i,j))=s(i2)*6;
);
!问题结束;
@for(BIAN(I,J):
x0(i,j)+x0(@wrap(I+1,21),j)+x0(@wrap(I+2,21),j)<=1
);
@for(UV(I3):
@SUM(BIAN(I,J)|i#eq#i3:x0(i,j))>=1;
);
@for(XIANG(I4):
@SUM(XIANG(J)|j#eq#i4:x0(3,j)+x0(6,j)+x0(9,j)+x0(12,j)+x0(15,j)+x0(18,j)+x0(21,j))=b2(i4)
);
@for(XIANG(I5):
@SUM(XIANG(J)|j#eq#i5:x0(1,j)+x0(4,j)+x0(7,j)+x0(10,j)+x0(13,j)+x0(16,j)+x0(19,j))=b3(i5)
);
@for(XIANG(I6):
@SUM(XIANG(J)|j#eq#i6:x0(2,j)+x0(5,j)+x0(8,j)+x0(11,j)+x0(14,j)+x0(17,j)+x0(20,j))=b4(i6)
);
@for(XIANG(I):b2(i)<=b3(i));
@for(XIANG(I):b2(i)<=b4(i));
END
把变量S设为二进制,会出81错误,但是把S=1不会报错。按理,二进制不是比固定为1宽松吗?为什么宽松约束反而会报错呢?
另外,单列S(1)\S(2)\S(3)\S(4)\S(5)不会报错,任一等于1或0不会报错,但是@for(XIANG:s=1);后再单独设置S(5)=0会报错,这又是什么原理?
SETS:
XIANG/1..5/:S,B1,B2,B3,B4;
UV/1..21/:U,V;
BIAN(UV,XIANG):X,X0;
ENDSETS
DATA:
!@ole('C:\Users\Administrator\Desktop\222\线性规划2.xlsx',AA)=X0;
!@ole('C:\Users\Administrator\Desktop\222\线性规划2.xlsx',BB)=s;
ENDDATA
min=@SUM(XIANG:S);
@for(BIAN:@bin(X0));
!问题在此!!!;
!@for(XIANG:@bin(s));
!@for(XIANG:s=1);
s(1)=1;
s(2)=1;
s(3)=1;
s(4)=1;
s(5)=0;
@for(XIANG(I2):
@SUM(BIAN(I,J)|j#eq#i2:x0(i,j))=s(i2)*6;
);
!问题结束;
@for(BIAN(I,J):
x0(i,j)+x0(@wrap(I+1,21),j)+x0(@wrap(I+2,21),j)<=1
);
@for(UV(I3):
@SUM(BIAN(I,J)|i#eq#i3:x0(i,j))>=1;
);
@for(XIANG(I4):
@SUM(XIANG(J)|j#eq#i4:x0(3,j)+x0(6,j)+x0(9,j)+x0(12,j)+x0(15,j)+x0(18,j)+x0(21,j))=b2(i4)
);
@for(XIANG(I5):
@SUM(XIANG(J)|j#eq#i5:x0(1,j)+x0(4,j)+x0(7,j)+x0(10,j)+x0(13,j)+x0(16,j)+x0(19,j))=b3(i5)
);
@for(XIANG(I6):
@SUM(XIANG(J)|j#eq#i6:x0(2,j)+x0(5,j)+x0(8,j)+x0(11,j)+x0(14,j)+x0(17,j)+x0(20,j))=b4(i6)
);
@for(XIANG(I):b2(i)<=b3(i));
@for(XIANG(I):b2(i)<=b4(i));
END
把变量S设为二进制,会出81错误,但是把S=1不会报错。按理,二进制不是比固定为1宽松吗?为什么宽松约束反而会报错呢?
另外,单列S(1)\S(2)\S(3)\S(4)\S(5)不会报错,任一等于1或0不会报错,但是@for(XIANG:s=1);后再单独设置S(5)=0会报错,这又是什么原理?