コード例 #1
0
def maxcut_qaoa(n_step, edges, minimizer=None, sampler=None, verbose=True):
    """Setup QAOA.

    :param n_step: The number of step of QAOA
    :param n_sample: The number of sampling time of each measurement in VQE.
                     If None, use calculated ideal value.
    :param edges: The edges list of the graph.
    :returns Vqe object
    """
    sampler = sampler or vqe.non_sampling_sampler
    minimizer = minimizer or vqe.get_scipy_minimizer(
        method="Powell",
        options={"ftol": 5.0e-2, "xtol": 5.0e-2, "maxiter": 1000, "disp": True}
    )
    hamiltonian = pauli.I() * 0

    for i, j in edges:
        hamiltonian += pauli.Z(i) * pauli.Z(j)

    return vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, n_step), minimizer, sampler)
コード例 #2
0
ファイル: numpartition_qaoa.py プロジェクト: yas/Blueqat
def numpartition_qaoa(n_step, nums, minimizer=None, sampler=None):
    """Do the Number partition QAOA.

    :param n_step: The number of step of QAOA
    :param nums: The edges list of the graph.
    :returns Vqe object
    """
    hamiltonian = pauli.Expr.zero()
    for i, x in enumerate(nums):
        hamiltonian += pauli.Z[i] * x
    hamiltonian = (hamiltonian**2).simplify()

    return vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, n_step), minimizer, sampler)


if __name__ == "__main__":
    minimizer = vqe.get_scipy_minimizer(method="Powell",
                                        options={"disp": True})
    nums = [3, 2, 6, 9, 2, 5, 7, 3, 3, 6, 7, 3]
    runner = numpartition_qaoa(2, nums, minimizer=minimizer)
    vqeresult = runner.run(verbose=True)
    print("Num partition:", nums)
    best = vqeresult.most_common()[0]
    print("Probability:", best[1])
    result = "".join(map(str, best[0]))
    group0 = [a for a, b in zip(nums, result) if b == '0']
    group1 = [a for a, b in zip(nums, result) if b == '1']
    print("Group 0:", sum(group0), group0)
    print("Group 1:", sum(group1), group1)