【问题标题】:How to check, without an object function, if the constraints are feasible?如何在没有对象函数的情况下检查约束是否可行?
【发布时间】:2013-02-15 16:24:46
【问题描述】:

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

问题如下, 给定一个矩阵 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。

提前感谢您的建议!

【问题讨论】:

  • 是的,您的求解器采用的任何恒定目标函数都足够了。您可能想查找constraint satisfaction
  • 感谢您的评论。我不知道甚至存在这样的事情(如约束编程)。我肯定会通读它。谢谢。

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


【解决方案1】:

没错,你可以设置任意常数值作为目标函数。

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

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

别担心,它必须工作。


回复您的评论:是的,约束规划工具在可行性问题上的性能优于 LP 求解器(例如 CPLEX)。几个月前我玩过IBM ILOG CPLEX CP Optimizer,它对学术用户免费。 LP 求解器和 CP 求解器都未能解决我的问题。不要指望约束编程会带来奇迹。

请记住,在最坏的情况下,解决约束程序所需的时间会随着问题的规模呈指数增长。迟早,您的问题很可能会变得无法使用任何一种工具来解决。

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

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

【讨论】:

  • 感谢您的建议!无论如何,Narasimhan 先生向我介绍了约束规划,似乎有专门的工具包来解决约束规划问题本身。我应该使用这些工具包吗?或者我可以只使用 MATLAB、CPLEX 或 lp_solve 等线性编程程序/包吗?目标函数设置为 0 的后者会以与这些约束编程工具包相同的方式工作吗?我的约束并不多,但它们是一个可管理的数字(最多 100 个)并且它们都是线性的。
  • 非常感谢!!这很有帮助!我可以为此使用 MATLAB。我可以再问一个问题吗?因此,所有 m_ij 变量都将被分配一个非负整数值,而 x_ijk 变量是未知数(0 或 1)。所以,最终如果我的代码有效,计算机会发现这些 x_ijk 值(0 或 1)是什么,对吧?还是它只是检查一组约束是否正确并告诉它是否可以?
  • 抱歉再次提问,非常感谢您的好意!
  • (更具体地说,对于所有 i,j、x_ij1 + x_ij2 + x_ij3 + x_ij4 + x_ij5 = 1,以及一些涉及大量 m_ij(非负整数)乘以这些 x_ijk 值的不等式。所以问题是,计算机是否找到 x_ijk 值的解决方案,还是仅检查约束集是否有效?)
  • @user25409 当然会给出解决方案。您可能需要阅读如何打印解决方案的文档,大多数求解器只是报告他们已经完成,但用户有责任按照自己想要的方式打印解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2011-05-07
相关资源
最近更新 更多