この関数を使用して、ゲームTronの2次元グリッドでエージェントによって移動するように変換された数字0,1,2,3のランダム置換を生成します。二つの薬剤は、彼らが原因乱数は時間に依存しているという事実に同じ動きをする連続した動きをする場合C++ランダムエージェントの移動は同じです
- :
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); } }
はしかし、私は2つの問題を抱えています。
- エージェントが互いの後に複数のラウンドをプレイする場合、両方のエージェントの移動は前のゲームの移動と同じです。だから最終的にグリッドは常に同じで、1人のエージェントがほとんどの場合ゲームの95%-100%を獲得することになります。
すべてのサポートに感謝します。あなたはシードたびにresetingている
srand(time(nullptr));
:中
、ここにコードを貼り付けてくださいことを確認してください。 – amchacon
関数の中ではなく、プログラムの先頭で 'srand()'を1回呼び出します。 – Barmar
私はちょうど[this](https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful)をここに残します... –