如何在CPLEX中检查MILP是否具有可行的解决方案

问题描述

我想知道是否有一种快速方法来检查具有给定输入的MILP是否具有可行的解决方案。我有一个MILP公式,正在尝试随机生成可能有或没有可行解决方案的问题的输入。我想使用CPLEX进行检查。

我知道,检查问题是否有可行解决方案的一种方法是将目标函数设置为常数(例如0),以便CPLEX返回找到的第一个可行解决方案。如果我们以某种方式生成的输入具有可行的解决方案,这可能是最快的方法

如果我们以某种方式生成没有可行解决方案的问题的输入,我想知道什么是使用CPLEX检查生成的输入没有可行解决方案的最快方法

谢谢。

解决方法

通常,可行性与最优性一样难,因此通常必须以一种或另一种方式解决MIP。检测(不)可行性的一种方法确实是将目标归零,然后查看CPLEX是否找到可行的解决方案。但是,根据您的问题结构,有意义的目标值可能比全零目标更好。您可以将“解决方案限制”参数设置为1,以便在这种情况下CPLEX会在第一个可行的解决方案处停止。

另一种选择是使用CPLEX的feasopt功能,请参见here。 CPLEX试图找到最小的松弛。它始于一个始终可行的问题。如果您的原始模型可行,则feasopt最终将以目标值0的解终止。如果您的初始模型不可行,则CPLEX对于feasopt模型的最佳界限最终将超过0,此时可以停止该算法。有时这会更快发现不可行。