有关线性程序可行点的问题

时间:2018-10-06 21:39:49

标签: computational-geometry linear-programming convex-hull convex

我一直在这里阅读帖子的答案,

查找点是否在一组凸点的凸包内,而无需计算壳本身 https://stackoverflow.com/a/11731437

声明一个列出了条件的线性程序,当且仅当要测试的特定点是数据凸集的一部分时,才会有解决方案。我一直在尝试使用COIN-CLP LP解算器对此进行编程,但无法将建议的方法与CLP库中可用的方法进行匹配。在我看来,所引用的文章中的解释不完整,否则我只是对线性程序问题没有足够的了解。

我不知道该方法是否要为一组数据开发线性程序,然后确定给定点在该解决方案中是否可行,或者该方法是否试图制作线性程序包含测试点的数据集。

我也不了解如何将数据输入LP解算器。说明中的第一步是声明数据结构A

Set A = (X[1], X[2], ... X[n]) that is, the first column is v1, the second v2, etc.

X [1]是每行点数组的第一个元素上方的表示法还是第一个元素的LP系数?是否将要输入的数据作为矢量,每一列作为单独的矢量(意味着转置列以创建输入)?为什么在指令的任何其他部分未出现v时,指令中提到第一列是v1?是否应该将A作为测试点的数据集的矩阵? A是否应该是所有数据(包括要测试的点)的矩阵?我猜想已经进行了LP建模的人已经知道了这一点,但是我不清楚。

给出了一组相对清晰的约束,

minimize (over x): 1
s.t. Ax = P
     x^T * [1] = 1
     x[i] >= 0  \forall i

where,
x^T is the transpose of x
[1] is the all-1 vector

约束中列出的x是要测试的点吗,它与A =(X [1]中的X的x相同吗,是否有所不同?我猜想A中的X并非x中的x限制,因为一个是大写的,一个是小写的,但是我真的不知道。

我的最佳猜测是,要针对其进行测试的数据输入为A,并且将要测试的点输入为x(小写),但是我不确定,也不确定A看起来像什么数据结构。

我想我需要知道,

  • 被测点如何输入求解器
  • 根据输入的点测试数据的方式
  • 是否存在关于约束条件(范围,缩放比例等)中隐含数据的假设

这是我要测试的数据的一个示例(在R7中),

test point, 
-0.9422, 2.02568, -0.86967, 0.855568, -0.601532, 0.323411, 0.596289

test against, 
-0.879254, -6.62066, -7.34114, 0.585723, 2.78475, -0.387155, 2.99808
8.42321, -3.20765, -1.0542, -4.1625, 2.92884, -0.327967, 3.50838
10.774, 0.545379, -1.12841, -1.5456, -0.697098, -0.74527, -0.774246
4.94671, 0.26215, -3.77845, -0.191081, 6.03136, 3.66745, -6.22697
8.72006, -4.73847, -0.93998, -3.85806, 3.76628, 0.499046, 2.02952
4.02597, -3.96582, -3.72078, -5.20739, 7.33248, -0.41624, 2.88221
8.16238, -2.51468, -6.8052, -2.9021, 2.28175, -2.72354, -0.313697
-0.0458385, -2.56746, -4.00668, -4.6656, 8.62974, -1.00593, 4.6638
6.81399, -3.65807, -4.21049, -3.78946, 4.7107, -1.2893, 5.65669
-2.03821, -5.98271, -6.61833, -2.62184, 5.20874, -1.79854, 5.31864
5.45169, -6.62274, -0.878738, -5.38384, 4.09504, -0.626197, 5.56643
1.44436, -9.92098, 4.99388, 3.21483, -1.66346, 3.64611, -0.0439071
-2.53507, -3.18565, 6.33243, 5.70343, 5.6815, -5.98565, -0.239556
-1.06284, -6.71054, -7.89752, -1.71425, 5.42546, -1.42733, 5.34596
9.96752, -5.18027, -1.43649, -4.85739, 3.4546, -0.765721, 3.39876
6.14065, -6.80276, -4.45474, -4.45472, 4.96714, -1.12068, 5.68639
0.789644, 4.46502, 0.667421, -0.753405, 11.1041, 5.58855, -2.47415
3.4069, -2.47077, -6.1166, -3.97326, 10.5417, 1.11918, 0.915666
9.90365, -3.71723, -4.98727, -4.18883, 5.12366, -2.19175, 2.14106
7.50469, -6.45069, -1.76295, -5.8613, 4.92941, -1.28936, 5.62019
0.784531, -4.41507, 7.81695, 6.00103, 5.11466, -7.41083, -0.859709
8.76947, -6.89332, -2.22446, -5.56305, 4.37828, -0.904622, 5.32845
10.361, -5.37848, 0.280192, 6.50686, 0.295681, 5.4023, 0.903526
4.23739, -2.91606, -5.48661, -4.01339, -0.250081, -9.08589, -7.44781
10.3283, -2.70868, 2.08743, 9.13842, 0.496487, 4.09732, 0.356068
6.29274, -10.344, 3.09637, 3.86458, 6.52654, -4.4275, 2.03636
2.77549, -5.52054, -10.1449, -5.1293, 5.97665, -5.38324, 2.84052
-1.53211, -8.28862, 5.89797, 8.91702, 5.26826, -7.60942, -1.76916
6.55035, -5.0121, -9.87386, -5.39377, 3.79171, -10.0618, -3.29243
6.16032, -9.05789, -5.40621, 12.851, -0.897329, 8.45366, 2.49965
-2.0535, -7.28366, 8.4009, 10.4692, 8.09746, -13.0538, -2.21631
-0.100108, -2.19943, -5.25283, 0.665639, -2.74879, -1.88559, -2.01111
-6.68807, -2.0858, -1.67507, 1.09343, -0.425115, 1.13627, 1.38262
5.52471, 6.96936, -0.195879, 2.15077, 0.580036, -2.21135, 5.11126
3.03433, -5.15217, -1.53586, -6.28597, 4.69399, -1.2563, 6.01448
0.143787, -1.69845, -3.46485, -3.37431, -1.68215, -8.23386, -7.67879
11.971, 1.98691, -2.03594, 5.68318, -1.72722, 2.49254, 0.985464
7.28228, -12.0396, -4.96597, 14.202, -1.74251, 8.69396, 2.39749
7.82083, -8.19497, -13.3157, -5.08318, 9.88666, -5.91352, 7.07704
0.329034, -11.9767, 9.11734, 15.1535, 12.8102, -17.7227, -2.09866

对于上面的示例,测试点不在数据其余部分的凸集中。如果我可以确定我要编程的内容,则可以使用COIN LP解算器(clp)进行编程。如果建议的话,我可以使用其他求解器进行测试。

任何人都可以帮忙吗?

谢谢

LMH

0 个答案:

没有答案