latest monte carlo ai - has a memory leak

This commit is contained in:
BetaSteward 2012-01-10 21:29:53 -05:00
parent a06f27ec89
commit dfffdfcf8c
38 changed files with 677 additions and 286 deletions

View file

@ -116,14 +116,14 @@ public class ComputerPlayer6 extends ComputerPlayer<ComputerPlayer6> implements
}
@Override
public void priority(Game game) {
public boolean priority(Game game) {
logState(game);
game.firePriorityEvent(playerId);
switch (game.getTurn().getStepType()) {
case UPKEEP:
case DRAW:
pass();
break;
return false;
case PRECOMBAT_MAIN:
case DECLARE_BLOCKERS:
case POSTCOMBAT_MAIN:
@ -134,16 +134,17 @@ public class ComputerPlayer6 extends ComputerPlayer<ComputerPlayer6> implements
calculateActions(game);
}
act(game);
return true;
} else {
pass();
}
break;
return false;
case BEGIN_COMBAT:
case FIRST_COMBAT_DAMAGE:
case COMBAT_DAMAGE:
case END_COMBAT:
pass();
break;
return false;
case DECLARE_ATTACKERS:
if (!game.getActivePlayerId().equals(playerId)) {
printOutState(game, playerId);
@ -152,18 +153,20 @@ public class ComputerPlayer6 extends ComputerPlayer<ComputerPlayer6> implements
calculateActions(game);
}
act(game);
return true;
//printOutState(game, playerId);
} else {
pass();
}
break;
return false;
case END_TURN:
pass();
break;
return false;
case CLEANUP:
pass();
break;
return false;
}
return false;
}
protected void printOutState(Game game, UUID playerId) {
@ -264,11 +267,11 @@ public class ComputerPlayer6 extends ComputerPlayer<ComputerPlayer6> implements
test = root;
root = root.children.get(0);
}
logger.info("simlating -- game value:" + game.getState().getValue() + " test value:" + test.gameValue);
logger.info("simlating -- game value:" + game.getState().getValue(true) + " test value:" + test.gameValue);
if (!suggested.isEmpty()) {
return false;
}
if (root.playerId.equals(playerId) && root.abilities != null && game.getState().getValue().hashCode() == test.gameValue) {
if (root.playerId.equals(playerId) && root.abilities != null && game.getState().getValue(true).hashCode() == test.gameValue) {
/*
// Try to fix horizon effect
@ -477,7 +480,7 @@ public class ComputerPlayer6 extends ComputerPlayer<ComputerPlayer6> implements
logger.info("interrupted");
return GameStateEvaluator2.evaluate(playerId, game);
}
node.setGameValue(game.getState().getValue().hashCode());
node.setGameValue(game.getState().getValue(true).hashCode());
SimulatedPlayer2 currentPlayer = (SimulatedPlayer2) game.getPlayer(game.getPlayerList().get());
//logger.info("simulating -- player " + currentPlayer.getName());
SimulationNode2 bestNode = null;

View file

@ -83,7 +83,7 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player {
}
@Override
public void priority(Game game) {
public boolean priority(Game game) {
logState(game);
if (logger.isDebugEnabled())
logger.debug("Game State: Turn-" + game.getTurnNum() + " Step-" + game.getTurn().getStepType() + " ActivePlayer-" + game.getPlayer(game.getActivePlayerId()).getName() + " PriorityPlayer-" + name);
@ -92,7 +92,7 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player {
case UPKEEP:
case DRAW:
pass();
break;
return false;
case PRECOMBAT_MAIN:
if (game.getActivePlayerId().equals(playerId)) {
System.out.println("Computer7:");
@ -102,13 +102,14 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player {
calculatePreCombatActions(game);
}
act(game);
return true;
}
else
pass();
break;
return false;
case BEGIN_COMBAT:
pass();
break;
return false;
case DECLARE_ATTACKERS:
if (!game.getActivePlayerId().equals(playerId)) {
printOutState(game, playerId);
@ -117,16 +118,17 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player {
calculatePreCombatActions(game);
}
act(game);
return true;
}
else
pass();
break;
return false;
case DECLARE_BLOCKERS:
case FIRST_COMBAT_DAMAGE:
case COMBAT_DAMAGE:
case END_COMBAT:
pass();
break;
return false;
case POSTCOMBAT_MAIN:
if (game.getActivePlayerId().equals(playerId)) {
printOutState(game, playerId);
@ -135,15 +137,17 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player {
calculatePostCombatActions(game);
}
act(game);
return true;
}
else
pass();
break;
return false;
case END_TURN:
case CLEANUP:
pass();
break;
return false;
}
return false;
}
protected void calculatePreCombatActions(Game game) {

View file

@ -265,7 +265,7 @@ public class SimulatedPlayer2 extends ComputerPlayer<SimulatedPlayer2> {
if (binary.charAt(j) == '1')
sim.getCombat().declareAttacker(attackersList.get(j).getId(), defenderId, sim);
}
if (engagements.put(sim.getCombat().getValue(sim), sim.getCombat()) != null) {
if (engagements.put(sim.getCombat().getValue().hashCode(), sim.getCombat()) != null) {
logger.debug("simulating -- found redundant attack combination");
}
else {
@ -289,7 +289,7 @@ public class SimulatedPlayer2 extends ComputerPlayer<SimulatedPlayer2> {
//add a node with no blockers
Game sim = game.copy();
engagements.put(sim.getCombat().getValue(sim), sim.getCombat());
engagements.put(sim.getCombat().getValue().hashCode(), sim.getCombat());
sim.fireEvent(GameEvent.getEvent(GameEvent.EventType.DECLARED_BLOCKERS, playerId, playerId));
List<Permanent> blockers = getAvailableBlockers(game);
@ -310,7 +310,7 @@ public class SimulatedPlayer2 extends ComputerPlayer<SimulatedPlayer2> {
if (game.getCombat().getGroups().get(i).canBlock(blocker, game)) {
Game sim = game.copy();
sim.getCombat().getGroups().get(i).addBlocker(blocker.getId(), playerId, sim);
if (engagements.put(sim.getCombat().getValue(sim), sim.getCombat()) != null)
if (engagements.put(sim.getCombat().getValue().hashCode(), sim.getCombat()) != null)
logger.debug("simulating -- found redundant block combination");
addBlocker(sim, remaining, engagements); // and recurse minus the used blocker
}
@ -360,7 +360,8 @@ public class SimulatedPlayer2 extends ComputerPlayer<SimulatedPlayer2> {
}
@Override
public void priority(Game game) {
public boolean priority(Game game) {
//should never get here
return false;
}
}