Ejemplo n.º 1
0
h = 1.0
periodic = False
fix_layers = True

for num_qubits in qubits:
    H = tfi_chain(num_qubits, h)
    grad_vals = []
    for i in range(num_samples):
        print(f"num_qubits {num_qubits}, step {i}")
        dev = qml.device("default.qubit", wires=num_qubits)
        ansatz = mera_circuit(num_qubits, periodic, fix_layers)
        cost_fn = qml.ExpvalCost(ansatz, H, dev)
        grad = qml.grad(cost_fn)

        num_params_per_gate = 15
        num_gates = get_num_mera_gates(num_qubits, periodic, fix_layers)
        num_params = num_params_per_gate * num_gates
        params = np.pi * (np.random.rand(num_params) - 1.0)

        gradient = np.array(grad(params)[0])
        grad_vals.append(gradient)
    variances.append(np.mean(np.var(grad_vals, axis=0)))

print(variances)
#variances = np.array(np.mean(variances, axis=1))
qubits = np.array(qubits)

# Fit the semilog plot to a straight line
p = np.polyfit(qubits, np.log(variances), 1)

# Plot the straight line fit to the semilog
Ejemplo n.º 2
0
for num_qubits in qubits:
    print(f"=== Number of qubits = {num_qubits} ===")
    dev = qml.device("default.qubit.autograd", wires=num_qubits)

    constant_hea_depth = 3

    ansatze = [
        ttn_circuit(num_qubits),
        mera_circuit(num_qubits),
        hea_circuit(num_qubits),
        hea_circuit(num_qubits),
        hea_circuit(num_qubits)
    ]
    num_params_ansatz = [
        num_params_per_gate * get_num_ttn_gates(num_qubits),
        num_params_per_gate * get_num_mera_gates(num_qubits),
        3 * (num_qubits * constant_hea_depth),
        3 * (num_qubits * int(np.floor(np.log2(num_qubits)))),
        3 * (num_qubits * num_qubits)
    ]
    ansatz_names = [
        "TTN", "MERA", "HEA (constant)", "HEA (log)", "HEA (linear)"
    ]

    for (ansatz, ansatz_name, num_params) in zip(ansatze, ansatz_names,
                                                 num_params_ansatz):
        print(f" --- {ansatz_name} ({num_params} parameters) ---")

        for init in initializations:
            print(f"  +++ {init} +++")
            mod_ansatz = ansatz