Pular para o conteúdo principal
Este projeto está em fase beta. Encontrou um bug? Abra uma issue no GitHub. Tem uma pergunta ou ideia? Pergunte no Discussions — adoraríamos receber seu feedback!
Como está a qualidade da tradução nesta página?

Estados de referência

Nesta lição, vamos explorar como podemos inicializar nosso sistema com um estado de referência para ajudar nosso algoritmo variacional a convergir mais rapidamente. Primeiro, aprenderemos a construir um estado de referência manualmente e, em seguida, exploraremos várias opções padrão que podem ser usadas em um algoritmo variacional.

Diagram of options for references states including default, application-specific, and quantum.

Estado padrão​

Um estado de referência refere-se ao ponto de partida inicial e fixo para nosso problema. Para preparar um estado de referência, precisamos aplicar o unitário não parametrizado apropriado URU_R no início de nosso circuito quântico, de modo que ∣ρ⟩=UR∣0⟩|\rho\rangle = U_R |0\rangle. Se você tiver uma estimativa fundamentada ou um ponto de dados de uma solução ótima existente, o algoritmo variacional provavelmente convergirá mais rapidamente se você o usar como ponto de partida.

O estado de referência mais simples possível é o estado padrão, onde usamos o estado inicial de um circuito quântico de nn qubits: ∣0⟩⊗n|0\rangle^{\otimes n}. Para o estado padrão, nosso operador unitário é UR≡IU_R \equiv I. Devido à sua simplicidade, o estado padrão é um estado de referência válido utilizado em muitos cenários.

Estado de referência clássico​

Suponha que você tenha um sistema de três qubits e queira começar no estado ∣001⟩|001\rangle em vez do estado padrão ∣000⟩|000\rangle. Este é um exemplo de um estado de referência puramente clássico, e para construí-lo, você simplesmente precisa aplicar uma porta X ao qubit 00 (seguindo a ordenação de qubits do Qiskit), pois ∣001⟩=X0∣000⟩|001\rangle = X_0 |000\rangle.

Neste caso, nosso operador unitário é UR≡X0U_R \equiv X_0, o que resulta no estado de referência ∣ρ⟩≡∣001⟩|\rho\rangle \equiv |001\rangle.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.x(0)

qc.draw("mpl")

Output of the previous code cell

Estado de referência quântico​

Suponha que você queira começar com um estado mais complexo que envolva superposição e/ou entrelaçamento, como 12(∣100⟩+∣111⟩)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

Para obter esse estado a partir de ∣000⟩|000\rangle, uma abordagem é usar uma porta Hadamard no qubit 00 (H0H_0), uma porta CNOT (CX) com o qubit 00 como qubit de controle e o qubit 11 como qubit alvo (CNOT01CNOT_{01}), e por fim uma porta XX aplicada ao qubit 22 (X2X_2).

Neste cenário, nosso operador unitário é UR≡X2CNOT01H0∣000⟩U_{R} \equiv X_2CNOT_{01}H_0|000\rangle, e nosso estado de referência é ∣ρ⟩≡12(∣100⟩+∣111⟩)|\rho\rangle \equiv \frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)

qc.draw("mpl")

Output of the previous code cell

Construindo estados de referência usando circuitos modelo​

Também podemos usar diversos circuitos modelo, como o TwoLocal, que permite expressar múltiplos parâmetros ajustáveis e entrelaçamentos com facilidade. Abordaremos esses circuitos modelo com mais detalhes na próxima lição, mas podemos usá-los para nossos estados de referência se vincularmos os parâmetros:

from qiskit.circuit.library import TwoLocal
from math import pi

reference_circuit = TwoLocal(2, "rx", "cz", entanglement="linear", reps=1)
theta_list = [pi / 2, pi / 3, pi / 3, pi / 2]

reference_circuit = reference_circuit.assign_parameters(theta_list)

reference_circuit.decompose().draw("mpl")

Output of the previous code cell

Estados de referência específicos por aplicação​

Aprendizado de máquina quântico​

No contexto de um classificador quântico variacional (VQC), os dados de treinamento são codificados em um estado quântico por meio de um circuito parametrizado conhecido como mapa de características (feature map), onde cada valor de parâmetro representa um ponto de dados do conjunto de treinamento. O zz_feature_map é um tipo de circuito parametrizado que pode ser utilizado para passar nossos pontos de dados (xx) para este mapa de características.

from qiskit.circuit.library import zz_feature_map

data = [0.1, 0.2]

zz_feature_map_reference = zz_feature_map(feature_dimension=2, reps=2)
zz_feature_map_reference = zz_feature_map_reference.assign_parameters(data)
zz_feature_map_reference.decompose().draw("mpl")

Output of the previous code cell

Resumo​

Com esta lição, você aprendeu a inicializar seu sistema usando:

  • Estado de referência padrão

  • Estados de referência clássicos

  • Estados de referência quânticos

  • Estados de referência específicos por aplicação

Nossa carga de trabalho variacional de alto nível é a seguinte:

A circuit diagram of a unitary operator preparing a reference state.

Enquanto os estados de referência são pontos de partida fixos e iniciais, podemos usar uma forma variacional para definir um ansatz que represente uma coleção de estados parametrizados para que nosso algoritmo variacional explore.