【问题标题】:How to check whether a solution set exists, which satisfies a set of linear inequalities?如何检查是否存在满足一组线性不等式的解集?
【发布时间】:2020-11-05 13:41:16
【问题描述】:

是否有可能确定是否存在一组满足 Matlab 之外的一组线性不等式的解决方案(以编程方式)只需一个真/假就足够了,但是否可以在 JavaScript 中使用库(最好是只是一个小的工作原型)或者如果没有任何简单的python库?

我可以通过具有一些约束的自写函数来做到这一点,但该解决方案可能非常不稳定,因此在重新发明轮子之前需要一些专家的意见。

到目前为止,我对确定一组不等式是否存在解集的理解如下:

假设不等式是:

y >= 2x + 1 
y <= 2x - 5
x >  1

这里以 Y 为主题,我可以尝试输入 X 的一些有限正值和 X 的一些有限负值,包括零。

所有不等式的更容易说的域是 [3,2,1,0,-1,-2,-3]

将得到范围(每个不等式的 Y 值)

稍后将比较 Y 的所有值,并查看在给定 X 值上是否存在一些相交区域。

例如:

   when X = 1 
   inequality 1 gives Y >= 3
   inequality 2 gives Y <= -3 
   inequality 3 says X >  1

所以 X = 1 没有找到任何共同点,我将转向另一个 X 值。

但我不太确定何时停止?每个方向上的几个值(正或负)将定义良好的约束并帮助我确定是否存在不等式的解决方案集?

因为不等式的重叠区域可能位于图的一个角落,并且 X 域两侧的一些初始值将证明它们是不相交的独立区域,但我们需要继续迭代可能是对于一个非常大的 X 值,其中两个不等式都有重叠区域,有时即使这样它们也不会相交。

那么是否有已经编写的基本库或函数可以帮助我解决这个问题?或者如果不是,那么我解决这种情况的逻辑/理解是否正确?

而不是 Matlab,而只是简单的 JavaScript 编程库。

后面的解会扩展到2个以上,也可能是3个变量不等式。

我的问题与在 this question from past

我对求解数学方程很陌生,因此我希望能很好地解释我的问题。

【问题讨论】:

标签: javascript python linear-algebra mathematical-expressions inequalities


【解决方案1】:

如果你有一组线性不等式,你只想知道它们是否可行,你可以形成一个简单的凸优化问题或简单的可行性问题。假设您有一个变量向量 X = [x, y] 要检查其解和一组线性不等式,每个形式为 a1x + a2y &lt;= b

然后你基本上可以通过逐行堆叠不等式来形成矩阵A和列向量B,这样A的每一行对于每个不等式和对应的系数都有a1a2的系数B 的行具有常量 b。请注意,对于所有不等式最好使用&lt;=&gt;=,因此请相应地调整符号。

现在关注这个问题(假设所有不等式都是&lt;= 形式)。您想解决以下优化问题,其中目标函数具有恒定值0。这也称为feasibility 问题。

minimize    0
subject to  AX <= B

请注意,如果解(最小值)返回infinity,则表示不存在满足上述约束的X。如果求解器返回0(这是常数目标函数的值),则意味着至少有一个满足约束的X。因此,您可以找到是否存在任何解决您的不平等的方法。

您可以为此使用cvxpy 库。这是python 中的一个不错的tutorialcvxpy 库也与 numpy 配合得很好,它会为您处理所有内部 solver 细节。您甚至可以将变量 X 限制为采用 realinteger 值,并根据 x + 0.y &lt; = a 等线性不等式施加绑定约束。

【讨论】:

  • 谢谢!从您的答案中得到想法后。我是在 python 中使用 Scipy 库完成的,到目前为止我还不知道可行性或优化问题,所以谢谢
猜你喜欢
  • 2013-12-14
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 2018-10-10
  • 1970-01-01
  • 2020-12-16
  • 2015-02-28
相关资源
最近更新 更多