From fdb83400cfd535513dca116fc267cd25736c32cf Mon Sep 17 00:00:00 2001 From: sannesg Date: Mon, 13 Oct 2025 10:14:11 +0200 Subject: [PATCH 1/3] added correct version of find_best_cost --- utils.py | 66 ++++++++++++++++++++------------------------------------ 1 file changed, 23 insertions(+), 43 deletions(-) diff --git a/utils.py b/utils.py index 52306c7..905a2f6 100644 --- a/utils.py +++ b/utils.py @@ -192,52 +192,32 @@ def find_best_cost(Xs, Zs_operators): cost = ncnot(X_combos | Z) # We use the bitwise OR to find which qubits are acted upon by the Xs and Zs together and pass it to calculate the cost total_cost += cost #add up the cost of all Zs for that combination of Xs - all_costs[used_Xs] = total_cost #Here we store which Xs were usied and the total cost of using them with the Zs + #NB I CHANGED COMBOS TO THEIR XOR + all_costs[X_combos] = total_cost #Here we store which Xs were usied and the total cost of using them with the Zs - # Find the best combination of Xs that minimizes the cost - best_Xs = [] # List of tuples that has the combinations of the original Xs that generate the orbit, f.ex. [(2,), (8,), (2, 6)] (here 2, 8, and 6 are the original Xs) - best_cost = 0 # Total cost of the best combination of Xs - covered = set() - required = set(Xs) - maybe_later = [] - - while len(best_Xs) < n: - # We start by selecting the lowest cost from all_costs as we want to minimize the cost - lowest_cost = min(all_costs.values()) - keys = [k for k, v in all_costs.items() if v == lowest_cost] + # Brute force way + # Sorting the keys from lowest to highest cost + brute_all_keys = sorted(all_costs.keys(), key=lambda k: all_costs[k]) + brute_cost = float('inf') + brute_Xs = [] + + # Finding all combinations of n Xs (to generate an orbit of size 2^n) and checking which combination has the lowest cost and is linearly independent + for combo in combinations(brute_all_keys, n): + total_cost = sum(all_costs[key] for key in combo) + + # Disregard the combination if its cost is already higher than the best found cost + if total_cost >= brute_cost: + continue + + # Check if the combination is linearly independent and therefore valid + if not is_independent(combo): + continue - # iterate through the keys with the lowest cost - for key in keys: - # Checks that either the key adds to the subset or that it is already covered (i.e. that we are actually creating an orbit) - if (not set(key).issubset(covered)) or (required == covered): # If key has *any* uncovered elements - # Checks that if it is already covered, we use the lowest cost from maybe_later - if required == covered: - new_key_and_cost = maybe_later.pop(0) if maybe_later else [key, lowest_cost] - best_Xs.append(new_key_and_cost[0]) - best_cost += new_key_and_cost[1] - - # if the required set is not covered, we add the key to the best_Xs and update the covered set - else: - covered.update(key) - best_Xs.append(key) - best_cost += lowest_cost - - # If we have enough Xs to cover the orbit, we break the loop - if len(best_Xs) == n: - break - # We delete the key from all_costs as we have used it - del all_costs[key] + else: + brute_cost = total_cost + brute_Xs = combo - # If the key does not add to the subset, we store it in maybe_later for later use (if we get a covered set and need to add more Xs) - else: - # We delete the key from all_costs as it does not add to the subset - del all_costs[key] - maybe_later.append([key, lowest_cost]) - - # The best_Xs are reduced by applying XOR to the tuples to get the string for the combination of the original Xs - best_Xs_reduced = [reduce(operator.xor, x) for x in best_Xs] - - return best_Xs_reduced, best_cost + return brute_Xs, brute_cost #best_Xs_reduced, best_cost if __name__ == '__main__': results = find_best_cost([0b0010, 0b0110, 0b1000], [(1, 0b0010), (1, 0b0110), (1, 0b1000), (1, 0b1010), (1, 0b1100), (1, 0b1110)]) From 2ac59791bda9d9fb7ce441813c2754fdbefe56a2 Mon Sep 17 00:00:00 2001 From: sannesg Date: Mon, 13 Oct 2025 10:15:35 +0200 Subject: [PATCH 2/3] added is_independent, a helper function for find_best_cost --- utils.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/utils.py b/utils.py index 905a2f6..8bf44db 100644 --- a/utils.py +++ b/utils.py @@ -219,6 +219,18 @@ def find_best_cost(Xs, Zs_operators): return brute_Xs, brute_cost #best_Xs_reduced, best_cost +def is_independent(combo): + """Takes in a list of x-operators and checks if they are linearly independent""" + n = len(combo) + # Check all non-empty subsets of the combo to see that they are linearly independent + for r in range(1, n + 1): + for subset in combinations(combo, r): + hat = reduce(operator.xor, subset) + if hat == 0: + # Found a dependent subset + return False + return True + if __name__ == '__main__': results = find_best_cost([0b0010, 0b0110, 0b1000], [(1, 0b0010), (1, 0b0110), (1, 0b1000), (1, 0b1010), (1, 0b1100), (1, 0b1110)]) From f2f3cfc99734263fbd43ed30320d95909c9780df Mon Sep 17 00:00:00 2001 From: sannesg Date: Mon, 13 Oct 2025 10:39:48 +0200 Subject: [PATCH 3/3] small bug in comparison_cnot_costs.py with saving figures, also updated plots so that they reflect times for new updated find_best_cost --- graphics/comparison_n3_multi_methods.pdf | Bin 23603 -> 23731 bytes ...ll_suborbits_semi_restricted_suborbits.npy | Bin 4552 -> 4552 bytes graphics/timing_comparison_n3.pdf | Bin 21728 -> 21889 bytes plotting/comparison_cnot_costs.py | 8 ++++---- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/graphics/comparison_n3_multi_methods.pdf b/graphics/comparison_n3_multi_methods.pdf index b8f9119573f7c9842463cb8b2666859065e02f67..1ff67d91c6b22e4385c96fd698c9e9a92d0346fa 100644 GIT binary patch delta 6510 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 UCkr$H0s)JF0i2xoR8WBb0dbw(GXMYp delta 6476 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 delta 1228 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 delta 4641 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 diff --git a/plotting/comparison_cnot_costs.py b/plotting/comparison_cnot_costs.py index 3f38c7d..e440120 100644 --- a/plotting/comparison_cnot_costs.py +++ b/plotting/comparison_cnot_costs.py @@ -28,10 +28,10 @@ def load_module(alias_name, file_path): # CONFIGURATION: Choose which mixers to run # Set to True to run that mixer, False to skip it -RUN_ORIGINAL_LXMIXER = False +RUN_ORIGINAL_LXMIXER = True RUN_LXMIXER_LARGEST_ORBIT = True -RUN_LXMIXER_ALL_SUBORBIT = False -RUN_LXMIXER_SEMI_RESTRICTED_SUBORBIT = False +RUN_LXMIXER_ALL_SUBORBIT = True +RUN_LXMIXER_SEMI_RESTRICTED_SUBORBIT = True # Helper variable for backward compatibility RUN_LXMIXER = RUN_LXMIXER_LARGEST_ORBIT or RUN_LXMIXER_ALL_SUBORBIT or RUN_LXMIXER_SEMI_RESTRICTED_SUBORBIT @@ -798,7 +798,7 @@ def main(n, num_samples=100): plt.savefig(graphics_dir / f"Original_LXMixer_only_n{n}.pdf") else: method_str = "_".join(lxmixer_methods) - plt.savefig(graphics_dir / f"LXMixer_{method_str}_n{n}.pdf") + plt.savefig(graphics_dir / f"LXMixer_{method_str}_n{n}.pdf") plt.clf() # Create separate timing plot