AI4Finance-Foundation / AI4Finance-Foundation/RLSolver

:pencil: convert nodes_id to edges_id and convert back

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

Descripción

仿真环境需要一个功能:

把储存了节点收缩顺序的list,从 记录两个节点收缩顺序,到记录这两个节点对应的边的收缩顺序。

见代码`TNCO_env.py`中的:

先创建仿真环境这个类,选择想要转换的电路
```
def unit_test_convert_node2s_to_edge_sorts():
gpu_id = int(sys.argv[1]) if len(sys.argv) > 1 else 0
device = th.device(f'cuda:{gpu_id}' if th.cuda.is_available() and gpu_id >= 0 else 'cpu')

nodes_list, ban_edges = NodesSycamoreN12M14, 0
# nodes_list, ban_edges = NodesSycamoreN14M14, 0
# nodes_list, ban_edges = NodesSycamoreN53M12, 0
# nodes_list, ban_edges = get_nodes_list_of_tensor_train(len_list=8), 8
# nodes_list, ban_edges = get_nodes_list_of_tensor_train(len_list=100), 100
# nodes_list, ban_edges = get_nodes_list_of_tensor_train(len_list=2000), 2000
# from TNCO_env import get_nodes_list_of_tensor_tree
# nodes_list, ban_edges = get_nodes_list_of_tensor_tree(depth=3), 2 ** (3 - 1)

env = TensorNetworkEnv(nodes_list=nodes_list, ban_edges=ban_edges, device=device)
print(f"\nnum_nodes {env.num_nodes:9}"
f"\nnum_edges {env.num_edges:9}"
f"\nban_edges {env.ban_edges:9}")
```

下面演示了把 `edge_ary` 转化成 `node2s ` 转化回 `edge_ary` 的过程,调用了两个函数:
- edge_ary → edge_sort → node2s `node2s = env.convert_edge_sort_to_node2s(edge_sort=edge_ary.argsort(dim=0))`
- node2s → edge_sort `edge_sort = env.convert_node2s_to_edge_sort(node2s=node2s).to(device)`

```
num_envs = 6

# th.save(edge_arys, 'temp.pth')
# edge_arys = th.load('temp.pth', map_location=device)

edge_arys = th.rand((num_envs, env.num_edges - env.ban_edges), device=device)
edge_ary = edge_arys[0]
print(edge_ary.argsort().shape)
print(edge_ary.argsort())
node2s = env.convert_edge_sort_to_node2s(edge_sort=edge_ary.argsort(dim=0))
edge_sort = env.convert_node2s_to_edge_sort(node2s=node2s).to(device)
print(edge_sort.shape)
print(edge_sort)

print(edge_sort - edge_ary.argsort())
edge_sorts = edge_sort.unsqueeze(0)
multiple_times = env.get_log10_multiple_times(edge_sorts=edge_sorts)
print(f"multiple_times(log10) {multiple_times.numpy()}")

```

输出是:(在这个电路下,`nodes_list, ban_edges = NodesSycamoreN12M14, 0`)
```
num_nodes 51
num_edges 99
ban_edges 0
torch.Size([99])
tensor([30, 36, 49, 35, 55, 65, 0, 28, 61, 52, 45, 69, 10, 21, 83, 18, 56, 9,
14, 70, 39, 19, 74, 43, 68, 75, 60, 81, 29, 47, 94, 24, 58, 77, 64, 15,
13, 72, 87, 32, 71, 51, 85, 6, 44, 34, 96, 40, 38, 97, 46, 53, 82, 84,
22, 90, 25, 23, 33, 92, 1, 62, 42, 91, 67, 93, 26, 98, 79, 12, 16, 27,
78, 95, 8, 11, 80, 20, 4, 57, 73, 54, 2, 7, 66, 3, 5, 88, 37, 59,
17, 48, 50, 41, 86, 89, 76, 63, 31])
torch.Size([99])
tensor([30, 36, 49, 35, 55, 65, 0, 28, 61, 52, 45, 69, 10, 21, 83, 18, 56, 9,
14, 70, 39, 19, 74, 43, 68, 75, 60, 81, 29, 47, 94, 24, 58, 77, 64, 15,
13, 72, 87, 32, 71, 51, 85, 6, 44, 34, 96, 40, 38, 97, 46, 53, 82, 84,
22, 90, 25, 23, 33, 92, 1, 62, 42, 91, 67, 93, 26, 98, 79, 12, 16, 27,
78, 95, 8, 11, 80, 20, 4, 57, 73, 54, 2, 7, 66, 3, 5, 88, 37, 59,
17, 48, 50, 41, 86, 89, 76, 63, 31], dtype=torch.int32)
tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0])
multiple_times(log10) [12.06995569]
```

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.