我用yalmip工具箱求最短路徑,可是我想指定一定要經過11節點的最短路徑的優化,當我設的約束條件為一定經過11點時,矩陣感覺是非正常的。代碼如下
B=[0 1.5 100 100 0.8 100 100 100 100 100 100 100 100 100 100 100 ;
1.5 0 1 100 100 0.9 100 100 100 100 100 100 100 100 100 100;
100 1 0 1.5 100 100 1.3 100 100 100 100 100 100 100 100 100;
100 100 1.5 0.0 100 100 100 1.0 100 100 100 100 100 100 100 100;
0.8 100 100 100 0 3 100 100 1 100 100 100 100 100 100 100;
100 0.9 100 100 3 0 0.5 100 100 1 100 100 100 100 100 100;
100 100 1.3 100 100 0.5 0 0.4 100 100 1 100 100 100 100 100;
100 100 100 1 100 100 0.4 0 100 100 100 1.5 100 100 100 100;
100 100 100 100 1 100 100 100 0 1 100 100 1 100 100 100;
100 100 100 100 100 100 100 100 1 0 1 100 100 1.4 100 100;
100 100 100 100 110 100 100 100 100 1 0 1 100 100 1.3 100;
100 100 100 100 100 100 100 1.5 100 100 1 0 100 100 100 1.5;
100 100 100 100 100 100 100 100 1 100 100 100 0 0.5 100 100;
100 100 100 100 100 100 100 100 100 1.4 100 100 0.5 0 1.5 100;
100 100 100 100 100 100 100 100 100 100 13/10 100 100 1.5 0 1;
100 100 100 100 100 100 100 100 100 100 100 1.5 100 100 1 0];
%路徑的長度
n=size(B,1);
x=binvar(n,n,'full');
%創建決策變
z=(sum(sum(B.*x)));%目標函式
C=[sum(x(1,:))-sum(x(:,1))==1,(sum(x(16,:))-sum(x(:,16))==-1)];
for i=2:16
C=[C,(sum(x(i,:))-sum(x(:,i))==0)];
end
C=[C,sum(x(11,:))==1];
%路徑選擇約束條件
ops=sdpsettings('verbose',0);
%求解
result=solvesdp(C,z,ops);
if result.problem==0
x_star=value(x);
z_star=value(z);
else
disp('求解程序中出錯')
end
double(x)
double(z)
求出的結果是這樣的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95883.html
標籤:C++ 語言
上一篇:請問&&符號和&的區別在哪里
