in src/envs/ode.py [0:0]
def generate_cond_init(self, max_delay, dimension, unariesexp, unariesfk):
pol = set()
nfactor = self.rng.randint(1, max_delay + 1)
# print(nfactor)
delay = np.zeros(dimension)
bounds = []
vars = set()
for j in range(nfactor):
vars.add(
(self.rng.randint(0, dimension), self.rng.randint(0, len(unariesexp)))
)
pol.add(tuple(vars))
# print(pol)
for i in range(len(pol)):
v = list(pol)[i]
# print(len(v))
# print(v[len(v)-1])
# print(v[len(v)-1][0])
# print(v[0][0])
# print(delay)
for j in range(len(v)):
op = unariesexp[v[j][1]]
var = Node(self.variables[f"x{v[j][0]}"])
if op == "id":
term = var
elif len(op) > 3 and op[:3] == "pow":
term = Node("^", [var, Node(int(op[3:]))])
elif op == "expi":
a_d = self.rng.randint(-100, 100)
# b = self.rng.randint(-100, 100)#Not needed for now
b_d = 0
term = Node(
"exp",
[
Node(
"+",
[
Node("*", [Node(a_d), Node("*", [Node("I"), var])]),
Node(b_d),
],
)
],
)
delay[v[j][0]] = delay[v[j][0]] + a_d
# print(delay[v[j][0]])
else:
term = Node(op, [var])
p = term if j == 0 else Node("*", [p, term])
expr_delay = p
# print(sp.S(expr_delay))
for i in range(dimension):
k = self.rng.randint(0, len(unariesfk))
op = unariesfk[k]
var = Node(self.variables[f"x{i}"])
a = self.rng.randint(-100, 100)
# b = self.rng.randint(-100, 100)
# inclure b plus tard not needed now avec les delays
b = 0
var = Node("+", [Node("*", [Node(a), var]), Node(b)])
if op == "sinc":
bounds.append(
[-abs(a) / (2 * np.pi), abs(a) / (2 * np.pi)]
) # fouriertiser
term = Node("/", [Node("sin", [var]), var])
# print(sp.S(term))
elif op == "1":
bounds.append([0, 0])
term = Node(1)
elif op == "delta0":
bounds.append([-np.inf, np.inf])
term = Node(op, [var])
elif op == "gauss":
bounds.append([-np.inf, np.inf])
term = Node(
"exp", [Node("*", [Node(-1), Node("^", [var, Node(2)])])]
) # checker
else:
return None
# Message d'erreur
# print(sp.S(term))
p = term if i == 0 else Node("*", [p, term])
bounds[i][0] = bounds[i][0] + delay[i] / (2 * np.pi)
bounds[i][1] = bounds[i][1] + delay[i] / (2 * np.pi)
# print(delay[i])
u0 = Node("*", [expr_delay, p])
# u0f = Node('*', [exprf, pf])
return u0, bounds