我尝试从p-hub中位置问题实现两个约束。约束条件是:
对于所有i,j,k,m,Z_ij ^km≤x_m
对于所有i,j,k,m,Z_ij ^km≤x_k
Z是一个4-D(ijk * m)阵列,x是一个向量。 Z和x是我的未知数。在我的情况下,我= j = k = m = s = 20(但是,如果可能的话,它应该达到100)
我试过这个代码,但是,首先,我不确定它是否确切并且非常慢。
clearer1 = zeros(size(objX));
clearer12 = clearer1(:);
clearer2 = zeros(size(objZ));
clearer22 = clearer2(:);
% ----Inequality constraints----
Aineq = spalloc(2*s*s*s*s,s2,4*s*s*s*s);
bineq = spalloc(2*s*s*s*s,1,0);
counter = 1;
% On x_m
for i=1:s
for j=1:s
for k=1:s
for m=1:s
Ztemp = clearer2;
Ztemp(i,j,k,m) = 1;
Xtemp = clearer1;
Xtemp(m) = -1;
Temp = sparse([Xtemp(:);Ztemp(:)]);
Aineq(counter,:) = Temp';
counter = counter+1;
end
end
end
end
% On x_k
for i=1:s
for j=1:s
for k=1:s
for m=1:s
Ztemp = clearer2;
Ztemp(i,j,k,m) = 1;
Xtemp = clearer1;
Xtemp(k) = -1;
Temp = sparse([Xtemp(:);Ztemp(:)]);
Aineq(counter,:) = Temp';
counter = counter+1;
end
end
end
end我怎样才能正确写入我的约束?我如何提高功能的速度?