Exemplo n.º 1
0
    def test_docplex_tsp(self):
        """ Docplex tsp test """
        # Generating a graph of 3 nodes
        n = 3
        ins = tsp.random_tsp(n)
        graph = nx.Graph()
        graph.add_nodes_from(np.arange(0, n, 1))
        num_node = ins.dim

        # Create an Ising Hamiltonian with docplex.
        mdl = Model(name='tsp')
        x = {(i, p): mdl.binary_var(name='x_{0}_{1}'.format(i, p))
             for i in range(num_node) for p in range(num_node)}
        tsp_func = mdl.sum(ins.w[i, j] * x[(i, p)] * x[(j, (p + 1) % num_node)]
                           for i in range(num_node) for j in range(num_node)
                           for p in range(num_node))
        mdl.minimize(tsp_func)
        for i in range(num_node):
            mdl.add_constraint(
                mdl.sum(x[(i, p)] for p in range(num_node)) == 1)
        for j in range(num_node):
            mdl.add_constraint(
                mdl.sum(x[(i, j)] for i in range(num_node)) == 1)
        qubit_op, offset = docplex.get_operator(mdl)

        e_e = NumPyMinimumEigensolver(qubit_op)
        result = e_e.run()

        ee_expected = NumPyMinimumEigensolver(QUBIT_OP_TSP)
        expected_result = ee_expected.run()

        # Compare objective
        self.assertAlmostEqual(result.eigenvalue.real + offset,
                               expected_result.eigenvalue.real + OFFSET_TSP)
Exemplo n.º 2
0
    def test_docplex_maxcut(self):
        """ Docplex maxcut test """
        # Generating a graph of 4 nodes
        n = 4
        graph = nx.Graph()
        graph.add_nodes_from(np.arange(0, n, 1))
        elist = [(0, 1, 1.0), (0, 2, 1.0), (0, 3, 1.0), (1, 2, 1.0),
                 (2, 3, 1.0)]
        graph.add_weighted_edges_from(elist)
        # Computing the weight matrix from the random graph
        w = np.zeros([n, n])
        for i in range(n):
            for j in range(n):
                temp = graph.get_edge_data(i, j, default=0)
                if temp != 0:
                    w[i, j] = temp['weight']

        # Create an Ising Hamiltonian with docplex.
        mdl = Model(name='max_cut')
        mdl.node_vars = mdl.binary_var_list(list(range(4)), name='node')
        maxcut_func = mdl.sum(w[i, j] * mdl.node_vars[i] *
                              (1 - mdl.node_vars[j]) for i in range(n)
                              for j in range(n))
        mdl.maximize(maxcut_func)
        qubit_op, offset = docplex.get_operator(mdl)

        e_e = NumPyMinimumEigensolver(qubit_op)
        result = e_e.run()

        ee_expected = NumPyMinimumEigensolver(QUBIT_OP_MAXCUT)
        expected_result = ee_expected.run()

        # Compare objective
        self.assertAlmostEqual(result.eigenvalue.real + offset,
                               expected_result.eigenvalue.real + OFFSET_MAXCUT)
Exemplo n.º 3
0
 def test_tsp(self):
     """ TSP test """
     algo = NumPyMinimumEigensolver(self.qubit_op)
     result = algo.run()
     x = sample_most_likely(result.eigenstate)
     order = tsp.get_tsp_solution(x)
     np.testing.assert_array_equal(order, [1, 2, 0])
Exemplo n.º 4
0
    def test_docplex_constant_and_quadratic_terms_in_object_function(self):
        """ Docplex Constant and Quadratic terms in Object function test """
        # Create an Ising Hamiltonian with docplex
        laplacian = np.array([[-3., 1., 1., 1.], [1., -2., 1., -0.],
                              [1., 1., -3., 1.], [1., -0., 1., -2.]])

        mdl = Model()
        # pylint: disable=unsubscriptable-object
        n = laplacian.shape[0]
        bias = [0] * 4
        x = {i: mdl.binary_var(name='x_{0}'.format(i)) for i in range(n)}
        couplers_func = mdl.sum(2 * laplacian[i, j] * (2 * x[i] - 1) *
                                (2 * x[j] - 1) for i in range(n - 1)
                                for j in range(i, n))
        bias_func = mdl.sum(float(bias[i]) * x[i] for i in range(n))
        ising_func = couplers_func + bias_func
        mdl.minimize(ising_func)
        qubit_op, offset = docplex.get_operator(mdl)

        e_e = NumPyMinimumEigensolver(qubit_op)
        result = e_e.run()

        expected_result = -22

        # Compare objective
        self.assertAlmostEqual(result.eigenvalue.real + offset,
                               expected_result)
Exemplo n.º 5
0
    def test_deprecated_qft(self):
        """Test the QPE algorithm on the deprecated QFT component."""
        qubit_op = self._dict['QUBIT_OP_SIMPLE']
        exact_eigensolver = NumPyMinimumEigensolver(qubit_op)
        results = exact_eigensolver.run()
        ref_eigenval = results.eigenvalue
        ref_eigenvec = results.eigenstate
        state_in = Custom(qubit_op.num_qubits, state_vector=ref_eigenvec)

        warnings.filterwarnings('ignore', category=DeprecationWarning)
        iqft = Standard(5)
        qpe = QPE(qubit_op,
                  state_in,
                  iqft,
                  num_time_slices=1,
                  num_ancillae=5,
                  expansion_mode='suzuki',
                  expansion_order=2,
                  shallow_circuit_concat=True)

        backend = BasicAer.get_backend('qasm_simulator')
        quantum_instance = QuantumInstance(backend,
                                           shots=100,
                                           seed_transpiler=1,
                                           seed_simulator=1)

        # run qpe
        result = qpe.run(quantum_instance)
        warnings.filterwarnings('always', category=DeprecationWarning)
        self.assertAlmostEqual(result.eigenvalue.real,
                               ref_eigenval.real,
                               delta=2e-2)
Exemplo n.º 6
0
 def test_partition(self):
     """ Partition test """
     algo = NumPyMinimumEigensolver(self.qubit_op, aux_operators=[])
     result = algo.run()
     x = sample_most_likely(result.eigenstate)
     if x[0] != 0:
         x = np.logical_not(x) * 1
     np.testing.assert_array_equal(x, [0, 1, 0])
Exemplo n.º 7
0
 def test_set_packing(self):
     """ set packing test """
     algo = NumPyMinimumEigensolver(self.qubit_op, aux_operators=[])
     result = algo.run()
     x = sample_most_likely(result.eigenstate)
     ising_sol = set_packing.get_solution(x)
     np.testing.assert_array_equal(ising_sol, [0, 1, 1])
     oracle = self._brute_force()
     self.assertEqual(np.count_nonzero(ising_sol), oracle)
Exemplo n.º 8
0
 def test_vertex_cover(self):
     """ Vertex Cover test """
     algo = NumPyMinimumEigensolver(self.qubit_op, aux_operators=[])
     result = algo.run()
     x = sample_most_likely(result.eigenstate)
     sol = vertex_cover.get_graph_solution(x)
     np.testing.assert_array_equal(sol, [0, 0, 1])
     oracle = self._brute_force()
     self.assertEqual(np.count_nonzero(sol), oracle)
 def test_portfolio(self):
     """ portfolio test """
     algo = NumPyMinimumEigensolver(self.qubit_op)
     result = algo.run()
     selection = sample_most_likely(result.eigenstate)
     value = portfolio.portfolio_value(selection, self.muu, self.sigma,
                                       self.risk, self.budget, self.penalty)
     np.testing.assert_array_equal(selection, [0, 1, 1, 0])
     self.assertAlmostEqual(value, -0.00679917)
Exemplo n.º 10
0
 def test_tsp(self):
     """ TSP test """
     algo = NumPyMinimumEigensolver(self.qubit_op)
     result = algo.run()
     x = sample_most_likely(result.eigenstate)
     # print(self.qubit_op.to_opflow().eval(result.eigenstate).adjoint().eval(result.eigenstate))
     order = tsp.get_tsp_solution(x)
     np.testing.assert_equal(tsp.tsp_value(order, self.ins.w),
                             tsp.tsp_value([1, 2, 0], self.ins.w))
Exemplo n.º 11
0
 def test_stable_set(self):
     """ Stable set test """
     algo = NumPyMinimumEigensolver(self.qubit_op, aux_operators=[])
     result = algo.run()
     x = sample_most_likely(result.eigenstate)
     self.assertAlmostEqual(result.eigenvalue.real, -29.5)
     self.assertAlmostEqual(result.eigenvalue.real + 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))
    def test_mapping(self):
        """ mapping test """
        qubit_op = self.bos_op.mapping('direct', threshold=1e-5)
        algo = NumPyMinimumEigensolver(
            qubit_op,
            filter_criterion=self.bos_op.direct_mapping_filtering_criterion)
        result = algo.run()
        gs_energy = np.real(result['eigenvalue'])

        self.assertAlmostEqual(gs_energy, self.reference_energy, places=4)
Exemplo n.º 13
0
 def test_clique(self):
     """ Clique test """
     algo = NumPyMinimumEigensolver(self.qubit_op, aux_operators=[])
     result = algo.run()
     x = sample_most_likely(result.eigenstate)
     ising_sol = clique.get_graph_solution(x)
     np.testing.assert_array_equal(ising_sol, [1, 1, 1, 1, 1])
     oracle = self._brute_force()
     self.assertEqual(clique.satisfy_or_not(ising_sol, self.w, self.k),
                      oracle)
Exemplo n.º 14
0
 def test_graph_partition(self):
     """ Graph Partition test """
     algo = NumPyMinimumEigensolver(self.qubit_op, aux_operators=[])
     result = algo.run()
     x = sample_most_likely(result.eigenstate)
     # check against the oracle
     ising_sol = graph_partition.get_graph_solution(x)
     np.testing.assert_array_equal(ising_sol, [0, 1, 0, 1])
     oracle = self._brute_force()
     self.assertEqual(graph_partition.objective_value(x, self.w), oracle)
    def test_iqpe(self, distance):
        """ iqpe test """
        self.log.debug('Testing End-to-End with IQPE on H2 with '
                       'inter-atomic distance %s.', distance)
        try:
            driver = PySCFDriver(atom='H .0 .0 .0; H .0 .0 {}'.format(distance),
                                 unit=UnitsType.ANGSTROM,
                                 charge=0,
                                 spin=0,
                                 basis='sto3g')
        except QiskitChemistryError:
            self.skipTest('PYSCF driver does not appear to be installed')
        molecule = driver.run()
        qubit_mapping = 'parity'
        fer_op = FermionicOperator(h1=molecule.one_body_integrals,
                                   h2=molecule.two_body_integrals)
        qubit_op = fer_op.mapping(map_type=qubit_mapping, threshold=1e-10)
        qubit_op = Z2Symmetries.two_qubit_reduction(qubit_op, 2)

        exact_eigensolver = NumPyMinimumEigensolver(qubit_op)
        results = exact_eigensolver.run()
        reference_energy = results.eigenvalue.real
        self.log.debug('The exact ground state energy is: %s', results.eigenvalue.real)

        num_particles = molecule.num_alpha + molecule.num_beta
        two_qubit_reduction = True
        num_orbitals = qubit_op.num_qubits + (2 if two_qubit_reduction else 0)

        num_time_slices = 1
        num_iterations = 6
        state_in = HartreeFock(num_orbitals, num_particles, qubit_mapping, two_qubit_reduction)
        iqpe = IQPE(qubit_op, state_in, num_time_slices, num_iterations,
                    expansion_mode='suzuki', expansion_order=2,
                    shallow_circuit_concat=True)
        backend = qiskit.BasicAer.get_backend('qasm_simulator')
        quantum_instance = QuantumInstance(backend, shots=100)

        result = iqpe.run(quantum_instance)

        self.log.debug('top result str label:     %s', result.top_measurement_label)
        self.log.debug('top result in decimal:    %s', result.top_measurement_decimal)
        self.log.debug('stretch:                  %s', result.stretch)
        self.log.debug('translation:              %s', result.translation)
        self.log.debug('final energy from QPE:    %s', result.eigenvalue.real)
        self.log.debug('reference energy:         %s', reference_energy)
        self.log.debug('ref energy (transformed): %s',
                       (reference_energy + result.translation) * result.stretch)
        self.log.debug('ref binary str label:     %s', decimal_to_binary(
            (reference_energy + result.translation) * result.stretch,
            max_num_digits=num_iterations + 3,
            fractional_part_only=True
        ))

        np.testing.assert_approx_equal(result.eigenvalue.real, reference_energy, significant=2)
Exemplo n.º 16
0
 def test_cme(self):
     """ Basic test """
     algo = NumPyMinimumEigensolver(self.qubit_op,
                                    aux_operators=self.aux_ops)
     result = algo.run()
     self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
     self.assertEqual(len(result.aux_operator_eigenvalues), 2)
     np.testing.assert_array_almost_equal(
         result.aux_operator_eigenvalues[0], [2, 0])
     np.testing.assert_array_almost_equal(
         result.aux_operator_eigenvalues[1], [0, 0])
Exemplo n.º 17
0
    def test_iqpe(self, qubit_op, simulator, num_time_slices, num_iterations,
                  use_circuits):
        """ iqpe test """
        self.log.debug('Testing IQPE')
        qubit_op = self._dict[qubit_op]
        exact_eigensolver = NumPyMinimumEigensolver(qubit_op)
        results = exact_eigensolver.run()

        ref_eigenval = results.eigenvalue
        ref_eigenvec = results.eigenstate
        self.log.debug('The exact eigenvalue is:       %s', ref_eigenval)
        self.log.debug('The corresponding eigenvector: %s', ref_eigenvec)

        if use_circuits:
            state_in = QuantumCircuit(qubit_op.num_qubits)
            state_in.initialize(ref_eigenvec.primitive.data, state_in.qubits)
        else:
            with warnings.catch_warnings():
                warnings.filterwarnings('ignore', category=DeprecationWarning)
                state_in = Custom(qubit_op.num_qubits,
                                  state_vector=ref_eigenvec)
        iqpe = IQPE(qubit_op,
                    state_in,
                    num_time_slices,
                    num_iterations,
                    expansion_mode='suzuki',
                    expansion_order=2,
                    shallow_circuit_concat=True)

        backend = BasicAer.get_backend(simulator)
        quantum_instance = QuantumInstance(backend, shots=100)

        result = iqpe.run(quantum_instance)
        self.log.debug('top result str label:         %s',
                       result.top_measurement_label)
        self.log.debug('top result in decimal:        %s',
                       result.top_measurement_decimal)
        self.log.debug('stretch:                      %s', result.stretch)
        self.log.debug('translation:                  %s', result.translation)
        self.log.debug('final eigenvalue from IQPE:   %s', result.eigenvalue)
        self.log.debug('reference eigenvalue:         %s', ref_eigenval)
        self.log.debug('ref eigenvalue (transformed): %s',
                       (ref_eigenval.real + result.translation) *
                       result.stretch)
        self.log.debug(
            'reference binary str label:   %s',
            decimal_to_binary(
                (ref_eigenval.real + result.translation) * result.stretch,
                max_num_digits=num_iterations + 3,
                fractional_part_only=True))

        np.testing.assert_approx_equal(result.eigenvalue.real,
                                       ref_eigenval.real,
                                       significant=2)
Exemplo n.º 18
0
    def test_qpe(self, qubit_op, simulator, num_time_slices, n_ancillae):
        """Test the QPE algorithm."""
        self.log.debug('Testing QPE')
        qubit_op = self._dict[qubit_op]
        exact_eigensolver = NumPyMinimumEigensolver(qubit_op)
        results = exact_eigensolver.run()

        ref_eigenval = results.eigenvalue
        ref_eigenvec = results.eigenstate
        self.log.debug('The exact eigenvalue is:       %s', ref_eigenval)
        self.log.debug('The corresponding eigenvector: %s', ref_eigenvec)

        state_in = Custom(qubit_op.num_qubits, state_vector=ref_eigenvec)
        iqft = QFT(n_ancillae).inverse()

        qpe = QPE(qubit_op,
                  state_in,
                  iqft,
                  num_time_slices,
                  n_ancillae,
                  expansion_mode='suzuki',
                  expansion_order=2,
                  shallow_circuit_concat=True)

        backend = BasicAer.get_backend(simulator)
        quantum_instance = QuantumInstance(backend,
                                           shots=100,
                                           seed_transpiler=1,
                                           seed_simulator=1)

        # run qpe
        result = qpe.run(quantum_instance)

        # report result
        self.log.debug('top result str label:         %s',
                       result.top_measurement_label)
        self.log.debug('top result in decimal:        %s',
                       result.top_measurement_decimal)
        self.log.debug('stretch:                      %s', result.stretch)
        self.log.debug('translation:                  %s', result.translation)
        self.log.debug('final eigenvalue from QPE:    %s', result.eigenvalue)
        self.log.debug('reference eigenvalue:         %s', ref_eigenval)
        self.log.debug('ref eigenvalue (transformed): %s',
                       (ref_eigenval + result.translation) * result.stretch)
        self.log.debug(
            'reference binary str label:   %s',
            decimal_to_binary(
                (ref_eigenval.real + result.translation) * result.stretch,
                max_num_digits=n_ancillae + 3,
                fractional_part_only=True))

        self.assertAlmostEqual(result.eigenvalue.real,
                               ref_eigenval.real,
                               delta=2e-2)
Exemplo n.º 19
0
    def test_qpe(self, qubit_op, simulator, num_time_slices, n_ancillae):
        """ QPE test """
        self.log.debug('Testing QPE')
        tmp_qubit_op = qubit_op.copy()
        exact_eigensolver = NumPyMinimumEigensolver(qubit_op)
        results = exact_eigensolver.run()

        ref_eigenval = results.eigenvalue
        ref_eigenvec = results.eigenstate
        self.log.debug('The exact eigenvalue is:       %s', ref_eigenval)
        self.log.debug('The corresponding eigenvector: %s', ref_eigenvec)

        state_in = Custom(qubit_op.num_qubits, state_vector=ref_eigenvec)
        iqft = Standard(n_ancillae)

        qpe = QPEMinimumEigensolver(qubit_op,
                                    state_in,
                                    iqft,
                                    num_time_slices,
                                    n_ancillae,
                                    expansion_mode='suzuki',
                                    expansion_order=2,
                                    shallow_circuit_concat=True)

        backend = BasicAer.get_backend(simulator)
        quantum_instance = QuantumInstance(backend, shots=100)

        # run qpe
        result = qpe.run(quantum_instance)

        # report result
        self.log.debug('top result str label:         %s',
                       result.top_measurement_label)
        self.log.debug('top result in decimal:        %s',
                       result.top_measurement_decimal)
        self.log.debug('stretch:                      %s', result.stretch)
        self.log.debug('translation:                  %s', result.translation)
        self.log.debug('final eigenvalue from QPE:    %s', result.eigenvalue)
        self.log.debug('reference eigenvalue:         %s', ref_eigenval)
        self.log.debug('ref eigenvalue (transformed): %s',
                       (ref_eigenval + result.translation) * result.stretch)
        self.log.debug(
            'reference binary str label:   %s',
            decimal_to_binary(
                (ref_eigenval.real + result.translation) * result.stretch,
                max_num_digits=n_ancillae + 3,
                fractional_part_only=True))

        np.testing.assert_approx_equal(result.eigenvalue.real,
                                       ref_eigenval.real,
                                       significant=2)
        self.assertEqual(tmp_qubit_op, qubit_op,
                         "Operator is modified after QPE.")
Exemplo n.º 20
0
    def _run_knapsack(values, weights, max_weight):
        qubit_op, _ = knapsack.get_operator(values, weights, max_weight)

        algo = NumPyMinimumEigensolver(qubit_op)
        result = algo.run()
        x = sample_most_likely(result.eigenstate)

        solution = knapsack.get_solution(x, values)
        value, weight = knapsack.knapsack_value_weight(solution, values,
                                                       weights)

        return solution, value, weight
Exemplo n.º 21
0
 def test_exact_cover(self):
     """ Exact Cover test """
     algo = NumPyMinimumEigensolver(self.qubit_op, aux_operators=[])
     result = algo.run()
     x = sample_most_likely(result.eigenstate)
     ising_sol = exact_cover.get_solution(x)
     np.testing.assert_array_equal(ising_sol, [0, 1, 1, 0])
     oracle = self._brute_force()
     self.assertEqual(
         exact_cover.check_solution_satisfiability(ising_sol,
                                                   self.list_of_subsets),
         oracle)
Exemplo n.º 22
0
    def test_qpe(self, qubit_op, simulator, num_time_slices, n_ancillae, use_circuit_library):
        """ QPE test """
        self.log.debug('Testing QPE')
        qubit_op = self._dict[qubit_op]
        exact_eigensolver = NumPyMinimumEigensolver(qubit_op)
        results = exact_eigensolver.run()

        ref_eigenval = results.eigenvalue
        ref_eigenvec = results.eigenstate
        self.log.debug('The exact eigenvalue is:       %s', ref_eigenval)
        self.log.debug('The corresponding eigenvector: %s', ref_eigenvec)

        state_in = Custom(qubit_op.num_qubits, state_vector=ref_eigenvec)
        if use_circuit_library:
            iqft = QFT(n_ancillae).inverse()
        else:
            # ignore deprecation warnings from QFTs
            warnings.filterwarnings(action="ignore", category=DeprecationWarning)
            iqft = Standard(n_ancillae)

        qpe = QPE(qubit_op, state_in, iqft, num_time_slices, n_ancillae,
                  expansion_mode='suzuki', expansion_order=2,
                  shallow_circuit_concat=True)

        backend = BasicAer.get_backend(simulator)
        quantum_instance = QuantumInstance(backend, shots=100)

        # run qpe
        result = qpe.run(quantum_instance)

        # report result
        self.log.debug('top result str label:         %s', result.top_measurement_label)
        self.log.debug('top result in decimal:        %s', result.top_measurement_decimal)
        self.log.debug('stretch:                      %s', result.stretch)
        self.log.debug('translation:                  %s', result.translation)
        self.log.debug('final eigenvalue from QPE:    %s', result.eigenvalue)
        self.log.debug('reference eigenvalue:         %s', ref_eigenval)
        self.log.debug('ref eigenvalue (transformed): %s',
                       (ref_eigenval + result.translation) * result.stretch)
        self.log.debug('reference binary str label:   %s', decimal_to_binary(
            (ref_eigenval.real + result.translation) * result.stretch,
            max_num_digits=n_ancillae + 3,
            fractional_part_only=True
        ))

        np.testing.assert_approx_equal(result.eigenvalue.real, ref_eigenval.real, significant=2)

        if not use_circuit_library:
            warnings.filterwarnings(action="always", category=DeprecationWarning)
    def test_cme_reuse(self):
        """ Test reuse """
        # Start with no operator or aux_operators, give via compute method
        algo = NumPyMinimumEigensolver()
        result = algo.compute_minimum_eigenvalue(self.qubit_op)
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertEqual(self.qubit_op, algo.operator)
        self.assertIsNone(result.aux_operator_eigenvalues)

        # Set operator to None and go again
        algo.operator = None
        with self.assertRaises(AquaError):
            _ = algo.run()

        # Set operator back as it was and go again
        algo.operator = self.qubit_op
        result = algo.compute_minimum_eigenvalue()
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertIsNone(result.aux_operator_eigenvalues)

        # Add aux_operators and go again
        result = algo.compute_minimum_eigenvalue(aux_operators=self.aux_ops)
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertEqual(len(result.aux_operator_eigenvalues), 2)
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[0], [2, 0])
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[1], [0, 0])

        # "Remove" aux_operators and go again
        result = algo.compute_minimum_eigenvalue(aux_operators=[])
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertIsNone(result.aux_operator_eigenvalues)

        # Set aux_operators and go again
        algo.aux_operators = self.aux_ops
        result = algo.compute_minimum_eigenvalue()
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertEqual(len(result.aux_operator_eigenvalues), 2)
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[0], [2, 0])
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[1], [0, 0])
        np.testing.assert_array_equal(self.aux_ops, algo.aux_operators)

        # Finally just set one of aux_operators and main operator, remove aux_operators
        result = algo.compute_minimum_eigenvalue(self.aux_ops[0], [])
        self.assertAlmostEqual(result.eigenvalue, 2 + 0j)
        self.assertIsNone(result.aux_operator_eigenvalues)
    def test_cme_filter_empty(self):
        """ Test with filter always returning False """

        # define filter criterion
        # pylint: disable=unused-argument
        def criterion(x, v, a_v):
            return False

        algo = NumPyMinimumEigensolver(self.qubit_op,
                                       aux_operators=self.aux_ops,
                                       filter_criterion=criterion)
        result = algo.run()
        self.assertEqual(result.eigenvalue, None)
        self.assertEqual(result.eigenstate, None)
        self.assertEqual(result.aux_operator_eigenvalues, None)
Exemplo n.º 25
0
    def test_docplex_integer_constraints(self):
        """ Docplex Integer Constraints test """
        # Create an Ising Hamiltonian with docplex
        mdl = Model(name='integer_constraints')
        x = {i: mdl.binary_var(name='x_{0}'.format(i)) for i in range(1, 5)}
        max_vars_func = mdl.sum(x[i] for i in range(1, 5))
        mdl.maximize(max_vars_func)
        mdl.add_constraint(mdl.sum(i * x[i] for i in range(1, 5)) == 3)
        qubit_op, offset = docplex.get_operator(mdl)

        e_e = NumPyMinimumEigensolver(qubit_op)
        result = e_e.run()

        expected_result = -2

        # Compare objective
        self.assertEqual(result.eigenvalue.real + offset, expected_result)
Exemplo n.º 26
0
    def test_constants_in_left_side_and_variables_in_right_side(self):
        """ Test Constant values on the left-hand side of constraints and
        variables on the right-hand side of constraints for the DOcplex translator"""
        mdl = Model('left_constants_and_right_variables')
        x = mdl.binary_var(name='x')
        y = mdl.binary_var(name='y')
        mdl.maximize(mdl.sum(x + y))
        mdl.add_constraint(x == y)

        qubit_op, offset = docplex.get_operator(mdl)
        print(qubit_op.print_details())
        e_e = NumPyMinimumEigensolver(qubit_op)
        result = e_e.run()

        self.assertEqual(result['eigenvalue'] + offset, -2)
        actual_sol = result['eigenstate'].to_matrix().tolist()
        self.assertListEqual(actual_sol, [0, 0, 0, 1])
Exemplo n.º 27
0
    def test_cme_filter(self):
        """ Basic test """

        # define filter criterion
        # pylint: disable=unused-argument
        def criterion(x, v, a_v):
            return v >= -0.5

        algo = NumPyMinimumEigensolver(self.qubit_op,
                                       aux_operators=self.aux_ops,
                                       filter_criterion=criterion)

        result = algo.run()
        self.assertAlmostEqual(result.eigenvalue, -0.22491125 + 0j)
        self.assertEqual(len(result.aux_operator_eigenvalues), 2)
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[0], [2, 0])
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[1], [0, 0])
Exemplo n.º 28
0
 def test_cme_fail(self):
     """ Test no operator """
     algo = NumPyMinimumEigensolver()
     with self.assertRaises(AquaError):
         _ = algo.run()
Exemplo n.º 29
0
    nx.draw_networkx_edge_labels(G2,
                                 pos,
                                 font_color='b',
                                 edge_labels=edge_labels)


qubitOp, offset = tsp.get_operator(ins)
print('Offset:', offset)
print('Ising Hamiltonian:')
print(qubitOp.print_details())

qp = QuadraticProgram()
qp.from_ising(qubitOp, offset, linear=True)
qp.to_docplex().prettyprint()

result = exact.solve(qp)
print(result)

ee = NumPyMinimumEigensolver(qubitOp)
result = ee.run()

# print('energy:', result.eigenvalue.real)
# print('tsp objective:', result.eigenvalue.real + offset)
x = sample_most_likely(result.eigenstate)
print('feasible:', tsp.tsp_feasible(x))
z = tsp.get_tsp_solution(x)
print('solution:', z)
print('solution objective:', tsp.tsp_value(z, ins.w))
# draw_tsp_solution(G, z, colors, pos)
# draw_tsp_solution(G, best_order, colors, pos)