Pular para o conteúdo principal

Otimizadores clássicos

O que é um otimizador?

Victoria Lipinska fala sobre otimizadores clássicos e como eles funcionam como parte do VQE.

Você vai ouvir sobre alguns exemplos de otimizadores e como eles se comportam na presença e na ausência de ruído.

Referências

Os artigos a seguir são citados no vídeo acima.

Codificando um otimizador clássico

Nas lições anteriores, você aprendeu a criar um Hamiltoniano adequado para uso em um computador quântico e como construir um circuito variacional. Você também aprendeu que o circuito variacional (ou ansatz) contém parâmetros a serem variados, e a escolha ótima de parâmetros é aquela que produz a menor função de custo ou energia possível. Assim, nosso problema se reduz a buscar no espaço de parâmetros o conjunto ideal. A maior parte do trabalho com otimizadores clássicos já foi feita por nós, pois excelentes otimizadores estão disponíveis em várias fontes.

Nesta lição você vai aprender:

  • como os otimizadores clássicos se encaixam em um cálculo VQE
  • quais otimizadores clássicos estão disponíveis no SciPy
  • quais otimizadores não estão ainda disponíveis no SciPy e como complementá-los por enquanto usando qiskit.algorithms
  • quais opções estão disponíveis para esses otimizadores e sua relevância para a computação quântica

O SciPy é uma biblioteca Python gratuita e de código aberto com pacotes relevantes para diversas áreas da computação científica, incluindo otimização. Em particular, o SciPy tem um pacote de otimização que inclui minimize:

from scipy.optimize import minimize This minimize function has several arguments, but the most relevant arguments for quantum chemistry are:

  • The cost function (cost_func). This is related to the Hamiltonian, but also includes some complexities, such as determining the expectation value by using Estimator, and in the case of excited state calculations, might include orthogonality conditions.
  • An initial state (x0) for the system, often the Hartree Fock state
  • Other arguments, including arguments of the cost function itself
  • The method set to the classical optimizer you select
  • Options for the classical optimizer (not to be confused with Session options discussed in the next section)

Some example code is shown below. We restrict our discussion here to the last two arguments.

    cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})

O SciPy tem documentação sobre todos os métodos de minimização disponíveis. Aqui estão alguns exemplos notáveis, todos métodos para minimizar uma função escalar de uma ou mais variáveis:

  • cobyla: algoritmo de Otimização por Aproximação Linear (COBYLA).
  • slsqp: Programação Sequencial de Mínimos Quadrados (SLSQP).
  • nelder-mead: algoritmo de Nelder-Mead.

A maioria dos algoritmos de otimização clássica disponíveis são minimizadores locais, no sentido de que usam vários métodos para encontrar mínimos locais, mas não garantem encontrar mínimos globais. Alguns otimizadores clássicos estimam explicitamente gradientes e os usam para encontrar mínimos locais. Outros podem usar aproximações lineares ou quadráticas sucessivas da função objetivo para encontrar mínimos.

Esses algoritmos têm várias opções em comum, mas com diferenças sutis. Por exemplo, todos têm a opção de especificar um número máximo de iterações usando a notação 'maxiter': 200 do exemplo acima. Todos têm alguma opção especificando um critério de parada diferente baseado em valores de função ou variável, embora esses critérios sejam ligeiramente diferentes para algoritmos diferentes. O COBYLA, por exemplo, permite especificar uma tolerância (por exemplo, 'tol': 0.0001) que é o limite inferior de uma "região de confiança". Em comparação, o SLSQP permite especificar uma meta na precisão da função usada no critério de parada ('ftol'). O Nelder-Mead permite especificar uma tolerância na diferença entre tentativas sucessivas de parâmetros (xx) (xatol) ou uma tolerância na diferença entre valores sucessivos obtidos para a função de custo f(x)f(x) (fatol) (ou ambos).

Para uma lista completa dos algoritmos e opções disponíveis, acesse a documentação do minimize do SciPy.