【问题标题】:<random> uniform_real_distribution with minimum distance between points<random> uniform_real_distribution 与点之间的最小距离
【发布时间】:2015-10-16 01:03:00
【问题描述】:

我正在生成一个正方形上的坐标列表,使用

#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;
}

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

  • 首选的解决方案是 &lt;random&gt; 库中的内置方法。有吗?
  • 其次,任何其他包含执行检查的快速方法的软件包(只要易于使用)。
  • 最坏的情况,我可以编写自己的基本脚本O(n^2),因为我现在不太关心效率。除非有一些简单的算法可以实现这一点。

来自&lt;random&gt; 的关于在哪里处理第三点或其他环境的其他问题。

【问题讨论】:

  • 您可以将积分放入容器中。对于第 n 个点,检查现有点与它之间的距离,如果选中了距离要求,则将其添加到列表中。它没有经过优化,但它是一个起点。
  • 你需要生成多少点?
  • 现在我最多可以有 5000 左右。再过一会儿,我可能想要更多,大约一百万。
  • 为什么点必须是随机的?您是否针对与简单正方形不同的形状?也许您可以提供有关您的用例的更多详细信息
  • 如果您需要一个按顺序生成一组点的函数,并且这些点的距离在范围限制内,O(n^2) 与您在没有某种自适应图来跟踪的情况下获得的一样好其中哪些点有资格进一步相邻点的放置......无论如何,imo。

标签: c++ random


【解决方案1】:

虽然在 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

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多