-
Notifications
You must be signed in to change notification settings - Fork 35
Open
Labels
discussioncode understandingcode understanding
Description
仿真环境需要一个功能:
把储存了节点收缩顺序的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]
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
discussioncode understandingcode understanding