0

是否可以确定是否存在一组满足 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 个变量不等式。

我的问题与过去在这个问题中提出的问题有些相似或非常相似

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

4

1 回答 1

1

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

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

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

minimize    0
subject to  AX <= B

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

您可以cvxpy为此使用库。这是一个很好的教程。图书馆也很适合python,它会为您处理所有内部细节。您甚至可以将变量限制为取值或值,还可以根据线性不等式等施加约束约束。cvxpynumpysolverXrealintegerx + 0.y < = a

于 2020-11-06T11:39:34.263 回答