matlab调用yalmip求解网络最短路问题,测试代码显示infeasible problem,于是分段运行查看代码问题,这条件设置的哪里有问题,苦恼了很久……
cons=[];
o=[1,1,1,1,1,3,3,3,3,3,4,4,4,4,4,18,18,18,18,18,24,24,24,24,24];
d=[11,19,22,38,40,11,19,22,38,40,11,19,22,38,40,11,19,22,38,40,11,19,22,38,40];
len=readmatrix('len.csv');
time=readmatrix('time.csv');
load('orig.mat');
load('dest.mat');
%% 决策变量
X=binvar(25,128);
%% 目标函数
cost=sum(2.8*X*len)/(197*25);
T=sum(sum(X*time))/(2.5*25);
A=0.8*cost+0.2*T;
%% 约束条件
for i=1:10
for j=1:25
for L=1:128
cons=[cons,0<=X(j,L)<=1];
end
% cons=[cons,sum(X(j,orig==o(j)))-sum(X(j,dest==o(j)))==1];
% cons=[cons,sum(X(j,orig==d(j)))-sum(X(j,dest==d(j)))==-1];
for k=1:41
cons=[cons,sum(X(j,orig==k))<=1];%从
cons=[cons,sum(X(j,dest==k))<=1];
if k~=o(j) && k~=d(j)
cons=[cons,sum(X(j,orig==k))-sum(X(j,dest==k))==0];%每个中间点和不经过的点的净流量为0
end
cons=[cons,max(sum(X(j,:)*time))<=2.5];
end
end
ops=sdpsettings('verbose',1);
sol=optimize(cons,A,ops)
%% 结果输出
if sol.problem==0
X=value(X);
A=value(A);
else
disp('error');
end
end
clear i;
clear j;
clear k;
以上为matlab代码片段,前面的注释掉的片段一旦注释掉,问题就好像有解但其实为0;不注释就显示infeasible problem。
这里o(1)是1,k==o(j)是成立的
可见条件没有产生作用,value值是0,裂开了呀。sum函数不能用的话怎样从别的矩阵获得我想要的相同位置的决策变量元素的加总成为条件呢?