产生有约束的随机向量


10

我需要创建满足以下约束的实数a_i的随机向量:

abs(a_i) < c_i;      
sum(a_i)< A;        # sum of elements smaller than A
sum(b_i * a_i) < B; # weighted sum is smaller than B 
aT*A*a < D          # quadratic multiplication with A smaller than D

where c_i, b_i, A, B, D are constants.

有效生成这种向量的典型算法是什么?


1
您所说的第四个约束是什么意思,“ a的大小是..”
M. Tibbits,

我的错。成品说明。感谢您的反馈。
LouisChiffre 2011年

它如何a_i遵循分布p_i并且还小于c?那是因为分布p_i还小于c?您在考虑哪种分布?
deps_stats 2011年

@deps_stats。非常好点。伪代码不是很清楚。我想到的分布是泊松分布。每个元素都遵循具有不同lambda的泊松分布。考虑到这一点,我猜想第一个条件(a_i <c)是不必要的,因为我可以在生成末尾重新缩放a_i来满足它。
LouisChiffre 2011年

让我问别的东西......是cAB和lambda表达式固定的吗?
deps_stats 2011年

Answers:


4

如果我理解正确,那么只有少量n维空间中的点可以满足您的约束。

您的第一个约束将其约束到一个超球面的内部,这使我想起了comp.graphics.algorithms常见问题解答“球面上的均匀随机点”以及如何在3-d单位球中生成均匀分布的点? 第二个约束从超球面中切出一点,其他约束进一步缩小了满足您约束的体积。

我认为最简单的方法是常见问题解答建议的方法之一:

  • 选择一些我们确定包含整个体积的轴对齐的边界框。在这种情况下,-c <a_1 <c,-c <a_2 <c,... -c <a_n <c包含整个受约束的体积,因为它包含由第一个约束条件描述的超球面,而其他约束条件则不断减少离开那个数量。
  • 该算法在整个边界框中统一选择点。在这种情况下,该算法将候选矢量的每个坐标独立地设置为从-c到+ c的某个独立均匀分布的随机数。(我假设您要在整个体积中以相等的密度分布点。我想您可以使算法选择具有泊松分布或某些其他非均匀分布的部分或全部坐标(如果有理由)。
  • 一旦有了候选向量,请检查每个约束。如果其中任何一个失败,请返回并选择另一点。
  • 一旦有了候选向量,请将其存储在某个地方以备后用。
  • 如果存储的向量不足,请返回并尝试生成另一个向量。

使用足够高质量的随机数生成器,可以为您提供一组存储的坐标,这些坐标符合(预期的)均匀密度。

las,如果您具有较高的维数n(即,如果从相对较长的坐标列表中构造每个向量),则内切球体(远不如缩小的体积)占总体积的比例小得令人惊讶总边界框,因此它可能需要执行许多迭代,其中大多数会在约束区域内找到点之前生成约束点之外的拒绝点。由于这些天的计算机运行速度非常快,这是否足够快?


因此,您的建议是有效地采样空间。我有一个类似的问题,只是找不到边界框不能静态完成(即,不能进行硬编码)。根据您的经验,如果您的约束采用以下形式,则此方法会分解f1(x1) + f2(x2) == C:这里有任何建议吗?
Groostav 2015年

是的,如果您具有相等(“ ==”)约束,则采样方法将不起作用。约束例如位于球体表面或圆柱体表面等上的点(半径== R),而不是球体内部(半径<= R)。在整个体积上均匀选择点将“永远”(概率接近0)击中所需的表面。因此,您只需要以某种方式拾取该表面上的点-即,找到点[x1,x2,x3]使得f1(x1)+ f2(x2)== C,您可以随机选择x1然后强制x2 = inverse_f2(C-f1(x1))。
戴维·卡里

有关球面上均匀分布的点的特殊情况,请参见球面上的均匀随机点”
戴维·卡里

@Groostav:也许您的问题与原始问题足够不同,可以将其发布为新的顶级问题?“有人告诉我我必须发表一个后续问题,为什么以及如何?”
戴维·卡里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.