Пример #1
0
import pennylane as qml

from ttn import ttn_circuit
from gates import two_qubit_gate
from hamiltonians import tfi_chain

num_qubits = 8

# The simulator.
dev = qml.device('default.qubit', wires=num_qubits, analytic=True)

# The TFI model at the critical point.
h        = 1.0
periodic = False
H        = tfi_chain(num_qubits, h, periodic=periodic)
print(H)

# The TTN circuit.
fix_layers = False
ansatz     = ttn_circuit(num_qubits, two_qubit_gate, fix_layers=fix_layers)

# The circuit for computing the expectation value of H.
cost_fn = qml.ExpvalCost(ansatz, H, dev, optimize=True)

num_params_per_gate = 15                                 # The number of parameters in each two-qubit gate.
depth               = int(np.floor(np.log2(num_qubits))) # The depth of the TTN.
num_gates           = num_qubits - 1                     # The number of two-qubit gates in the TTN.
if fix_layers:
    num_params = num_params_per_gate * depth
else:
Пример #2
0
from pennylane import numpy as np
import matplotlib.pyplot as plt
from mera import mera_circuit, get_num_mera_gates
from hamiltonians import tfi_chain

num_samples = 200
qubits = [2, 4, 8]
variances = []

np.random.seed(1)
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)
Пример #3
0
            print(f"  +++ {init} +++")
            mod_ansatz = ansatz
            if init in ["Random |+...+>", "Zero |+...+>"]:

                @qml.template
                def ansatz_plus(params, wires):
                    for q in range(num_qubits):
                        qml.Hadamard(q)
                    ansatz(params, wires)

                mod_ansatz = ansatz_plus

            for h in hs:
                print(f"   ||| h={h} |||")

                H = tfi_chain(num_qubits, h, g=g)
                grad_vals = []

                cost_fn = qml.ExpvalCost(mod_ansatz, H, dev, optimize=True)
                grad = qml.grad(cost_fn)

                # Use the same random numbers for each set of parameters/ansatz.
                np.random.seed(seed)
                for i in range(num_samples):
                    if init in ["Zero |0...0>", "Zero |+...+>"]:
                        params = np.zeros(num_params)
                    else:
                        params = np.pi * (np.random.rand(num_params) - 1.0)

                    if "HEA" in ansatz_name:
                        params = np.reshape(params, (len(params) // 3, 3))
Пример #4
0
import numpy as np
import pennylane as qml
from ttn import ttn_circuit
from mera import mera_circuit, get_num_mera_gates, arb_qubit_gate
from hea import hea_circuit
from gates import two_qubit_gate, simple_two_qubit_gate1, simple_two_qubit_gate2
from hamiltonians import tfi_chain

num_qubits = int(args.N)

# The simulator.
dev = qml.device('default.qubit', wires=num_qubits)

# The TFI model at the critical point.
h = float(args.h)
H = tfi_chain(num_qubits, h, periodic=args.periodic)
print(H)

if args.two_qubit == "two_qubit":
    unitary_parameterization = two_qubit_gate
    num_params_per_gate = 15
elif args.two_qubit == "simple6":
    unitary_parameterization = simple_two_qubit_gate1
    num_params_per_gate = 6
elif args.two_qubit == "simple2":
    unitary_parameterization = simple_two_qubit_gate2
    num_params_per_gate = 2
elif args.two_qubit == "arbitrary":
    unitary_parameterization = arb_qubit_gate
    num_params_per_gate = 15
else:
Пример #5
0
import numpy as np
import pennylane as qml
from ttn import ttn_circuit
from mera import mera_circuit, get_num_mera_gates, arb_qubit_gate
from hea import hea_circuit
from gates import two_qubit_gate, simple_two_qubit_gate1, simple_two_qubit_gate2
from hamiltonians import tfi_chain
from observables import sigma_z, sigma_x

num_qubits = int(args.N)

# The simulator.
dev = qml.device('default.qubit', wires=num_qubits, analytic=True)

h = float(args.h)
H = tfi_chain(num_qubits, h, periodic=False)
sz = sigma_z(num_qubits)
sx = sigma_x(num_qubits)
print(H)
print("----")
print(sz)
print("----")
print(sx)

# The TFI model at the critical point.

if args.two_qubit == "two_qubit":
    unitary_parameterization = two_qubit_gate
    num_params_per_gate = 15
elif args.two_qubit == "simple6":
    unitary_parameterization = simple_two_qubit_gate1