P: Como garantir que os resultados são reproduzíveis, se o algoritmo está baseado em escolhas randômicas?

R: Os funções que geram números randômicos são determinísticos e geram sempre a mesma seqüência de números (leia mais), se eles começam com o mesmo semente (ingl. seed). Portanto, é suficiente definir um semente fixo ou imprimir o semento usado. Um exemplo em C++

#include <iostream>
#include <cstdlib>
using namespace std;
 
int main(int argc, char *argv[]) {
  // (1) define seed
  unsigned my_favourite_seed = 314159265;
 
  // (2) show nice message
  cout << "This algorithm is running with random number generator seed " << my_favourite_seed << "." << endl;
 
  // (3) set seed
  srand48(my_favourite_seed);
 
  // (4) show a couple of random numbers
  for(unsigned i=0; i<10; i++)
    cout << drand48() << endl;
}

Um exemplo em Java

import java.util.Random;
 
class rand {
  public static void main(String args[]) {
  // (1) define seed
  int my_favourite_seed = 314159265;
 
  // (2) show nice message
  System.out.println("This algorithm is running with random number generator seed "+my_favourite_seed+".");
 
  // (3) set seed
  Random rng = new Random(my_favourite_seed);
 
  // (4) show a couple of random numbers
  for(int i=0; i<10; i++)
    System.out.println(rng.nextDouble());
  }
}