From 663243747a3a87ce8730971bb3ae6d70ef4906f5 Mon Sep 17 00:00:00 2001 From: abelsalm Date: Mon, 13 May 2024 01:03:39 +0200 Subject: [PATCH] =?UTF-8?q?maintenant=20objectif=20am=C3=A9liorer=20le=20t?= =?UTF-8?q?emps=20de=20compil=20de=20l'env=20et=20plus=20de=20valeur=20nan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/agent.cpython-312.pyc | Bin 6147 -> 6147 bytes __pycache__/env.cpython-312.pyc | Bin 4342 -> 4779 bytes __pycache__/equations.cpython-312.pyc | Bin 3374 -> 3374 bytes __pycache__/visualize.cpython-312.pyc | Bin 4830 -> 4822 bytes env.py | 30 +++++++++++++++----------- equations.py | 2 +- test_dql_on_spacecraft.py | 16 ++++++++------ visualize.py | 24 ++++++++++----------- 8 files changed, 40 insertions(+), 32 deletions(-) diff --git a/__pycache__/agent.cpython-312.pyc b/__pycache__/agent.cpython-312.pyc index 0934cdc2a9de8bd7242319a0a8923ffbf5e06e46..3029ef7f12adafc30f4d56dc44b85eb327ce1d3f 100644 GIT binary patch delta 20 acmZoRXg1(J&CAQh00gh>95-_R5C;G@y#7%Q6rS1t_3qkn;>59&+WD!KEJ;h8{vfK*%2H@WMGO5w(5R)jT{qZql6E&K zig8E}6^f;zI2|M$_0W_HK}8i(g}732X*h`QAKfzZvs>r)eGp8HY%~`4JIUA>KoU!qUjguC{ zg4#%p{ZNoWvVJGi+|C(M?wd`lHik=a^41y>w7w!<4Mj>9t~IYA-rrYDtTu&;uaz|-U1gBu``iL6v zY+8caFVXdc0N{*_MDC~o@ia{kA@YE4oskclK9H+*T>$jDs?>V8_Uz$HuBi#@!V+hj<@ypS;c-VCKpu-OHISSO52}bC+uDDs! zq-{QFn#n0MOx}_E>u9#NV5Z(nnue~K5%Q_r7vBXxE$Xao^Kk3HSre)AIf<5mO4Pm8 zbDQ-jIHveklt@{LEVkcOIx7vq*}?VfO1l?#F8jKcr7kl@+LRD}LiQ-VzK%RQLGyEl z!I8KYBws4LHwTxs(Fg`lK2i<^g^@wXMaZ)TmxI8j*)g8Vq^5L=qN59u3u=gXRY4T# zenTP&wNsQs;M@?&h#C#9%dR#DT*w8TWS^$VpB}6@Zg)XnZm6T1)#3=0 z*NI47k7(z!OclqJ2CTYA=GhI?q!gHe=V_B;*Fr{l_88K&!%r`ed`-YEV0w;<6g zuJ%(fsDjekAwZS(LHbuHtj;^PZnMcVmcw^j$fn1V*nTYblhe=`m(YDxo5lAP-`t+Uo?^1_QmOy0vZbPGA2$?JCF6Q# zA+zLP7%eyTeDB}3lq&mol+_)DL`Cz@4Hbq;xNxd;^sW{qzj+(f#=^lu0{j(0Ad0U` zJX`kbWmP9H`eOgfDc^oJP#TqvOV8HnrD03jgSXVs!#MVll?|Q2o!S Z^&YCbhk}1e$1wKS5XDDXM!{jn$$u4`mZbmy delta 1482 zcma)6&2Jk;6rb5|d%ezXVkdUmq;VYAcAC0PnzpEFfk>gL3Ir;u3PnW4ut}5;JJmP= zVmXvU1x-~{n>p0Il-wu^9IE~azy&Tb2-R|mlmi!wOOhfGT*`a9b-&aDBkgbAys!Dq zn>V`_`zzxA$uPVG#y6k6Jo$rO@`vbPDIN(3WQ5q_C1Oi!0-6aKlS}rz&?)eW+*A5z zJaU$hWx8OvMnY_5jk@wM86O6l!2b~T9F!Z{WwAhQb@nJBOtysrtd4^_NJ3sFq#)WV zt_%Eu7UZH3w8TarC09>MANfPm|Bf?+RB4)NSF70-3@6pBZnFq&&*-By}?mfQ76p07;RVFtH%QZd6d# z0aFe=x>$t2qz08;s5s2W)C0+;mTUQy{JIuqQBc1B@a8}yM1@a;@BS6gUgvwX(47bB zIe{PY243(L^hps&D5K1&9B?3Y>ss7B z2GVW}tcr7t-}!A{pB#q9k$9ID@`k~X2hOl;HC}I%XQ2m~0%j!-JeI|*j55y~QL6Bp zMod*4Z<+sSM4MEMwiPEPR1hIyTlAsM^~&pzy$$m$JSysp#J6b+Re7g3(QOl3YbTAq zv^`F$!_Rk4J>#s*Le8hS4*tJDj}zz|%q3TN9=%O1aPjFKU1txxI=FQ2=;K?iV;xuw zp%DsZCW5x8!iSoeDdPmh~6l3L{FMDtFuAaHEztSAP6|7jP ziZ8_rX3W>TGO{uRfkhDbw`N>@uVN)Cz69SeV~=FjIw_+4O)KWiA6Y3H=% diff --git a/__pycache__/equations.cpython-312.pyc b/__pycache__/equations.cpython-312.pyc index fb5dbbc7cbe18288f6b988c3f4a7ecdea9765bec..90820a211360c9f328a61dcf3d24e68b27363653 100644 GIT binary patch delta 29 jcmZ1{wN8rrG%qg~0}%AOI&S24U}R=k%(U5$@c}mgYP1J1 delta 29 jcmZ1{wN8rrG%qg~0}#~oIBev0U}SEv;@s@V_<$P#Zwd#4 diff --git a/__pycache__/visualize.cpython-312.pyc b/__pycache__/visualize.cpython-312.pyc index 80a40267a97ea07686c7e1019e4f1703a64445e1..5325ceca0c12d6ebb4a3c5412bafb4dc892dd4eb 100644 GIT binary patch delta 2608 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 25: - r += (10000 - self.state[1])/1000000 # for y, needs to come close but not to much + r += abs((10000 - self.state[1]))/50000 # for y, needs to come close but not to much elif self.state[1] < 25 and self.state[1] > 10: - r += 10 + r += 10000 else: - r -= 10 + r -= 10000 # stay on the orbit for x and z axis if self.state[0] > 50: - r -= (self.state[0] - 50)/10 + r -= (self.state[0] - 50)/100 elif self.state[2] > 50: - r -= (self.state[2] - 50)/10 + r -= (self.state[2] - 50)/100 # globally, distance to the satellite if np.linalg.norm(self.state[:3]) > 15 and np.linalg.norm(self.state[:3]) < 50: - r += 10 + r += 1000 elif np.linalg.norm(self.state[:3]) < 15: - r -= 10 + r -= 1000 # then economy of propellant r -= np.linalg.norm(action[:3]) @@ -90,7 +94,7 @@ def reward(self, state, action): '''env = Env() print(env.reset()) indices = [[0, 10000, 0]] -for i in range(200): +for i in range(100): if i%20 >= 10: a = 1 else: diff --git a/equations.py b/equations.py index 9c70a0c..3efe924 100644 --- a/equations.py +++ b/equations.py @@ -6,7 +6,7 @@ n0 = 2 * np.pi / (24 * 60 * 60) # Earth angular's velocity (rad/s) m = 3000 # mass (kg) dt = 5 * 60 # dt in seconds -total_time = 7 * 24 * 60 * 60 # total time of one week in seconds +total_time = 2 * 24 * 60 * 60 # total time of one week in seconds num_steps = total_time//dt # iterations R = 1.5 # radius of the chaser H = 8 # height of the chaser diff --git a/test_dql_on_spacecraft.py b/test_dql_on_spacecraft.py index a1214e3..f2b8125 100644 --- a/test_dql_on_spacecraft.py +++ b/test_dql_on_spacecraft.py @@ -1,20 +1,23 @@ from env import Env from agent import Agent import numpy as np +import visualize as vis # flake8: noqa env = Env() -agent = Agent(gamma=0.99, epsilon=1.0, lr=0.003, dim_input=13, batch_size=64, actions=8, - memory_max=10000, epsilon_min=0.05, epsilon_down=2e-3) +agent = Agent(gamma=0.99, epsilon=1.0, lr=0.003, dim_input=13, batch_size=64, actions=16, + memory_max=10000, epsilon_min=0.08, epsilon_down=2e-4) scores = [] eps_history = [] n_games = 50 + +indices_dernier = [] for i in range(n_games): done = False score = 0 - observation = env.reset()[0] + observation = env.reset() while not done: action = agent.choose_action(observation) observation_, reward, done = env.step(env.action_space[action]) @@ -22,12 +25,13 @@ agent.store_transition(observation, action, reward, observation_, done) agent.learn() observation = observation_ - agent.step += 1 + if i >= n_games-1: + indices_10_derniers = indices_dernier.append(env.state[0:3]) scores.append(score) eps_history.append(agent.epsilon) - avg_score = np.mean(scores[-20:]) + avg_score = np.mean(scores[-10:]) print('episode', i, 'score %.2f' % score, 'average score %.2f' % avg_score, 'epsilon %.2f' % agent.epsilon) print(env.state) - +vis.visualize(indices_dernier) \ No newline at end of file diff --git a/visualize.py b/visualize.py index 3c126cb..315c99a 100644 --- a/visualize.py +++ b/visualize.py @@ -9,8 +9,6 @@ # Définition de la taille de la fenêtre screen_width = 800 screen_height = 600 -screen = pygame.display.set_mode((screen_width, screen_height)) -pygame.display.set_caption("Vaisseau suivant une droite") # Couleurs BROWN =(165, 80, 80) @@ -34,26 +32,28 @@ point_x = 650 point_y = 300 -def draw_circle(): +def draw_circle(screen): pygame.draw.circle(screen, BROWN, (650, point_y), 15) -def draw_earth(): +def draw_earth(screen): pygame.draw.rect(screen, EARTH_BLUE, (0, 0, screen_width, 30)) pygame.draw.rect(screen, EARTH_GREEN, (0, 0, screen_width, 15)) # Fonction pour dessiner la droite -def draw_line(): +def draw_line(screen): pygame.draw.line(screen, WHITE, (0, point_y), (screen_width, point_y)) # Fonction pour mettre à jour la position du vaisseau -def update_vaisseau(x, y): +def update_vaisseau(screen, x, y): vaisseau_rect.center = (point_x - y, point_y + x) -def dot(x, y, z): +def dot(screen, x, y, z): pygame.draw.circle(screen, (255, -min(0, max(-255, z*255/1000)), max(0, min(255, z*255/1000))), (point_x - y, point_y + x), 2) # Boucle principale def visualize(indices): + screen = pygame.display.set_mode((screen_width, screen_height)) + pygame.display.set_caption("Chaser trajectory visualization") running = True cruise = True @@ -68,19 +68,19 @@ def visualize(indices): screen.fill(BLACK) # Dessiner la droite - draw_earth() - draw_line() - draw_circle() + draw_earth(screen) + draw_line(screen) + draw_circle(screen) # Mettre à jour la position du vaisseau - update_vaisseau(indices[i][0]/1000, indices[i][1]*6/100) # Mettez vos coordonnées x et y ici + update_vaisseau(screen, indices[i][0]/1000, indices[i][1]*6/100) # Mettez vos coordonnées x et y ici # Afficher le vaisseau screen.blit(vaisseau_image, vaisseau_rect) if i > 0: for j in range(i-1): - dot(indices[j][0]/1000, indices[j][1]*6/100, indices[j][2]) + dot(screen, indices[j][0]/1000, indices[j][1]*6/100, indices[j][2]) # Actualiser l'affichage pygame.display.flip()