예제 #1
0
    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)
예제 #2
0
    def test_vqe_callback(self, var_form_type):
        """ VQE Callback test """
        history = {'eval_count': [], 'parameters': [], 'mean': [], 'std': []}

        def store_intermediate_result(eval_count, parameters, mean, std):
            history['eval_count'].append(eval_count)
            history['parameters'].append(parameters)
            history['mean'].append(mean)
            history['std'].append(std)

        backend = BasicAer.get_backend('qasm_simulator')
        num_qubits = self.qubit_op.num_qubits
        init_state = Zero(num_qubits)
        var_form = RY(num_qubits, depth=1, initial_state=init_state)
        if var_form_type is QuantumCircuit:
            params = ParameterVector('θ', var_form.num_parameters)
            var_form = var_form.construct_circuit(params)
        optimizer = COBYLA(maxiter=3)
        algo = VQE(self.qubit_op, var_form, optimizer,
                   callback=store_intermediate_result, auto_conversion=False)
        aqua_globals.random_seed = 50
        quantum_instance = QuantumInstance(backend,
                                           seed_transpiler=50,
                                           shots=1024,
                                           seed_simulator=50)
        algo.run(quantum_instance)

        self.assertTrue(all(isinstance(count, int) for count in history['eval_count']))
        self.assertTrue(all(isinstance(mean, float) for mean in history['mean']))
        self.assertTrue(all(isinstance(std, float) for std in history['std']))
        for params in history['parameters']:
            self.assertTrue(all(isinstance(param, float) for param in params))
예제 #3
0
    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)
예제 #4
0
 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)
예제 #5
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)
예제 #6
0
 def test_state_preparation_type_error(self):
     """Test InitialState state_preparation with QuantumCircuit oracle"""
     init_state = Zero(2)
     oracle = QuantumCircuit(2)
     oracle.cz(0, 1)
     with self.assertRaises(TypeError):
         Grover(oracle=oracle, state_preparation=init_state)
 def test_qubits_5_vector(self):
     self.zero = Zero(5)
     cct = self.zero.construct_circuit('vector')
     np.testing.assert_array_equal(cct, [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                         0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                         0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                         0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
 def test_qubits_5_circuit(self):
     """ Qubits 5 circuit test """
     zero = Zero(5)
     cct = zero.construct_circuit('circuit')
     # pylint: disable=no-member
     self.assertEqual(cct.qasm(),
                      'OPENQASM 2.0;\ninclude "qelib1.inc";\nqreg q[5];\n')
예제 #9
0
    def test_qaoa_initial_state(self, w, init_state):
        """ QAOA initial state test """

        optimizer = COBYLA()
        qubit_op, _ = max_cut.get_operator(w)

        init_pt = [0.0, 0.0]  # Avoid generating random initial point

        if init_state is None:
            initial_state = None
        else:
            initial_state = Custom(num_qubits=4, state_vector=init_state)

        quantum_instance = QuantumInstance(
            BasicAer.get_backend('statevector_simulator'))
        qaoa_zero_init_state = QAOA(qubit_op,
                                    optimizer,
                                    initial_point=init_pt,
                                    initial_state=Zero(qubit_op.num_qubits),
                                    quantum_instance=quantum_instance)
        qaoa = QAOA(qubit_op,
                    optimizer,
                    initial_point=init_pt,
                    initial_state=initial_state,
                    quantum_instance=quantum_instance)

        zero_circuits = qaoa_zero_init_state.construct_circuit(init_pt)
        custom_circuits = qaoa.construct_circuit(init_pt)

        self.assertEqual(len(zero_circuits), len(custom_circuits))

        backend = BasicAer.get_backend('statevector_simulator')
        for zero_circ, custom_circ in zip(zero_circuits, custom_circuits):

            z_length = len(zero_circ.data)
            c_length = len(custom_circ.data)

            self.assertGreaterEqual(c_length, z_length)
            self.assertTrue(zero_circ.data == custom_circ.data[-z_length:])

            custom_init_qc = custom_circ.copy()
            custom_init_qc.data = custom_init_qc.data[0:c_length - z_length]

            if initial_state is None:
                original_init_qc = QuantumCircuit(qubit_op.num_qubits)
                original_init_qc.h(range(qubit_op.num_qubits))
            else:
                original_init_qc = initial_state.construct_circuit()

            job_init_state = execute(original_init_qc, backend)
            job_qaoa_init_state = execute(custom_init_qc, backend)

            statevector_original = job_init_state.result().get_statevector(
                original_init_qc)
            statevector_custom = job_qaoa_init_state.result().get_statevector(
                custom_init_qc)

            self.assertEqual(statevector_original.tolist(),
                             statevector_custom.tolist())
예제 #10
0
    def test_vqe_callback(self):

        tmp_filename = 'vqe_callback_test.csv'
        is_file_exist = os.path.exists(self._get_resource_path(tmp_filename))
        if is_file_exist:
            os.remove(self._get_resource_path(tmp_filename))

        def store_intermediate_result(eval_count, parameters, mean, std):
            with open(self._get_resource_path(tmp_filename), 'a') as f:
                content = "{},{},{:.5f},{:.5f}".format(eval_count, parameters,
                                                       mean, std)
                print(content, file=f, flush=True)

        backend = get_aer_backend('qasm_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 = COBYLA(maxiter=3)
        algo = VQE(self.algo_input.qubit_op,
                   var_form,
                   optimizer,
                   'paulis',
                   callback=store_intermediate_result)
        algo.random_seed = 50
        run_config = RunConfig(shots=1024, seed=50)
        quantum_instance = QuantumInstance(backend,
                                           seed_mapper=50,
                                           run_config=run_config)
        algo.run(quantum_instance)

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

        # check the content
        ref_content = [[
            "1", "[-0.03391886 -1.70850424 -1.53640265 -0.65137839]",
            "-0.59622", "0.01546"
        ],
                       [
                           "2",
                           "[ 0.96608114 -1.70850424 -1.53640265 -0.65137839]",
                           "-0.77452", "0.01692"
                       ],
                       [
                           "3",
                           "[ 0.96608114 -0.70850424 -1.53640265 -0.65137839]",
                           "-0.80327", "0.01519"
                       ]]
        with open(self._get_resource_path(tmp_filename)) as f:
            idx = 0
            for record in f.readlines():
                eval_count, parameters, mean, std = record.split(",")
                self.assertEqual(eval_count.strip(), ref_content[idx][0])
                self.assertEqual(parameters, ref_content[idx][1])
                self.assertEqual(mean.strip(), ref_content[idx][2])
                self.assertEqual(std.strip(), ref_content[idx][3])
                idx += 1
        if is_file_exist:
            os.remove(self._get_resource_path(tmp_filename))
예제 #11
0
    def test_vqe_callback(self):
        """ VQE Callback test """
        tmp_filename = 'vqe_callback_test.csv'
        is_file_exist = os.path.exists(self.get_resource_path(tmp_filename))
        if is_file_exist:
            os.remove(self.get_resource_path(tmp_filename))

        def store_intermediate_result(eval_count, parameters, mean, std):
            with open(self.get_resource_path(tmp_filename), 'a') as file:
                content = "{},{},{:.5f},{:.5f}".format(eval_count, parameters, mean, std)
                print(content, file=file, flush=True)

        backend = BasicAer.get_backend('qasm_simulator')
        num_qubits = self.qubit_op.num_qubits
        init_state = Zero(num_qubits)
        var_form = RY(num_qubits, 1, initial_state=init_state)
        optimizer = COBYLA(maxiter=3)
        algo = VQE(self.qubit_op, var_form, optimizer,
                   callback=store_intermediate_result, auto_conversion=False)
        aqua_globals.random_seed = 50
        quantum_instance = QuantumInstance(backend,
                                           seed_transpiler=50,
                                           shots=1024,
                                           seed_simulator=50)
        algo.run(quantum_instance)

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

        # check the content
        ref_content = [['1',
                        '[-0.03391886 -1.70850424 -1.53640265 -0.65137839]',
                        '-0.61121', '0.01572'],
                       ['2',
                        '[ 0.96608114 -1.70850424 -1.53640265 -0.65137839]',
                        '-0.79235', '0.01722'],
                       ['3',
                        '[ 0.96608114 -0.70850424 -1.53640265 -0.65137839]',
                        '-0.82829', '0.01529']
                       ]
        try:
            with open(self.get_resource_path(tmp_filename)) as file:
                idx = 0
                for record in file.readlines():
                    eval_count, parameters, mean, std = record.split(",")
                    self.assertEqual(eval_count.strip(), ref_content[idx][0])
                    self.assertEqual(parameters, ref_content[idx][1])
                    self.assertEqual(mean.strip(), ref_content[idx][2])
                    self.assertEqual(std.strip(), ref_content[idx][3])
                    idx += 1
        finally:
            if is_file_exist:
                os.remove(self.get_resource_path(tmp_filename))
예제 #12
0
 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)
예제 #13
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)
예제 #14
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)
 def test_state_preparation_type_error(self):
     """Test InitialState state_preparation with QuantumCircuit oracle"""
     init_state = Zero(2)
     oracle = QuantumCircuit(2)
     oracle.cz(0, 1)
     # filtering the following:
     # DeprecationWarning: Passing an InitialState component is deprecated as of 0.8.0,
     # and will be removed no earlier than 3 months after the release date.
     # You should pass a QuantumCircuit instead.
     try:
         warnings.filterwarnings(action="ignore", category=DeprecationWarning)
         with self.assertRaises(TypeError):
             Grover(oracle=oracle, state_preparation=init_state)
     finally:
         warnings.filterwarnings(action="always", category=DeprecationWarning)
예제 #16
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)
예제 #17
0
    def __init__(
            self,
            operator_pool: OperatorPool,
            initial_state: Union[InitialState, None],
            vqe_optimizer: Optimizer,
            hamiltonian: BaseOperator,
            max_iters: int = 10,
            grad_tol: float = 1e-3,
            max_evals_grouped=1,
            aux_operators=None,
            auto_conversion=True,
            use_zero_initial_parameters=False
    ):
        super().__init__()
        self.operator_pool = copy.deepcopy(operator_pool)
        if initial_state is None:
            self.initial_state = Zero(num_qubits=operator_pool.num_qubits)
        else:
            self.initial_state = initial_state
        self.vqe_optimizer = vqe_optimizer
        self.hamiltonian = hamiltonian
        self.max_iters = max_iters
        self.grad_tol = grad_tol
        self.max_evals_grouped = max_evals_grouped
        self.aux_operators = aux_operators
        self.auto_conversion = auto_conversion
        self.use_zero_initial_parameters = use_zero_initial_parameters
        self.parameters_per_step = 1

        self._coms = None
        self.first_step = False
        self._current_max_grad = None
        self._optimal_circuit = None
        self._ret = {}

        self.adapt_step_history = {
            'gradient_list': [],  # updated in _compute_gradients
            'max_gradient': [],  # updated in _ansatz_operator_list
            'optimal_parameters': [],  # updated in _run
            'circuit': [],  # updated in _run
            'operators': [],  # updated in _ansatz_operator_list
            'vqe_ret': [],  # updated in _run
            'energy_history': [],  # updated in _run
            'Total Eval Time': 0, #added by WillB
            'Total num evals': 0  #added by WillB
        }
예제 #18
0
    def __init__(
            self,
            operator_pool,
            initial_state,
            vqe_optimizer,
            hamiltonian,
            max_iters,
            energy_step_tol= 1e-8,
            auto_conversion=True,
            use_zero_initial_parameters=False,
            postprocessing = False,
            include_parameter = True
        ): #most of these params no longer matter, should edit to remove necessity
        self._quantum_instance = None
        super().__init__(operator_pool,
            initial_state,
            vqe_optimizer,
            hamiltonian,
            max_iters, #mximum number of iterations
            grad_tol = 1e-3, #stopping criteria if we were using gradient tolerance (we're not)
            max_evals_grouped=1,#unsure what this means
            aux_operators=None, #additional operators in pool
            auto_conversion=True, #when using VQE algorithm auto converts operators to best representaiton for backend
            use_zero_initial_parameters=False #Make your parameters start at zero before gradient based optimization
        ) #initialization from ADAPTVQE
        self.energy_step_tol = energy_step_tol #the stopping criteria for energy step
        self.hamiltonian = hamiltonian
        self.postprocessing = postprocessing
        self.include_parameter = include_parameter

        if initial_state is None: #creates new initial state if none passed
            self.initial_state = Zero(num_qubits=operator_pool.num_qubits) #Custom(hamiltonian.num_qubits, state='uniform')
        else:
            self.initial_state = initial_state

        #clean up old dictionary
        del self.adapt_step_history['gradient_list']
        del self.adapt_step_history['max_gradient']
        #del self.adapt_step_history['vqe_ret']

        #self.adapt_step_history.update({'Total Eval Time': 0})
        #self.adapt_step_history.update({'Total num Evals': 0})
        self.adapt_step_history.update({'Total number energy iterations': 0}) 
        self.adapt_step_history.update({'Max Energy Step': 0})
예제 #19
0
 def test_vqe_caching_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,
                'matrix',
                batch_mode=batch_mode)
     circuit_cache = CircuitCache(skip_qobj_deepcopy=True)
     quantum_instance_caching = QuantumInstance(backend,
                                                circuit_cache=circuit_cache,
                                                skip_qobj_validation=True)
     result_caching = algo.run(quantum_instance_caching)
     self.assertLessEqual(circuit_cache.misses, 1)
     self.assertAlmostEqual(
         self.reference_vqe_result['statevector_simulator']['energy'],
         result_caching['energy'])
예제 #20
0
    def test_vqe_qasm_snapshot_mode(self, var_form_type):
        """ 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.qubit_op.num_qubits
        init_state = Zero(num_qubits)
        var_form = RY(num_qubits, depth=3, initial_state=init_state)
        if var_form_type is QuantumCircuit:
            params = ParameterVector('θ', var_form.num_parameters)
            var_form = var_form.construct_circuit(params)

        optimizer = L_BFGS_B()
        algo = VQE(self.qubit_op, var_form, optimizer, max_evals_grouped=1)
        quantum_instance = QuantumInstance(backend, shots=1,
                                           seed_simulator=aqua_globals.random_seed,
                                           seed_transpiler=aqua_globals.random_seed)
        result = algo.run(quantum_instance)
        self.assertAlmostEqual(result.eigenvalue.real, -1.85727503, places=6)
            "real": 0.18093119978423156
        },
        "label": "XX"
    }]
}

qubit_op = WeightedPauliOperator.from_dict(pauli_dict)
num_qubits = qubit_op.num_qubits
print('Number of qubits: {}'.format(num_qubits))

# ### Picking Quantum Circuit to Represent Wavefunction
# We will be discussing details on these waveforms tomorrow

# In[3]:

init_state = Zero(num_qubits)
var_form = RY(num_qubits, initial_state=init_state)

# # Using Simulator Backend

# In[4]:

backend = BasicAer.get_backend('statevector_simulator')

# ## Import Different Optimizers and Compare

# In[10]:

from qiskit.aqua.components.optimizers import COBYLA, L_BFGS_B, SLSQP, SPSA
import numpy as np
from qiskit.aqua import QuantumInstance, aqua_globals
 def test_qubits_5_circuit(self):
     self.zero = Zero(5)
     cct = self.zero.construct_circuit('circuit')
     self.assertEqual(cct.qasm(), 'OPENQASM 2.0;\ninclude "qelib1.inc";\nqreg q[5];\n')
warnings.simplefilter("ignore")

backend = Aer.get_backend('statevector_simulator')
qi = QuantumInstance(backend)

pool_info = {'names': [], 'exp vals': []}
evals = 0

num_qubits = 4

pool = PauliPool.from_all_pauli_strings(
    num_qubits)  #all possible pauli strings
q = QuantumRegister(num_qubits, name='q')

circ = Zero(num_qubits).construct_circuit('circuit', q)

for op in pool.pool:
    pool_info['names'].append(op.print_details())

pool_info['exp vals'], evals = multi_circuit_eval(circ, pool.pool, qi, True)

for i in range(0, (len(pool_info['exp vals']))):
    pool_info['exp vals'][i] = complex(pool_info['exp vals'][i][0])

print('evals', evals)

out_file = open("Pauli_values.csv", "w+")

pool_info_df = pd.DataFrame(pool_info)
pool_info_df.to_csv('Pauli_values.csv')
cvqe_dict = {'2': [], '3': [], '4': [], '5': [], '6': [], '7': [], '8': [], '9': [], '10': []}
vqe_dict = {'2': [], '3': [], '4': [], '5': [], '6': [], '7': [], '8': [], '9': [], '10': []}
exact_dict = {'2': [], '3': [], '4': [], '5': [], '6': [], '7': [], '8': [], '9': [], '10': []}
num_qubits = 4
#test = random_diagonal_hermitian(2)
#print(test.print_details())
#mat = to_matrix_operator(test)
#print(mat.print_details())
for i in range(0,1):
    k = 0
    runtime_sum = 0
    exact_time_sum = 0
    vqeruntime_sum = 0
    print('num_qubits', num_qubits)
    while k < runs:
        initial_state = Zero(num_qubits)
        op_list = []
        wop = 0*WeightedPauliOperator.from_list(paulis=[Pauli.from_label('I'*num_qubits)], weights=[1.0])
        #mat = np.random.uniform(0, 1, size=(2**num_qubits, 2**num_qubits)) + 1j * np.random.uniform(0, 1, size=(2**num_qubits, 2**num_qubits))
        #mat = np.conjugate(np.transpose(mat)) + mat
        
        #ham = to_weighted_pauli_operator(MatrixOperator(mat)) #creates random hamiltonian from random matrix "mat"
        ham = get_h_4_hamiltonian(0.25, 2, "jw")
        #ham = retrieve_ham(0, num_qubits = num_qubits)
        print('old_ham', ham.print_details())
        #ham = get_h_4_hamiltonian(0.5,2,'jw')
        #op_list = retrieve_op_list(0, rev = True, num_qubits = num_qubits)
        #for op in op_list:
        #    print(op.print_details())
        op_list = [WeightedPauliOperator.from_list([Pauli.from_label('IIXX')]), WeightedPauliOperator.from_list([Pauli.from_label('XXXY')])]
        #op_list = [WeightedPauliOperator.from_list([Pauli.from_label('YYZZ')],[1.0]),
예제 #25
0
    def __init__(self,
                 operator_pool: OperatorPool,
                 initial_state: Union[InitialState, None],
                 vqe_optimizer: Optimizer,
                 hamiltonian: BaseOperator,
                 max_iters: int = 10,
                 grad_tol: float = 1e-3,
                 max_evals_grouped=1,
                 aux_operators=None,
                 auto_conversion=True,
                 use_zero_initial_parameters: Union[bool, float] = True,
                 callback=None,
                 step_callbacks=[],
                 drop_duplicate_circuits=True,
                 return_best_result: bool = False,
                 parameter_tolerance=None,
                 compute_hessian: bool = False,
                 operator_selector: OperatorSelector = None):
        super().__init__(return_best_result)

        self.operator_pool = deepcopy(operator_pool)
        if initial_state is None:
            self.initial_state = Zero(num_qubits=operator_pool.num_qubits)
        else:
            self.initial_state = initial_state
        self.vqe_optimizer = vqe_optimizer
        self.hamiltonian = hamiltonian
        self.max_iters = max_iters
        self.grad_tol = grad_tol
        self.max_evals_grouped = max_evals_grouped
        self.aux_operators = aux_operators
        self.auto_conversion = auto_conversion
        self._compute_hessian = compute_hessian
        self._drop_duplicate_circuits = drop_duplicate_circuits
        self.callback = callback
        self.step_callbacks = step_callbacks

        if operator_selector is None:
            self._operator_selector = ADAPTOperatorSelector(
                self.hamiltonian,
                operator_pool=self.operator_pool,
                drop_duplicate_circuits=self._drop_duplicate_circuits)
        else:
            self._operator_selector = operator_selector

        if type(use_zero_initial_parameters) is bool:
            self.use_zero_initial_parameters = use_zero_initial_parameters
            self.__new_par = 0.0
        elif type(use_zero_initial_parameters) is float:
            self.use_zero_initial_parameters = True
            self.__new_par = use_zero_initial_parameters
        else:
            raise ValueError(
                'Invalid option for new parameters supplied: {}'.format(
                    use_zero_initial_parameters))

        self.parameters_per_step = 1
        self._coms = None
        self._dcoms = None
        self._parameter_tolerance = parameter_tolerance

        if len(self.step_callbacks) == 0:
            self.step_callbacks.append(MaxGradientStopper(self.grad_tol))
예제 #26
0
 def test_qubits_2_circuit(self):
     """ Qubits 2 Circuit test """
     zero = Zero(2)
     cct = zero.construct_circuit('circuit')
     self.assertEqual(cct.qasm(),
                      'OPENQASM 2.0;\ninclude "qelib1.inc";\nqreg q[2];\n')
 def test_qubits_2_vector(self):
     """ Qubits 2 vector test """
     zero = Zero(2)
     cct = zero.construct_circuit('vector')
     np.testing.assert_array_equal(cct, [1.0, 0.0, 0.0, 0.0])
예제 #28
0
    def __init__(self,
                 operator_pool: OperatorPool,
                 initial_state: Union[InitialState, None],
                 vqe_optimizer: Optimizer,
                 hamiltonian: BaseOperator,
                 max_iters: int = 10,
                 energy_tol: float = 1e-3,
                 max_evals_grouped=1,
                 aux_operators=None,
                 auto_conversion=True,
                 initial_parameters: Union[int, float] = 0,
                 callback=None,
                 step_callbacks=[],
                 drop_duplicate_circuits=True,
                 return_best_result: bool = False,
                 parameter_tolerance=None,
                 compute_hessian: bool = False,
                 operator_selector: OperatorSelector = None,
                 parameters_per_step: int = 1):
        super().__init__(return_best_result)

        self.operator_pool = deepcopy(operator_pool)
        if initial_state is None:
            self.initial_state = Zero(num_qubits=operator_pool.num_qubits)
        else:
            self.initial_state = initial_state
        self.vqe_optimizer = vqe_optimizer
        self.hamiltonian = hamiltonian
        self.max_iters = max_iters
        self.energy_tol = energy_tol
        self.max_evals_grouped = max_evals_grouped
        self.aux_operators = aux_operators
        self.auto_conversion = auto_conversion
        self._compute_hessian = compute_hessian
        self._drop_duplicate_circuits = drop_duplicate_circuits
        self.callback = callback
        self.step_callbacks = step_callbacks

        self.ham_list = split_into_paulis(self.hamiltonian)

        if operator_selector is None:  #need to change, should be roto
            self._operator_selector = Ha_max_OperatorSelector(
                self.hamiltonian,
                operator_pool=self.operator_pool,
                drop_duplicate_circuits=self._drop_duplicate_circuits,
            )
        else:
            self._operator_selector = operator_selector

        self._parameter_tolerance = parameter_tolerance

        if initial_parameters == 0:
            self.initial_parameters = 0
            self.__new_par = 0.0
        elif initial_parameters == 1:
            self.initial_parameters = 1
            self.__new_par = 0.0
        elif initial_parameters == 2:
            self.initial_parameters = 2
        else:
            raise ValueError(
                'Invalid option for new parameters supplied: {}'.format(
                    initial_parameters))