AI4Finance-Foundation / AI4Finance-Foundation/RLSolver

🐛 find bug in TNCO env and the explain this env data struct

Abierto
#93 2 comentarios 0 reacciones 0 asignados Ver en GitHub
bug
Lenguaje dominante
Python
Estrellas
169
Forks
36
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

[张量收缩计算图解.pptx](https://github.com/AI4Finance-Foundation/ElegantRL_Solver/files/11128434/default.pptx)

---

https://github.com/AI4Finance-Foundation/ElegantRL_Solver/pull/92

已经提交PR 92 去修复此BUG

---

https://github.com/AI4Finance-Foundation/ElegantRL_Solver/blob/52b4dc3ac5b8461772751a7294f5c9c10fdba5a5/rlsolver/rlsolver_learn2opt/tensor_train/TNCO_env.py#L269-L271

上面的代码有bug,这里想要修改 list中存放的指针的指向,但是最右边的等号是一个【赋值】操作,它让指针重新指向新的地址,这是不正确的。

应该修改成
```
node_dims_tens = th.stack([self.node_dims_ten.clone() for _ in range(num_envs)])
node_bool_tens = th.stack([self.node_bool_ten.clone() for _ in range(num_envs)])
for i in range(run_edges):
...
for j in range(num_envs):
...
node_dims_arys = node_dims_tens[j]
node_bool_arys = node_bool_tens[j]
...
node_dims_arys[contract_bool] = contract_dims.repeat(1, 1) # 根据 bool 将所有收缩后的节点都刷新成相同的信息
node_bool_arys[contract_bool] = contract_bool.repeat(1, 1) # 根据 bool 将所有收缩后的节点都刷新成相同的信息
...
```

举例:
初始化 `arys = [torch.zeros(2) + i for i in range(5)]`,打印 `arys`
```
[tensor([0., 0.]),
tensor([1., 1.]),
tensor([2., 2.]),
tensor([3., 3.]),
tensor([4., 4.])]
```

修改指针指向 `arys[0] = arys[1] = arys[2] = torch.zeros(2) -1`,打印 `arys`
```
[tensor([-1., -1.]),
tensor([-1., -1.]),
tensor([-1., -1.]),
tensor([3., 3.]),
tensor([4., 4.])]
```

修改 arys[0],使用赋值操作 `arys[0] = torch.zeros(2) + 0`。重新打印 `arys`,确认指针指向是否正确
```
[tensor([0., 0.]), -----> 我把 arys[0] 从-1 改成了 0
tensor([-1., -1.]), -----> 发现 arys[1] 没有跟着 arys[0] 一起变成 0,这是错误的
tensor([-1., -1.]), -----> 发现 arys[2] 没有跟着 arys[0] 一起变成 0,这是错误的
tensor([3., 3.]),
tensor([4., 4.])]
```

**不能使用赋值操**作改变指针指向的地址,应该用 `arys[0][:] = torch.zeros(2) + 0`
重新运行命令 修改指针指向 `arys[0] = arys[1] = arys[2] = torch.zeros(2) -1`
重新运行命令 修改 arys[0] 的赋值 `arys[0][:] = torch.zeros(2) + 0`
得到预期中的结果:
```
[tensor([0., 0.]),
tensor([0., 0.]),
tensor([0., 0.]),
tensor([3., 3.]),
tensor([4., 4.])]
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.