Skip to main content
IBM Quantum Platform

Referência da API do Kipu Quantum Iskay Quantum Optimizer

  • Qiskit Functions

    Qiskit Functions — ferramentas pré-configuradas criadas por organizações parceiras — abstraem partes do fluxo de trabalho de desenvolvimento de software para simplificar e acelerar a descoberta de algoritmos e o desenvolvimento de aplicativos em escala de serviços públicos. Clique para ver o guia desta função do Qiskit.


Entradas

problem

Tipo: Dict[str, float]

Os coeficientes do problema de otimização formulado como QUBO/HUBO ou no formato de spin. Para obter mais informações sobre a especificação do problema, consulte Formatos de problemas aceitos.

  • Necessário: sim
  • Exemplo:{"()": -21.0, "(0, 4)": 0.5,"(0, 2)": 0.5,"(0, 1)": 0.5,"(1, 3)": 0.5}

problem_type

Tipo: str

Especifique se os coeficientes do problema estão no formato binário (QUBO/HUBO) ou no formato de spin. As duas possibilidades são "spin" ou "binary". Para obter mais informações sobre a especificação do problema, consulte Formatos de problemas aceitos.

  • Necessário: sim
  • Exemplo:"spin"

backend_name

Tipo: str

Nome do backend para realizar a consulta

  • Necessário: sim
  • Exemplo:"ibm_fez"

Opções

Tipo: Dict[str, Any]

Opções para configurar o envio de dados de hardware, como o número de capturas. As opções para esta função são especificadas como um dicionário aninhado. Veja a lista completa de opções e seus valores padrão.

  • Obrigatório: Não
  • Exemplo:{"shots": 5000, "num_iterations": 3, "use_session": True, "seed_transpiler": 42}
Formatos de problemas aceitos

Os argumentos problem problem_type e codificam um problema de otimização da forma

min(x1,x2,,xn)DC(x1,x2,,xn)\begin{align} \min_{(x_1, x_2, \ldots, x_n) \in D} C(x_1, x_2, \ldots, x_n) \nonumber \end{align}

em que

C(x1,...,xn)=a+ibixi+i,jci,jxixj+...+k1,...,kmgk1,...,kmxk1...xkmC(x_1, ... , x_n) = a + \sum_{i} b_i x_i + \sum_{i, j} c_{i, j} x_i x_j + ... + \sum_{k_1, ..., k_m} g_{k_1, ..., k_m} x_{k_1} ... x_{k_m}
  • Ao selecionar problem_type = "binary", você especifica que a função de custo está no binary formato, o que significa que D={0,1}nD = \{0, 1\}^{n}, ou seja, a função de custo está escrita na formulação QUBO/HUBO.
  • Por outro lado, ao escolher problem_type = "spin", a função de custo é expressa na formulação de Ising, em que D={1,1}nD = \{-1, 1\}^{n}

Os coeficientes do problema devem ser codificados em um dicionário da seguinte forma:

{"()":a,"(i,)":bi,"(i, j)":ci,j,"(k1,...,km)":gk1,...,km,}\begin{align} \nonumber &\texttt{\{} \\ \nonumber &\texttt{"()"}&: \quad &a, \\ \nonumber &\texttt{"(i,)"}&: \quad &b_i, \\ \nonumber &\texttt{"(i, j)"}&: \quad &c_{i, j}, \\ \nonumber &\quad \vdots \\ \nonumber &\texttt{"(} k_1, ..., k_m \texttt{)"} &: \quad &g_{k_1, ..., k_m}, \\ \nonumber &\texttt{\}} \end{align}
  • Observe que as chaves do dicionário devem ser cadeias de caracteres que contenham uma tupla válida de números inteiros não repetidos.

Lista de opções

O Iskay oferece recursos de ajuste fino por meio de parâmetros opcionais. Embora as configurações padrão funcionem bem para a maioria dos problemas, você pode personalizar o comportamento de acordo com requisitos específicos:

shots

Tipo: `int`

Valor Padrão: 10000

Medidas quânticas por iteração (quanto maior, maior a precisão)

num_iterations

Tipo: `int`

Valor Padrão: 10

Iterações do algoritmo (um maior número de iterações pode melhorar a qualidade da solução)

use_session

Tipo: `bool`

Valor Padrão: True

Use as sessões d IBM e para reduzir o tempo de espera

seed_transpiler

Tipo: `int`

Valor Padrão: None

Conjunto para a compilação de circuitos quânticos reproduzíveis.

Otimização da semente : Observe que seed_transpiler está definido como None por padrão. Isso permite o processo de otimização automática do transpilador. Nesse caso None, o sistema iniciará um teste com várias sementes e selecionará aquela que produzir a melhor profundidade de circuito, aproveitando todo o potencial do max_trials parâmetro para cada nível de transpilagem.

direct_qubit_mapping

Tipo: `bool`

Valor Padrão: False

Mapeie qubits virtuais diretamente para qubits físicos

job_tags

Tipo: `List[str]`

Valor Padrão: None

Etiquetas personalizadas para acompanhamento de tarefas

preprocessing_level

Tipo: `int`

Valor Padrão: 0

Intensidade do pré-processamento do problema (0-3).

Níveis de pré-processamento (0-3) : Particularmente importantes para problemas maiores que, atualmente, não cabem nos tempos de coerência do hardware. Níveis mais altos de pré-processamento resultam em profundidades de circuito menores por meio de aproximações na transpilagem do problema:

  • Nível 0 : Circuitos exatos e mais longos
  • Nível 1 : Bom equilíbrio entre precisão e aproximação, excluindo apenas os portões com ângulos no percentil 10 mais baixo
  • Nível 2 : Aproximação um pouco mais precisa, excluindo os portões com ângulos no 20º percentil inferior e utilizando approximation_degree=0.95 na transpilagem
  • Nível 3 : Nível máximo de aproximação, excluindo os portões no percentil 30 mais baixo e utilizando approximation_degree=0.90 na transpilagem
postprocessing_level

Tipo: `int`

Valor Padrão: 2

Nível de refinamento da solução (0-2).

Níveis de pós-processamento (0-2) : Controla o grau de otimização clássica, compensando erros de inversão de bits com diferentes números de passagens gananciosas de uma busca local:

  • Nível 0 : 1 aprovação
  • Nível 1 : 2 aprovações
  • Nível 2 : 3 aprovações
transpilation_level

Tipo: `int`

Valor Padrão: 0

Testes de otimização do transpiler (0-5).

Níveis de transpilação (0-5) : Controla os testes avançados de otimização do transpiler para a compilação de circuitos quânticos. Isso pode levar a um aumento da sobrecarga clássica e, em alguns casos, pode não alterar a profundidade do circuito. O valor padrão 2 , em geral, resulta no circuito mais pequeno e é relativamente rápido.

  • Nível 0 : Otimização do circuito DCQO decomposto (layout, roteamento, programação)
  • Nível 1 : Otimização do circuito PauliEvolutionGate DCQO e, em seguida, do circuito DCQO decomponho ( max_trials=10 )
  • Nível 2 : Otimização do PauliEvolutionGate circuito DCQO e, em seguida, do circuito DCQO decomponho ( max_trials=15 )
  • Nível 3 : Otimização do circuito PauliEvolutionGate DCQO e, em seguida, do circuito DCQO decomponho ( max_trials=20 )
  • Nível 4 : Otimização do circuito PauliEvolutionGate DCQO e, em seguida, do circuito DCQO decomponho ( max_trials=25 )
  • Nível 5 : Otimização do PauliEvolutionGate circuito DCQO e, em seguida, do circuito DCQO decomponido ( max_trials=50 )
transpile_only

Tipo: `bool`

Valor Padrão: False

Disponível para usuários que desejam analisar a otimização de circuitos sem executar o algoritmo quântico na íntegra. Útil para análise de circuitos, estudos de otimização de profundidade e compreensão dos efeitos da transpilagem antes de se prosseguir com a execução completa.

Desempenho no nível de transpilação

Aumentar o número de max_trials com valores mais altos para transpilation_level aumentará inevitavelmente o tempo de transpilagem, mas isso nem sempre alterará o circuito final — isso depende muito da estrutura e da complexidade específicas do circuito. Para alguns circuitos/problemas, no entanto, a diferença entre 10 tentativas (nível 1) e 50 tentativas (nível 5) pode ser significativa, portanto, explorar esses parâmetros pode ser a chave para encontrar uma solução com sucesso.


Saída

Tipo: `Dict[str, Any]`

Solução e metadados. A estrutura varia de acordo com transpile_only a opção.

Dicionário de resultados

A estrutura do dicionário de resultados depende do modo de execução:

solution

Tipo: `Dict[str, int]`

A solução mapeada e ordenada, na qual as chaves são índices de variáveis (na forma de strings) ordenados numericamente e os valores são os valores correspondentes das variáveis (1/-1 para problemas de spin, 1/0 para problemas binários).

  • Modo: Padrão
  • Exemplo:{'0': -1, '1': -1, '2': -1, '3': 1, '4': 1}

solution_info

Tipo: `Dict[str, Any]`

Informações detalhadas sobre a solução.

  • Modo: Padrão
  • Exemplo:{'bitstring': '11100', 'cost': -13.8, 'seed_transpiler': 42, 'mapping': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}}
  • Execução padrão : Quando o parâmetro opcional é transpile_only=Falseespecificado, consulte o dicionário a seguir.
bitstring

Tipo: `str`

A representação em cadeia de bits bruta da solução.

cost

Tipo: `float`

A relação custo/energia associada à solução.

seed_transpiler

Tipo: `int`

A semente aleatória utilizada pelo transpiler que gerou este resultado.

mapping

Tipo: `Dict[int, int]`

O mapeamento original entre qubits e variáveis utilizado no cálculo.

qpu_time

Tipo: `float`, optional

O tempo de execução da QPU em segundos.

Notas sobre o mapeamento de variáveis
  • O solution dicionário é obtido a partir da sequência de bits da solução, utilizando o mapping objeto para indexar as variáveis.
  • Quando problem_type=spin usamos a atribuição 11,011 \rightarrow -1, \quad 0 \rightarrow 1
  • As chaves no dicionário de soluções são índices de variáveis ordenados numericamente como cadeias de caracteres.

prob_type

Tipo: `str`

O tipo de problema de otimização (spin ou binary)

  • Modo: Padrão
  • Exemplo:'spin'

transpilation_info

Tipo: `Dict[str, Any]`

Análise do circuito e detalhes da transpilagem.

  • Modo: Apenas compilação
  • Exemplo:{'best_seed': 42, 'transpilation_time_seconds': 50.06, 'transpiled_circuit': {'depth': 576, 'gate_count': 4177, 'num_qubits': 156, 'width': 176, 'operations': {'sx': 1325, 'rx': 891, 'cz': 783, 'rz': 650, 'rzz': 466, 'x': 42, 'measure': 20}}}
  • Análise de transpilagem : Quando o parâmetro opcional é transpile_only=Trueespecificado, consulte o dicionário a seguir:
best_seed

Tipo: `int`

A semente ideal encontrada para a transpilação.

transpilation_time_seconds

Tipo: `float`

Tempo gasto no processo de transpilagem.

transpiled_circuit

Tipo: `Dict`

Análise de circuitos que inclui o seguinte:

  • depth

Tipo: `int`

Profundidade do circuito (número de camadas)

  • gate_count

Tipo: `int`

Número total de portas no circuito.

  • num_qubits

Tipo: `int`

Número de qubits utilizados.

  • width

Tipo: `int`

Largura do circuito.

  • operations

Tipo: `Dict[str, int]`

Contagem de cada tipo de porta utilizada.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.