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
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:
- distinguir bits clássicos, qubits e bits clássicos de medição;
- descrever os processos de superposição e medição;
- construir circuitos com as portas X, H e CNOT;
- codificar atributos binários na base computacional;
- interpretar contagens como estimativas de probabilidade; e
- 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:
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:
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:
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:
| \(x_0\) | \(x_1\) | \(y\) | Interpretação |
|---|---|---|---|
| 0 | 0 | 0 | Valores iguais |
| 0 | 1 | 1 | Valores diferentes |
| 1 | 0 | 1 | Valores diferentes |
| 1 | 1 | 0 | Valores iguais |
3.2 Organização do encontro
| Atividade | Finalidade |
|---|---|
| Apresentação | Relacionar XOR e classificação. |
| Fundamentos | Introduzir qubits, portas e medição. |
| Superposição | Implementar e analisar H. |
| Estado de Bell | Observar correlação e emaranhamento. |
| Circuito XOR | Codificar dados e produzir a classe. |
| Avaliação | Calcular 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:
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
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
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)
| Métrica | Resultado |
|---|---|
| Acurácia | 1,00 |
| Matriz de confusão | [[2, 0], [0, 2]] |
6. Exercícios propostos
- Execute o circuito de Hadamard com 10, 100, 1.000 e 10.000 shots e compare as frequências com 0,5.
- Construa um circuito que calcule \(y=x_0\oplus x_1\oplus x_2\).
- Inverta controle e alvo da CNOT e explique a alteração observada.
- 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:
- codificação angular por rotações \(R_Y(\pi x)\);
- parâmetros treináveis \(\boldsymbol{\theta}\);
- um ansatz com rotações e emaranhamento;
- uma função de custo; e
- um otimizador clássico.
8. Referências e documentação
- IBM QUANTUM. StatevectorSampler: API reference.
- IBM QUANTUM. Circuit library.
- IBM QUANTUM. Ansätze and variational forms.