Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 批量包含查询_Performance_Algorithm_Linear Programming - Fatal编程技术网

Performance 批量包含查询

Performance 批量包含查询,performance,algorithm,linear-programming,Performance,Algorithm,Linear Programming,我有一个由一组顶点定义的凸形。我也有一个大的点集,我想测试其中包含的凸形状。目前,我只使用一个开源线性规划解算器,对每个点独立使用一个常数目标函数。有关详细信息,请参见的第11.4章 然而,即使在100维中,这也是相当缓慢的。有没有一种方法可以利用所有查询点都是预先知道的这一事实来加速这个过程 编辑修复有问题的打字错误。我的建议是找到形状内点的凸包。我无法立即想到一种直接从LP解算器中获得此结果的方法,但您可以通过在目标函数中添加该超平面的线性项来找到最靠近形状的给定超平面的点。对形状的所有边重

我有一个由一组顶点定义的凸形。我也有一个大的点集,我想测试其中包含的凸形状。目前,我只使用一个开源线性规划解算器,对每个点独立使用一个常数目标函数。有关详细信息,请参见的第11.4章

然而,即使在100维中,这也是相当缓慢的。有没有一种方法可以利用所有查询点都是预先知道的这一事实来加速这个过程


编辑修复有问题的打字错误。

我的建议是找到形状内点的凸包。我无法立即想到一种直接从LP解算器中获得此结果的方法,但您可以通过在目标函数中添加该超平面的线性项来找到最靠近形状的给定超平面的点。对形状的所有边重复此操作,对每条边重复几次,每次消除最近的解决方案以拾取越来越远的包含点。这将为您提供多个“接近”超平面和超平面内部的点


一旦你有了外壳,你就应该能够相对快速地将所有其他点分类为内部或外部。我确信有一些算法可以很快做到这一点,尽管我不知道有任何算法。一种可以去除许多内部点的潜在有用方法是:如果空间是n维的,在外壳上选取n+1点,然后测试每个点,看看它是否是这些点的凸组合(使用线性代数)。

线性规划解算器?为什么?你不能一个一个地检查不等式吗?这应该比解决一个优化问题,然后扔掉大部分答案要快得多……我还建议使用某种空间细分(k-d树?)你基本上将空间分成平行六面体块,每个块要么(1)完全在你的形状内,(2)完全在外,要么(3)部分位于内部,并与定义形状的少量超平面交叉。现在,您只需检查少量一维约束以确定您的点所在的块,然后(仅当它是类型3块时)检查少量N维约束以检查它是否在您的形状内。@N.m.有一个输入错误。我有顶点,不是不等式。顶点是如何决定凸形状的?如果通过它们的凸包,首先计算凸包,现在你有了一组不等式。嗯,在高维中,计算凸包可能不那么简单。你在使用什么样的目标函数?抱歉,我的形状是由顶点定义的。这个问题有一个错误。d维度中n个点的外壳可以有n^(地板(d/2))个面,d是100。@Davidisenstat:这似乎表明形状中几乎所有的点实际上都位于外壳上。有可能吗?或者你提到的最坏的情况是一个不太可能的病理病例?我认为重点是确定船体上的点与船体内部的点的比例。如果外壳上的点少于(比如)20%,那么很有可能值得尝试找到外壳。@j_random_hacker除非形状的顶点数不超过d个(即外壳上的顶点),否则即使在预处理过程中,我也希望通过面进行迭代是不成功的。