Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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
C 高效地在二维空间中找到两倍的最优位置成本_C_Algorithm_Math_Geometry - Fatal编程技术网

C 高效地在二维空间中找到两倍的最优位置成本

C 高效地在二维空间中找到两倍的最优位置成本,c,algorithm,math,geometry,C,Algorithm,Math,Geometry,我有一个二维网格,比如说100×100维。网格中的每个点(x,y)都有一个相关的代价,并且它在整个空间中都是单调的非递减的。相关成本事先不知道 我负担不起所有地点的费用。所以我要做的是,找到最顶级位置的成本(100100)。称之为成本C。然后在该2d网格上识别iso成本等值线,以获得一组经仔细选择的成本值。设C为成本位置(100100)。等高线的成本经过仔细选择,最后一个等高线(等高线k)的成本为C(网格中的最大成本),等高线k-1的成本为C/2,等高线k-2的成本为C/4,与几何级数中的成本相

我有一个二维网格,比如说100×100维。网格中的每个点(x,y)都有一个相关的代价,并且它在整个空间中都是单调的非递减的。相关成本事先不知道

我负担不起所有地点的费用。所以我要做的是,找到最顶级位置的成本(100100)。称之为成本C。然后在该2d网格上识别iso成本等值线,以获得一组经仔细选择的成本值。设C为成本位置(100100)。等高线的成本经过仔细选择,最后一个等高线(等高线k)的成本为C(网格中的最大成本),等高线k-1的成本为C/2,等高线k-2的成本为C/4,与几何级数中的成本相同。Iso成本曲线以黑色曲线显示。首先在左/上边缘定位一个种子,然后沿着它的邻域进行探索,从而识别它们

现在,对于轮廓上的任何位置(x,y),最近轮廓的成本将给出位置成本(x,y)的近似值。也就是说,我们得到的成本值小于位置(x,y)实际成本的两倍。等高线上的每个位置(x,y)覆盖其第三象限中的区域。例如,位置M由成本为C/8的等高线覆盖。 所以对于任何给定的位置(x,y),我可以通过看谁是它上面最近的轮廓和它的成本来确定成本。这给出了一个最接近的成本,但不是位置(x,y)的精确成本,这对于我的案例来说足够了。但这需要我 a) 找到C、C/2、C/4至厘米的完整等成本等值线。 b) 存储所有上述iso轮廓位置,即每个轮廓100个位置

如何在待勘探和存储的空间中拥有非常少的点数,并且仍然实现两倍最优成本的特性


注:需要降低成本的地点数量。目前,我正在计算所有等成本等值线位置的成本。100乘100的分辨率用于解释问题。实际分辨率非常高。

最坏情况下需要测试的位置数有一个下限,该下限与通过定位等成本等值线得到的上限不太远

想象一下,除了*,你知道所有的值:

.  2  .
1  *  2
.  1  .
此值可以是1或2。(如果这种模糊性是可以接受的,那么您可以用2.001替换2。)因此,您需要对其进行采样。您无法从其他站点的成本中确定价值

设k=log_2(成本(n,n)/成本(1,1))。您可以构造一个成本函数,以便在几乎所有的nk站点(大约k(n-k/2)),如果不对该站点进行采样,就无法确定因子为2的成本。我将举例说明k=3的情况

      8 8 8 8 8 8
    4 * 8 8 8 8 8
  2 * 4 * 8 8 8 8
1 * 2 * 4 * 8 8 8
1 1 * 2 * 4 * 8 8
1 1 1 * 2 * 4 * 8
1 1 1 1 * 2 * 4
1 1 1 1 1 * 2 
1 1 1 1 1 1

因此,对于n>>k,需要测试的站点数量是θ(nk)。如果你有一个成本函数的概率模型,平均来说,你可能会做得更好,k比n小。

即使我不清楚你所说的“在整个空间中单调非递减”是什么意思,我知道这是一个两变量函数的约束最小化

如果你的意思是成本在x和y方向上都是单调的非递减的。即:


cost(x1,y)@chux你能详细说明一下吗?这是一个临时存储、内存使用等问题。你试图通过在这里存储最小点数来实现什么?我们可以使用增量压缩将您的点转换为更小的足迹。还有,准确度?如果您不需要100%的准确度,可以使用基于最小二乘方程的解决方案来存储iso成本方程的系数。这需要所有的积分,但存储较少。只是想得到更多的澄清。也许一点信息来源也会有所帮助。在我的脑海中,我想到了一种基于成本的基数排序方法,在这种方法中,您只需循环一次数据,按成本排序,然后查找所有值就变得容易多了,但我仍然不能100%确定您要最小化什么以及为什么要最小化。你说你存储了100x100点——这只是10k点。原始数据中有多少点需要排序?据我所知,
单调非递减
可以导致某种边界框原理:如果x0可以扫描网格的左边缘和上边缘,找到每一条等轴测线的一端,然后通过检查附近的点跟踪每一条等轴测线,在右侧和/或下方。我想这样你可能会检查大约200+2.5*
P
点,其中
P
是所有等高线上的总点数。我不清楚。如图所示,如果我们确定C、C/2、C/4等的等成本轮廓,则任何位置成本都可以通过边界轮廓在其成本的两倍内近似计算,对吗?@CRM:是的,该算法有效。我的回答表明,在最坏的情况下,你做得再好不过了,有一些代价函数要求你在找到等成本等值线所需的地方(θ(nk),当n>>k)评估代价函数。在第一个例子中,at*的值肯定大于或等于1,小于或等于2。我们可以在两倍于实际值的范围内找到它的值,正如我所说的,它的值是否在两倍于实际值的范围内,精确地偏离两个计数的因子是不明确的。因此,我明确指出,如果关闭因子正好为2是可以接受的,那么可以将2替换为2.001。这意味着您无法在系数2.001内说出*的值。这够清楚吗?是的,我明白了。似乎没有更好的方法可以在不找到C、C/2、C/4等的等成本等值线的所有位置的情况下,将空间中任何位置的成本控制在最佳成本的两倍以内。如果可以从数学上证明这一点,这将是很有帮助的。S/他不希望找到mini