C++ 随机代理移动是相同的

C++ random agent moves are identical

我使用此函数生成数字 0、1、2、3 的随机排列,这些排列由代理在 Tron 游戏的二维网格中转换为移动。

srand(time(nullptr));
vector<int> permutationMoves = { 0, 1, 2, 3 };
auto currentIndexCounter = permutationMoves.size();
for (auto iter = permutationMoves.rbegin(); iter != permutationMoves.rend();
     iter++, --currentIndexCounter) {
    int randomIndex = rand() % currentIndexCounter;
    if (*iter != permutationMoves.at(randomIndex)) {
        swap(permutationMoves.at(randomIndex), *iter);
    }
 }

但是,我有两个问题:

非常感谢所有帮助,谢谢!

问题出在:

srand(time(nullptr));

你每次都在重新设置种子。如果两次调用之间的时间很短,将生成相同的随机数。

删除该行并将其放在程序的开头。

rand()srand 是伪随机数生成器,因此您可以使用 C++11 方式生成随机数。

std::random_device randomDevice;
std::mt19937 generator(randomDevice());
std::uniform_int_distribution<> distribution(1, 100);
int randNum = distribution(generator);

确保你#include <random>