diff --git a/src/magic/ai/MCTSAI.java b/src/magic/ai/MCTSAI.java index fdc77f395d..89e1e641b3 100644 --- a/src/magic/ai/MCTSAI.java +++ b/src/magic/ai/MCTSAI.java @@ -11,6 +11,7 @@ import magic.model.MagicGame; import magic.model.phase.MagicPhase; import magic.model.MagicPlayer; import magic.model.event.MagicEvent; +import magic.model.MagicRandom; /* UCT algorithm from Kocsis and Sezepesvari 2006 @@ -67,7 +68,6 @@ public class MCTSAI implements MagicAI { private static final int MAXSIM = 100000; private static final double C = 0.3; private final boolean LOGGING; - private final Random RNG = new Random(123); public MCTSAI() { this(false); @@ -258,7 +258,7 @@ public class MCTSAI implements MagicAI { event != null; event = getNextMultiChoiceEvent(game, true)) { final List choices = event.getArtificialChoiceResults(game); - final int idx = RNG.nextInt(choices.size()); + final int idx = MagicRandom.nextInt(choices.size()); final Object[] selected = choices.get(idx); //logc('-'); game.executeNextEvent(selected); diff --git a/src/magic/ai/RandomAI.java b/src/magic/ai/RandomAI.java index 56f4895630..062faaa248 100644 --- a/src/magic/ai/RandomAI.java +++ b/src/magic/ai/RandomAI.java @@ -7,12 +7,12 @@ import java.util.Random; import magic.model.MagicGame; import magic.model.MagicPlayer; import magic.model.event.MagicEvent; +import magic.model.MagicRandom; //AI that plays randomly public class RandomAI implements MagicAI { private final boolean LOGGING; - private static final Random RNG = new Random(); public RandomAI() { this(false); @@ -52,7 +52,7 @@ public class RandomAI implements MagicAI { } // Select a random artificial choice result - final int idx = RNG.nextInt(size); + final int idx = MagicRandom.nextInt(size); final ArtificialChoiceResults selected=achoices.get(idx); if (size >= 2) { log(info); @@ -65,4 +65,4 @@ public class RandomAI implements MagicAI { return game.map(selected.choiceResults); } } -} \ No newline at end of file +} diff --git a/src/magic/ai/VegasAI.java b/src/magic/ai/VegasAI.java index 3d2d93af5c..afa5aa029a 100644 --- a/src/magic/ai/VegasAI.java +++ b/src/magic/ai/VegasAI.java @@ -47,7 +47,12 @@ public class VegasAI implements MagicAI { scores.add(score); for (int count=THREADS;count>0;count--) { - final VegasWorker worker=new VegasWorker(choiceGame,choiceGame.getScorePlayer(),score,new Random(),simulations); + final VegasWorker worker=new VegasWorker( + choiceGame, + choiceGame.getScorePlayer(), + score, + new Random(12345 + count), + simulations); executor.execute(worker); } } @@ -69,4 +74,4 @@ public class VegasAI implements MagicAI { } return sourceGame.map(scores.get(bestIndex).getChoiceResults()); } -} \ No newline at end of file +} diff --git a/src/magic/model/MagicRandom.java b/src/magic/model/MagicRandom.java index 36d84905cf..65306c48d8 100644 --- a/src/magic/model/MagicRandom.java +++ b/src/magic/model/MagicRandom.java @@ -4,7 +4,17 @@ import java.util.Random; public class MagicRandom { - private static final Random RANDOM=new Random(); + private static final Random RNG; + + static { + String seedStr = System.getProperty("rndSeed"); + if (seedStr != null) { + RNG = new Random(Long.parseLong(seedStr)); + System.err.println("Using random seed " + seedStr); + } else { + RNG = new Random(); + } + } private MagicRandom() { @@ -12,6 +22,6 @@ public class MagicRandom { public static int nextInt(final int n) { - return RANDOM.nextInt(n); + return RNG.nextInt(n); } -} \ No newline at end of file +}