geradores de problemas
qiskit_addon_utils.problem_generators
Métodos utilitários para geração 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)
Gerar um operador de qubit com reconhecimento de conectividade que represente um modelo quântico do tipo XYZ.
Essa função implementa o seguinte Hamiltoniano:
Onde G(V,E) é o gráfico do mapa coupling fornecido.
Muitas vezes, há um fator incluído fora da soma dessa equação. Esse fator não é aplicado internamente, portanto, deve ser contabilizado nas entradas coupling_constants e 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) – O subgráfico de qubit no qual mapear o Hamiltoniano. A direcionalidade das bordas do gráfico será ignorada, e as bordas paralelas serão tratadas como uma única borda durante a geração do operador.
- coupling_constants (Sequence[float]) – As constantes de acoplamento com valor real, , em cada eixo cartesiano.
- ext_magnetic_field (Sequence[float]) – Os coeficientes, , representam um campo magnético ao longo de cada eixo cartesiano.
- pauli_order_strategy (PauliOrderStrategy) – Indica a estratégia de iteração na qual os termos de Pauli serão gerados. Veja
PauliOrderStrategypara obter mais detalhes. - coloring (dict[tuple[int, int], int] | None) – Um dicionário opcional que codifica a coloração do gráfico que é usada para classificar os termos hamiltonianos. Esse dicionário mapeia rótulos de borda (na forma de pares de números inteiros) para valores de cor (números inteiros simples). Os termos de interação hamiltoniana serão adicionados ao aumentar o valor da cor. Dentro de cada cor, as bordas são classificadas, o que não altera nada fisicamente, mas resulta em resultados mais fáceis de ler.
Retorna
Um operador de qubit que descreve um modelo quântico do tipo XYZ. O i-ésimo qubit no operador corresponde ao nó no índice i no mapa de acoplamento.
Aumentos
- ValueError - As constantes de acoplamento devem ser especificadas por uma sequência length-3 de valores de ponto flutuante.
- ValueError - O campo magnético externo deve ser especificado por uma sequência length-3 de valores de ponto flutuante.
Tipo de retorno
generate_time_evolution_circuit
generate_time_evolution_circuit(operator, *, synthesis=None, time=1.0)
Modelar a evolução temporal de um 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) – O operador para o qual será modelada a evolução do tempo.
- synthesis (EvolutionSynthesis | None) – Uma estratégia de síntese. Se
None, a síntese padrão é a fórmula do produto Lie-Trotter com uma única repetição. - time (float) – O tempo de evolução.
Retorna
A QuantumCircuit implementando um operador com evolução temporal.
Tipo de retorno
PauliOrderStrategy
class PauliOrderStrategy(value)
Bases: Enum
Enumeração de diferentes ordenações de Pauli.
Ao construir um Hamiltoniano em um conjunto colorido de bordas, os termos de Pauli gerados podem ser ordenados de diferentes maneiras. Essa ordem de termos no Hamiltoniano é preservada durante sua evolução temporal e, portanto, afeta diretamente o circuito quântico resultante.
ColorThenInteraction
Valor Padrão: 1
Essa estratégia primeiro itera todas as bordas (classificadas por seu valor de cor) e, em seguida, as interações (classificadas como X, Y, Z).
InteractionThenColor
Valor Padrão: 2
Essa estratégia é o inverso de ColorThenInteraction. Primeiro, ele itera as interações (classificadas como X, Y, Z) e, em seguida, todas as bordas (classificadas por seu valor de cor).
InteractionThenColorZigZag
Valor Padrão: 3
Essa estratégia é semelhante à de InteractionThenColor . No entanto, ele alterna entre iterar as bordas incrementando e decrementando os valores de cor à medida que salta de uma interação para outra. Por exemplo, se apenas as interações X e Y forem incluídas e três valores de cores forem usados ({1, 2, 3}), isso resultará na seguinte ordem: ["X on 1", "X on 2", "X on 3", "Y on 3", "Y on 2", "Y on 1"].