Exemple #1
0
    def test_vqc_minibatching_with_gradient_support(self, mode):
        """ vqc minibatching with gradient support test """
        n_dim = 2  # dimension of each data point
        seed = 1024
        aqua_globals.random_seed = seed
        _, training_input, test_input, _ = ad_hoc_data(training_size=4,
                                                       test_size=2,
                                                       n=n_dim,
                                                       gap=0.3,
                                                       plot_data=False)
        backend = BasicAer.get_backend('statevector_simulator')
        optimizer = L_BFGS_B(maxfun=30)

        # set up data encoding circuit
        data_preparation = self.data_preparation[mode]

        # set up wavefunction
        if mode == 'wrapped':
            warnings.filterwarnings('ignore', category=DeprecationWarning)
            wavefunction = RYRZ(2, depth=1)
        else:
            wavefunction = TwoLocal(2, ['ry', 'rz'],
                                    'cz',
                                    reps=1,
                                    insert_barriers=True)
            theta = ParameterVector('theta', wavefunction.num_parameters)
            resorted = []
            for i in range(4):
                layer = wavefunction.ordered_parameters[4 * i:4 * (i + 1)]
                resorted += layer[::2]
                resorted += layer[1::2]
            wavefunction.assign_parameters(dict(zip(resorted, theta)),
                                           inplace=True)

        if mode == 'circuit':
            wavefunction = QuantumCircuit(2).compose(wavefunction)

        # set up algorithm
        vqc = VQC(optimizer,
                  data_preparation,
                  wavefunction,
                  training_input,
                  test_input,
                  minibatch_size=2)

        if mode in ['circuit', 'library']:
            vqc._feature_map_params = self._sorted_data_params
            vqc._var_form_params = list(theta)
        else:
            warnings.filterwarnings('always', category=DeprecationWarning)

        quantum_instance = QuantumInstance(backend,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)
        result = vqc.run(quantum_instance)
        vqc_accuracy = 0.5
        self.log.debug(result['testing_accuracy'])
        self.assertAlmostEqual(result['testing_accuracy'],
                               vqc_accuracy,
                               places=3)
    def test_saving_and_loading(self):
        backend = BasicAer.get_backend('statevector_simulator')
        num_qubits = self.algo_input.qubit_op.num_qubits
        init_state = Zero(num_qubits)
        var_form = RY(num_qubits, 3, initial_state=init_state)
        optimizer = L_BFGS_B()
        algo = VQE(self.algo_input.qubit_op, var_form, optimizer, 'matrix')

        fd, cache_tmp_file = tempfile.mkstemp(suffix='.inp')
        os.close(fd)

        quantum_instance_caching = QuantumInstance(backend,
                                                   circuit_caching=True,
                                                   cache_file=cache_tmp_file,
                                                   skip_qobj_deepcopy=True,
                                                   skip_qobj_validation=True)
        algo.run(quantum_instance_caching)
        self.assertLessEqual(quantum_instance_caching.circuit_cache.misses, 0)

        is_file_exist = os.path.exists(cache_tmp_file)
        self.assertTrue(is_file_exist, "Does not store content successfully.")

        circuit_cache_new = CircuitCache(skip_qobj_deepcopy=True,
                                         cache_file=cache_tmp_file)
        self.assertEqual(quantum_instance_caching.circuit_cache.mappings,
                         circuit_cache_new.mappings)
        self.assertLessEqual(circuit_cache_new.misses, 0)

        if is_file_exist:
            os.remove(cache_tmp_file)
Exemple #3
0
 def test_vqc_minibatching_with_gradient_support(self):
     n_dim = 2  # dimension of each data point
     seed = 1024
     np.random.seed(seed)
     sample_Total, training_input, test_input, class_labels = ad_hoc_data(
         training_size=8, test_size=4, n=n_dim, gap=0.3)
     aqua_globals.random_seed = seed
     backend = BasicAer.get_backend('statevector_simulator')
     num_qubits = n_dim
     optimizer = L_BFGS_B(maxfun=100)
     feature_map = SecondOrderExpansion(feature_dimension=num_qubits,
                                        depth=2)
     var_form = RYRZ(num_qubits=num_qubits, depth=2)
     vqc = VQC(optimizer,
               feature_map,
               var_form,
               training_input,
               test_input,
               minibatch_size=2)
     # TODO: cache only work with optimization_level 0
     quantum_instance = QuantumInstance(backend,
                                        seed_simulator=seed,
                                        seed_transpiler=seed,
                                        optimization_level=0)
     result = vqc.run(quantum_instance)
     vqc_accuracy_threshold = 0.8
     self.log.debug(result['testing_accuracy'])
     self.assertGreater(result['testing_accuracy'], vqc_accuracy_threshold)
 def test_vqe_caching_direct(self, max_evals_grouped):
     self._build_refrence_result(backends=['statevector_simulator'])
     backend = BasicAer.get_backend('statevector_simulator')
     num_qubits = self.algo_input.qubit_op.num_qubits
     init_state = Zero(num_qubits)
     var_form = RY(num_qubits, 3, initial_state=init_state)
     optimizer = L_BFGS_B()
     algo = VQE(self.algo_input.qubit_op,
                var_form,
                optimizer,
                max_evals_grouped=max_evals_grouped)
     quantum_instance_caching = QuantumInstance(
         backend,
         circuit_caching=True,
         skip_qobj_deepcopy=True,
         skip_qobj_validation=True,
         optimization_level=self.optimization_level)
     result_caching = algo.run(quantum_instance_caching)
     self.assertLessEqual(quantum_instance_caching.circuit_cache.misses, 0)
     self.assertAlmostEqual(
         self.reference_vqe_result['statevector_simulator']['energy'],
         result_caching['energy'])
     speedup_min = 3
     speedup = result_caching['eval_time'] / self.reference_vqe_result[
         'statevector_simulator']['eval_time']
     self.assertLess(speedup, speedup_min)
Exemple #5
0
    def test_qasm_snapshot_mode(self):
        """Test the VQE using Aer's qasm_simulator snapshot mode."""
        try:
            # pylint: disable=import-outside-toplevel
            from qiskit import Aer
        except Exception as ex:  # pylint: disable=broad-except
            self.skipTest(
                "Aer doesn't appear to be installed. Error: '{}'".format(
                    str(ex)))
            return
        backend = Aer.get_backend('qasm_simulator')
        optimizer = L_BFGS_B()
        wavefunction = self.ry_wavefunction

        vqe = VQE(self.h2_op,
                  wavefunction,
                  optimizer,
                  expectation=AerPauliExpectation(),
                  max_evals_grouped=1)

        quantum_instance = QuantumInstance(
            backend,
            shots=1,
            seed_simulator=aqua_globals.random_seed,
            seed_transpiler=aqua_globals.random_seed)
        result = vqe.run(quantum_instance)
        self.assertAlmostEqual(result.eigenvalue.real,
                               self.h2_energy,
                               places=6)
Exemple #6
0
 def test_vqc_minibatching_with_gradient_support(self):
     """ vqc minibatching with gradient support test """
     n_dim = 2  # dimension of each data point
     seed = 1024
     aqua_globals.random_seed = seed
     _, training_input, test_input, _ = ad_hoc_data(training_size=4,
                                                    test_size=2,
                                                    n=n_dim,
                                                    gap=0.3,
                                                    plot_data=False)
     backend = BasicAer.get_backend('statevector_simulator')
     num_qubits = n_dim
     optimizer = L_BFGS_B(maxfun=30)
     feature_map = SecondOrderExpansion(feature_dimension=num_qubits,
                                        depth=2)
     var_form = RYRZ(num_qubits=num_qubits, depth=1)
     vqc = VQC(optimizer,
               feature_map,
               var_form,
               training_input,
               test_input,
               minibatch_size=2)
     quantum_instance = QuantumInstance(backend,
                                        seed_simulator=seed,
                                        seed_transpiler=seed)
     result = vqc.run(quantum_instance)
     vqc_accuracy = 0.5
     self.log.debug(result['testing_accuracy'])
     self.assertAlmostEqual(result['testing_accuracy'],
                            vqc_accuracy,
                            places=3)
Exemple #7
0
    def test_minibatching_gradient_based(self):
        """Test the minibatching option with a gradient-based optimizer."""
        n_dim = 2  # dimension of each data point
        _, training_input, test_input, _ = ad_hoc_data(training_size=4,
                                                       test_size=2,
                                                       n=n_dim,
                                                       gap=0.3,
                                                       plot_data=False)
        optimizer = L_BFGS_B(maxfun=30)
        data_preparation = self.data_preparation
        wavefunction = TwoLocal(2, ['ry', 'rz'],
                                'cz',
                                reps=1,
                                insert_barriers=True)

        vqc = VQC(optimizer,
                  data_preparation,
                  wavefunction,
                  training_input,
                  test_input,
                  minibatch_size=2)
        result = vqc.run(self.statevector_simulator)

        self.log.debug(result['testing_accuracy'])
        self.assertAlmostEqual(result['testing_accuracy'], 0.75, places=3)
Exemple #8
0
    def test_vqe_qasm_snapshot_mode(self, mode):
        """ VQE Aer qasm_simulator snapshot mode test """
        try:
            # pylint: disable=import-outside-toplevel
            from qiskit import Aer
        except Exception as ex:  # pylint: disable=broad-except
            self.skipTest(
                "Aer doesn't appear to be installed. Error: '{}'".format(
                    str(ex)))
            return
        backend = Aer.get_backend('qasm_simulator')
        optimizer = L_BFGS_B()
        wavefunction = self.ry_wavefunction[mode]

        if mode == 'wrapped':
            warnings.filterwarnings('ignore', category=DeprecationWarning)
        vqe = VQE(self.qubit_op, wavefunction, optimizer, max_evals_grouped=1)
        if mode == 'wrapped':
            warnings.filterwarnings('always', category=DeprecationWarning)

        quantum_instance = QuantumInstance(
            backend,
            shots=1,
            seed_simulator=aqua_globals.random_seed,
            seed_transpiler=aqua_globals.random_seed)
        result = vqe.run(quantum_instance)
        self.assertAlmostEqual(result.eigenvalue.real, -1.85727503, places=6)
    def test_vqe_adapt(self):
        """ VQEAdapt test """
        try:
            # pylint: disable=import-outside-toplevel
            from qiskit import Aer
        except Exception as ex:  # pylint: disable=broad-except
            self.skipTest(
                "Aer doesn't appear to be installed. Error: '{}'".format(
                    str(ex)))
            return

        self.var_form_base = UCCSD(self.num_qubits,
                                   1,
                                   self.num_spin_orbitals,
                                   self.num_particles,
                                   initial_state=self.init_state)
        backend = Aer.get_backend('statevector_simulator')
        optimizer = L_BFGS_B()
        algorithm = VQEAdapt(self.qubit_op,
                             self.var_form_base,
                             optimizer,
                             threshold=0.00001,
                             delta=0.1)
        result = algorithm.run(backend)
        self.assertAlmostEqual(result['energy'], -1.85727503, places=2)
        self.assertIn('num_iterations', result)
        self.assertIn('final_max_grad', result)
        self.assertIn('finishing_criterion', result)
    def test_saving_and_loading_e2e(self):
        backend = BasicAer.get_backend('statevector_simulator')
        num_qubits = self.algo_input.qubit_op.num_qubits
        init_state = Zero(num_qubits)
        var_form = RY(num_qubits, 1, initial_state=init_state)
        optimizer = L_BFGS_B(maxiter=10)
        algo = VQE(self.algo_input.qubit_op, var_form, optimizer)

        with tempfile.NamedTemporaryFile(suffix='.inp',
                                         delete=True) as cache_tmp_file:
            cache_tmp_file_name = cache_tmp_file.name
            quantum_instance_caching = QuantumInstance(
                backend,
                circuit_caching=True,
                cache_file=cache_tmp_file_name,
                skip_qobj_deepcopy=True,
                skip_qobj_validation=True,
                optimization_level=self.optimization_level)
            algo.run(quantum_instance_caching)
            self.assertLessEqual(quantum_instance_caching.circuit_cache.misses,
                                 0)

            is_file_exist = os.path.exists(cache_tmp_file_name)
            self.assertTrue(is_file_exist,
                            "Does not store content successfully.")

            circuit_cache_new = CircuitCache(skip_qobj_deepcopy=True,
                                             cache_file=cache_tmp_file_name)
            self.assertEqual(quantum_instance_caching.circuit_cache.mappings,
                             circuit_cache_new.mappings)
            self.assertLessEqual(circuit_cache_new.misses, 0)
 def test_vqe_caching_direct(self, batch_mode=True):
     backend = BasicAer.get_backend('statevector_simulator')
     num_qubits = self.algo_input.qubit_op.num_qubits
     init_state = Zero(num_qubits)
     var_form = RY(num_qubits, 3, initial_state=init_state)
     optimizer = L_BFGS_B()
     algo = VQE(self.algo_input.qubit_op,
                var_form,
                optimizer,
                'matrix',
                batch_mode=batch_mode)
     quantum_instance_caching = QuantumInstance(backend,
                                                circuit_caching=True,
                                                skip_qobj_deepcopy=True,
                                                skip_qobj_validation=True)
     result_caching = algo.run(quantum_instance_caching)
     self.assertLessEqual(quantum_instance_caching.circuit_cache.misses, 0)
     self.assertAlmostEqual(
         self.reference_vqe_result['statevector_simulator']['energy'],
         result_caching['energy'])
     speedup_check = 3
     self.log.info(
         result_caching['eval_time'],
         self.reference_vqe_result['statevector_simulator']['eval_time'] /
         speedup_check)
Exemple #12
0
 def test_deprecated_variational_forms(self):
     """Test running the VQE on a deprecated VariationalForm object."""
     warnings.filterwarnings('ignore', category=DeprecationWarning)
     wavefunction = RYRZ(2)
     vqe = VQE(self.h2_op, wavefunction, L_BFGS_B())
     warnings.filterwarnings('always', category=DeprecationWarning)
     result = vqe.run(self.statevector_simulator)
     self.assertAlmostEqual(result.eigenvalue.real, self.h2_energy)
 def test_vqe_var_forms(self, var_form_cls, places):
     """ VQE Var Forms test """
     result = VQE(self.qubit_op,
                  var_form_cls(self.qubit_op.num_qubits),
                  L_BFGS_B()).run(
                      QuantumInstance(BasicAer.get_backend('statevector_simulator'), shots=1,
                                      seed_simulator=aqua_globals.random_seed,
                                      seed_transpiler=aqua_globals.random_seed))
     self.assertAlmostEqual(result.eigenvalue.real, -1.85727503, places=places)
Exemple #14
0
def solve_maxcut_vqe(graph, solve_type):
    backend = get_compute_backend(solve_type)
    operator, offset = get_operator(graph)
    vqe = VQE(
        operator,
        RYRZ(graph.number_of_nodes(), depth=3, entanglement="linear"),
        L_BFGS_B(maxfun=6000),
    )
    result = vqe.run(QuantumInstance(backend))
    return result
    def test_readme_sample(self):
        """ readme sample test """
        # pylint: disable=import-outside-toplevel

        # --- Exact copy of sample code ----------------------------------------

        from qiskit.chemistry import FermionicOperator
        from qiskit.chemistry.drivers import PySCFDriver, UnitsType
        from qiskit.aqua.operators import Z2Symmetries

        # Use PySCF, a classical computational chemistry software
        # package, to compute the one-body and two-body integrals in
        # molecular-orbital basis, necessary to form the Fermionic operator
        driver = PySCFDriver(atom='H .0 .0 .0; H .0 .0 0.735',
                             unit=UnitsType.ANGSTROM,
                             basis='sto3g')
        molecule = driver.run()
        num_particles = molecule.num_alpha + molecule.num_beta
        num_spin_orbitals = molecule.num_orbitals * 2

        # Build the qubit operator, which is the input to the VQE algorithm in Aqua
        ferm_op = FermionicOperator(h1=molecule.one_body_integrals,
                                    h2=molecule.two_body_integrals)
        map_type = 'PARITY'
        qubit_op = ferm_op.mapping(map_type)
        qubit_op = Z2Symmetries.two_qubit_reduction(qubit_op, num_particles)
        num_qubits = qubit_op.num_qubits

        # setup a classical optimizer for VQE
        from qiskit.aqua.components.optimizers import L_BFGS_B
        optimizer = L_BFGS_B()

        # setup the initial state for the variational form
        from qiskit.chemistry.components.initial_states import HartreeFock
        init_state = HartreeFock(num_qubits, num_spin_orbitals, num_particles)

        # setup the variational form for VQE
        from qiskit.aqua.components.variational_forms import RYRZ
        var_form = RYRZ(num_qubits, initial_state=init_state)

        # setup and run VQE
        from qiskit.aqua.algorithms import VQE
        algorithm = VQE(qubit_op, var_form, optimizer)

        # set the backend for the quantum computation
        from qiskit import Aer
        backend = Aer.get_backend('statevector_simulator')

        result = algorithm.run(backend)
        print(result['energy'])

        # ----------------------------------------------------------------------

        self.assertAlmostEqual(result['energy'], -1.8572750301938803, places=6)
Exemple #16
0
    def test_vqe_var_forms(self, var_form_cls, places, var_form_type):
        """ VQE Var Forms test """
        var_form = var_form_cls(self.qubit_op.num_qubits)
        if var_form_type is QuantumCircuit:
            params = ParameterVector('θ', var_form.num_parameters)
            var_form = var_form.construct_circuit(params)

        vqe = VQE(self.qubit_op, var_form, L_BFGS_B())
        result = vqe.run(QuantumInstance(BasicAer.get_backend('statevector_simulator'), shots=1,
                                         seed_simulator=aqua_globals.random_seed,
                                         seed_transpiler=aqua_globals.random_seed))
        self.assertAlmostEqual(result.eigenvalue.real, -1.85727503, places=places)
 def test_vqe_direct(self, max_evals_grouped):
     backend = BasicAer.get_backend('statevector_simulator')
     num_qubits = self.algo_input.qubit_op.num_qubits
     init_state = Zero(num_qubits)
     var_form = RY(num_qubits, 3, initial_state=init_state)
     optimizer = L_BFGS_B()
     algo = VQE(self.algo_input.qubit_op, var_form, optimizer, 'paulis', max_evals_grouped=max_evals_grouped)
     quantum_instance = QuantumInstance(backend)
     result = algo.run(quantum_instance)
     self.assertAlmostEqual(result['energy'], -1.85727503)
     if quantum_instance.has_circuit_caching:
         self.assertLess(quantum_instance._circuit_cache.misses, 3)
Exemple #18
0
def getOptimiser(name="SPSA", params={}):
    optimiser = None
    if 'SPSA' in name:
        #max_trials (int) – Maximum number of iterations to perform.
        #save_steps (int) – Save intermeditate info every save_steps step.
        #last_avg (int) – Averged parameters over the last_avg iterations. If last_avg = 1, only the last iteration is considered.
        #c0 (float) – The initial a. Step size to update paramters.
        #c1 (float) – The initial c. The step size used to approximate gradient.
        #c2 (float) – The alpha in the paper, and it is used to adjust a (c0) at each iteration.
        #c3 (float) – The gamma in the paper, and it is used to adjust c (c1) at each iteration.
        #c4 (float) – The parameter used to control a as well.
        #skip_calibration (bool) – skip calibration and use provided c(s) as is.
        optimiser = SPSA(
            max_trials=params["max_trials"],
            save_steps=params["save_steps"],
        )
    elif 'COBYLA' in name:
        #maxiter (int) – Maximum number of function evaluations.
        #disp (bool) – Set to True to print convergence messages.
        #rhobeg (float) – Reasonable initial changes to the variables.
        #tol (float) – Final accuracy in the optimization (not precisely guaranteed). This is a lower bound on the size of the trust region.
        optimiser = COBYLA(maxiter=params["maxiter"], disp=True)
    elif 'L_BFGS_B' in name:
        #maxfun (int) – Maximum number of function evaluations.
        #maxiter (int) – Maximum number of iterations.
        #factr (float) – The iteration stops when (f^k - f^{k+1})/max{|f^k|, |f^{k+1}|,1} <= factr * eps, where eps is the machine precision, which is automatically generated by the code. Typical values for factr are: 1e12 for low accuracy; 1e7 for moderate accuracy; 10.0 for extremely high accuracy. See Notes for relationship to ftol, which is exposed (instead of factr) by the scipy.optimize.minimize interface to L-BFGS-B.
        #iprint (int) – Controls the frequency of output. iprint < 0 means no output; iprint = 0 print only one line at the last iteration; 0 < iprint < 99 print also f and |proj g| every iprint iterations; iprint = 99 print details of every iteration except n-vectors; iprint = 100 print also the changes of active set and final x; iprint > 100 print details of every iteration including x and g.
        #epsilon (float) – Step size used when approx_grad is True, for numerically calculating the gradient
        optimiser = L_BFGS_B(
            #maxfun=params["maxfun"],
            maxiter=params["maxiter"])

    elif 'P_BFGS' in name:
        optimiser = P_BFGS(maxfun=params["maxfun"])
    elif 'NELDER_MEAD' in name:
        #maxiter (int) – Maximum allowed number of iterations. If both maxiter and maxfev are set, minimization will stop at the first reached.
        #maxfev (int) – Maximum allowed number of function evaluations. If both maxiter and maxfev are set, minimization will stop at the first reached.
        #disp (bool) – Set to True to print convergence messages.
        #xatol (float) – Absolute error in xopt between iterations that is acceptable for convergence.
        #tol (float or None) – Tolerance for termination.
        #adaptive (bool) – Adapt algorithm parameters to dimensionality of problem.
        optimiser = NELDER_MEAD(maxiter=params["maxiter"], disp=True)
    elif 'SLSQP' in name:
        #maxiter (int) – Maximum number of iterations.
        #disp (bool) – Set to True to print convergence messages.
        #ftol (float) – Precision goal for the value of f in the stopping criterion.
        #tol (float or None) – Tolerance for termination.
        #eps (float) – Step size used for numerical approximation of the Jacobian.
        optimiser = SLSQP(maxiter=params["maxiter"])

    print("Optimising with {0} - {1}".format(name, optimiser))
    return optimiser
Exemple #19
0
    def test_vqe(self):
        """ VQE test """
        quantum_instance = QuantumInstance(BasicAer.get_backend('statevector_simulator'),
                                           basis_gates=['u1', 'u2', 'u3', 'cx', 'id'],
                                           coupling_map=[[0, 1]],
                                           seed_simulator=aqua_globals.random_seed,
                                           seed_transpiler=aqua_globals.random_seed)

        vqe = VQE(var_form=RYRZ(self.qubit_op.num_qubits),
                  optimizer=L_BFGS_B(),
                  quantum_instance=quantum_instance)
        output = vqe.compute_minimum_eigenvalue(self.qubit_op)
        self.assertAlmostEqual(output.eigenvalue, -1.85727503)
Exemple #20
0
 def test_stable_set_vqe(self):
     """ VQE Stable set  test """
     result = VQE(self.qubit_op, EfficientSU2(
         reps=3, entanglement='linear'), L_BFGS_B(maxfun=6000)).run(
             QuantumInstance(BasicAer.get_backend('statevector_simulator'),
                             seed_simulator=aqua_globals.random_seed,
                             seed_transpiler=aqua_globals.random_seed))
     x = sample_most_likely(result.eigenstate)
     self.assertAlmostEqual(result.eigenvalue, -39.5)
     self.assertAlmostEqual(result.eigenvalue + self.offset, -38.0)
     ising_sol = stable_set.get_graph_solution(x)
     np.testing.assert_array_equal(ising_sol, [1, 1, 0, 1, 1])
     self.assertEqual(stable_set.stable_set_value(x, self.w), (4.0, False))
Exemple #21
0
    def test_statevector(self):
        """Test running the VQC on BasicAer's Statevector simulator."""
        optimizer = L_BFGS_B(maxfun=200)
        data_preparation = self.data_preparation
        wavefunction = self.ryrz_wavefunction

        vqc = VQC(optimizer, data_preparation, wavefunction, self.training_data, self.testing_data)
        result = vqc.run(self.statevector_simulator)

        with self.subTest(msg='check training loss'):
            self.assertLess(result['training_loss'], 0.12)

        with self.subTest(msg='check testing accuracy'):
            self.assertEqual(result['testing_accuracy'], 0.5)
Exemple #22
0
 def test_stable_set_vqe(self):
     """ VQE Stable set  test """
     result = VQE(self.qubit_op,
                  RYRZ(self.qubit_op.num_qubits, depth=3, entanglement='linear'),
                  L_BFGS_B(maxfun=6000)).run(
                      QuantumInstance(BasicAer.get_backend('statevector_simulator'),
                                      seed_simulator=aqua_globals.random_seed,
                                      seed_transpiler=aqua_globals.random_seed))
     x = sample_most_likely(result['eigvecs'][0])
     self.assertAlmostEqual(result['energy'], -29.5)
     self.assertAlmostEqual(result['energy'] + self.offset, -25.0)
     ising_sol = stable_set.get_graph_solution(x)
     np.testing.assert_array_equal(ising_sol, [0, 0, 1, 1, 1])
     self.assertEqual(stable_set.stable_set_value(x, self.w), (3.0, False))
Exemple #23
0
 def test_vqe_direct(self, batch_mode):
     backend = get_aer_backend('statevector_simulator')
     num_qubits = self.algo_input.qubit_op.num_qubits
     init_state = Zero(num_qubits)
     var_form = RY(num_qubits, 3, initial_state=init_state)
     optimizer = L_BFGS_B()
     algo = VQE(self.algo_input.qubit_op,
                var_form,
                optimizer,
                'paulis',
                batch_mode=batch_mode)
     quantum_instance = QuantumInstance(backend)
     result = algo.run(quantum_instance)
     self.assertAlmostEqual(result['energy'], -1.85727503)
Exemple #24
0
 def test_vqe_aer_mode(self):
     try:
         from qiskit import Aer
     except Exception as e:
         self.skipTest("Aer doesn't appear to be installed. Error: '{}'".format(str(e)))
         return
     backend = Aer.get_backend('statevector_simulator')
     num_qubits = self.algo_input.qubit_op.num_qubits
     init_state = Zero(num_qubits)
     var_form = RY(num_qubits, 3, initial_state=init_state)
     optimizer = L_BFGS_B()
     algo = VQE(self.algo_input.qubit_op, var_form, optimizer, max_evals_grouped=1)
     quantum_instance = QuantumInstance(backend)
     result = algo.run(quantum_instance)
     self.assertAlmostEqual(result['energy'], -1.85727503, places=6)
Exemple #25
0
 def test_vqe_var_forms(self, depth, places):
     """ VQE Var Forms test """
     aqua_globals.random_seed = self.seed
     result = VQE(
         self.qubit_op,
         RY(self.qubit_op.num_qubits,
            depth=depth,
            entanglement='sca',
            entanglement_gate='crx',
            skip_final_ry=True),
         L_BFGS_B()).run(
             QuantumInstance(BasicAer.get_backend('statevector_simulator'),
                             shots=1,
                             seed_simulator=aqua_globals.random_seed,
                             seed_transpiler=aqua_globals.random_seed))
     self.assertAlmostEqual(result['energy'], -1.85727503, places=places)
    def test_vqc_minibatching_with_gradient_support(self, use_circuits):
        """ vqc minibatching with gradient support test """
        n_dim = 2  # dimension of each data point
        seed = 1024
        aqua_globals.random_seed = seed
        _, training_input, test_input, _ = ad_hoc_data(training_size=4,
                                                       test_size=2,
                                                       n=n_dim,
                                                       gap=0.3,
                                                       plot_data=False)
        backend = BasicAer.get_backend('statevector_simulator')
        num_qubits = n_dim
        optimizer = L_BFGS_B(maxfun=30)
        feature_map = SecondOrderExpansion(feature_dimension=num_qubits,
                                           depth=2)
        var_form = RYRZ(num_qubits=num_qubits, depth=1)

        # convert to circuit if circuits should be used
        if use_circuits:
            x = ParameterVector('x', feature_map.feature_dimension)
            feature_map = feature_map.construct_circuit(x)
            theta = ParameterVector('theta', var_form.num_parameters)
            var_form = var_form.construct_circuit(theta)

        # set up algorithm
        vqc = VQC(optimizer,
                  feature_map,
                  var_form,
                  training_input,
                  test_input,
                  minibatch_size=2)

        # sort parameters for reproducibility
        if use_circuits:
            vqc._feature_map_params = list(x)
            vqc._var_form_params = list(theta)

        quantum_instance = QuantumInstance(backend,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)
        result = vqc.run(quantum_instance)
        vqc_accuracy = 0.5
        self.log.debug(result['testing_accuracy'])
        self.assertAlmostEqual(result['testing_accuracy'],
                               vqc_accuracy,
                               places=3)
Exemple #27
0
 def get_solver(self, transformation):
     num_orbitals = transformation.molecule_info['num_orbitals']
     num_particles = transformation.molecule_info['num_particles']
     qubit_mapping = transformation.qubit_mapping
     two_qubit_reduction = transformation.molecule_info['two_qubit_reduction']
     z2_symmetries = transformation.molecule_info['z2_symmetries']
     initial_state = HartreeFock(num_orbitals, num_particles, qubit_mapping,
                                 two_qubit_reduction, z2_symmetries.sq_list)
     var_form = UCCSD(num_orbitals=num_orbitals,
                      num_particles=num_particles,
                      initial_state=initial_state,
                      qubit_mapping=qubit_mapping,
                      two_qubit_reduction=two_qubit_reduction,
                      z2_symmetries=z2_symmetries)
     vqe = VQE(var_form=var_form, quantum_instance=self._quantum_instance,
               optimizer=L_BFGS_B())
     return vqe
Exemple #28
0
 def test_vqe_qasm_snapshot_mode(self):
     """ VQE Aer qasm_simulator snapshot mode test """
     try:
         # pylint: disable=import-outside-toplevel
         from qiskit import Aer
     except Exception as ex:  # pylint: disable=broad-except
         self.skipTest("Aer doesn't appear to be installed. Error: '{}'".format(str(ex)))
         return
     backend = Aer.get_backend('qasm_simulator')
     num_qubits = self.algo_input.qubit_op.num_qubits
     init_state = Zero(num_qubits)
     var_form = RY(num_qubits, 3, initial_state=init_state)
     optimizer = L_BFGS_B()
     algo = VQE(self.algo_input.qubit_op, var_form, optimizer, max_evals_grouped=1)
     quantum_instance = QuantumInstance(backend, shots=1)
     result = algo.run(quantum_instance)
     self.assertAlmostEqual(result['energy'], -1.85727503, places=6)
Exemple #29
0
    def test_vqe(self, var_form_type):
        """ VQE test """
        var_form = RYRZ(self.qubit_op.num_qubits)
        if var_form_type is QuantumCircuit:
            params = ParameterVector('θ', var_form.num_parameters)
            var_form = var_form.construct_circuit(params)

        vqe = VQE(self.qubit_op, var_form, L_BFGS_B())
        result = vqe.run(QuantumInstance(BasicAer.get_backend('statevector_simulator'),
                                         basis_gates=['u1', 'u2', 'u3', 'cx', 'id'],
                                         coupling_map=[[0, 1]],
                                         seed_simulator=aqua_globals.random_seed,
                                         seed_transpiler=aqua_globals.random_seed))
        self.assertAlmostEqual(result.eigenvalue.real, -1.85727503)
        np.testing.assert_array_almost_equal(result.eigenvalue.real, -1.85727503, 5)
        self.assertEqual(len(result.optimal_point), 16)
        self.assertIsNotNone(result.cost_function_evals)
        self.assertIsNotNone(result.optimizer_time)
Exemple #30
0
    def test_vqc_minibatching_with_gradient_support(self, mode):
        """ vqc minibatching with gradient support test """
        n_dim = 2  # dimension of each data point
        seed = 1024
        aqua_globals.random_seed = seed
        _, training_input, test_input, _ = ad_hoc_data(training_size=4,
                                                       test_size=2,
                                                       n=n_dim,
                                                       gap=0.3,
                                                       plot_data=False)
        backend = BasicAer.get_backend('statevector_simulator')
        optimizer = L_BFGS_B(maxfun=30)

        # set up data encoding circuit
        data_preparation = self.data_preparation[mode]

        # set up wavefunction
        if mode == 'wrapped':
            warnings.filterwarnings('ignore', category=DeprecationWarning)
            wavefunction = RYRZ(2, depth=1)
        else:
            wavefunction = TwoLocal(2, ['ry', 'rz'],
                                    'cz',
                                    reps=1,
                                    insert_barriers=True)
            if mode == 'circuit':
                wavefunction = QuantumCircuit(2).compose(wavefunction)

        # set up algorithm
        vqc = VQC(optimizer,
                  data_preparation,
                  wavefunction,
                  training_input,
                  test_input,
                  minibatch_size=2)

        if mode == 'wrapped':
            warnings.filterwarnings('always', category=DeprecationWarning)

        quantum_instance = QuantumInstance(backend,
                                           seed_simulator=seed,
                                           seed_transpiler=seed)
        result = vqc.run(quantum_instance)
        self.assertGreater(result['testing_accuracy'], 0.2)