Skip to main content
IBM Quantum Platform

VF2 objetos de passagem do compilador


QkVF2LayoutConfiguration

typedef struct QkVF2LayoutConfiguration QkVF2LayoutConfiguration

A configuração para o layout VF2 é aprovada. Esta é uma configuração encapsulada para permitir alterações na API ao longo do tempo; você cria e modifica isso usando o construtor e os setters abaixo.

qk_vf2_layout_configuration_new

QkVF2LayoutConfiguration *qk_vf2_layout_configuration_new(void)

Crie uma nova configuração para as passagens " VF2 " que executam tudo sem restrições.

Chame qk_vf2_layout_configuration_free com o valor de retorno para liberar a memória quando terminar.

Retorna

Um ponteiro para a configuração.

qk_vf2_layout_configuration_free

void qk_vf2_layout_configuration_free(QkVF2LayoutConfiguration *config)

Liberar um QkVf2LayoutConfiguration objeto.

Segurança

O comportamento é indefinido se config for um ponteiro diferente de nulo, mas não apontar para um objeto válido QkVF2LayoutConfiguration e alinhado.

Parâmetros

  • config – Um ponteiro para a configuração.

qk_vf2_layout_configuration_set_call_limit

void qk_vf2_layout_configuration_set_call_limit(QkVF2LayoutConfiguration *config, int64_t before, int64_t after)

Limite o número de vezes que o algoritmo VF2 tentará estender seu mapeamento antes e depois de encontrar a primeira correspondência.

O algoritmo VF2 mantém o controle do número de passos que deu e termina quando atinge o limite. Após a primeira correspondência ser encontrada, o limite muda do limite “antes” para o limite “depois”, sem redefinir o número de passos dados.

Segurança

O comportamento é indefinido se não config for um ponteiro válido, alinhado e diferente de nulo para um QkVF2LayoutConfiguration.

Parâmetros

  • config – A configuração a ser atualizada.
  • antes – O número de tentativas permitidas antes que a primeira correspondência seja encontrada. Defina um número negativo para não ter limite.
  • após – O número de tentativas permitidas após a primeira correspondência (se houver) ser encontrada. Defina um número negativo para não ter limite.

qk_vf2_layout_configuration_set_time_limit

void qk_vf2_layout_configuration_set_time_limit(QkVF2LayoutConfiguration *config, double limit)

Limite o tempo de execução da pesquisa VF2.

Este não é um limite rígido; ele só é verificado quando um layout melhorado é encontrado. Usar essa opção também torna a passagem não determinística. Geralmente, recomenda-se usar qk_vf2_layout_configuration_set_call_limit em vez disso.

Segurança

O comportamento é indefinido se não config for um ponteiro válido, alinhado e diferente de nulo para um QkVF2LayoutConfiguration.

Parâmetros

  • config – A configuração a ser atualizada.
  • limite – O tempo em segundos permitido. Defina um valor não positivo para executar sem limite.

qk_vf2_layout_configuration_set_max_trials

void qk_vf2_layout_configuration_set_max_trials(QkVF2LayoutConfiguration *config, uint64_t limit)

Limite o número total de melhorias completas encontradas.

Como a árvore de pesquisa VF2 é podada dinamicamente com base na pontuação no QkTarget, esse limite não é especialmente poderoso. Veja qk_vf2_layout_configuration_set_call_limit para um limite mais restrito.

Segurança

O comportamento é indefinido se não config for um ponteiro válido, alinhado e diferente de nulo para um QkVF2LayoutConfiguration.

Parâmetros

  • config – A configuração a ser atualizada.
  • limite – O número de layouts completos permitidos antes do encerramento. Defina como 0 para executar sem limites.

qk_vf2_layout_configuration_set_shuffle_seed

void qk_vf2_layout_configuration_set_shuffle_seed(QkVF2LayoutConfiguration *config, uint64_t seed)

Ative a reorganização dos nós dos gráficos de entrada com uma semente determinada.

Isso efetivamente leva a uma modificação da ordem de correspondência de VF2, o que, em teoria, significa que o espaço de uma pesquisa limitada não é tendencioso com base nos índices dos nós. Na prática, o Qiskit usa as melhorias de ordenação do algoritmo de ordenação de grafos ( VF2++ ) ao ser executado no modo “médio” (correspondente à pesquisa de layout inicial) e começa a partir do mapeamento de identidade no modo “exato”. Ambas as heurísticas de ordenação são normalmente muito mais propensas a encontrar resultados para um determinado problema do que a aleatoriedade.

Se esta função não for chamada, não ocorrerá nenhuma reorganização dos nós.

Segurança

O comportamento é indefinido se não config for um ponteiro válido, alinhado e diferente de nulo para um QkVF2LayoutConfiguration.

Parâmetros

  • config – A configuração a ser atualizada.
  • seed – A semente a ser usada para o embaralhamento ativado.

qk_vf2_layout_configuration_set_score_initial

void qk_vf2_layout_configuration_set_score_initial(QkVF2LayoutConfiguration *config, bool score_initial)

Se deve-se pontuar ansiosamente o layout inicial “trivial” do gráfico de interação.

Normalmente, você deseja definir isso true se estiver usando as passagens VF2 para melhorar um circuito que já foi reduzido ao hardware, a fim de definir uma linha de base para a poda baseada em pontuação. Caso contrário, você pode deixar isso como false (o padrão), para evitar um cálculo que provavelmente não terá nenhum impacto.

Segurança

O comportamento é indefinido se não config for um ponteiro válido, alinhado e diferente de nulo para um VF2LayoutConfiguration.

Parâmetros

  • config – A configuração a ser atualizada.
  • score_initial – Se deve pontuar imediatamente o layout inicial trivial.

QkVF2LayoutResult

typedef struct QkVF2LayoutResult QkVF2LayoutResult

Ao executar a qk_transpiler_pass_standalone_vf2_layout função, ela retorna o resultado da análise como um QkVF2LayoutResult objeto. Este objeto contém o resultado da passagem do transpiler, se a passagem conseguiu encontrar um layout ou não, e qual foi o layout selecionado pela passagem.

Funções

qk_vf2_layout_result_has_match

bool qk_vf2_layout_result_has_match(const QkVF2LayoutResult *layout)

Verifique se foi encontrado algum resultado.

Um true valor inclui a situação em que a configuração especificada para tentar o layout “trivial” foi considerada a melhor (e, consequentemente, não é necessário renomear os qubits, exceto pela expansão ancilla, se apropriado). Consulte qk_vf2_layout_result_has_improvement para distinguir se um remapeamento explícito está armazenado.

Segurança

O comportamento é indefinido se não layout for um ponteiro válido e diferente de nulo para um QkVF2LayoutResult.

Parâmetros

  • layout – um ponteiro para o layout

Retorna

true se a passagem de layout VF2-based encontrou alguma correspondência.

qk_vf2_layout_result_has_improvement

bool qk_vf2_layout_result_has_improvement(const QkVF2LayoutResult *layout)

Verifique se o resultado é uma melhoria em relação ao layout trivial.

Segurança

O comportamento é indefinido se não layout for um ponteiro válido e diferente de nulo para um QkVF2LayoutResult.

Parâmetros

  • layout – um ponteiro para o layout

Retorna

true se a passagem de layout VF2-based encontrou uma correspondência melhorada.

qk_vf2_layout_result_map_virtual_qubit

uint32_t qk_vf2_layout_result_map_virtual_qubit(const QkVF2LayoutResult *layout, uint32_t qubit)

Obter o qubit físico para um determinado qubit virtual

Segurança

O comportamento é indefinido se não layout for um ponteiro válido e diferente de nulo para um QkVF2LayoutResult contendo um resultado, ou se o qubit estiver fora do intervalo para o circuito inicial.

Parâmetros

  • layout – um ponteiro para o layout
  • qubit – o qubit virtual para obter o qubit físico de

Retorna

O qubit físico mapeado pelo qubit virtual especificado

qk_vf2_layout_result_free

void qk_vf2_layout_result_free(QkVF2LayoutResult *layout)

Liberar um QkVF2LayoutResult objeto

Exemplo
QkCircuit *qc = qk_circuit_new(1, 0);
Segurança

O comportamento é indefinido se não layout for um ponteiro válido e diferente de nulo para um QkVF2Layout.

Parâmetros

  • layout – um ponteiro para o layout a ser liberado
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.