【问题标题】:Good seed for Java random - Constructing a MazeJava随机的好种子——构建迷宫
【发布时间】:2015-05-28 02:25:55
【问题描述】:

我正在尝试编写一个程序来构建一个迷宫(Java 中的一个经典练习),我想用我的方法来生成迷宫,以接收用于生成它的随机数字生成器的种子。这是必需的,因为我希望程序在每次输入相同的种子时生成相同的迷宫。 但是,对于一些种子值,更多的值看起来比其他值具有更大的概率。

我的意思是,假设我用给定的种子设置了一个随机对象,并使用它来生成 [0, 4) 之间的整数,并将其用作构建迷宫的标准。生成的序列是如此有特色,以至于迷宫太容易了。难道我只是不种下任何种子,一个好的迷宫就产生了。 整数部分只是一个例子。我可以使用制服并将其划分为 4 个区域:[0, 0,25), [0,25, 0.5), [0.5, 0.75), [0.75, 1)

有没有办法修改该种子,以便随机数生成器的行为对于相同的种子是相同的,并保持数字的良好“混合”?我的意思是,我怎样才能生成相同的数字来设置种子,以便它们均匀分布在这个间隔中?

谢谢!

【问题讨论】:

  • 您是在断言 任何 明确提供的种子会生成简单的迷宫,还是您尝试的特定种子会生成?
  • 任何提供的种子都会生成简单的迷宫
  • 你能分享你用来生成随机数的代码吗?
  • 我正在使用随机 rnd = new Random(seed);。当没有提供种子时,迷宫看起来很好。
  • 我的意思是从生成器中检索数字。你试过多少种子?

标签: java random


【解决方案1】:

您可以尝试这样做以确保数字是“随机的”,但均匀分布在 [0, 1)、[1, 2)、[2, 3) 和 [3, 4) 上:

Random random = new Random(seed);
int count = 200; // or another number, just how many you need
List<Float> numbers = new ArrayList<Float>(count);
for (int i = 0; i < count; i++) {
    numbers.add(random.nextFloat() + (i % 4));
}
Collections.shuffle(numbers);

【讨论】:

  • 每次运行程序时 shuffle 不会给我不同的结果,或者它具有确定性的行为?
  • 不是确定性的,可以查看Collections.shuffle的源码。
  • 您可以通过将random 作为第二个参数传递来使其具有确定性。
  • @yshavit 我希望它每次都生成相同的序列,但均匀分布。
  • @Giovanna 是的,就可以了!如果您为每个方法设置种子,这意味着您实际上每次都是从头开始序列。而不是设置(例如)[4, 1, 1, 3, 1, 2, 4 ...] 的序列,然后说“给我下一个数字”,“给我下一个数字”,而是重新创建该序列并读取相同的数字:(1)“给我第一个来自[4, 1, 1, 3 ...]”(2)“好的,现在让我第一个来自[4, 1, 1, 3 ...]”,(3)好的,现在让我第一个来自[4, 1, 1, 3 ...]”等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
相关资源
最近更新 更多