将n维“正方形”空间划分为立方体

时间:2013-03-21 13:45:18

标签: c++ optimization mathematical-optimization

现在我无法解决以下“半”数学问题。

我想划分一个n维的受限空间(确切地说是一个超立方体)

D={(x_1, ...,x_n), x_i \in IR and -limits<=x_i<=limits \forall i<=n}进入较小的立方体。

含义我想指定n,limits,m其中m将是多维数据集每边的分区数 - 2*limits/m将是小方块的长度,我会得{ {1}}这样的立方体。

现在我想返回一个包含这些小立方体的一些不同坐标的向量向量。 (或者也许有人可以将立方体表示为以指向“左”外角的向量为特征的对象?)

基本上我不知道使用C ++这样的东西是否可行。为固定n实现此功能不会造成问题。但我想让用户可以自由选择尺寸。

背景:类似的东西在优化中会毫无价值。人们将空间划分为较小的空间并使用例如每个子空间上的遗传算法,然后比较结果。因此可以避免巨大的初始人口,并且搜索结果得到极大改善。 我也很好奇是不是......这是可行的:))

我的建议:使用B +树?

1 个答案:

答案 0 :(得分:2)

设m是超立方体D的每个维度的分区数,即每个 edge

然后就像你说的那样,有D ^个不同的子空间S.令子空间S由整数坐标S = [y_1,y_2,...,y_n]唯一地表示,其中y_i是范围1,...,m中的整数。然后,在笛卡尔坐标中,S =(x_1,x_2,...,x_n)其中Delta *(y_i-1) - 限制&lt; = x_i&lt; Delta * y_i-limits,Delta = 2 * limits / m。

您正在寻找的“左外角”或S的原点只是对应于最小x_i的点,即点(Delta *(y_1-1) - 限制,...,Delta *(y_n-) 1)17626.8-2006)。不是通过这一点表示不同的S,而是使用上面的整数坐标来表示它们更有意义(并且在计算机中会更快)。