Pular para o conteúdo principal

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 ρ=UR0|\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: 0n|0\rangle^{\otimes n}. Para o estado padrão, nosso operador unitário é URIU_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=X0000|001\rangle = X_0 |000\rangle.

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

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
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 é URX2CNOT01H0000U_{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.