用Matlab使用yalmip工具箱,出现下列警告,不知道怎么处理,有哪位帮忙解决一下嘛?,具体完整代码如下:
警告: One of the constraints evaluates to a DOUBLE variable
In constraint/horzcat (line 6)
In smj2 (line 90)
clear;
clc;
close all;
c =[36,45,61,63,36,59,65,58,62,45,39,21,18,40,31,41,50,46,66,48,44,54,45,35,36,49,47,34;
41,31,35,71,31,27,19,42,41,37,38,34,37,49,46,22,32,49,32,15,23,42,20,24,27,24,11,16;
66,128,148,105,62,68,89,110,99,98,102,84,86,94,68,64,65,75,76,109,70,57,87,54,51,49,57,45;
48,60,45,50,45,36,49,55,45,49,62,44,62,73,53,51,67,43,39,46,40,61,30,41,37,31,53,26;
227,402,416,309,377,384,425,443,405,477,524,492,498,540,530,525,534,491,420,414,411,393,375,362,348,297,273,248;
387,724,737,464,465,480,546,644,635,606,603,631,633,615,644,624,578,579,578,578,542,548,536,521,477,446,426,483;
29,25,29,23,22,29,40,29,25,16,49,52,43,59,40,42,40,47,32,22,30,46,22,23,15,42,18,22;
48,94,120,71,51,59,64,65,69,82,92,88,101,85,99,98,119,123,101,95,97,59,73,71,58,72,82,92;
47,54,47,29,43,43,48,50,57,45,54,44,60,67,73,58,59,54,56,46,41,42,53,48,31,43,45,39;
113,115,113,113,101,98,116,150,191,221,143,122,95,110,134,206,307,325,200,136,122,91,111,63,89,86,115,102];
f=[1,0.92,0.90,0.86,0.80,0.71,0.67,0.60,0.53;
0, 1, 0.95,0.90,0.75,0.61,0.57,0.51,0.46;
0, 0, 1, 0.99,0.93,0.87,0.83,0.75,0.68;
0, 0, 0, 1, 0.97,0.93,0.88,0.80,0.72;
0, 0, 0, 0, 1, 0.99,0.93,0.85,0.74;
0, 0, 0, 0, 0, 1, 0.93,0.85,0.76;
0, 0, 0, 0, 0, 0, 1, 0.97,0.94;
0, 0, 0, 0, 0, 0, 0, 1, 0.97;
0, 0, 0, 0, 0, 0, 0, 0, 1 ;
0, 0, 0, 0, 0, 0, 0, 0, 0 ];
time=[3,3,3,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2.25,2,2,2,2,2,2,2,2,2];
x=intvar(10,28);
s=intvar(10,28);
d=intvar(10,28);
cd=zeros(9,28);
ops=sdpsettings('verbose',0,'solver','Cplex');
目标函数
delaypeople=0;
for i=1:10
a=0;
for j=i:28
a=a+(d(i,j)-x(i,j))*time(j)/c(i,j);
end
delaypopple=a+delaypeople;
end
z= delaypeople;
约束条件
C=[];
计算中间变量值
for i=1:10
s(i,i)=0;初始延误人数
d(i,i)=c(i,i);初始需要上车人数
end
for i=1:10
for j=i+1:28
s(i,j)=d(i,j-1)-x(i,j-1);延误人数
d(i,j)=s(i,j)+c(i,j);需要上车人数
end
end
for j=1:28 列车的数量
if j>19
m=28-j;
elseif j==28
break;
else
m=9;
end
sumnumber=0;
for i=1:m
sumnumber=0;
for a=1:i
sumnumber=sumnumber+x(a,a+j-1)f(a,i);
end
cd(a,j)=sumnumber;
C=[C,cd(a,j)<=18601.1];
end
end
for h=1:10
if h=5||h=6
for y=i:28
C=[C, 0<=d(h,y)-x(h,y)<=0.5d(h,y)];
end
end
end
for i=1:10
if i==6
for j=i:28
C=[C,x(i,j)<=10000time(j)/60];
end
else
for j=i:28
C=[C,x(i,j)<=12000*time(j)/60];
end
end
end
for j=1:24
for i=4:5
C=[C,18601.10.2<=18601.1-cd(i,j)<=18601.1*0.4];
end
end
求解
result = optimize(C,z,ops);
if result.problem == 0 求解成功
value(x)
value(z)
else
disp('求解过程中出错');
end