codigo actualizado
This commit is contained in:
1 parent
2ec02b2a44
commit
be48f30401
1 file changed
+36
-5
@@ -7,6 +7,7 @@ Created on Tue Feb 6 19:02:32 2024
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import math
|
||||||
import plotly.graph_objects as go
|
import plotly.graph_objects as go
|
||||||
from tqdm.notebook import tqdm
|
from tqdm.notebook import tqdm
|
||||||
import plotly.express as px
|
import plotly.express as px
|
||||||
@@ -116,8 +117,20 @@ class Swimmer(Agent):
|
|||||||
self.ni = ni
|
self.ni = ni
|
||||||
self.sigma = sigma
|
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.X = np.array([np.random.uniform(0, L), np.random.uniform(0, L), 0])
|
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.
|
# absolute position. -inf. <= x_total < inf. and -inf. <= z_total < inf.
|
||||||
self.X_total = self.X
|
self.X_total = self.X
|
||||||
@@ -148,8 +161,7 @@ class Swimmer(Agent):
|
|||||||
# update coarse-grained state
|
# update coarse-grained state
|
||||||
self.update_state()
|
self.update_state()
|
||||||
|
|
||||||
#obstáculos
|
|
||||||
self.obstacles= self.generate_obstacles()
|
|
||||||
|
|
||||||
|
|
||||||
#distancia entre el swimmer y el obstáculo
|
#distancia entre el swimmer y el obstáculo
|
||||||
@@ -394,6 +406,21 @@ class Swimmer(Agent):
|
|||||||
self.W[2] -= 1./8*Wc
|
self.W[2] -= 1./8*Wc
|
||||||
return action_index
|
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
|
#Define Taylor-Green vortex
|
||||||
|
|
||||||
@@ -594,17 +621,22 @@ print(Q)
|
|||||||
Ns = 5000
|
Ns = 5000
|
||||||
spinner = Swimmer(Ns, 1, 1)
|
spinner = Swimmer(Ns, 1, 1)
|
||||||
traj = []
|
traj = []
|
||||||
|
|
||||||
obstacles = spinner.generate_obstacles()
|
obstacles = spinner.generate_obstacles()
|
||||||
for i in range(Ns):
|
for i in range(Ns):
|
||||||
spinner.interaction_with_obstacles(obstacles, 2.5, 1, 1., 2.5e-4, 10000, 0.001)
|
spinner.interaction_with_obstacles(obstacles, 2.5, 1, 1., 2.5e-4, 10000, 0.001)
|
||||||
traj.append(spinner.X[0])
|
traj.append(spinner.X[0])
|
||||||
traj.append(spinner.X[1])
|
traj.append(spinner.X[1])
|
||||||
|
|
||||||
|
spinner.periodic_boundaries()
|
||||||
|
|
||||||
action_index = spinner.take_greedy_action(Q)
|
action_index = spinner.take_greedy_action(Q)
|
||||||
|
|
||||||
|
|
||||||
spinner.update_state()
|
spinner.update_state()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#print("Mi estado", spinner.my_state)
|
#print("Mi estado", spinner.my_state)
|
||||||
#print("Valor de Wz después de tomar la acción:", spinner.W[2])
|
#print("Valor de Wz después de tomar la acción:", spinner.W[2])
|
||||||
|
|
||||||
@@ -616,5 +648,4 @@ print(obstacles[::2])
|
|||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
#comprobación de que W va cambiando
|
|
||||||
|
|
||||||
Reference in new issue
Block a user