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)
Generar un operador qubit consciente de la conectividad que represente un modelo cuántico de tipo XYZ.
Esta función implementa el siguiente Hamiltoniano:
Donde G(V,E) es el gráfico del mapa coupling proporcionado.
A menudo se incluye un factor 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, , en cada eje cartesiano.
- ext_magnetic_field (Sequence[float]) – Los coeficientes, , 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
PauliOrderStrategypara 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
generate_time_evolution_circuit
generate_time_evolution_circuit(operator, *, synthesis=None, time=1.0)
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)
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
PauliOrderStrategy
class PauliOrderStrategy(value)
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"].