【问题标题】:How to code check if system of inequalities has a solution如何编码检查不等式系统是否有解决方案
【发布时间】:2017-05-03 17:03:47
【问题描述】:

我需要找到可以检查系统是否像这样的算法

x1 * k + b > y1, x2 * k + b > y2, ..., xn * k + b

有解决方案 其中 i 替换 x[i] 和 y[i] 并且未知变量是 k,b。

【问题讨论】:

    标签: algorithm geometry inequalities


    【解决方案1】:

    你的问题相当于问这些点是否线性可分(一类点对应于>的不等式,其他点对应于

    如果存在分隔线,您可以使用Perceptron Algorithm 查找分隔线。该维基百科页面也提供了一些替代算法。

    【讨论】:

    • 以下算法是否正确?我为两组点构造了一个最小凸包(例如,使用格雷厄姆算法)此外,如果第一个包的至少一个点位于第二个包或抽象包中,则没有解决方案。我将检查如下。两个多边形相交(我可以通过成对交叉所有线段来检查),或者一个多边形完全位于另一个多边形中。然后我们需要检查点(例如,第一个多边形的第一个点)是否位于第二个多边形中。好吧,为此,Java 中有 Poligon.contains(x,y)。
    【解决方案2】:

    如果只有最后一个不等式是“”。检查方法如下:

    将系统转换为:b > y1 - x1 * k, b > y2 - x2 * k, ..., b

    而且很容易看出,原系统是否有解等价于系统 yn - xn * k > y1 - x1 * k, yn - xn * k > y2 - x2 * k, ... 有解

    且等价于 yn - y1 > (xn - x1) * k, yn - y2 > (xn - x2) * k, ... 有解与否。

    然后你需要讨论 xn - xk 的符号,它们是零、正还是负,你可以进一步将系统转换为更简单的形式。例如,如果 xn - x1 > 0 且 xn - x2 (yn - y2)/(xn - x2), ...

    然后很容易检查新的简单系统是否有解,这相当于原系统是否有解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多