mirror of
https://github.com/magefree/mage.git
synced 2026-01-23 19:59:54 -08:00
latest monte carlo ai - has a memory leak
This commit is contained in:
parent
a06f27ec89
commit
dfffdfcf8c
38 changed files with 677 additions and 286 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue