<random> uniform_real_distribution,点之间的距离最小

时间:2015-07-25 11:38:02

标签: c++ random

我正在使用

生成正方形上的坐标列表
#include <random>
using namespace std;

int main(){

random_device rd;
long int seed = rd();
default_random_engine gen(seed);

double max=10.0, min=-10.0;
uniform_real_distribution<double> uni_real(min,max);

double random_x = uni_real(gen);
double random_y = uni_real(gen);

return 0;
}

我想确保任意两点之间的距离最小。对于我的用法,当应用周期性边界条件时,这必须成立。

  • 首选解决方案是<random>库中的内置方法。有没有?
  • 第二好,任何其他包含快速执行检查的包(只要它易于使用)。
  • 最糟糕的情况是,我可以编写自己的基本脚本O(n^2),因为我现在对效率并不太关心。除非,有一些简单的算法可以实现这一点。

关于处理第三点或来自<random>的其他环境的其他问题。

1 个答案:

答案 0 :(得分:3)

虽然在math.stackexchange上讨论了这样的采样(相当于非重叠圆生成),但请参阅https://mathematica.stackexchange.com/questions/2594/efficient-way-to-generate-random-points-with-a-predefined-lower-bound-on-their-phttps://mathematica.stackexchange.com/questions/69649/generate-nonoverlapping-random-circles,我想指出另一个涉及准的另一种可能的解决方案 - 随机数。对于准随机Sobol序列,有一个陈述表明点之间的最小正距离等于0.5*sqrt(d)/N,其中d是问题的维度,N是在超立方体中采样的点。该男子自己的论文http://www.sciencedirect.com/science/article/pii/S0378475406002382