m0_52043689 2021-09-20 10:53 采纳率: 100%
浏览 181
已结题

matlab调用yalmip求解网络最短路问题,测试代码显示infeasible problem,求懂yalmip的高人

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。

img

这里o(1)是1,k==o(j)是成立的

img

可见条件没有产生作用,value值是0,裂开了呀。sum函数不能用的话怎样从别的矩阵获得我想要的相同位置的决策变量元素的加总成为条件呢?

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2021-09-20 11:18
    关注

    同学你好,你的条件不能连着写啊,分开写:

    cons=[cons,0<=X(j,L)<=1]; 
    

    改成

    cons=[cons,0<=X(j,L), X(j,L)<=1]; 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月28日
  • 已采纳回答 9月20日
  • 创建了问题 9月20日

悬赏问题

  • ¥15 如何证明高斯噪声的包络公式
  • ¥150 寻找王者荣耀开发作者,合作或者解答
  • ¥15 乳腺癌数据集 相关矩阵 特征选择
  • ¥15 我的游戏账号被盗取,请问我该怎么做
  • ¥15 通关usb3.0.push文件,导致usb频繁断连
  • ¥15 有没有能解决微信公众号,只能实时拍照,没有选择相册上传功能,我不懂任何技术,,有没有给我发个软件就能搞定的方法
  • ¥15 Pythontxt文本可视化
  • ¥15 如何基于Ryu环境下使用scapy包进行数据包构造
  • ¥15 springboot国际化
  • ¥15 搭建QEMU环境运行OP-TEE出现错误