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
parent
459e4be3bc
commit
cf536670af
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue