From 99c814c37f57ed6b406d0d71d6f8997dd0b18cbe Mon Sep 17 00:00:00 2001 From: guezoloic Date: Tue, 4 Jun 2024 12:08:46 +0200 Subject: [PATCH] =?UTF-8?q?changement=20dans=20la=20fa=C3=A7on=20qu'il=20a?= =?UTF-8?q?pprend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- res/save/learn.ser | Bin 10800 -> 0 bytes res/save/learn1.ser | Bin 0 -> 82 bytes res/save/learn2.ser | Bin 0 -> 82 bytes src/Main.java | 58 ++++++++++++++++++++---------------------- src/tests/IATest.java | 38 ++++++++++++++++----------- 6 files changed, 52 insertions(+), 46 deletions(-) delete mode 100644 res/save/learn.ser create mode 100644 res/save/learn1.ser create mode 100644 res/save/learn2.ser diff --git a/Makefile b/Makefile index 70717fc..7dd4b07 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ $(BIN_DIR)/$(MAIN_FILE).class : $(SRC_DIR)/$(MAIN_FILE).java $(JAVAC) -d $(BIN_DIR) -sourcepath $(SRC_DIR) -classpath $(JAR) $< run: - java -cp $(BIN_DIR) $(MAIN_FILE) $(channel) $(adversaire) + java -Xmx16g -cp $(BIN_DIR) $(MAIN_FILE) $(channel) $(adversaire) clean: @rm -rf $(BIN_DIR) \ No newline at end of file diff --git a/res/save/learn.ser b/res/save/learn.ser deleted file mode 100644 index 8a51ba3844ecc76a325c3449a63165ffb9406c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10800 zcmeI2F>ljA6vtnkl%{Ecra(LO1F$4wL+VhB+Nwq=R4O1wF3BkgO>ARdT9+ZB3k<9< zFd#9oAa&ydAYfpoBNJk0U}AuQyK`%s6Q`aft8%0B5Z&co-u>V2F85EI?Eipq--F5n zw2i6*((P5(kl$HH?)b#l51;1le<^^m3gw=ITC1o@9M6JD(($n0aeA%5UAhMJD!@(& zph#QBJ({d+nN_n%x{mF$QF@ITVANrmdwbDsXA03o)rED%d+%c=;Ki!!nASEE*LHKzZ(#4q z{)>gF=iiN{oboY*%C2sJYWNJ5BaCIC_BYGw+Mgb>Y4 z03z!qj=XG{h1srX4?M;L6AK_)qxo!C=CrzVy88s0nRGiz2Q)J&8tH&$CPgD1$QiT5 z5uB~EFk1#57=B}9-w0=qzw;`^t}u{o{Zgk%5LXbzLrzFpI+M}LRF_YP)2k@}QRr%B z3Xp`5JTeOpzdR}n55H`ch1oLjK!dvp^T6Urcwo+*CY?oRyJw`I8*} diff --git a/res/save/learn1.ser b/res/save/learn1.ser new file mode 100644 index 0000000000000000000000000000000000000000..c5975123e324fcbdfc5624e1442489e4e62468d6 GIT binary patch literal 82 zcmZ4UmVvdnh(Rzbu`E%qv?Mb}&m*xo!#A;jmHpPi!(s^+nHiYe7`Srs6I0w0lS}f8 eJQ+AkGKx}*GxBp%Dhli!7{H*M14s#gm=yqSWEX`1 literal 0 HcmV?d00001 diff --git a/res/save/learn2.ser b/res/save/learn2.ser new file mode 100644 index 0000000000000000000000000000000000000000..c5975123e324fcbdfc5624e1442489e4e62468d6 GIT binary patch literal 82 zcmZ4UmVvdnh(Rzbu`E%qv?Mb}&m*xo!#A;jmHpPi!(s^+nHiYe7`Srs6I0w0lS}f8 eJQ+AkGKx}*GxBp%Dhli!7{H*M14s#gm=yqSWEX`1 literal 0 HcmV?d00001 diff --git a/src/Main.java b/src/Main.java index d863528..44b6336 100644 --- a/src/Main.java +++ b/src/Main.java @@ -8,46 +8,44 @@ import tests.IATest; public class Main { public static void main(String[] args) { - // Personnage.n = 4; + Personnage.n = 4; - // Map map = new Map(12, 22); + Map map = new Map(12, 22); // // lancer en local - // if (args.length < 2) { - // Grid[][] grid = map.getGrid(); + if (args.length < 2) { + Grid[][] grid = map.getGrid(); - // QTable qTable1 = new QTable(); - // qTable1.getValues("path_to_save_qtable1.ser"); + // QTable qTable1 = new QTable(); + // qTable1.getValues("res" + File.separator + "save" + File.separator + "learn1.ser"); - // QTable qTable2 = new QTable(); - // qTable2.getValues("path_to_save_qtable2.ser"); + // QTable qTable2 = new QTable(); + // qTable2.getValues("res" + File.separator + "save" + File.separator + "learn1.ser"); - // // Avant de jouer contre l'ia, vous pouvez essayer de l'entrainer avec la fonction tests.IATest.learnIAvsIA() - // // il jouera avec lui meme et mettra les sauvegardes dans le dossier learn.ser, + // // Avant de jouer contre l'ia, vous pouvez essayer de l'entrainer avec la fonction tests.IATest.learnIAvsIA() + // // il jouera avec lui meme et mettra les sauvegardes dans le dossier learn.ser, - // // Attention lors de l'apprentissage, ne pas couper le processus sinon vous allez perdre toute vos donnees - // Personnage[] personnages = new Personnage[] { - // new IAQLearning(new int[] {2, 2}, qTable1), - // // new Player(new int[] {2, 2}, "Philippe Etchebest"), - // // new Player(new int[] {grid[0].length - 3, grid.length - 3}, "Luke Skywalker"), - // // new Robot("Robot", new int[] {grid[0].length - 3, grid.length - 3}), - // new IAQLearning(new int[] {grid[0].length - 3, grid.length - 3}, qTable2), - // }; + // // Attention lors de l'apprentissage, ne pas couper le processus sinon vous allez perdre toute vos donnees + Personnage[] personnages = new Personnage[] { + // new IAQLearning(new int[] {2, 2}, qTable1), + new Player(new int[] {2, 2}, "Philippe Etchebest"), + new Player(new int[] {grid[0].length - 3, grid.length - 3}, "Luke Skywalker"), + // new Robot("Robot", new int[] {grid[0].length - 3, grid.length - 3}), + // new IAQLearning(new int[] {grid[0].length - 3, grid.length - 3}, qTable2), + }; - // // map.addObjectsRandomize(new Item[] {Item.FRAISE, Item.WALL}, 2); - // // map.addObjects(Item.FRAISE, 2, 2); + // map.addObjectsRandomize(new Item[] {Item.FRAISE, Item.WALL}, 2); + // map.addObjects(Item.FRAISE, 2, 2); - // new Terminal(map, personnages).run(); - // } + new Terminal(map, personnages).run(); + } // // lancer en ligne - // else { - // Personnage[] personnages = new Personnage[] { - // new Player(new int[] {0, 0}, "Philippe Etchebest"), - // }; + else { + Personnage[] personnages = new Personnage[] { + new Player(new int[] {0, 0}, "Philippe Etchebest"), + }; - // new Terminal(map, personnages).run(args[0], args[1]); - // } - - IATest.learnIAvsIA(); + new Terminal(map, personnages).run(args[0], args[1]); + } } } diff --git a/src/tests/IATest.java b/src/tests/IATest.java index dc3860c..f116e32 100644 --- a/src/tests/IATest.java +++ b/src/tests/IATest.java @@ -13,9 +13,13 @@ import personnage.Personnage; import types.Mouvement; public class IATest { - private final static String path = "res" + File.separator + + private final static String path1 = "res" + File.separator + "save" + File.separator + - "learn.ser"; + "learn1.ser"; + + private final static String path2 = "res" + File.separator + + "save" + File.separator + + "learn2.ser"; public static void learnIA() { double alpha = 0.1; @@ -33,7 +37,7 @@ public class IATest { IAQLearning iaqLearning = new IAQLearning(new int[] {2, 2}, qTable, alpha, gamma, epsilon); Map map = new Map(12, 22); - qTable.getValues(path); + qTable.getValues(path1); while (true) { Map mapIA = new Map(map.getGrid()[0].length, map.getGrid().length); @@ -64,31 +68,34 @@ public class IATest { map.clearMap(); } - qTable.save(path); + qTable.save(path1); epsilon = Math.max(minEpsilon, epsilon * decay_rate); - System.out.println("Episode : " + episode + " | Robot 1 States : " + qTable.getqValues().size()); + System.out.println("Episode : " + episode + " | States : " + qTable.getqValues().size()); } } public static void learnIAvsIA() { - double alpha = 0.1; + double alpha = 0.9; double gamma = 0.9; double epsilon = 0.1; - int maxEpisode = 1000; + int maxEpisode = 1000000; Personnage.n = 4; - for (int episode = 0; episode < maxEpisode; episode++) { - QTable qTable = new QTable(); - qTable.getValues(path); + QTable qTable1 = new QTable(); + qTable1.getValues(path1); + QTable qTable2 = new QTable(); + qTable2.getValues(path2); + + for (int episode = 0; episode < maxEpisode; episode++) { Map map = new Map(12, 22); IAQLearning[] iaqLearnings = new IAQLearning[] { - new IAQLearning(new int[] {2, 2}, qTable, alpha, gamma, epsilon), - new IAQLearning(new int[] {9, 19}, qTable, alpha, gamma, epsilon), + new IAQLearning(new int[] {2, 2}, qTable1, alpha, gamma, epsilon), + new IAQLearning(new int[] {9, 19}, qTable2, alpha, gamma, epsilon), }; boolean isGameOver = false; @@ -136,13 +143,14 @@ public class IATest { mapIA.clearMap(); map.clearMap(); + + System.out.println("States 1: " + qTable1.getqValues().size() + " States 2: " + qTable2.getqValues().size()); } if(isGameOver) break; - qTable.save(path); - - System.out.println("Episode: " + episode + " States: " + qTable.getqValues().size()); } + System.out.println(" States 1: " + qTable1.getqValues().size() + " States 2: " + qTable2.getqValues().size() + "Episode: " + episode); } + qTable1.save(path1); } }