Conforme solicitado nos comentários, aqui está um exemplo trabalhado. O corpo principal lida com a minimização de para um problema específico. Na parte inferior, segue-se uma breve discussão sobre restrições e, em seguida, uma breve discussão sobre o caso geral.f( X )
Vamos resolver o problema de corte máximo ponderado, pois
- É um exemplo relativamente direto
- É difícil classicamente
- É um exemplo relativamente comum na literatura (por exemplo, https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.90.067903 )
- Possui uma conexão clara com um Hamiltoniano físico (óculos Ising)
Para entender o problema, começamos com um gráfico não direcionado de vértices , em que cada vértice tem peso e cada aresta que conecta e tem peso . Em seguida, cortamos o gráfico em dois pedaços. O corte não precisa ser reto, mas não deve se auto-interceptar e não pode cortar nenhuma aresta duas vezes. Em seguida, calculamos um " pagamento " para o nosso corte. O pagamento é a soma dos pesos das arestas pelas quais cortamos, mais a soma dos pesos dos vértices em um lado do corte. n{ V}vEu∈ VWEu≥ 0vEuvjWeu j≥ 0P 1P1
Fonte
Nesta imagem, o pagamento seria: para as arestas mais para os vértices (assumindo que o número dentro de cada vértice seja o seu peso) . O problema de otimização é maximizar para um determinado gráfico . 1 + 4 + 3 + 3 + 2 = 135 + 6 + 1 = 12→ P= 25P 2P2
Para escrever isso matematicamente, podemos pensar em termos de cadeias de bits. Definimos um corte por uma string que não é contado na soma e é contado na soma. Para tornar a matemática um pouco mais limpa, se o gráfico não estiver totalmente conectado, faça com que o gráfico esteja totalmente conectado e defina para quaisquer pares não conectados .s ∈ { 0 , 1 }nsEu= 0 → vEu s i = 1 → v i w i jsEu= 1 → vEu Weu j= 0vEu, vj
Por exemplo, olhando a imagem acima novamente, vamos interpretar os números dentro dos vértices como o índice de vértices, em vez do peso, como assumimos acima. Então o corte desenhado corresponde a . estão no lado "bom" do corte e são contados, enquanto estão no lado "ruim" do corte e não são contados .s = 100011s1= s5= s6= 1 → v1, v5, v6s2= s3= s4= 0
Isso nos permite escreverP( s ) = ∑EusEuWEu+ ∑i , jsEu( 1 - sj) weu j
O primeiro termo conta apenas os pesos de todos os vértices no lado "bom" do corte. O segundo termo conta o peso de uma aresta se os vértices que ela conectar estiverem em lados opostos do corte. Observe que isso não conta duas vezes, pois só conta a aresta quando e não quando .sEu= 1 , sj= 0sEu= 0 , sj= 1
Então agora nosso problema de otimização é encontrar a string que maximiza . A idéia aqui é pensar em como uma medida de energia de um sistema como o estado do sistema. Isso significa que podemos relacionar ao nosso Hamiltoniano. Aqui está um pouco sutil que estamos tentando maximizar mas geralmente falamos em encontrar o estado fundamental de um Hamiltoniano. Isso não é um problema, mas eu queria salientar - podemos observar o estado de excitação mais alta de energia (estado anti-terra, se ) ou usar como nossa função de energia e trabalhar com o estado fundamental como normal. O trabalho de Let com a mais alta animado estado e maximizar .sP( S )P( S )sP( S )P( S )- P( S )P
Gostaríamos de criar um hamiltoniano de modo que seu estado de energia mais alto seja modo que seja o máximo. Essencialmente, queremos transformar , uma função de energia, em , um operador de energia. Fazemos isso observando que, para , temos| s0 0⟩P( s0 0)P( S )H | s ⟩ ∈ { | 0 ⟩ , | 1 ⟩ } eu - ZH^|s⟩∈{|0⟩,|1⟩}I−Z2|s⟩=s|s⟩→ define s^i=I−Zi2
Onde é o Pauli agindo no qubit . Agora obtemos nosso Hamiltoniano substituindo por (e 1 por ) emZiZisss^IP
H=∑Eus^EuwEu+ ∑i , js^Eu(I-s^j) wi , j=∑EuI- ZEu2WEu+ ∑i , jEu- ZEu2(I-I- Zj2) wi , j
Isso pode ser limpo expandindo e vendo∑i , j( ZEu- Zj)=0→
H=∑iwi2(I−Zi)+∑i,jwij4(I−ZiZj)=∑iwi2(I−Zi)+∑i<jwij2(I−ZiZj)
Podemos limpar isso ainda mais, multiplicando por 2 e removendo uma constante mudança de energia (exclua os termos ). Novo Hamiltoniano com os mesmos valores próprios com valores próprios redimensionados e deslocados (claramente a energia máxima não é afetada por essas transformações)I
H=−∑iwiZi−∑i<jwijZiZj
Se você é um físico de matéria condensada, provavelmente reconhecerá esse hamiltoniano como um vidro de spin de Ising. Não é realmente relevante para o problema, mas acho que é legal.
Então agora temos um hamiltoniano cujo estado (anti-) fundamental codifica a sequência de bits que maximiza e resolve o problema.s0P(s)
A última coisa que precisamos é de um Hamiltoniano inicial , que lentamente (adiabaticamente) transformamos em nosso Hamiltoniano final, para que possamos definir o Hamiltoniano completoH0HHT(t)=(1−f(t))H0+f(t)H:f(0)=0,f(tf)=1
Como ponto de partida, é frequentemente usado para simplificar. O mínimo determinado pela precisão desejada e pelo intervalo espectral . O intervalo espectral é a diferença mínima de energia, acima de todos os , entre o estado (anti-) fundamental e o próximo estado energético. A análise da lacuna é altamente não trivial (consulte https://arxiv.org/abs/quant-ph/0509162 ) e determina a complexidade / eficiência do algoritmo. Um algoritmo com 0 intervalo não é garantido para funcionar.f(t)∝ttf3t
Então, queremos um tal queH0
- Podemos encontrar e preparar facilmente seu (anti) estado fundamental
- O intervalo espectral de não é exponencialmente pequeno no tamanho do problemaH
Para esse problema, um bom Hamiltoniano inicial é porque é fácil encontrar o estado de energia mais alto, é . É fácil de preparar, basta aplicar a . Não tenho tempo para entrar na análise da lacuna espectral, mas é improvável que esse hamiltoniano seja ideal nesse sentido (consulte https://arxiv.org/abs/1701.05584 ).H0=∑iXi|+⟩⊗nH⊗n|0⟩⊗n
Com essa escolha de e tomando , terminamos. Nosso Hamiltoniano éH0f(t)=t/tf
H(t)=(1−f(t))∑iXi−f(t)[∑iwiZi+∑i<jwijZiZj]
Começando no estado , evoluindo de acordo com o Hamiltoniano acima para o tempo (escolher um adequado é, novamente, geralmente altamente não trivial ), então a medição na base computacional deve retornar (com alta probabilidade) a string que maximiza .|ψ0⟩=H⊗n|0⟩⊗ntftfs=s0P(s)
1 Isso é ambíguo, pois por simetria os dois lados o farão. Podemos fazer isso rigoroso, por exemplo, direcionando o corte e levando os vértices para a esquerda do corte ao caminhar na direção do corte.
2 Eu disse no comentário que minimizamos uma função de custo; se você prefere isso, basta pegar o custo pagamento e minimizar o custo.=−
3 Estou examinando alguns detalhes sobre o que "lento" significa embaixo do tapete, mas pode estar relacionado à escala de energia do problema (por exemplo, multiplicar por uma constante mudará a velocidade).H
Restrições
Digamos que queremos modificar o problema acima para exigir que exatamente vértices estejam do lado "bom" do nosso corte. Matematicamente, isso é . Para impor isso, adicionamos um termo de penalidade ao Hamiltoniano para soluções que quebram essa restrição. Portanto, adicionamos um termo como escolhendo grande o suficiente para garantir que um estado que viole essa restrição não seja o estado de energia mais alta.5∑isi−5=0Hc=−α(∑is^i- 5 I)2α
Digamos que, em vez disso, queremos exigir que não haja mais de vértices no lado "bom" do nosso corte. Parece que isso é bastante difícil de fazer. Em https://arxiv.org/abs/1702.06248, eles afirmam que aproximar uma restrição de desigualdade para ordenar requer acoplamentos de -pin que exigiriam ainda mais sobrecarga para divida-os em acoplamentos de 2 qubit, o que geralmente é necessário em uma determinada arquitetura. Essencialmente, a estratégia é aproximar uma função de etapa usando um5kO ( N2 k) kkºordem polinomial. Parece uma maneira terrível de fazer isso - mas não consigo pensar em uma maneira melhor. Como vem de Troyer em 2017, é relativamente improvável, embora certamente possível, que atualmente seja conhecida uma maneira melhor.
O caso geral
A pergunta é sobre um método geral para codificar um problema de otimização em um hamiltoniano. Especificamente, queremos minimizar sujeito a um conjunto de restrições. Na seção acima, discuti a adição de restrições ao Hamiltoniano. Então, para um completamente geral , existe uma maneira de codificá-lo para um hamiltoniano? O método geral para isso na literatura é assumir que temos acesso a um oráculo quântico eficiente que implementa . Podemos pensar nisso como ter uma operação de caixa preta (ou seja, oráculo quântico) modo que . Então, podemos construir nosso Hamiltoniano como
f( X )f( X )f( X )f^( X )f^( X ) | x ⟩ = f( X ) | x ⟩H= ∑xf^( X ) | x ⟩ ⟨ x |
É claro que isso apenas empurra a parte difícil para encontrar / construir . De fato, argumentos simples de contagem mostram que quase todos (no sentido matemático) oráculos quânticos são exponencialmente ineficientes para implementar (consulte http://www.ar-tiste.com/imp-oracles/imps2.pdf ). Portanto, embora essa seja uma codificação geral de um problema de otimização para um Hamiltoniano - não é realmente prático. Parece que se você quiser codificar seu problema de otimização em um hamiltoniano de uma maneira útil - precisará aproveitar alguma estrutura de . Meu entendimento é que as especificidades de exatamente como fazer isso e como fazer isso da melhor maneiraf^( X )f( X ) maneira não é totalmente compreendida e é objeto de pesquisa ativa.