Referência da API do Kipu Quantum Iskay Quantum Optimizer
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.
Guia de funções do Iskay Quantum Optimizer para 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}
Os argumentos problem problem_type e codificam um problema de otimização da forma
em que
- Ao selecionar
problem_type = "binary", você especifica que a função de custo está nobinaryformato, o que significa que , 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
Os coeficientes do problema devem ser codificados em um dicionário da seguinte forma:
- 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.95na 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.90na 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
PauliEvolutionGateDCQO e, em seguida, do circuito DCQO decomponho ( max_trials=10 ) - Nível 2 : Otimização do
PauliEvolutionGatecircuito DCQO e, em seguida, do circuito DCQO decomponho ( max_trials=15 ) - Nível 3 : Otimização do circuito
PauliEvolutionGateDCQO e, em seguida, do circuito DCQO decomponho ( max_trials=20 ) - Nível 4 : Otimização do circuito
PauliEvolutionGateDCQO e, em seguida, do circuito DCQO decomponho ( max_trials=25 ) - Nível 5 : Otimização do
PauliEvolutionGatecircuito 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.
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.
- O
solutiondicionário é obtido a partir da sequência de bits da solução, utilizando omappingobjeto para indexar as variáveis. - Quando
problem_type=spinusamos a atribuição - 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.