From ccdca4f0eac5fdfdcb8da1979759322749c0b7e8 Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Thu, 22 Jan 2026 12:30:42 +0100 Subject: [PATCH 1/4] Added thread test --- .../toop/game/players/ai/mcts/MCTSAI3.java | 17 +++++++--- .../toop/game/players/ai/mcts/MCTSAI4.java | 18 +++++++--- game/src/test/java/research/AITest.java | 33 +++++++++++++++---- 3 files changed, 52 insertions(+), 16 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..e59a0ca 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 @@ -8,15 +8,24 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class MCTSAI3 extends MCTSAI { - private static final int THREADS = 8; - - private static final ExecutorService threadPool = Executors.newFixedThreadPool(THREADS); + private final int threads; + private final ExecutorService threadPool; public MCTSAI3(int milliseconds) { + threads = 8; + threadPool = Executors.newFixedThreadPool(8); + super(milliseconds); + } + + public MCTSAI3(int milliseconds, int threads) { + this.threads = 8; + threadPool = Executors.newFixedThreadPool(threads); super(milliseconds); } public MCTSAI3(MCTSAI3 other) { + threads = 8; + threadPool = Executors.newFixedThreadPool(8); super(other); } @@ -31,7 +40,7 @@ public class MCTSAI3 extends MCTSAI { final long endTime = System.nanoTime() + milliseconds * 1_000_000L; - for (int i = 0; i < THREADS; i++) { + for (int i = 0; i < threads; i++) { threadPool.submit(() -> iterate(root, endTime)); } 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..0ec748a 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 @@ -8,21 +8,29 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class MCTSAI4 extends MCTSAI { - private static final int THREADS = 8; - - private static final ExecutorService threadPool = Executors.newFixedThreadPool(THREADS); + private final int threads; + private final ExecutorService threadPool; private Node root; public MCTSAI4(int milliseconds) { + threads = 8; + threadPool = Executors.newFixedThreadPool(8); super(milliseconds); + this.root = null; + } + public MCTSAI4(int milliseconds, int threads) { + this.threads = threads; + threadPool = Executors.newFixedThreadPool(threads); + super(milliseconds); this.root = null; } public MCTSAI4(MCTSAI4 other) { + threads = 8; + threadPool = Executors.newFixedThreadPool(8); super(other); - this.root = other.root; } @@ -37,7 +45,7 @@ public class MCTSAI4 extends MCTSAI { final long endTime = System.nanoTime() + milliseconds * 1_000_000L; - for (int i = 0; i < THREADS; i++) { + for (int i = 0; i < threads; i++) { threadPool.submit(() -> iterate(root, endTime)); } diff --git a/game/src/test/java/research/AITest.java b/game/src/test/java/research/AITest.java index dc24847..a7693dc 100644 --- a/game/src/test/java/research/AITest.java +++ b/game/src/test/java/research/AITest.java @@ -23,27 +23,46 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; -import java.text.DecimalFormat; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class AITest { + private static String fileName = "gameDataThreads.csv"; + private static List matchupList = new ArrayList(); private static List dataList = new ArrayList(); private static List gameDataList = new ArrayList(); +// @BeforeAll +// public static void init() { +// +// var versions = new ArtificialPlayer[4]; +// versions[0] = new ArtificialPlayer(new MCTSAI1(10), "MCTS V1"); +// versions[1] = new ArtificialPlayer(new MCTSAI2(10), "MCTS V2"); +// versions[2] = new ArtificialPlayer(new MCTSAI3(10), "MCTS V3"); +// versions[3] = new ArtificialPlayer(new MCTSAI4(10), "MCTS V4"); +// +// for (int i = 0; i < versions.length; i++) { +// for (int j = i + 1; j < versions.length; j++) { +// final int playerIndex1 = i % versions.length; +// final int playerIndex2 = j % versions.length; +// addMatch(versions[playerIndex1], versions[playerIndex2]); +// addMatch(versions[playerIndex2], versions[playerIndex1]); // home vs away system +// } +// } +// } + @BeforeAll public static void init() { var versions = new ArtificialPlayer[4]; - versions[0] = new ArtificialPlayer(new MCTSAI1(10), "MCTS V1"); - versions[1] = new ArtificialPlayer(new MCTSAI2(10), "MCTS V2"); - versions[2] = new ArtificialPlayer(new MCTSAI3(10), "MCTS V3"); - versions[3] = new ArtificialPlayer(new MCTSAI4(10), "MCTS V4"); + versions[0] = new ArtificialPlayer(new MCTSAI3(10, 4), "MCTS V3T4"); + versions[1] = new ArtificialPlayer(new MCTSAI3(10, 8), "MCTS V3T8"); + versions[2] = new ArtificialPlayer(new MCTSAI3(10, 16), "MCTS V3T16"); + versions[3] = new ArtificialPlayer(new MCTSAI3(10, 32), "MCTS V3T32"); for (int i = 0; i < versions.length; i++) { for (int j = i + 1; j < versions.length; j++) { @@ -129,7 +148,7 @@ public class AITest { var ai220 = iterationsAI2.subList(10, 19); var ai230 = iterationsAI2.subList(20, iterationsAI2.size()); - writeGamesToCSV("gameData.csv", new GameData( + writeGamesToCSV(fileName, new GameData( AI1, AI2, getWinnerForMatch(AI1, AI2, match), From 2f161bcc0ab8752b0e2148044019b8e42bc37d0d Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Thu, 22 Jan 2026 13:38:19 +0100 Subject: [PATCH 2/4] Small thread count fix --- .../java/org/toop/game/players/ai/mcts/MCTSAI3.java | 2 +- game/src/test/java/research/AITest.java | 12 +++++++----- 2 files changed, 8 insertions(+), 6 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 e59a0ca..bee092c 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 @@ -18,7 +18,7 @@ public class MCTSAI3 extends MCTSAI { } public MCTSAI3(int milliseconds, int threads) { - this.threads = 8; + this.threads = threads; threadPool = Executors.newFixedThreadPool(threads); super(milliseconds); } diff --git a/game/src/test/java/research/AITest.java b/game/src/test/java/research/AITest.java index a7693dc..b363c0d 100644 --- a/game/src/test/java/research/AITest.java +++ b/game/src/test/java/research/AITest.java @@ -58,11 +58,13 @@ public class AITest { @BeforeAll public static void init() { - var versions = new ArtificialPlayer[4]; - versions[0] = new ArtificialPlayer(new MCTSAI3(10, 4), "MCTS V3T4"); - versions[1] = new ArtificialPlayer(new MCTSAI3(10, 8), "MCTS V3T8"); - versions[2] = new ArtificialPlayer(new MCTSAI3(10, 16), "MCTS V3T16"); - versions[3] = new ArtificialPlayer(new MCTSAI3(10, 32), "MCTS V3T32"); + var versions = new ArtificialPlayer[6]; + versions[0] = new ArtificialPlayer(new MCTSAI3(10, 1), "MCTS V3T1"); + versions[1] = new ArtificialPlayer(new MCTSAI3(10, 2), "MCTS V3T2"); + versions[2] = new ArtificialPlayer(new MCTSAI3(10, 4), "MCTS V3T4"); + versions[3] = new ArtificialPlayer(new MCTSAI3(10, 8), "MCTS V3T8"); + versions[4] = new ArtificialPlayer(new MCTSAI3(10, 16), "MCTS V3T16"); + versions[5] = new ArtificialPlayer(new MCTSAI3(10, 128), "MCTS V3T128"); for (int i = 0; i < versions.length; i++) { for (int j = i + 1; j < versions.length; j++) { From 940b26de41294cde3d58b9f39314d86f1f042ca1 Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Thu, 22 Jan 2026 13:47:42 +0100 Subject: [PATCH 3/4] Fixes --- game/src/test/java/research/AITest.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/game/src/test/java/research/AITest.java b/game/src/test/java/research/AITest.java index b363c0d..5c1532a 100644 --- a/game/src/test/java/research/AITest.java +++ b/game/src/test/java/research/AITest.java @@ -58,13 +58,16 @@ public class AITest { @BeforeAll public static void init() { - var versions = new ArtificialPlayer[6]; + var versions = new ArtificialPlayer[9]; versions[0] = new ArtificialPlayer(new MCTSAI3(10, 1), "MCTS V3T1"); versions[1] = new ArtificialPlayer(new MCTSAI3(10, 2), "MCTS V3T2"); versions[2] = new ArtificialPlayer(new MCTSAI3(10, 4), "MCTS V3T4"); versions[3] = new ArtificialPlayer(new MCTSAI3(10, 8), "MCTS V3T8"); versions[4] = new ArtificialPlayer(new MCTSAI3(10, 16), "MCTS V3T16"); versions[5] = new ArtificialPlayer(new MCTSAI3(10, 128), "MCTS V3T128"); + versions[6] = new ArtificialPlayer(new MCTSAI3(10, 256), "MCTS V3T16"); + versions[7] = new ArtificialPlayer(new MCTSAI3(10, 512), "MCTS V3T128"); + versions[8] = new ArtificialPlayer(new MCTSAI3(10, 1024), "MCTS V3T128"); for (int i = 0; i < versions.length; i++) { for (int j = i + 1; j < versions.length; j++) { @@ -142,12 +145,12 @@ public class AITest { ) { try { - var ai110 = iterationsAI1.subList(0, 9); - var ai120 = iterationsAI1.subList(10, 19); + var ai110 = iterationsAI1.subList(0, 10); + var ai120 = iterationsAI1.subList(10, 20); var ai130 = iterationsAI1.subList(20, iterationsAI1.size()); - var ai210 = iterationsAI2.subList(0, 9); - var ai220 = iterationsAI2.subList(10, 19); + var ai210 = iterationsAI2.subList(0, 10); + var ai220 = iterationsAI2.subList(10, 20); var ai230 = iterationsAI2.subList(20, iterationsAI2.size()); writeGamesToCSV(fileName, new GameData( From 319eaa33b1560704796b704832f0b0d353c5eddb Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Thu, 22 Jan 2026 13:48:15 +0100 Subject: [PATCH 4/4] name fixes --- game/src/test/java/research/AITest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/game/src/test/java/research/AITest.java b/game/src/test/java/research/AITest.java index 5c1532a..08a6d7d 100644 --- a/game/src/test/java/research/AITest.java +++ b/game/src/test/java/research/AITest.java @@ -65,9 +65,9 @@ public class AITest { versions[3] = new ArtificialPlayer(new MCTSAI3(10, 8), "MCTS V3T8"); versions[4] = new ArtificialPlayer(new MCTSAI3(10, 16), "MCTS V3T16"); versions[5] = new ArtificialPlayer(new MCTSAI3(10, 128), "MCTS V3T128"); - versions[6] = new ArtificialPlayer(new MCTSAI3(10, 256), "MCTS V3T16"); - versions[7] = new ArtificialPlayer(new MCTSAI3(10, 512), "MCTS V3T128"); - versions[8] = new ArtificialPlayer(new MCTSAI3(10, 1024), "MCTS V3T128"); + versions[6] = new ArtificialPlayer(new MCTSAI3(10, 256), "MCTS V3T256"); + versions[7] = new ArtificialPlayer(new MCTSAI3(10, 512), "MCTS V3T512"); + versions[8] = new ArtificialPlayer(new MCTSAI3(10, 1024), "MCTS V3T1024"); for (int i = 0; i < versions.length; i++) { for (int j = i + 1; j < versions.length; j++) {