codigo actualizado

main
marta 1 year ago
parent 2ec02b2a44
commit be48f30401
  1. 39
      Documentos/TFG_Machine_Learning/Reinforce_Learning.py

@ -7,6 +7,7 @@ Created on Tue Feb 6 19:02:32 2024
"""
import numpy as np
import math
import plotly.graph_objects as go
from tqdm.notebook import tqdm
import plotly.express as px
@ -116,8 +117,20 @@ class Swimmer(Agent):
self.ni = ni
self.sigma = sigma
# local position within the periodic box. X = [x, z]^T with 0 <= x < 2 pi and 0 <= z < 2 pi
#obstáculos
self.obstacles= self.generate_obstacles()
#Condición inicial para el swimmer
valid_initial_position = False
while not valid_initial_position:
self.X = np.array([np.random.uniform(0, L), np.random.uniform(0, L), 0])
valid_initial_position = True
# Comprobamos si esta inicialmente esta dentro de un obstáculo
for i in range(len(self.obstacles)//2):
obstacle_position = np.array([self.obstacles[2*i], self.obstacles[2*i+1], 0])
if np.linalg.norm(self.X - obstacle_position) < 0.5*self.sigma:
valid_initial_position = False
break
# absolute position. -inf. <= x_total < inf. and -inf. <= z_total < inf.
self.X_total = self.X
@ -148,8 +161,7 @@ class Swimmer(Agent):
# update coarse-grained state
self.update_state()
#obstáculos
self.obstacles= self.generate_obstacles()
#distancia entre el swimmer y el obstáculo
@ -394,6 +406,21 @@ class Swimmer(Agent):
self.W[2] -= 1./8*Wc
return action_index
def periodic_boundaries(self, isxperiodic=True, isyperiodic=True, iszperiodic=True):
offset = [math.floor(-self.X[0] * 1/L + 0.5),
math.floor(-self.X[1] * 1/L + 0.5),
0]
if isxperiodic:
self.X[0] += offset[0] * L
if isyperiodic:
self.X[1] += offset[1] * L
if iszperiodic:
self.X[2] += offset[2] * L
return self.X
#Define Taylor-Green vortex
@ -594,17 +621,22 @@ print(Q)
Ns = 5000
spinner = Swimmer(Ns, 1, 1)
traj = []
obstacles = spinner.generate_obstacles()
for i in range(Ns):
spinner.interaction_with_obstacles(obstacles, 2.5, 1, 1., 2.5e-4, 10000, 0.001)
traj.append(spinner.X[0])
traj.append(spinner.X[1])
spinner.periodic_boundaries()
action_index = spinner.take_greedy_action(Q)
spinner.update_state()
#print("Mi estado", spinner.my_state)
#print("Valor de Wz después de tomar la acción:", spinner.W[2])
@ -616,5 +648,4 @@ print(obstacles[::2])
plt.show()
#comprobación de que W va cambiando

Loading…
Cancel
Save