From 27420f784c3e680021f1c4cf739f859ede75c473 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Thu, 17 Feb 2011 23:55:22 +0300 Subject: [PATCH] [mad-ai] Fixed AI. Now plays spells more often. --- .../src/mage/player/ai/ComputerPlayer6.java | 13 ++++++++++--- .../src/mage/player/ai/SimulationNode2.java | 9 +++++++++ Mage.Tests/plugins/mage-player-ai-ma.jar | Bin 54938 -> 55094 bytes 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java index 340b290b97..f086039625 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java @@ -179,10 +179,12 @@ public class ComputerPlayer6 extends ComputerPlayer implements SimulationNode2.resetCount(); root = new SimulationNode2(sim, maxDepth, playerId); logger.info("simulating actions"); + //int bestScore = addActionsTimed(new FilterAbility()); addActionsTimed(new FilterAbility()); if (root.children.size() > 0) { root = root.children.get(0); - int bestScore = GameStateEvaluator2.evaluate(playerId, root.getGame()); + //GameStateEvaluator2.evaluate(playerId, root.getGame()); + int bestScore = root.getScore(); if (bestScore > currentScore) { actions = new LinkedList(root.abilities); combat = root.combat; @@ -294,7 +296,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements game.getPlayerList().setCurrent(game.getActivePlayerId()); } - protected void addActionsTimed(final FilterAbility filter) { + protected Integer addActionsTimed(final FilterAbility filter) { FutureTask task = new FutureTask(new Callable() { public Integer call() throws Exception { @@ -303,7 +305,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements }); pool.execute(task); try { - task.get(Config2.maxThinkSeconds, TimeUnit.MINUTES); + return task.get(Config2.maxThinkSeconds, TimeUnit.MINUTES); } catch (TimeoutException e) { logger.info("simulating - timed out"); task.cancel(true); @@ -314,6 +316,8 @@ public class ComputerPlayer6 extends ComputerPlayer implements e.printStackTrace(); task.cancel(true); } + //TODO: timeout handling + return 0; } protected int addActions(SimulationNode2 node, FilterAbility filter, int depth, int alpha, int beta) { @@ -399,6 +403,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements if (val < beta) { beta = val; bestNode = newNode; + bestNode.setScore(val); node.setCombat(newNode.getCombat()); } } @@ -406,6 +411,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements if (val > alpha) { alpha = val; bestNode = newNode; + bestNode.setScore(val); node.setCombat(newNode.getCombat()); if (node.getTargets().size() > 0) targets = node.getTargets(); @@ -426,6 +432,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements if (bestNode != null) { node.children.clear(); node.children.add(bestNode); + node.setScore(bestNode.getScore()); } if (!currentPlayer.getId().equals(playerId)) { //logger.info("returning priority beta: " + beta); diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulationNode2.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulationNode2.java index f32f29c0e3..7e86c59ce5 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulationNode2.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulationNode2.java @@ -46,6 +46,7 @@ public class SimulationNode2 implements Serializable { protected Game game; protected int gameValue; + protected int score; protected List abilities; protected int depth; protected List children = new ArrayList(); @@ -124,4 +125,12 @@ public class SimulationNode2 implements Serializable { public List getChoices() { return this.choices; } + + public int getScore() { + return score; + } + + public void setScore(int score) { + this.score = score; + } } diff --git a/Mage.Tests/plugins/mage-player-ai-ma.jar b/Mage.Tests/plugins/mage-player-ai-ma.jar index 6e895cae6c74e391b082288ff67dcbecb7e67917..c7ee7d87e8a971ee6bc6c80de3dd10a1c7bb0beb 100644 GIT binary patch delta 14734 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 LLa9&w)4~4-)+)H}