Skip to main content
IBM Quantum Platform

generadores_de_problemas

qiskit_addon_utils.problem_generators

Métodos de utilidad para la generación de problemas.

generate_xyz_hamiltonian

generate_xyz_hamiltonian(coupling, *, coupling_constants=(1.0, 1.0, 1.0), ext_magnetic_field=(0.0, 0.0, 0.0), pauli_order_strategy=PauliOrderStrategy.ColorThenInteraction, coloring=None)

GitHub

Generar un operador qubit consciente de la conectividad que represente un modelo cuántico de tipo XYZ.

Esta función implementa el siguiente Hamiltoniano:

H^=(j,k)E(Jxσjxσkx+Jyσjyσky+Jzσjzσkz)+jV(hxσjx+hyσjy+hzσjz)\hat{H} = \sum_{(j,k)\in E} (J_{x} \sigma_j^{x} \sigma_{k}^{x} + J_{y} \sigma_j^{y} \sigma_{k}^{y} + J_{z} \sigma_j^{z} \sigma_{k}^{z}) + \sum_{j\in V} (h_{x} \sigma_j^{x} + h_{y} \sigma_j^{y} + h_{z} \sigma_j^{z})

Donde G(V,E) es el gráfico del mapa coupling proporcionado.

Nota

A menudo se incluye un factor 12-\frac{1}{2} fuera de la suma de esta ecuación. Este factor no se aplica internamente, por lo que debe tenerse en cuenta en las entradas coupling_constants y ext_magnetic_field .

>>> from qiskit.transpiler import CouplingMap
>>> from qiskit_addon_utils.problem_generators import generate_xyz_hamiltonian

>>> coupling_map = CouplingMap.from_line(10)
>>> hamiltonian = generate_xyz_hamiltonian(
...     coupling_map,
...     coupling_constants=(0.4, 0.4, 0.0),
...     ext_magnetic_field=(0.0, 0.0, 0.6),
... )
>>> print(hamiltonian)
SparsePauliOp(['IIIIIIIXXI', 'IIIIIIIYYI', 'IIIIIXXIII', 'IIIIIYYIII',
               'IIIXXIIIII', 'IIIYYIIIII', 'IXXIIIIIII', 'IYYIIIIIII',
               'IIIIIIIIXX', 'IIIIIIIIYY', 'IIIIIIXXII', 'IIIIIIYYII',
               'IIIIXXIIII', 'IIIIYYIIII', 'IIXXIIIIII', 'IIYYIIIIII',
               'XXIIIIIIII', 'YYIIIIIIII', 'IIIIIIIIIZ', 'IIIIIIIIZI',
               'IIIIIIIZII', 'IIIIIIZIII', 'IIIIIZIIII', 'IIIIZIIIII',
               'IIIZIIIIII', 'IIZIIIIIII', 'IZIIIIIIII', 'ZIIIIIIIII'],
            coeffs=[0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j,
                    0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j,
                    0.4+0.j, 0.4+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j,
                    0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j])

Parámetros

  • coupling (CouplingMap |PyGraph |PyDiGraph) – El subgrafo de qubits sobre el que mapear el Hamiltoniano. Se ignorará la direccionalidad de las aristas del grafo y las aristas paralelas se tratarán como una única arista durante la generación del operador.
  • coupling_constants (Sequence[float]) – Las constantes de acoplamiento de valor real, JiJ_i, en cada eje cartesiano.
  • ext_magnetic_field (Sequence[float]) – Los coeficientes, hih_i, que representan un campo magnético a lo largo de cada eje cartesiano.
  • pauli_order_strategy (PauliOrderStrategy) – Indica la estrategia de iteración en la que se generarán los términos de Pauli. Consulte PauliOrderStrategy para más detalles.
  • coloring (dict[tuple[int, int], int] | None) – Un diccionario opcional que codifica la coloración del grafo que se utiliza para ordenar los términos hamiltonianos. Este diccionario asigna etiquetas de borde (en forma de pares de enteros) a valores de color (enteros simples). Los términos de interacción hamiltoniana se añadirán aumentando el valor del color. Dentro de cada color, los bordes se ordenan, lo que no cambia nada físicamente pero facilita la lectura de los resultados.

Devuelve

Un operador qubit que describe un modelo cuántico de tipo XYZ. El i-ésimo qubit en el operador corresponde al nodo en el índice i en el mapa de acoplamiento.

Eleva

  • ValueError - Las constantes de acoplamiento deben especificarse mediante una secuencia length-3 de valores en coma flotante.
  • ValueError - El campo magnético externo debe especificarse mediante una secuencia length-3 de valores en coma flotante.

Tipo de retorno

SparsePauliOp

generate_time_evolution_circuit

generate_time_evolution_circuit(operator, *, synthesis=None, time=1.0)

GitHub

Modelizar la evolución temporal de un operador.

>>> from qiskit.quantum_info import SparsePauliOp
>>> from qiskit.synthesis import SuzukiTrotter
>>> from qiskit.transpiler import CouplingMap
>>> from qiskit_addon_utils.problem_generators import (
...     PauliOrderStrategy,
...     generate_xyz_hamiltonian,
...     generate_time_evolution_circuit,
... )
>>> coupling_map = CouplingMap.from_line(6)
>>> hamiltonian = generate_xyz_hamiltonian(
...     coupling_map,
...     coupling_constants=(0.4, 0.4, 0.0),
...     ext_magnetic_field=(0.0, 0.0, 0.6),
...     pauli_order_strategy=PauliOrderStrategy.InteractionThenColorZigZag,
... )
>>> circ = generate_time_evolution_circuit(
...     hamiltonian, synthesis=SuzukiTrotter(order=2, reps=2), time=2.0
... )
>>> _ = circ.draw("mpl", fold=-1)
Salida del código anterior.

Parámetros

  • operator (SparsePauliOp) – El operador para el que modelar la evolución temporal.
  • synthesis (EvolutionSynthesis | None) – Una estrategia de síntesis. Si None, la síntesis por defecto es la fórmula del producto Lie-Trotter con una sola repetición.
  • time (float) – El tiempo de evolución.

Devuelve

A QuantumCircuit implementando un operador evolutivo en el tiempo.

Tipo de retorno

QuantumCircuit

PauliOrderStrategy

class PauliOrderStrategy(value)

GitHub

Bases: Enum

Enumeración de diferentes ordenaciones de Pauli.

Al construir un Hamiltoniano en un conjunto coloreado de aristas, los términos de Pauli generados pueden ordenarse de diferentes maneras. Este orden de términos en el Hamiltoniano se conserva durante su evolución temporal y, por tanto, afecta directamente al circuito cuántico resultante.

ColorThenInteraction

Valor predeterminado: 1

Esta estrategia itera primero todas las aristas (ordenadas por su valor de color) y luego las interacciones (ordenadas como X, Y, Z).

InteractionThenColor

Valor predeterminado: 2

Esta estrategia es la inversa a ColorThenInteraction. Primero itera las interacciones (ordenadas como X, Y, Z) y después todas las aristas (ordenadas por su valor de color).

InteractionThenColorZigZag

Valor predeterminado: 3

Esta estrategia es similar a la de InteractionThenColor . Sin embargo, alterna la iteración de los bordes incrementando y disminuyendo los valores de color a medida que salta de una interacción a la siguiente. Por ejemplo, si sólo se incluyen las interacciones X y Y y se utilizan tres valores de color ({1, 2, 3}), se obtendrá el siguiente orden: ["X on 1", "X on 2", "X on 3", "Y on 3", "Y on 2", "Y on 1"].

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.