如何检查是否存在满足线性不等式的解集?

问题描述

是否有可能确定是否存在满足Matlab之外的一组线性不等式的解决方案(以编程方式)只需一个true / false即可,但是是否可以在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

我真的是数学方程式的新手,因此我希望能很好地解释我的问题。

解决方法

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

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

现在将重点放在这个问题上(假设所有不平等形式均为>=)。您要解决以下优化问题,其中目标函数的常数为<=。这也称为0问题。

feasibility

请注意,如果解决方案(最小值)返回minimize 0 subject to AX <= B ,则表示没有infinity满足上述约束。如果求解器返回X(这是常数目标函数的值),则意味着至少有一个0满足约束。因此,您可以找到解决不平等问题的方法。

您可以为此使用X库。这是cvxpy中不错的tutorialpython库也很适合cvxpy,并为您处理了所有内部numpy的细节。您甚至可以将变量solver限制为采用Xreal的值,还可以根据诸如integer等线性不等式施加约束。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...