Skip to main content
IBM Quantum Platform

SabreLayout

class qiskit.transpiler.passes.SabreLayout(*args, **kwargs)

GitHub

Bases: TransformationPass

Escolha um layout por meio de roteamento bidirecional iterativo do circuito de entrada.

Começando com um layout inicial aleatório, o algoritmo faz um roteamento completo do circuito (por meio do método routing_pass) para chegar a um layout final. Esse layout final é então usado como layout inicial para rotear o circuito reverso. O algoritmo itera várias vezes até encontrar um layout inicial que reduza o custo total do roteamento.

Esse método explora a reversibilidade dos circuitos quânticos e tenta incluir informações globais do circuito na escolha do_layout inicial.

Por padrão, esta etapa executará tanto o layout quanto o roteamento e transformará o circuito de modo que o layout seja aplicado ao DAG de entrada (o que significa que o circuito de saída terá qubits auxiliares alocados para os qubits não utilizados no mapa de acoplamento e os qubits serão reordenados para corresponder aos qubits físicos mapeados); em seguida, o roteamento será aplicado (inserindo SwapGate objetos para compensar a conectividade limitada). Isso difere da maioria das outras etapas de layout, que são AnalysisPass objetos e se limitam a encontrar um layout inicial e defini-lo no conjunto de propriedades. Isso é feito porque, por padrão, a etapa executa simulações paralelas com diferentes sementes aleatórias para selecionar o layout inicial aleatório e, em seguida, seleciona a saída roteada que resulta no menor número de portas de troca necessárias.

Você pode usar o argumento routing_pass para que essa passagem funcione como uma passagem de layout típica. Quando especificado, isso usará a passagem de roteamento especificada para selecionar apenas um layout inicial e não executará vários testes de sementes.

Além de começar com um layout inicial aleatório, o passe também pode receber uma lista adicional de layouts iniciais que serão usados para testes adicionais. Se o sabre_starting_layouts estiver presente no conjunto de propriedades quando essa passagem for executada, ele será usado para testes adicionais. Ainda haverá layout_trials de layouts iniciais totalmente aleatórios e o conteúdo de sabre_starting_layouts será executado além desses. Será usada a saída que resultar na menor quantidade de portas de troca (seja das tentativas aleatórias ou do ponto inicial do conjunto de propriedades). O valor desse campo de conjunto de propriedades deve ser uma lista de objetos Layout objetos que representam os layouts iniciais a serem usados. Se um qubit virtual estiver faltando em um Layout objeto da lista, será selecionado um qubit aleatório.


Campos definidos da propriedade Ler

sabre_starting_layouts (list[Layout])

Uma lista opcional de objetos Layout objetos a serem usados para testes de layout adicionais. Isso é um acréscimo às tentativas aleatórias completas especificadas com o argumento layout_trials .


Valores definidos para propriedades gravados

layout (Layout)

O mapeamento inicial escolhido de qubits virtuais para qubits físicos, incluindo a alocação de ancilla.

final_layout (Layout)

Uma permutação de como as trocas foram aplicadas aos qubits de entrada no final do circuito.

Referências

[1] Henry Zou, Matthew Treinish, Kevin Hartman, Alexander Ivrii e Jake Lishman. “LightSABRE: A Lightweight and Enhanced SABRE Algorithm" (Algoritmo SABRE leve e aprimorado) arXiv:2409.08368 [2] Li, Gushu, Yufei Ding e Yuan Xie. "Resolvendo o problema de mapeamento de qubit para dispositivos quânticos da era NISQ" ASPLOS 2019. arXiv:1809.02573

SabreLayout inicializador.

param coupling_map

gráfico direcionado que representa um mapa de acoplamento.

tipo coupling_map

UnionCouplingMap[, Target]

param routing_pass

a passagem de roteamento a ser usada durante a iteração. Se especificado, esse passe funciona como um AnalysisPass e preencherá apenas o campo layout no conjunto de propriedades e o registro de entrada será retornado sem modificações. Esse argumento é mutuamente exclusivo dos argumentos swap_trials e layout_trials e, se for especificado ao mesmo tempo que qualquer um deles, será gerado um erro.

tipo routing_pass

BasePass

param seed

semente para definir um layout de primeira tentativa aleatória.

tipo de semente

int

param max_iterations

número de iterações para frente e para trás.

tipo max_iterations

int

param swap_trials

O número de tentativas a serem executadas de SabreSwap para cada iteração. Isso é equivalente ao argumento trials em SabreSwap. Se isso não for especificado (e routing_pass não estiver definido), por padrão, será usado o número de CPUs físicas em seu sistema local. Para que haja reprodutibilidade entre ambientes, é melhor definir esse valor como um número explícito, pois o resultado dependerá potencialmente do número de tentativas executadas. Essa opção é mutuamente exclusiva do argumento routing_pass e será gerado um erro se ambos forem usados.

tipo swap_trials

int

param layout_trials

O número de tentativas de sementes aleatórias para executar o layout. Quando > 1, será selecionada a tentativa que resultar na saída com o menor número de portas de troca. Se isso não for especificado (e routing_pass não estiver definido), o número de CPUs físicas locais será usado como o valor padrão. Essa opção é mutuamente exclusiva do argumento routing_pass e será gerado um erro se ambos forem usados. São executadas 3 ou 4 tentativas adicionais, dependendo do valor coupling_map , com layouts comuns além da contagem de tentativas aleatórias especificadas por esse valor.

tipo layout_trials

int

param skip_routing

Se isso for definido como True e routing_pass não for usado, o roteamento não será aplicado ao circuito de saída. Somente o layout será definido no conjunto de propriedades. Essa é uma troca para executar o roteamento personalizado com várias tentativas de layout, pois o uso dessa opção fará com que o site SabreLayout execute o estágio de roteamento internamente, mas não use esse resultado.

tipo skip_routing

bool

aumentos TranspilerError

Se ambos routing_pass e swap_trials ou

levanta ambos routing_pass e layout_trials são especificados


Atributos

coupling_map

is_analysis_pass

Verificar se o passe é um passe de análise.

Se a passagem for um AnalysisPass,, isso significa que a passagem pode analisar o DAG e escrever os resultados dessa análise no conjunto de propriedades. As modificações no DAG não são permitidas por esse tipo de passe.

is_transformation_pass

Verificar se o passe é um passe de transformação.

Se a passagem for um TransformationPass,, isso significa que a passagem pode manipular o DAG, mas não pode modificar o conjunto de propriedades (mas pode ser lido).


Métodos

execute

execute(passmanager_ir, state, callback=None)

GitHub

Executar a tarefa de otimização para a entrada Qiskit IR.

Parâmetros

  • passmanager_ir (Any) – Qiskit IR para otimizar.
  • state (PassManagerState) – Estado associado à execução do fluxo de trabalho pelo próprio gerenciador de passes.
  • callback (Callable | None) – Uma função de retorno de chamada que é chamada a cada execução da tarefa de otimização.

Retorna

Qiskit IR otimizado e estado do fluxo de trabalho.

Tipo de retorno

tupla [ Any, PassManagerState ]

name

name()

GitHub

Nome do passe.

Tipo de retorno

str

run

run(dag)

GitHub

Execute o passe SabreLayout no dag.

Parâmetros

dag (DAGCircuit) – DAG para encontrar o layout.

Retorna

A saída dag se o mapeamento de swap foi executado

(caso contrário, o dag de entrada é retornado sem modificações).

Tipo de retorno

DAGCircuit

Aumentos

TranspilerError - se o dag for mais largo que o alvo.

update_status

update_status(state, run_state)

GitHub

Atualizar o status do fluxo de trabalho.

Parâmetros

  • state (PassManagerState) – Passar o estado do gerenciador para atualizar.
  • run_state (RunState) – Status de conclusão da tarefa atual.

Retorna

Estado do gerenciador de passes atualizado.

Tipo de retorno

PassManagerState

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