Скопируйте переменную экземпляра типа java.util.Random, чтобы создать объект в том же состоянии

Я реализуюимитация отжига (SA) алгоритм, где мне нужно копировать состояния (например, чтобы запомнить лучшее решение до сих пор).

Я реализовал метод копирования, так как не рекомендуется использовать Javaclone().

SA - это эвристический алгоритм, поэтому следующий шаг определяется случайным образом. Это делается с помощьюRandom объект, который я тоже хочу скопировать.

Хотя это не требуется алгоритмом, я хочу, чтобы копия имела точно такое же состояние. Но это только в том случае, если я делаю «копию» сразу после создания объекта и инициализирую его тем же начальным числом.

Но если я выполню некоторые операции случайным образом перед процессом копирования, внутреннее состояние (то есть начальное число)Random объект изменяется и копия ведет себя по-разному.

Итак, как я могу получить точную копию экземпляраjava.util.Random?

ПРИМЕР

public class State
{
  private final Random r;
  private final long seed;

  private Object currentOperand;

  public State()
  {
    this(System.nanoTime(), null);
  }

  private State(long seed, Object currentOperand)
  {
    this.seed = seed;
    this.r = new Random(seed);
    this.currentOperand = currentOperand;
  }

  public State copy()
  {
    return new State(seed, currentOperand);
  }

  public void doSth()
  {
    /* operation with random operand */
    currentOperand = r.nextInt(100);
  }

  public void redo()
  {
    // redo then set to null
    currentOperand = null;
  }

  /* for completeness' sake... since it's simulated annealing */
  public int computeEnergy() { return 0; }
}

Ответы на вопрос(3)

Ваш ответ на вопрос