Пример #1
0
    def test_reuse(self):
        """Test re-using a VQE algorithm instance."""
        vqe = VQE()
        with self.subTest(msg='assert running empty raises AquaError'):
            with self.assertRaises(AquaError):
                _ = vqe.run()

        var_form = TwoLocal(rotation_blocks=['ry', 'rz'],
                            entanglement_blocks='cz')
        vqe.var_form = var_form
        with self.subTest(msg='assert missing operator raises AquaError'):
            with self.assertRaises(AquaError):
                _ = vqe.run()

        vqe.operator = self.h2_op
        with self.subTest(msg='assert missing backend raises AquaError'):
            with self.assertRaises(AquaError):
                _ = vqe.run()

        vqe.quantum_instance = self.statevector_simulator
        with self.subTest(msg='assert VQE works once all info is available'):
            result = vqe.run()
            self.assertAlmostEqual(result.eigenvalue.real,
                                   self.h2_energy,
                                   places=5)

        operator = PrimitiveOp(
            np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 2, 0], [0, 0, 0,
                                                                  3]]))

        with self.subTest(msg='assert minimum eigensolver interface works'):
            result = vqe.compute_minimum_eigenvalue(operator)
            self.assertAlmostEqual(result.eigenvalue.real, -1.0, places=5)
Пример #2
0
 def test_vqe_auto_symmetry_freeze_core(self):
     """ Auto symmetry reduction, with freeze core using VQE """
     core = Hamiltonian(transformation=TransformationType.FULL,
                        qubit_mapping=QubitMappingType.JORDAN_WIGNER,
                        two_qubit_reduction=False,
                        freeze_core=True,
                        orbital_reduction=None,
                        z2symmetry_reduction='auto')
     qubit_op, aux_ops = core.run(self.qmolecule)
     self.assertEqual(qubit_op.num_qubits, 6)
     num_orbitals = core.molecule_info[core.INFO_NUM_ORBITALS]
     num_particles = core.molecule_info[core.INFO_NUM_PARTICLES]
     qubit_mapping = 'jordan_wigner'
     two_qubit_reduction = core.molecule_info[core.INFO_TWO_QUBIT_REDUCTION]
     z2_symmetries = core.molecule_info[core.INFO_Z2SYMMETRIES]
     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(qubit_op, var_form=var_form, optimizer=SLSQP(maxiter=500), aux_operators=aux_ops)
     vqe.quantum_instance = BasicAer.get_backend('statevector_simulator')
     result = core.process_algorithm_result(vqe.compute_minimum_eigenvalue())
     self._validate_result(result)
     self.assertEqual(core.molecule_info[core.INFO_Z2SYMMETRIES].tapering_values, [-1, 1, 1, -1])
Пример #3
0
 def test_vqe_mes(self):
     """ Test vqe minimum eigen solver interface """
     ansatz = TwoLocal(rotation_blocks=['ry', 'rz'],
                       entanglement_blocks='cz')
     vqe = VQE(var_form=ansatz, optimizer=COBYLA())
     vqe.set_backend(BasicAer.get_backend('statevector_simulator'))
     result = vqe.compute_minimum_eigenvalue(self.qubit_op)
     self.assertAlmostEqual(result.eigenvalue.real, -1.85727503, places=5)
Пример #4
0
    def test_uccsd_hf_qUCCSD(self):
        """ uccsd tapering test using all double excitations """

        fermionic_transformation = FermionicTransformation(
            transformation=TransformationType.FULL,
            qubit_mapping=QubitMappingType.PARITY,
            two_qubit_reduction=True,
            freeze_core=True,
            orbital_reduction=[],
            z2symmetry_reduction='auto')

        qubit_op, _ = fermionic_transformation.transform(self.driver)

        # optimizer
        optimizer = SLSQP(maxiter=100)

        # initial state
        init_state = HartreeFock(
            num_orbitals=fermionic_transformation.
            molecule_info['num_orbitals'],
            qubit_mapping=fermionic_transformation._qubit_mapping,
            two_qubit_reduction=fermionic_transformation._two_qubit_reduction,
            num_particles=fermionic_transformation.
            molecule_info['num_particles'],
            sq_list=fermionic_transformation.molecule_info['z2_symmetries'].
            sq_list)

        var_form = UCCSD(
            num_orbitals=fermionic_transformation.
            molecule_info['num_orbitals'],
            num_particles=fermionic_transformation.
            molecule_info['num_particles'],
            active_occupied=None,
            active_unoccupied=None,
            initial_state=init_state,
            qubit_mapping=fermionic_transformation._qubit_mapping,
            two_qubit_reduction=fermionic_transformation._two_qubit_reduction,
            num_time_slices=1,
            z2_symmetries=fermionic_transformation.
            molecule_info['z2_symmetries'],
            shallow_circuit_concat=False,
            method_doubles='ucc',
            excitation_type='sd',
            skip_commute_test=True)

        solver = VQE(
            var_form=var_form,
            optimizer=optimizer,
            quantum_instance=QuantumInstance(
                backend=BasicAer.get_backend('statevector_simulator')))

        raw_result = solver.compute_minimum_eigenvalue(qubit_op, None)
        result = fermionic_transformation.interpret(raw_result)

        self.assertAlmostEqual(result.energy,
                               self.reference_energy_UCCSD,
                               places=6)
Пример #5
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)
Пример #6
0
    def test_vqe_qasm(self):
        """ VQE QASM test """
        backend = BasicAer.get_backend('qasm_simulator')
        num_qubits = self.qubit_op.num_qubits
        var_form = RY(num_qubits, num_qubits)
        optimizer = SPSA(max_trials=300, last_avg=5)
        quantum_instance = QuantumInstance(backend, shots=10000,
                                           seed_simulator=self.seed,
                                           seed_transpiler=self.seed)
        vqe = VQE(var_form=var_form,
                  optimizer=optimizer,
                  max_evals_grouped=1,
                  quantum_instance=quantum_instance)

        output = vqe.compute_minimum_eigenvalue(self.qubit_op)
        self.assertAlmostEqual(output.eigenvalue, -1.85727503, places=1)
Пример #7
0
    def test_measurement_error_mitigation_with_vqe(self):
        """ measurement error mitigation test with vqe """
        try:
            # pylint: disable=import-outside-toplevel
            from qiskit import Aer
            from qiskit.providers.aer import noise
        except ImportError as ex:  # pylint: disable=broad-except
            self.skipTest(
                "Aer doesn't appear to be installed. Error: '{}'".format(
                    str(ex)))
            return

        aqua_globals.random_seed = 0

        # build noise model
        noise_model = noise.NoiseModel()
        read_err = noise.errors.readout_error.ReadoutError([[0.9, 0.1],
                                                            [0.25, 0.75]])
        noise_model.add_all_qubit_readout_error(read_err)

        backend = Aer.get_backend('qasm_simulator')

        quantum_instance = QuantumInstance(
            backend=backend,
            seed_simulator=167,
            seed_transpiler=167,
            noise_model=noise_model,
            measurement_error_mitigation_cls=CompleteMeasFitter)

        h2_hamiltonian = -1.052373245772859 * (I ^ I) \
            + 0.39793742484318045 * (I ^ Z) \
            - 0.39793742484318045 * (Z ^ I) \
            - 0.01128010425623538 * (Z ^ Z) \
            + 0.18093119978423156 * (X ^ X)
        optimizer = SPSA(maxiter=200)
        var_form = EfficientSU2(2, reps=1)

        vqe = VQE(
            var_form=var_form,
            operator=h2_hamiltonian,
            quantum_instance=quantum_instance,
            optimizer=optimizer,
        )
        result = vqe.compute_minimum_eigenvalue()
        self.assertGreater(quantum_instance.time_taken, 0.)
        quantum_instance.reset_execution_results()
        self.assertAlmostEqual(result.eigenvalue.real, -1.86, places=2)
def set_vqe_circuit(self, backend = None):    
    #Check https://qiskit.org/documentation/tutorials/algorithms/03_vqe_simulation_with_noise.html
    #seed = 170
    
    iterations = self.vqe_options['maxiter']
    #aqua_globals.random_seed = seed
    if backend is None:
        backend = 'statevector_simulator'
    backend = Aer.get_backend(backend)

    counts = []
    values = []
    stds = []
    def store_intermediate_result(eval_count, parameters, mean, std):
        counts.append(eval_count)
        values.append(mean)
        stds.append(std)

    var_form = TwoLocal(reps = self.vqe_options['n_steps'], 
                        rotation_blocks = 'ry', 
                        entanglement_blocks = 'cx', 
                        entanglement = 'linear',
                        insert_barriers = True)
    spsa = SPSA(maxiter=iterations)

    if self.vqe_options['noise']:
        os.environ['QISKIT_IN_PARALLEL'] = 'TRUE'
        device = QasmSimulator.from_backend(device_backend)
        coupling_map = device.configuration().coupling_map
        noise_model = NoiseModel.from_backend(device)
        basis_gates = noise_model.basis_gates

        qi = QuantumInstance(backend=backend,
                            coupling_map=coupling_map,
                            noise_model=noise_model)

    else:
        qi = QuantumInstance(backend=backend)

    vqe = VQE(var_form=var_form, optimizer=spsa, callback=store_intermediate_result, quantum_instance=qi)
    result = vqe.compute_minimum_eigenvalue(operator=self.H)

    return vqe.get_optimal_circuit(), vqe.optimal_params, vqe.get_optimal_vector(), vqe.get_optimal_cost()
Пример #9
0
 def test_vqe_mes(self):
     """ Test vqe minimum eigen solver interface """
     vqe = VQE(var_form=RY(self.qubit_op.num_qubits, depth=3), optimizer=COBYLA())
     vqe.set_backend(BasicAer.get_backend('statevector_simulator'))
     result = vqe.compute_minimum_eigenvalue(self.qubit_op)
     self.assertAlmostEqual(result.eigenvalue.real, -1.85727503, places=5)