Example #1
0
    def test_chc_vscf(self):
        """ chc vscf test """

        co2_2modes_2modals_2body = [
            [[[[0, 0, 0]], 320.8467332810141], [[[0, 1, 1]],
                                                1760.878530705873],
             [[[1, 0, 0]], 342.8218290247543], [[[1, 1, 1]],
                                                1032.396323618631]],
            [[[[0, 0, 0], [1, 0, 0]], -57.34003649795117],
             [[[0, 0, 1], [1, 0, 0]], -56.33205925807966],
             [[[0, 1, 0], [1, 0, 0]], -56.33205925807966],
             [[[0, 1, 1], [1, 0, 0]], -60.13032761856809],
             [[[0, 0, 0], [1, 0, 1]], -65.09576309934431],
             [[[0, 0, 1], [1, 0, 1]], -62.2363839133389],
             [[[0, 1, 0], [1, 0, 1]], -62.2363839133389],
             [[[0, 1, 1], [1, 0, 1]], -121.5533969109279],
             [[[0, 0, 0], [1, 1, 0]], -65.09576309934431],
             [[[0, 0, 1], [1, 1, 0]], -62.2363839133389],
             [[[0, 1, 0], [1, 1, 0]], -62.2363839133389],
             [[[0, 1, 1], [1, 1, 0]], -121.5533969109279],
             [[[0, 0, 0], [1, 1, 1]], -170.744837386338],
             [[[0, 0, 1], [1, 1, 1]], -167.7433236025723],
             [[[0, 1, 0], [1, 1, 1]], -167.7433236025723],
             [[[0, 1, 1], [1, 1, 1]], -179.0536532281924]]
        ]
        num_modes = 2
        num_modals = [2, 2]

        vibrational_op_labels = _create_labels(co2_2modes_2modals_2body)
        vibr_op = VibrationalOp(vibrational_op_labels, num_modes, num_modals)

        converter = QubitConverter(DirectMapper())

        qubit_op = converter.convert_match(vibr_op)

        init_state = VSCF(num_modals)

        num_qubits = sum(num_modals)
        excitations = []
        excitations += generate_vibration_excitations(num_excitations=1,
                                                      num_modals=num_modals)
        excitations += generate_vibration_excitations(num_excitations=2,
                                                      num_modals=num_modals)
        chc_ansatz = CHC(num_qubits,
                         ladder=False,
                         excitations=excitations,
                         initial_state=init_state)

        backend = QuantumInstance(
            BasicAer.get_backend('statevector_simulator'),
            seed_transpiler=2,
            seed_simulator=2)
        optimizer = COBYLA(maxiter=1000)

        algo = VQE(chc_ansatz, optimizer=optimizer, quantum_instance=backend)
        vqe_result = algo.compute_minimum_eigenvalue(qubit_op)
        energy = vqe_result.optimal_value

        self.assertAlmostEqual(energy, self.reference_energy, places=4)
 def test_create_labels(self):
     """Tests that correct labels are built."""
     logfile = self.get_resource_path(
         'CO2_freq_B3LYP_ccpVDZ.log',
         'problems/second_quantization/vibrational/resources')
     driver = GaussianForcesDriver(logfile=logfile)
     watson_hamiltonian = driver.run()
     num_modals = 2
     truncation_order = 3
     num_modes = watson_hamiltonian.num_modes
     num_modals = [num_modals] * num_modes
     boson_hamilt_harm_basis = HarmonicBasis(watson_hamiltonian, num_modals,
                                             truncation_order).convert()
     labels, coeffs = zip(*_create_labels(boson_hamilt_harm_basis))
     self.assertSetEqual(frozenset(labels), frozenset(expected_labels))
     self.assertSetEqual(frozenset(coeffs), frozenset(expected_coeffs))
Example #3
0
def build_vibrational_op_from_ints(h_mat: List[List[Tuple[List[List[int]], complex]]],
                                   num_modes: int,
                                   num_modals: List[int],
                                   ) -> VibrationalOp:
    """
    Builds a :class:`VibrationalOp` based on an integral list as produced by
    :meth:`HarmonicBasis.convert()`.

    Args:
        h_mat: integral list.
        num_modes: the number of modes.
        num_modals: the number of modals.

    Returns:
        The constructed VibrationalOp.
    """
    all_labels = _create_labels(h_mat)

    return VibrationalOp(all_labels, num_modes, num_modals)