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

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 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)