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 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
|
||||
self.X = np.array([np.random.uniform(0, L), np.random.uniform(0, L), 0])
|
||||
#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
|
||||
|
||||
Reference in new issue
Block a user