From 039c0393c8d40882da3c1672a36eebf724f8f979 Mon Sep 17 00:00:00 2001 From: ramollia <> Date: Fri, 23 Jan 2026 19:09:28 +0100 Subject: [PATCH] fixed extra wait time for threads --- .../org/toop/game/players/ai/mcts/MCTSAI3.java | 18 +++++++++++++----- .../org/toop/game/players/ai/mcts/MCTSAI4.java | 18 +++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/game/src/main/java/org/toop/game/players/ai/mcts/MCTSAI3.java b/game/src/main/java/org/toop/game/players/ai/mcts/MCTSAI3.java index 324754d..4e582b3 100644 --- a/game/src/main/java/org/toop/game/players/ai/mcts/MCTSAI3.java +++ b/game/src/main/java/org/toop/game/players/ai/mcts/MCTSAI3.java @@ -3,6 +3,7 @@ package org.toop.game.players.ai.mcts; import org.toop.framework.gameFramework.model.game.TurnBasedGame; import org.toop.game.players.ai.MCTSAI; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -31,12 +32,21 @@ public class MCTSAI3 extends MCTSAI { final long endTime = System.nanoTime() + milliseconds * 1_000_000L; + final CountDownLatch latch = new CountDownLatch(THREADS); + for (int i = 0; i < THREADS; i++) { - threadPool.submit(() -> iterate(root, endTime)); + threadPool.submit(() -> { + try { + iterate(root, endTime); + } finally { + latch.countDown(); + } + }); } try { - threadPool.awaitTermination(milliseconds, TimeUnit.MILLISECONDS); + final long remaining = endTime - System.nanoTime(); + latch.await(remaining, TimeUnit.NANOSECONDS); lastIterations = root.visits.get(); @@ -50,14 +60,12 @@ public class MCTSAI3 extends MCTSAI { } } - private Void iterate(Node root, long endTime) { + private void iterate(Node root, long endTime) { while (Float.isNaN(root.solved) && System.nanoTime() < endTime) { Node leaf = selection(root); leaf = expansion(leaf); final int value = simulation(leaf); backPropagation(leaf, value); } - - return null; } } \ No newline at end of file diff --git a/game/src/main/java/org/toop/game/players/ai/mcts/MCTSAI4.java b/game/src/main/java/org/toop/game/players/ai/mcts/MCTSAI4.java index 5cc7773..399dc5b 100644 --- a/game/src/main/java/org/toop/game/players/ai/mcts/MCTSAI4.java +++ b/game/src/main/java/org/toop/game/players/ai/mcts/MCTSAI4.java @@ -3,6 +3,7 @@ package org.toop.game.players.ai.mcts; import org.toop.framework.gameFramework.model.game.TurnBasedGame; import org.toop.game.players.ai.MCTSAI; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -37,12 +38,21 @@ public class MCTSAI4 extends MCTSAI { final long endTime = System.nanoTime() + milliseconds * 1_000_000L; + final CountDownLatch latch = new CountDownLatch(THREADS); + for (int i = 0; i < THREADS; i++) { - threadPool.submit(() -> iterate(root, endTime)); + threadPool.submit(() -> { + try { + iterate(root, endTime); + } finally { + latch.countDown(); + } + }); } try { - threadPool.awaitTermination(milliseconds, TimeUnit.MILLISECONDS); + final long remaining = endTime - System.nanoTime(); + latch.await(remaining, TimeUnit.NANOSECONDS); lastIterations = root.visits.get(); @@ -60,14 +70,12 @@ public class MCTSAI4 extends MCTSAI { } } - private Void iterate(Node root, long endTime) { + private void iterate(Node root, long endTime) { while (Float.isNaN(root.solved) && System.nanoTime() < endTime) { Node leaf = selection(root); leaf = expansion(leaf); final int value = simulation(leaf); backPropagation(leaf, value); } - - return null; } } \ No newline at end of file