Autor: Clark Maltempi

Data: 21 de agosto de 2025

Resumo: Este artigo explora o conceito de amostragem quântica como uma ferramenta computacional poderosa para entender distribuições de probabilidade complexas, intratáveis para computadores clássicos. Detalhamos a vantagem teórica de usar sistemas quânticos como amostradores nativos e fornecemos um guia prático, passo a passo, para implementar e testar um circuito de amostragem usando Qiskit. O experimento consiste em modelar uma distribuição de carga de trabalho não uniforme entre servidores, comprovando a viabilidade e precisão da simulação.

1. Introdução: O Desafio da Amostragem em Sistemas Complexos

Em inúmeras áreas da ciência e da indústria — desde finanças e logística até a descoberta de medicamentos e machine learning — nos deparamos com um desafio comum: entender um sistema com um número vasto de configurações possíveis. Prever o comportamento do mercado financeiro, o clima ou uma rede social é difícil porque a distribuição de probabilidade que governa esses sistemas é imensamente complexa.

A amostragem é a técnica fundamental que usamos para lidar com isso. Em vez de analisar o sistema inteiro (o que é muitas vezes impossível), extraímos um subconjunto representativo de amostras e, a partir delas, inferimos as propriedades do todo. É o mesmo princípio de uma pesquisa eleitoral ou do controle de qualidade em uma fábrica.

O limite clássico é atingido quando a própria distribuição de probabilidade é computacionalmente cara demais para ser calculada. Como você pode tirar uma amostra justa de um sorteio se você nem sequer consegue escrever o nome de todos os participantes na urna?

2. A Vantagem Intrínseca da Amostragem Quântica

É aqui que a computação quântica oferece uma mudança de paradigma. Como vimos em nossos experimentos anteriores, um computador quântico é, por sua própria natureza, um sistema probabilístico.

  • O Estado Quântico é uma Distribuição de Probabilidade: Um registrador de N qubits em superposição não apenas explora $2^N$ estados, mas o seu estado quântico completo (descrito por amplitudes) é uma representação física de uma distribuição de probabilidade. A probabilidade de se medir um determinado estado é o quadrado da amplitude daquele estado ($P=|\alpha|^2$).

  • A Medição é uma Amostra: O ato de medir um circuito quântico é o ato de extrair uma única amostra dessa distribuição de probabilidade. O comando shots=1024 que usamos é, literalmente, uma instrução para "execute o experimento e tire 1024 amostras".

A vantagem quântica é monumental: o computador quântico não precisa calcular a probabilidade de cada um dos $2^N$ resultados para depois sortear um. Ele fisicamente encarna a distribuição de probabilidade em seu hardware. A amostragem torna-se uma operação nativa e eficiente, permitindo-nos extrair amostras de distribuições tão complexas que um supercomputador clássico levaria milênios apenas para descrevê-las.

3. Aplicação: Simulação de Balanceamento de Carga (Load Balancing)

Para comprovar este conceito, vamos simular um problema prático.

  • Cenário: Uma empresa de tecnologia tem 4 servidores (identificados pelos estados de 2 qubits: 00, 01, 10, 11). As tarefas chegam e precisam ser distribuídas. No entanto, os servidores não são iguais; alguns são mais potentes ou estão mais ociosos. Queremos distribuir as tarefas segundo uma política específica (uma distribuição de probabilidade não uniforme).

  • Distribuição de Carga Alvo:

    • Servidor 00: Deve receber 10% das tarefas.
    • Servidor 01: Deve receber 40% das tarefas (servidor principal).
    • Servidor 10: Deve receber 20% das tarefas.
    • Servidor 11: Deve receber 30% das tarefas.
  • Objetivo do Teste: Construir um circuito quântico que modele esta distribuição e, ao amostrá-lo (medi-lo), simule a alocação de tarefas, comprovando que as frequências obtidas correspondem à distribuição alvo.

4. Experimento: Construção e Teste do Amostrador Quântico

Vamos seguir o passo a passo para construir e validar nossa simulação.

Passo 1: A Matemática da Preparação do Estado

Para que nosso sistema de 2 qubits tenha as probabilidades acima, precisamos definir suas amplitudes.

Relação entre Probabilidade e Amplitude

Na física quântica, a probabilidade (P) de medir um determinado estado é o quadrado da sua amplitude (α). Isso é um princípio fundamental do nosso experimento.

Probabilidade.png

Com base nas probabilidades que definimos para o nosso teste de amostragem (10%, 40%, 20%, 30%), as amplitudes necessárias para os 4 estados são:

estado.png

Para encontrar a amplitude (α) necessária para alcançar uma probabilidade (P) desejada, nós usamos a raiz quadrada:

raiz.png

Estes quatro valores formam o "vetor de estado" que queremos que nossos qubits representem.

Passo 2: Construção do Circuito com a Porta Initialize

Construir um circuito manualmente com portas H, CX, e portas de rotação para chegar a este estado exato é um processo complexo. Felizmente, o Qiskit nos fornece uma ferramenta de alto nível para isso: a porta initialize. Ela pega um vetor de estado desejado e configura os qubits para você.

O Código (amostragem_quantica.py)

# amostragem_quantica.py
import numpy as np
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram

# --- PASSO 1: Definir a Distribuição de Probabilidade Alvo ---
# Probabilidades para os estados '00', '01', '10', '11'
probabilidades_alvo = [0.1, 0.4, 0.2, 0.3]
print(f"Distribuição Alvo: {probabilidades_alvo}\n")

# --- PASSO 2: Calcular as Amplitudes Necessárias ---
# A amplitude é a raiz quadrada da probabilidade
amplitudes_iniciais = np.sqrt(probabilidades_alvo)

# --- PASSO 3: Construir o Circuito Quântico ---
# Usaremos 2 qubits para representar os 4 servidores
circuit = QuantumCircuit(2, 2)

# A porta 'initialize' configura os qubits para o estado desejado
# Ela é a ferramenta perfeita para criar amostradores customizados
circuit.initialize(amplitudes_iniciais, [0, 1])
circuit.measure([0, 1], [0, 1])

print("--- Diagrama do Circuito de Amostragem ---")
print(circuit.draw())

# --- PASSO 4: Executar a Simulação (Amostragem) ---
# Usaremos um número alto de shots para obter uma boa estatística
num_shots = 4096 # Potência de 2 é comum, mas qualquer número grande serve
simulator = AerSimulator()
compiled_circuit = transpile(circuit, simulator)
result = simulator.run(compiled_circuit, shots=num_shots).result()
counts = result.get_counts(compiled_circuit)

print(f"\n--- Resultados da Amostragem ({num_shots} tarefas distribuídas) ---")
print(f"Contagens brutas: {counts}\n")

# --- PASSO 5: Análise e Comprovação ---
print("--- Tabela de Comprovação ---")
print("Servidor | Prob. Alvo (%) | Prob. Obtida (%) | Erro Relativo (%)")
print("----------------------------------------------------------------")

# Dicionário para guardar as probabilidades obtidas
probabilidades_obtidas = {}
for i, state in enumerate(['00', '01', '10', '11']):
    # Obter a contagem para o estado; se não existir, é 0
    count = counts.get(state, 0)
    
    # Calcular a probabilidade obtida
    prob_obtida = (count / num_shots)
    probabilidades_obtidas[state] = prob_obtida
    
    # Calcular o erro relativo para avaliar a precisão
    prob_alvo = probabilidades_alvo[i]
    erro_relativo = (abs(prob_obtida - prob_alvo) / prob_alvo) * 100 if prob_alvo > 0 else 0
    
    print(f"  {state}    |      {prob_alvo*100:<9.2f} |      {prob_obtida*100:<10.2f} |        {erro_relativo:<.2f}")

# --- PASSO 6: Visualização Final ---
# Plota lado a lado a distribuição alvo e a obtida
legend = ['Alvo', 'Obtida']
plot_histogram([probabilidades_alvo, probabilidades_obtidas], legend=legend,
               title='Comparação: Distribuição Alvo vs. Amostragem Quântica')
histogram = plot_histogram([probabilidades_alvo, probabilidades_obtidas], legend=legend,
               title='Comparação: Distribuição Alvo vs. Amostragem Quântica')
histogram.show() # ou histogram.savefig('resultado_amostragem.png')

Passo 5: Análise dos Resultados e Comprovação

Ao executar o script, a tabela de comprovação mostrará o quão perto nossa simulação chegou da distribuição alvo. Os erros relativos devem ser muito baixos, provando que nosso circuito é um amostrador preciso. O histograma comparativo fornecerá a prova visual final, mostrando as barras da distribuição "Obtida" quase perfeitamente alinhadas com as da distribuição "Alvo".

Exemplo de Saída Esperada:

Tabela Comprovação.png

5. Conclusão e Implicações

Este experimento demonstra de forma conclusiva a capacidade de um sistema quântico de modelar e amostrar de uma distribuição de probabilidade customizada. Comprovamos que a frequência das amostras obtidas através da medição converge para as probabilidades teoricamente definidas no estado quântico inicial.

A "usabilidade" desta funcionalidade é imensa e representa uma fronteira da computação:

  • Machine Learning: Treinar modelos generativos e Máquinas de Boltzmann, que são baseados em amostragens de distribuições complexas.
  • Finanças: Acelerar simulações de Monte Carlo para precificação de derivativos e análise de risco, amostrando de distribuições de mercado.
  • Ciência: Simular o comportamento de sistemas quânticos, onde a amostragem do estado de partículas é fundamental para prever as propriedades de novos materiais ou medicamentos.

Referências

Seguem as referências bibliográficas e de software utilizadas para a elaboração deste artigo e para os experimentos práticos.

[1] Nielsen, M. A., & Chuang, I. L. (2010). Quantum Computation and Quantum Information (10th Anniversary Edition). Cambridge University Press.
O texto de referência fundamental na área, que estabelece os princípios matemáticos e físicos da computação e informação quântica, incluindo o formalismo de amplitudes de probabilidade.

[2] Qiskit. A framework de código aberto para computação quântica. Desenvolvida pela IBM e pela comunidade. Disponível em: https://qiskit.org/
A biblioteca principal utilizada para a construção, simulação e visualização dos circuitos quânticos, incluindo as portas lógicas e a funcionalidade de amostragem.

[3] Qiskit Aer. Simuladores de computação quântica de alto desempenho. Parte do ecossistema Qiskit. Disponível em: https://qiskit.org/documentation/aer/
A biblioteca de simulação que provê o ambiente para a execução do circuito em um computador clássico, essencial para o teste e comprovação dos resultados.

[4] NumPy. A biblioteca fundamental de computação científica com Python. Desenvolvida pela comunidade. Disponível em: https://numpy.org/
Utilizada para as operações matemáticas de alto desempenho, como a extração da raiz quadrada para o cálculo das amplitudes de probabilidade.

[5] Maltempi, Clark. (2025). A Próxima Fronteira da Computação: Chegamos ao limite da evolução?. https://www.google.com/search?q=Projetoplataforma.com.br. Disponível em: https://projetoplataforma.com.br/artigo/a-proxima-fronteira-da-computacao-chegamos-ao-limite-da-evolucao