AI4Finance-Foundation / AI4Finance-Foundation/RLSolver

:pencil: convert nodes_id to edges_id and convert back

Đang mở
#102 10 bình luận 0 reaction 0 người được giao Xem trên GitHub
discussion
Ngôn ngữ chính
Python
Star
169
Fork
36
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

仿真环境需要一个功能:

把储存了节点收缩顺序的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]
```

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.