Пример #1
0
def test_psiref_bar_p2():
    bar = [(0, 1)]
    p = 2
    with patch('grove.pyqaoa.maxcut_qaoa.api', spec=qvm_mod):
        inst = maxcut_qaoa(bar, steps=p)

    param_prog = inst.get_parameterized_program()

    # returns are the rotations correct?
    prog = param_prog([1.2, 3.4, 2.1, 4.5])
    result_prog = Program().inst([
        H(0),
        H(1),
        CNOT(0, 1),
        RZ(2.1)(1),
        CNOT(0, 1),
        H(0),
        RZ(-2.4)(0),
        H(0),
        H(1),
        RZ(-2.4)(1),
        H(1),
        CNOT(0, 1),
        RZ(4.5)(1),
        CNOT(0, 1),
        H(0),
        RZ(-6.8)(0),
        H(0),
        H(1),
        RZ(-6.8)(1),
        H(1),
    ])
    assert prog == result_prog
Пример #2
0
def test_param_prog_p1_barbell():
    test_graph = [(0, 1)]
    p = 1
    with patch('grove.pyqaoa.maxcut_qaoa.api', spec=qvm_mod):
        inst = maxcut_qaoa(test_graph, steps=p)

        param_prog = inst.get_parameterized_program()
        trial_prog = param_prog([1.2, 3.4])
        result_prog = Program().inst([
            H(0),
            H(1),
            X(0),
            PHASE(1.7)(0),
            X(0),
            PHASE(1.7)(0),
            CNOT(0, 1),
            RZ(3.4)(1),
            CNOT(0, 1),
            H(0),
            RZ(-2.4)(0),
            H(0),
            H(1),
            RZ(-2.4)(1),
            H(1)
        ])
        trial_prog == result_prog
Пример #3
0
def test_hamiltonians():
    test_graph = [(0, 1)]
    p = 1
    inst = maxcut_qaoa(test_graph, steps=p)

    cost_ops, ref_func = inst.cost_ham, inst.ref_ham
    for op in cost_ops:
        for term in op.terms:
            assert (np.isclose(np.abs(term.coefficient), 0.5))

    assert len(ref_func) == 2
    assert len(cost_ops) == 1
Пример #4
0
import numpy as np
from grove.pyqaoa.maxcut_qaoa import maxcut_qaoa
import pyquil.api as api
qvm_connection = api.QVMConnection()


square_ring = [(0, 1), (1, 2), (2, 3), (3, 0)]

steps = 2
inst = maxcut_qaoa(graph=square_ring, steps=steps)
betas, gammas = inst.get_angles()

t = np.hstack((betas, gammas))
param_prog = inst.get_parameterized_program()
prog = param_prog(t)
wf = qvm_connection.wavefunction(prog)
wf = wf.amplitudes

for state_index in range(inst.nstates):
    print(inst.states[state_index], np.conj(wf[state_index])*wf[state_index])
Пример #5
0
import numpy as np
from grove.pyqaoa.maxcut_qaoa import maxcut_qaoa
import pyquil.api as api
qvm_connection = api.QVMConnection()

square_ring = [(0, 1), (1, 2), (2, 3), (3, 0)]

steps = 2
inst = maxcut_qaoa(graph=square_ring, steps=steps)
betas, gammas = inst.get_angles()

t = np.hstack((betas, gammas))
param_prog = inst.get_parameterized_program()
prog = param_prog(t)
wf = qvm_connection.wavefunction(prog)
wf = wf.amplitudes

for state_index in range(inst.nstates):
    print(inst.states[state_index], np.conj(wf[state_index]) * wf[state_index])
nx.draw(G)

# In[91]:

#pip install quantum-grove
import numpy as np
from grove.pyqaoa.maxcut_qaoa import maxcut_qaoa
import pyquil.api as api
qvm_connection = api.QVMConnection()

inst = maxcut_qaoa(G,
                   steps=1,
                   rand_seed=None,
                   connection=None,
                   samples=None,
                   initial_beta=None,
                   initial_gamma=None,
                   minimizer_kwargs=None,
                   vqe_option=None)
# Sample Run:
# Cutting 0 - 1 - 2 graph!

betas, gammas = inst.get_angles()
probs = inst.probabilities(np.hstack((betas, gammas)))
#for state, prob in zip(inst.states, probs):
#    print(state, prob)

print("Most frequent bitstring from sampling")
most_freq_string, sampling_results = inst.get_string(betas, gammas)
print(most_freq_string)
Uses qaoa on maxcut as outlined in https://grove-docs.readthedocs.io/en/latest/qaoa.html
"""

import numpy as np
from grove.pyqaoa.maxcut_qaoa import maxcut_qaoa
from pyquil import get_qc
from pyquil.api import WavefunctionSimulator
from hidden_prints import hidden_prints
from .rigetti_result_analysis import convert_result

graph = [(0, 1), (0, 2), (0, 3)]

qvm = get_qc('4q-qvm')
with hidden_prints():
    maxcut_solver = maxcut_qaoa(graph=graph, steps=4)  # qaoa steps
    betas, gammas = maxcut_solver.get_angles()

angles = np.hstack((betas, gammas))
param_prog = maxcut_solver.get_parameterized_program()
prog = param_prog(angles)  # gives the sequence of qubits and gates

measurements = qvm.run_and_measure(prog,
                                   trials=1000)  # simulate the program runs

counts = convert_result(measurements)
# plot_state_histogram(counts)

wavefunction = WavefunctionSimulator().wavefunction(
    prog)  # use wavefunction class to get theoretical measures
prob_dict = wavefunction.get_outcome_probs(
Пример #8
0

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed May 22 19:16:11 2019

@author: bram
"""

import numpy as np
from pyquil.api import WavefunctionSimulator

from grove.pyqaoa.maxcut_qaoa import maxcut_qaoa
steps = 2
square_ring = [(0,1),(1,2),(2,3),(3,0)]

inst = maxcut_qaoa(square_ring, steps=steps)
opt_betas, opt_gammas = inst.get_angles()

t = np.hstack((opt_betas, opt_gammas))
param_prog = inst.get_parameterized_program()
prog = param_prog(t)
wf = WavefunctionSimulator().wavefunction(prog)
wf = wf.amplitudes

for state_index in range(inst.nstates):
    print(inst.states[state_index], np.conj(wf[state_index]) * wf[state_index])
Пример #9
0
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt

n = 2  #min number of nodes
'''     Uncomment for demo
input_graph = nx.complete_graph(n)
nx.draw(input_graph)
plt.show()
'''

for i in range(2, 15):
    input_graph = nx.complete_graph(i)

    steps = 2
    inst = maxcut_qaoa(graph=input_graph, steps=steps)
    betas, gammas = inst.get_angles()

    t = np.hstack((betas, gammas))
    param_prog = inst.get_parameterized_program()
    prog = param_prog(t)
    wf = qvm_instance.wavefunction(prog)
    wf = wf.amplitudes

    max_amp = 0
    max_amp_ref = -1

    for state_index in range(2**inst.n_qubits):
        print(inst.states[state_index],
              np.conj(wf[state_index]) * wf[state_index])
        if np.conj(wf[state_index]) * wf[state_index] > max_amp:
Пример #10
0
import pyquil.api as api
from convertgraphs import *
import networkx

qvm_connection = api.QVMConnection()


# square_ring = [(0,1),(1,2),(2,3),(3,0)]
# G = read_graph('ring-9')
# G = read_graph('g1')
# G = networkx.gnp_random_graph(25, 0.75)
G = networkx.complete_graph(6)


steps = 2
inst = maxcut_qaoa(graph=G, steps=steps)
betas, gammas = inst.get_angles() # might be a clean way to optimize angles... we shall see


t = np.hstack((betas, gammas))
param_prog = inst.get_parameterized_program()
prog = param_prog(t)
wf = qvm_connection.wavefunction(prog)
wf = wf.amplitudes

exps = {state_index : abs(np.conj(wf[state_index])*wf[state_index]) for state_index in range(inst.nstates)}
exps = {k: v for k, v in sorted(exps.items(), key=lambda item: abs(item[1]))}
argmax = max(exps, key=lambda key: exps[key])
mx = exps[argmax]
print('max:{0}, cut:{1}, idx:{2}'.format(mx, inst.states[argmax], argmax))
for state_index in range(inst.nstates):