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

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 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂