我正在实现一个机器学习算法,我需要解决一个整数线性程序。为了在多项式时间内得到解,该算法的作者放弃了积分约束,而是求解了相应的线性规划。
我不太了解优化的理论,所以使用 Mosek 优化工具包作为黑盒来解决 LP。现在很明显,一旦获得 LP 的解,我必须重新添加积分约束。任何想法如何去做?我确信 Mosek 和其他流行的 LP 求解器也会有相同的选项,但似乎无法在他们的文档或其他地方找到它。
谢谢。
我正在实现一个机器学习算法,我需要解决一个整数线性程序。为了在多项式时间内得到解,该算法的作者放弃了积分约束,而是求解了相应的线性规划。
我不太了解优化的理论,所以使用 Mosek 优化工具包作为黑盒来解决 LP。现在很明显,一旦获得 LP 的解,我必须重新添加积分约束。任何想法如何去做?我确信 Mosek 和其他流行的 LP 求解器也会有相同的选项,但似乎无法在他们的文档或其他地方找到它。
谢谢。
如果您删除整数约束,然后篡改灵魂以获得积分近似值,那么您只是在重新发明混合整数线性规划 (MILP) 的轮子。这是一件非常重要的事情,你不可能想出比大多数 MILP 求解器已经实现的更好的东西——除非你首先做了大量的研究。
请注意,术语“混合整数”也涵盖连续变量数为零的情况。因此,对于纯整数情况,几乎没有任何特殊的软件。
许多线性规划 (LP) 软件包也将以不同程度的有效性解决混合整数线性规划 (MILP)。
“加回积分约束”的一种方法是使用机器学习算法的作者使用的整数线性程序 (ILP) 的 LP 松弛的解来热启动 MILP 求解器。但是,阿里是对的,解决原始 ILP 会更有效率。某些算法(例如分支定界)会在计算最优解的过程中解决 LP 松弛问题。
此外,任何值得使用的 MILP 求解器都将实现 MILP 求解算法,例如分支定界和分支切割,其算法启发式和变体比大多数人自己编写的代码要复杂得多。即使在具有特殊结构的问题中,研究人员也经常修改和调整现有的求解器,而不是编写自己的求解器。
如果您在大学,我强烈建议您使用CPLEX或Gurobi,它们都是具有免费学术许可证的顶级 MILP 求解器。在某些情况下,这些求解器求解 MILP 实例的速度明显快于其竞争对手。也就是说,如果您的问题足够小,那么速度可能并不重要。
作为第一次尝试,尝试使用您正在使用的 Mosek 优化工具包解决您的问题,但不要删除积分约束。
根据 Mosek 网站,他们的求解器可以处理混合整数问题。