MagicRandom now uses seed defined by system property rndSeed if it is given, refactor other programs to use MagicRandom instead of creating their own rng

master
melvin 2011-05-27 15:36:29 +08:00
parent 459e4be3bc
commit cf536670af
4 changed files with 25 additions and 10 deletions

View File

@ -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<Object[]> 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);

View File

@ -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);
}
}
}
}

View File

@ -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());
}
}
}

View File

@ -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);
}
}
}