与intlinprog为什么是我的问题不可行,但linprog给一个有效的解决方案吗?

22日视图(30天)
大家好,
我linprog已经工作一段时间,得到了有用的结果。现在我想扩展到混合整数线性规划,即限制一些整数变量的值。
然而,我甚至不设法运行intlinprog可行解。我从linprog intlinprog使用相同的输入变量,因此没有整数约束。Intlinprog返回“不可行解发现”,尽管linprog一个可行的解决方案。在我看来,它应该返回完全相同的解决方案作为linprog,还是我错了?
(x0, fvallp, exitflag) =
Aeq linprog (costf、Aiq biq,说真的,磅,乌兰巴托,[],选项)
%给出了一个可行的解决方案
intcon = [];
[x, fval exitflag、输出]=
intlinprog (costf、intcon Aiq、biq Aeq,说真的,磅,乌兰巴托,[],选项);
%没有提供可行的解决方案
我不知道如何寻找错误,因为我认为,作为linprog inlinprog使用相同的算法来解决底层LP ?
我试过/检查,没有帮助:
  • 检查如果LP是有效的解决方案:是的
  • 设置algortithm linprog和intlinprog LP的对偶单纯形的
  • 改变完全相反的稀疏矩阵向量
  • 使用linprog的结果作为初始值为intlinprog(不是在下面的代码中,不改变任何东西)
预处理在intlinprog不同吗?我目前有大约2000个变量测试问题,2000方程和50 inequalitites。然而,许多的方程和变量是零。Linprog似乎做预处理,所以我没有把线从Aeq矩阵intlinprog有0等。这是不同的吗?如果是的,你建议我做什么?
我用Matlab 9.7.0.1216025 (R2019b)更新1,优化工具箱8.4版本。
谢谢你的建议,
芭贝特
这是一个更大的剪断我的代码
流(“开始linprog \ n”)
选择= optimoptions (“linprog”);
选项。显示=“通路”;%“关闭”;
选项。算法=对偶单纯形的;
(x0, fvallp, exitflag) =
Aeq linprog (costf、Aiq biq,说真的,磅,乌兰巴托,[],选项)
%检查解决方案是有效的
流([“结果linprog \ n”
“fval linprog: % f \ n '
“exitflag: % d \ n”
“马克斯(Aiq * x0 - biq): % f \ n '
“马克斯(abs (Aeq * x0 - beq)): % f \ n '
“马克斯(x0 -乌兰巴托):% f \ n '
“马克斯(lb - x0): % f \ n '),
fvallp exitflag,
马克斯(Aiq * x0 - biq),%如果条目不太积极,所以有小的不可行性
马克斯(abs (Aeq * x0 - beq)),%条目是否足够接近为零
马克斯(x0 -乌兰巴托),%积极条目违反了界限
max (lb - x0))%积极条目违反了界限
流(“\ nStart intlinprog \ n”)
选择= optimoptions (“intlinprog”);
选项。显示=“通路”;
选项。RootLPAlgorithm =对偶单纯形的;
intcon = [];
biq =全(biq);
说真的=全(说真的);
满磅=(磅);
乌兰巴托=全(乌兰巴托);
[x, fval exitflag、输出]=
intlinprog (costf、intcon Aiq、biq Aeq,说真的,磅,乌兰巴托,[],选项);
disp(输出)
%显示解决方案
流([“结果intlinprog \ n”
“fval intlinprog: % f \ n '
“exitflag: % d \ n”),
fval exitflag)
和输出:
开始linprog
2019 LP预处理去除36不平等,平等,
变量,1950和5722非零元素。
Iter时间Fval原始Infeas双重Infeas
0 0.009 -2.619282 1.600159 e-01 e + e + 00 00 0.000000
41 e-01 3.195509 0.009 0.000000 0.000000 e + e + 00 00
找到最优解。
结果linprog
fval linprog: 0.319551
exitflag: 1
马克斯(Aiq * x0 - biq): -2.285899
马克斯(abs (Aeq * x0 - beq)): 0.000000
马克斯(x0 -乌兰巴托):-0.000000
马克斯(lb - x0): -0.000000
开始intlinprog
89年[x, fval exitflag、输出]=…
没有找到可行的解决方案。
没有指定的整数变量。Intlinprog停止,因为没有点满足约束。
relativegap: []
absolutegap: []
numfeaspoints: []
numnodes: []
constrviolation: []
消息:“没有找到可行的解决方案。↵↵没有指定整数变量。Intlinprog停止,因为没有点满足约束。
结果intlinprog
fval intlinprog:
exitflag: 2
Linprog退出旗2,信息:没有找到可行的解决方案。
没有指定的整数变量。Intlinprog停止,因为没有点满足约束。
1评论
阿尔贝托·查韦斯
阿尔贝托·查韦斯 2020年3月4日
如果你提供一些变量解决发现的LP也许我们可以进一步分析它,但从要点(再次看到fvalue太小),变量和costraints移除,可能是整数而言,他们没有办法融入到一个解决方案与约束。理解更深层次的程序是如何工作的一种方法是减少你的数据也许10变量和约束看看它在这些条件下的行为。可疑但有一件事是它elimiates变量和约束的方式,你有很多冗余的程序,因此您可能需要分析问题本身(也许你犯了错误当解释数据在创建矩阵)。但有一点是肯定的,MILP问题是不可行的。记住,对于任何资讯,解决MILP将比LP,在这种情况下不现实。

登录置评。

答案(0)

类别

找到更多的在线性规划和整数线性规划帮助中心文件交换

下载188bet金宝搏


释放

R2019b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!