VF2 objetos de passagem do compilador
QkVF2LayoutConfiguration
typedef struct QkVF2LayoutConfiguration QkVF2LayoutConfigurationA 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 QkVF2LayoutResultAo 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