Exemplo n.º 1
0
    def init_params(self, params, algo_input):
        """
        Initialize via parameters dictionary and algorithm input instance

        Args:
            params (dict): parameters dictionary
            algo_input (EnergyInput): EnergyInput instance
        """
        if algo_input is None:
            raise AlgorithmError("EnergyInput instance is required.")

        operator = algo_input.qubit_op

        qaoa_params = params.get(QuantumAlgorithm.SECTION_KEY_ALGORITHM)
        operator_mode = qaoa_params.get(QAOA.PROP_OPERATOR_MODE)
        p = qaoa_params.get(QAOA.PROP_P)
        initial_point = qaoa_params.get(QAOA.PROP_INIT_POINT)

        # Set up optimizer
        opt_params = params.get(QuantumAlgorithm.SECTION_KEY_OPTIMIZER)
        optimizer = get_optimizer_instance(opt_params['name'])
        optimizer.init_params(opt_params)

        self.init_args(operator, operator_mode, p, optimizer,
                       opt_init_point=initial_point, aux_operators=algo_input.aux_ops)
Exemplo n.º 2
0
    def init_params(self, params, algo_input):
        # Set up optimizer
        opt_params = params.get(QuantumAlgorithm.SECTION_KEY_OPTIMIZER)
        optimizer = get_optimizer_instance(opt_params['name'])
        # hard-coded params if SPSA is used.
        if opt_params['name'] == 'SPSA' and opt_params['parameters'] is None:
            opt_params['parameters'] = np.asarray(
                [4.0, 0.1, 0.602, 0.101, 0.0])
        optimizer.init_params(opt_params)

        # Set up variational form
        fea_map_params = params.get(QuantumAlgorithm.SECTION_KEY_FEATURE_MAP)
        num_qubits = self._auto_detect_qubitnum(algo_input.training_dataset)
        fea_map_params['num_qubits'] = num_qubits
        feature_map = get_feature_map_instance(fea_map_params['name'])
        feature_map.init_params(fea_map_params)

        # Set up variational form
        var_form_params = params.get(QuantumAlgorithm.SECTION_KEY_VAR_FORM)
        var_form_params['num_qubits'] = num_qubits
        var_form = get_variational_form_instance(var_form_params['name'])
        var_form.init_params(var_form_params)

        self.init_args(algo_input.training_dataset, algo_input.test_dataset,
                       algo_input.datapoints, optimizer, feature_map, var_form)
Exemplo n.º 3
0
    def init_params(self, params, algo_input):
        """
        Initialize via parameters dictionary and algorithm input instance

        Args:
            params (dict): parameters dictionary
            algo_input (EnergyInput): EnergyInput instance
        """
        if algo_input is None:
            raise AlgorithmError("EnergyInput instance is required.")

        operator = algo_input.qubit_op

        qaoa_params = params.get(QuantumAlgorithm.SECTION_KEY_ALGORITHM)
        operator_mode = qaoa_params.get(QAOA.PROP_OPERATOR_MODE)
        p = qaoa_params.get(QAOA.PROP_P)
        initial_point = qaoa_params.get(QAOA.PROP_INIT_POINT)

        # Set up optimizer
        opt_params = params.get(QuantumAlgorithm.SECTION_KEY_OPTIMIZER)
        optimizer = get_optimizer_instance(opt_params['name'])
        optimizer.init_params(opt_params)

        if 'statevector' not in self._backend and operator_mode == 'matrix':
            logger.debug('Qasm simulation does not work on {} mode, changing \
                            the operator_mode to paulis'.format(operator_mode))
            operator_mode = 'paulis'

        self.init_args(operator,
                       operator_mode,
                       p,
                       optimizer,
                       opt_init_point=initial_point,
                       aux_operators=algo_input.aux_ops)
Exemplo n.º 4
0
    def test_svm_variational_directly(self):
        np.random.seed(self.random_seed)
        svm = get_algorithm_instance("QSVM.Variational")
        svm.random_seed = self.random_seed
        svm.setup_quantum_backend(backend='local_qasm_simulator', shots=1024)

        optimizer = get_optimizer_instance('SPSA')
        optimizer.init_args(max_trials=10, c0=4.0, skip_calibration=True)
        optimizer.set_options(save_steps=1)
        num_qubits = 2

        feature_map = get_feature_map_instance('SecondOrderExpansion')
        feature_map.init_args(num_qubits=num_qubits, depth=2)

        var_form = get_variational_form_instance('RYRZ')
        var_form.init_args(num_qubits=num_qubits, depth=3)

        svm.init_args(self.training_data, self.testing_data, None, optimizer,
                      feature_map, var_form)
        result = svm.run()

        np.testing.assert_array_almost_equal(result['opt_params'],
                                             self.ref_opt_params,
                                             decimal=4)
        np.testing.assert_array_almost_equal(result['training_loss'],
                                             self.ref_train_loss,
                                             decimal=8)

        self.assertEqual(result['testing_accuracy'], 0.5)
Exemplo n.º 5
0
    def init_params(self, params, algo_input):
        algo_params = params.get(QuantumAlgorithm.SECTION_KEY_ALGORITHM)
        override_spsa_params = algo_params.get('override_SPSA_params')

        # Set up optimizer
        opt_params = params.get(QuantumAlgorithm.SECTION_KEY_OPTIMIZER)
        optimizer = get_optimizer_instance(opt_params['name'])
        # If SPSA then override SPSA params as reqd to our predetermined values
        if opt_params['name'] == 'SPSA' and override_spsa_params:
            opt_params['c0'] = 4.0
            opt_params['c1'] = 0.1
            opt_params['c2'] = 0.602
            opt_params['c3'] = 0.101
            opt_params['c4'] = 0.0
            opt_params['skip_calibration'] = True
        optimizer.init_params(opt_params)

        # Set up variational form
        fea_map_params = params.get(QuantumAlgorithm.SECTION_KEY_FEATURE_MAP)
        num_qubits = get_feature_dimension(algo_input.training_dataset)
        fea_map_params['num_qubits'] = num_qubits
        feature_map = get_feature_map_instance(fea_map_params['name'])
        feature_map.init_params(fea_map_params)

        # Set up variational form
        var_form_params = params.get(QuantumAlgorithm.SECTION_KEY_VAR_FORM)
        var_form_params['num_qubits'] = num_qubits
        var_form = get_variational_form_instance(var_form_params['name'])
        var_form.init_params(var_form_params)

        self.init_args(algo_input.training_dataset, algo_input.test_dataset,
                       algo_input.datapoints, optimizer, feature_map, var_form)
Exemplo n.º 6
0
 def test_vqe_direct(self):
     num_qbits = self.algo_input.qubit_op.num_qubits
     init_state = get_initial_state_instance('ZERO')
     init_state.init_args(num_qbits)
     var_form = get_variational_form_instance('RY')
     var_form.init_args(num_qbits, 3, initial_state=init_state)
     optimizer = get_optimizer_instance('L_BFGS_B')
     optimizer.init_args()
     algo = get_algorithm_instance('VQE')
     algo.setup_quantum_backend(backend='local_statevector_simulator')
     algo.init_args(self.algo_input.qubit_op, 'matrix', var_form, optimizer)
     result = algo.run()
     self.assertAlmostEqual(result['energy'], -1.85727503)
Exemplo n.º 7
0
    def init_params(self, params, algo_input):
        """
        Initialize via parameters dictionary and algorithm input instance

        Args:
            params (dict): parameters dictionary
            algo_input (EnergyInput): EnergyInput instance
        """
        if algo_input is None:
            raise AlgorithmError("EnergyInput instance is required.")

        operator = algo_input.qubit_op

        vqe_params = params.get(QuantumAlgorithm.SECTION_KEY_ALGORITHM)
        operator_mode = vqe_params.get('operator_mode')
        initial_point = vqe_params.get('initial_point')

        # Set up initial state, we need to add computed num qubits to params
        init_state_params = params.get(
            QuantumAlgorithm.SECTION_KEY_INITIAL_STATE)
        init_state_params['num_qubits'] = operator.num_qubits
        init_state = get_initial_state_instance(init_state_params['name'])
        init_state.init_params(init_state_params)

        # Set up variational form, we need to add computed num qubits, and initial state to params
        var_form_params = params.get(QuantumAlgorithm.SECTION_KEY_VAR_FORM)
        var_form_params['num_qubits'] = operator.num_qubits
        var_form_params['initial_state'] = init_state
        var_form = get_variational_form_instance(var_form_params['name'])
        var_form.init_params(var_form_params)

        # Set up optimizer
        opt_params = params.get(QuantumAlgorithm.SECTION_KEY_OPTIMIZER)
        optimizer = get_optimizer_instance(opt_params['name'])
        optimizer.init_params(opt_params)

        if 'statevector' not in self._backend and operator_mode == 'matrix':
            logger.debug('Qasm simulation does not work on {} mode, changing \
                            the operator_mode to paulis'.format(operator_mode))
            operator_mode = 'paulis'

        self.init_args(operator,
                       operator_mode,
                       var_form,
                       optimizer,
                       opt_init_point=initial_point,
                       aux_operators=algo_input.aux_ops)
        logger.info(self.print_setting())
Exemplo n.º 8
0
    def test_qaoa(self, w, p, solutions):
        self.log.debug('Testing {}-step QAOA with MaxCut on graph\n{}'.format(p, w))
        np.random.seed(0)
        optimizer = get_optimizer_instance('COBYLA')
        qubitOp, offset = maxcut.get_maxcut_qubitops(w)
        qaoa = get_algorithm_instance('QAOA')
        qaoa.init_args(qubitOp, 'matrix', p, optimizer)
        qaoa.setup_quantum_backend(backend='local_statevector_simulator', shots=100)

        result = qaoa.run()
        x = maxcut.sample_most_likely(result['eigvecs'][0])
        graph_solution = maxcut.get_graph_solution(x)
        self.log.debug('energy:             {}'.format(result['energy']))
        self.log.debug('time:               {}'.format(result['eval_time']))
        self.log.debug('maxcut objective:   {}'.format(result['energy'] + offset))
        self.log.debug('solution:           {}'.format(graph_solution))
        self.log.debug('solution objective: {}'.format(maxcut.maxcut_value(x, w)))
        self.assertIn(''.join([str(int(i)) for i in graph_solution]), solutions)
Exemplo n.º 9
0
    def init_params(self, params, algo_input):
        SVMQK_params = params.get(QuantumAlgorithm.SECTION_KEY_ALGORITHM)

        circuit_depth = SVMQK_params.get('circuit_depth')
        print_info = SVMQK_params.get('print_info')

        # Set up optimizer
        opt_params = params.get(QuantumAlgorithm.SECTION_KEY_OPTIMIZER)
        optimizer = get_optimizer_instance(opt_params['name'])
        # hard-coded params if SPSA is used.
        if opt_params['name'] == 'SPSA' and opt_params['parameters'] is None:
            opt_params['parameters'] = np.asarray(
                [4.0, 0.1, 0.602, 0.101, 0.0])
        optimizer.init_params(opt_params)
        optimizer.set_options(save_steps=10)

        self.init_args(algo_input.training_dataset, algo_input.test_dataset,
                       algo_input.datapoints, optimizer, circuit_depth,
                       print_info)
Exemplo n.º 10
0
 def test_tnc(self):
     optimizer = get_optimizer_instance('TNC')
     optimizer.set_options(**{'maxiter': 1000})
     optimizer.init_args(tol=1e-06)
     res = self._optimize(optimizer)
     self.assertLessEqual(res[2], 10000)
Exemplo n.º 11
0
 def test_spsa(self):
     optimizer = get_optimizer_instance('SPSA')
     optimizer.set_options(**{})
     optimizer.init_args(max_trials=10000)
     res = self._optimize(optimizer)
     self.assertLessEqual(res[2], 100000)
Exemplo n.º 12
0
 def test_powell(self):
     optimizer = get_optimizer_instance('POWELL')
     optimizer.set_options(**{'maxfev': 10000})
     optimizer.init_args(tol=1e-06)
     res = self._optimize(optimizer)
     self.assertLessEqual(res[2], 10000)
Exemplo n.º 13
0
 def test_nelder_mead(self):
     optimizer = get_optimizer_instance('NELDER_MEAD')
     optimizer.set_options(**{'maxfev': 10000})
     optimizer.init_args(tol=1e-06)
     res = self._optimize(optimizer)
     self.assertLessEqual(res[2], 10000)
Exemplo n.º 14
0
 def test_nlopt(self, name):
     optimizer = get_optimizer_instance(name)
     optimizer.set_options(**{'max_evals': 50000})
     optimizer.init_args()
     res = self._optimize(optimizer)
     self.assertLessEqual(res[2], 50000)
Exemplo n.º 15
0
def configurar_COBYLA(configuracionaqua):
    """Esta función obtiene una instancia del optimizador COBYLA configurada"""
    cobyla = get_optimizer_instance('COBYLA')
    cobyla.set_options(maxiter=configuracionaqua["COBYLA"]["max_eval"])
    return cobyla
Exemplo n.º 16
0
 def test_l_bfgs_b(self):
     optimizer = get_optimizer_instance('L_BFGS_B')
     optimizer.set_options(**{'maxfun': 1000})
     optimizer.init_args()
     res = self._optimize(optimizer)
     self.assertLessEqual(res[2], 10000)
Exemplo n.º 17
0
    def test_vqe_2_iqpe(self):
        num_qbits = self.algo_input.qubit_op.num_qubits
        var_form = get_variational_form_instance('RYRZ')
        var_form.init_args(num_qbits, 3)
        optimizer = get_optimizer_instance('SPSA')
        optimizer.init_args(max_trials=10)
        # optimizer.set_options(**{'max_trials': 500})
        algo = get_algorithm_instance('VQE')
        algo.setup_quantum_backend(backend='qasm_simulator')
        algo.init_args(self.algo_input.qubit_op, 'paulis', var_form, optimizer)
        result = algo.run()

        self.log.debug('VQE result: {}.'.format(result))

        self.ref_eigenval = -1.85727503

        num_time_slices = 50
        num_iterations = 11

        state_in = VarFormBased()
        state_in.init_args(var_form, result['opt_params'])

        iqpe = get_algorithm_instance('IQPE')
        iqpe.setup_quantum_backend(backend='qasm_simulator',
                                   shots=100,
                                   skip_transpiler=True)
        iqpe.init_args(
            self.algo_input.qubit_op,
            state_in,
            num_time_slices,
            num_iterations,
            paulis_grouping='random',
            expansion_mode='suzuki',
            expansion_order=2,
        )

        result = iqpe.run()

        self.log.debug('top result str label:         {}'.format(
            result['top_measurement_label']))
        self.log.debug('top result in decimal:        {}'.format(
            result['top_measurement_decimal']))
        self.log.debug('stretch:                      {}'.format(
            result['stretch']))
        self.log.debug('translation:                  {}'.format(
            result['translation']))
        self.log.debug('final eigenvalue from QPE:    {}'.format(
            result['energy']))
        self.log.debug('reference eigenvalue:         {}'.format(
            self.ref_eigenval))
        self.log.debug('ref eigenvalue (transformed): {}'.format(
            (self.ref_eigenval + result['translation']) * result['stretch']))
        self.log.debug('reference binary str label:   {}'.format(
            decimal_to_binary((self.ref_eigenval + result['translation']) *
                              result['stretch'],
                              max_num_digits=num_iterations + 3,
                              fractional_part_only=True)))

        np.testing.assert_approx_equal(self.ref_eigenval,
                                       result['energy'],
                                       significant=2)