如果约束是可行的,如何在没有对象函数的情况下检查?

时间:2013-02-15 16:24:47

标签: c++ math mathematical-optimization linear-programming

我的教授给了我一个二元线性规划问题,但是这个问题与我以前解决的优化问题略有不同(即这可能不是最大化或最小化对象函数。)

问题如下, 给定矩阵M,对于条目m_ij!= 0,存在对应的x_ijk变量。 条目m_ij = 0可以忽略。

x_ijk是0或1,我想为每个m_ij尝试5个x_ijk变量(即x_ij1,x_ij2,x_ij3,x_ij4和x_ij5。其中一个为1,其他为0)足以满足一些条件(一组不等式)。

更简单地说,这是检查每个m_ij涉及5个x_ijk变量的约束集是否是有效(或可行)约束。

我已经解决了一些优化问题,但是如果没有目标函数我就无法解决问题。

我应该在此设置什么作为我的目标函数? 0?什么?

我可能正在使用lp_solve或CPLEX。

提前感谢您的建议!

1 个答案:

答案 0 :(得分:4)

这是正确的,您可以将任意常量值设置为目标函数。

我尝试过的大多数求解器都允许空目标函数。只需将其从模型中删除即可。

根据您使用的求解器和API,您可能需要将目标中所有变量的系数设置为零。

别担心,它必须工作。


回应您的评论:是的,约束编程工具可以提供比LP解算器(例如CPLEX)更好的可行性问题性能。我几个月前玩IBM ILOG CPLEX CP Optimizer,学术用户免费。 LP求解器和CP求解器都解决了我的问题。不要指望来自约束编程的奇迹。

请记住,在最坏的情况下,解决约束程序所需的时间会随着问题的大小呈指数级增长。迟早,使用这两种工具,您的问题很可能无法解决。

仅供参考:最后,约束编程求解器将调用LP解算器(例如CPLEX)。

我的建议是:尝试您已有的工具/使用对您来说更自然的问题表达方式。检查该工具是否可以解决您的问题。仅在工具失败且无法改进模型时切换工具。