Material didático · Computação Quântica Aplicada · Encontro 01

Fundamentos de Computação Quântica e Implementação de um Classificador XOR com Qiskit

Grupo de Estudos em Quantum Machine Learning — GEQML

Roteiro de estudo e experimentação computacional

Resumo

Este material apresenta uma introdução prática aos fundamentos da computação quântica, destinada a estudantes com experiência em programação e machine learning, mas sem formação prévia na área quântica. A proposta articula os conceitos de qubit, superposição, portas quânticas, emaranhamento e medição com a implementação, em Qiskit, de um circuito que representa a função lógica XOR. O circuito é posteriormente interpretado como um classificador determinístico, estabelecendo correspondências entre atributos, codificação, inferência, probabilidade de saída e avaliação preditiva.

Palavras-chave: computação quântica; quantum machine learning; Qiskit; circuitos quânticos; classificação; XOR.

1. Objetivos de aprendizagem

Ao término do encontro, espera-se que os participantes sejam capazes de:

  1. distinguir bits clássicos, qubits e bits clássicos de medição;
  2. descrever os processos de superposição e medição;
  3. construir circuitos com as portas X, H e CNOT;
  4. codificar atributos binários na base computacional;
  5. interpretar contagens como estimativas de probabilidade; e
  6. relacionar a saída de um circuito a um problema de classificação.

2. Fundamentação conceitual

2.1 Qubit e estado quântico

Um qubit pode ser descrito por uma combinação linear dos estados da base computacional:

\[|\psi\rangle=\alpha|0\rangle+\beta|1\rangle,\qquad |\alpha|^2+|\beta|^2=1.\]

Ao medir o qubit, obtém-se 0 com probabilidade \(|\alpha|^2\) e 1 com probabilidade \(|\beta|^2\).

2.2 Portas quânticas

A porta X inverte os estados da base. A porta Hadamard cria uma superposição equilibrada:

\[H|0\rangle=\frac{|0\rangle+|1\rangle}{\sqrt{2}}.\]

A porta CNOT opera sobre dois qubits: o primeiro atua como controle e o segundo como alvo.

2.3 Medição e shots

Cada shot corresponde a uma nova preparação e medição do circuito. As frequências relativas dos resultados estimam as probabilidades previstas pelo estado quântico.

2.4 Estado de Bell

A aplicação de H seguida de CNOT produz um estado emaranhado cujas medições apresentam correlação perfeita:

\[|\Phi^+\rangle=\frac{|00\rangle+|11\rangle}{\sqrt{2}}.\]

3. Problema e procedimento didático

3.1 Definição do problema

O objetivo consiste em produzir a classe 1 quando as entradas binárias forem diferentes e a classe 0 quando forem iguais:

\[y=x_0\oplus x_1.\]
Tabela 1 — Relação entre entradas e classe esperada
\(x_0\)\(x_1\)\(y\)Interpretação
000Valores iguais
011Valores diferentes
101Valores diferentes
110Valores iguais

3.2 Organização do encontro

Tabela 2 — Distribuição sugerida das atividades
AtividadeFinalidade
ApresentaçãoRelacionar XOR e classificação.
FundamentosIntroduzir qubits, portas e medição.
SuperposiçãoImplementar e analisar H.
Estado de BellObservar correlação e emaranhamento.
Circuito XORCodificar dados e produzir a classe.
AvaliaçãoCalcular métricas e discutir resultados.

Recomenda-se a sequência prever–executar–explicar: antes de cada execução, registrae o resultado esperado; depois, compare a hipótese com os dados observados.

4. Implementação computacional

4.1 Preparação do ambiente

O código pode ser executado no Google Colab, Jupyter Notebook ou VS Code.

%pip install -q "qiskit[all]~=2.4.0"

from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.primitives import StatevectorSampler
from qiskit.visualization import plot_histogram

sampler = StatevectorSampler(seed=42)

4.2 Experimento de superposição

circuito_h = QuantumCircuit(1)
circuito_h.h(0)
circuito_h.measure_all()

resultado = sampler.run([circuito_h], shots=1000).result()[0]
contagens = resultado.data.meas.get_counts()

print(contagens)
plot_histogram(contagens)

4.3 Estado de Bell

circuito_bell = QuantumCircuit(2)
circuito_bell.h(0)
circuito_bell.cx(0, 1)
circuito_bell.measure_all()

resultado = sampler.run([circuito_bell], shots=1000).result()[0]
contagens_bell = resultado.data.meas.get_counts()
plot_histogram(contagens_bell)

4.4 Circuito XOR

A CNOT realiza a transformação:

\[|x_0,x_1\rangle\xrightarrow{\mathrm{CNOT}}|x_0,x_0\oplus x_1\rangle.\]
def criar_circuito_xor(x0, x1):
    if x0 not in (0, 1) or x1 not in (0, 1):
        raise ValueError("As entradas devem ser 0 ou 1.")

    qubits = QuantumRegister(2, "q")
    saida = ClassicalRegister(1, "saida")
    circuito = QuantumCircuit(qubits, saida)

    if x0 == 1:
        circuito.x(qubits[0])
    if x1 == 1:
        circuito.x(qubits[1])

    circuito.cx(qubits[0], qubits[1])
    circuito.measure(qubits[1], saida[0])
    return circuito

4.5 Predição

\[\widehat{y}=\begin{cases}1,&\text{se }P(y=1)\geq0{,}5,\\0,&\text{caso contrário.}\end{cases}\]
def predizer_xor(x0, x1, shots=256):
    circuito = criar_circuito_xor(x0, x1)
    resultado = sampler.run([circuito], shots=shots).result()[0]
    contagens = resultado.data.saida.get_counts()

    probabilidade_1 = contagens.get("1", 0) / shots
    classe_predita = int(probabilidade_1 >= 0.5)
    return classe_predita, probabilidade_1, contagens

5. Avaliação dos resultados

\[\operatorname{Acurácia}=\frac{\text{predições corretas}}{\text{total de exemplos}}.\]
dados = [(0, 0, 0), (0, 1, 1),
         (1, 0, 1), (1, 1, 0)]

acertos = 0
matriz_confusao = [[0, 0], [0, 0]]

for x0, x1, y_real in dados:
    y_predito, p1, _ = predizer_xor(x0, x1)
    matriz_confusao[y_real][y_predito] += 1
    acertos += int(y_real == y_predito)

print("Acurácia:", acertos / len(dados))
print("Matriz:", matriz_confusao)
Tabela 3 — Resultado esperado
MétricaResultado
Acurácia1,00
Matriz de confusão[[2, 0], [0, 2]]

6. Exercícios propostos

  1. Execute o circuito de Hadamard com 10, 100, 1.000 e 10.000 shots e compare as frequências com 0,5.
  2. Construa um circuito que calcule \(y=x_0\oplus x_1\oplus x_2\).
  3. Inverta controle e alvo da CNOT e explique a alteração observada.
  4. Generalize o programa para receber vários exemplos e calcular as métricas automaticamente.

6.1 Produto do encontro

Crie um notebook com os circuitos de superposição, Bell e XOR, a execução dos quatro exemplos, as métricas e uma breve discussão sobre os elementos necessários para tornar o circuito treinável.

7. Continuidade no próximo encontro

O próximo encontro substituirá a regra fixa por um circuito quântico parametrizado, acrescentando:

  1. codificação angular por rotações \(R_Y(\pi x)\);
  2. parâmetros treináveis \(\boldsymbol{\theta}\);
  3. um ansatz com rotações e emaranhamento;
  4. uma função de custo; e
  5. um otimizador clássico.

8. Referências e documentação

  1. IBM QUANTUM. StatevectorSampler: API reference.
  2. IBM QUANTUM. Circuit library.
  3. IBM QUANTUM. Ansätze and variational forms.