From 24d284e30fc1066c161cef76c48c37572883f485 Mon Sep 17 00:00:00 2001 From: meliani09 Date: Sun, 11 Mar 2018 20:19:36 +0100 Subject: [PATCH] =?UTF-8?q?d=C3=A9p=C3=B4t=20projet=20RL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ElKyal/FlappyAgent.py | 10 ++++ ElKyal/model.dqf | Bin 0 -> 89504 bytes ElKyal/q_learn.py | 84 ++++++++++++++++++++++++++++++++++ {RandomBird => ElKyal}/run.py | 2 +- RandomBird/FlappyAgent.py | 9 ---- 5 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 ElKyal/FlappyAgent.py create mode 100644 ElKyal/model.dqf create mode 100644 ElKyal/q_learn.py rename {RandomBird => ElKyal}/run.py (81%) delete mode 100644 RandomBird/FlappyAgent.py diff --git a/ElKyal/FlappyAgent.py b/ElKyal/FlappyAgent.py new file mode 100644 index 0000000..66f4dec --- /dev/null +++ b/ElKyal/FlappyAgent.py @@ -0,0 +1,10 @@ +import numpy as np +from keras.models import Sequential, load_model + +model = load_model("model.dqf") + +def FlappyPolicy(state, screen): + q = model.predict(np.array(list(state.values())).reshape(1,len(state))) + + + return(np.argmax(q)*119) diff --git a/ElKyal/model.dqf b/ElKyal/model.dqf new file mode 100644 index 0000000000000000000000000000000000000000..adc0849c7dc55d0da7ae0deba89cd78c22bafad7 GIT binary patch literal 89504 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¬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 literal 0 HcmV?d00001 diff --git a/ElKyal/q_learn.py b/ElKyal/q_learn.py new file mode 100644 index 0000000..a62bf90 --- /dev/null +++ b/ElKyal/q_learn.py @@ -0,0 +1,84 @@ + +from ple.games.flappybird import FlappyBird +from ple import PLE +from keras import optimizers +from keras.models import Sequential +from keras.layers.core import Dense, Activation +import numpy as np +import random + + +model = Sequential() + + +model.add(Dense(500, init='lecun_uniform', input_shape=(8,))) + +model.add(Activation('relu')) +model.add(Dense(2, init='lecun_uniform')) +model.add(Activation('linear')) +model.compile(loss='mse', optimizer=optimizers.Adam(1e-4)) + + +epochs = 28000 +gamma = 0.99 # discount factor +epsilon = 0.7 # epsilon-greddy +batchSize = 256 # mini batch size + +jeu = FlappyBird() +p= PLE(jeu, fps=30, frame_skip=1, num_steps=1,force_fps=True, display_screen=False) +p.init() + +i=0 + +for i in range(epochs): + p.reset_game() + state = jeu.getGameState() + state = np.array(list(state.values())) + while(not jeu.game_over()): + + + + qval = model.predict(state.reshape(1,len(state)), batch_size=batchSize) #Learn Q (Q-learning) / model initialise avant (neural-network) + if (random.random() < epsilon): # exploration exploitation strategy + action = np.random.randint(0,2) +# print(action) + else: #choose best action from Q(s,a) values + qval_av_action = [-9999]*2 + + for ac in range(0,2): + qval_av_action[ac] = qval[0][ac] + action = (np.argmax(qval_av_action)) + #Take action, observe new state S' + #Observe reward + reward = p.act(119*action) + if reward == 1: + reaward = 1 + elif reward == -5: + reward = -1000 + new_state = jeu.getGameState() + new_state = np.array(list(new_state.values())) + # choose new reward values + + + #Get max_Q(S',a) + newQ = model.predict(new_state.reshape(1,len(state)), batch_size=batchSize) + maxQ = np.max(newQ) + y = np.zeros((1,2)) + y[:] = qval[:] + if reward != -5: #non-terminal state + update = (reward + gamma * maxQ) + else: + update = reward + y[0][action] = update + print("Game #: %s" % (i,)) + model.fit(state.reshape(1, len(state)), y, batch_size=batchSize, nb_epoch=3, verbose=0) + state = new_state + + + # update exploitation / exploration strategy + if epsilon > 0.2: + epsilon -= (1.0/epochs) + + + +model.save("model.dqf") diff --git a/RandomBird/run.py b/ElKyal/run.py similarity index 81% rename from RandomBird/run.py rename to ElKyal/run.py index 39b5801..cbaa25d 100644 --- a/RandomBird/run.py +++ b/ElKyal/run.py @@ -4,7 +4,7 @@ import numpy as np from FlappyAgent import FlappyPolicy -game = FlappyBird(graphics="fixed") # use "fancy" for full background, random bird color and random pipe color, use "fixed" (default) for black background and constant bird and pipe colors. +game = FlappyBird() # use "fancy" for full background, random bird color and random pipe color, use "fixed" (default) for black background and constant bird and pipe colors. p = PLE(game, fps=30, frame_skip=1, num_steps=1, force_fps=False, display_screen=True) # Note: if you want to see you agent act in real time, set force_fps to False. But don't use this setting for learning, just for display purposes. diff --git a/RandomBird/FlappyAgent.py b/RandomBird/FlappyAgent.py deleted file mode 100644 index 9f3ec84..0000000 --- a/RandomBird/FlappyAgent.py +++ /dev/null @@ -1,9 +0,0 @@ -import numpy as np - -def FlappyPolicy(state, screen): - action=None - if(np.random.randint(0,2)<1): - action=119 - return action - -