Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O simulador esparso utiliza uma representação esparsa dos vetores de estado quântico. Um estado quântico esparso é um estado em que a maioria dos coeficientes de amplitude é zero. Representações esparsas permitem que o simulador esparso minimize a área de memória necessária para representar estados quânticos, o que possibilita simulações sobre um número maior de qubits. O simulador esparso é eficiente para programas com estados quânticos que são escassos na base computacional. O simulador esparso permite aos utilizadores explorar aplicações maiores do que um simulador de estado completo porque os simuladores de estado completo desperdiçam memória e tempo num número exponencialmente grande de amplitudes zero.
Para mais informações sobre o simulador esparso, veja Jaques e Häner (arXiv:2105.01533).
Chame o simulador esparso
O simulador esparso é o simulador local predefinido na extensão MicrosoftQuantum Development Kit (QDK) para Visual Studio Code (VS Code). Como utilizar o simulador disperso depende do seu ambiente de desenvolvimento.
| Ambiente de desenvolvimento | Como chamar o simulador esparso |
|---|---|
| Num programa Q# ou OpenQASM em VS Code | Execute o ficheiro Q# ou OpenQASM |
Num programa Python com a biblioteca qdk |
qsharp.runou openqasm.runou qiskit.QSharpBackend |
Numa %%qsharp célula de notebook |
Chame a operação de entrada do programa, por exemplo:Main() |
Adicionar Pauli ruído ao simulador esparso em VS Code
O simulador esparso suporta a adição de Pauli ruído às simulações dos seus Q# programas com a VS Code extensão. Este recurso permite simular os efeitos do ruído em operações e medições quânticas. Para especificar um modelo de ruído no seu programa Q#, use a função ConfigurePauliNoise. A função define probabilidades para que ocorram os operadores Pauli, X, e Y, e o ruído Z. Também pode configurar modelos globais de ruído nas definições da extensão.
Adicionar Pauli ruído usando as VS Code definições
Para definir o ruído geral
As definições de ruído aplicam-se aos resultados de histogramas para todas as portas, medições e qubits em todos Q# os programas em VS Code.
Por exemplo, um histograma para o seguinte programa de amostragem em GHz sem ruído configurado mostra um resultado de $\ket{00000}$ para cerca de metade das medições e $\ket{11111}$ para a outra metade.
import Std.Diagnostics.*;
import Std.Measurement.*;
operation Main() : Result []{
let num = 5;
return GHzSample(num);
}
operation GHzSample(n: Int) : Result[] {
use qs = Qubit[n];
H(qs[0]);
ApplyCNOTChain(qs);
let results = MeasureEachZ(qs);
ResetAll(qs);
return results;
}
Se adicionares mesmo uma taxa de ruído de 1% bit-flip, os resultados começam a dispersar-se. Com 25% de ruído de inversão de bits, o histograma torna-se indistinguível de um ruído puro.
Adicionar Pauli ruído a programas individuais Q#
Use a ConfigurePauliNoise função para definir ou modificar o modelo de ruído para programas individuais Q# . A ConfigurePauliNoise função dá-lhe controlo sobre quando e onde ocorre ruído nos seus Q# programas.
Observação
Se configurares o ruído nas VS Code definições, o ruído é aplicado a todos os Q# programas. No entanto, a ConfigurePauliNoise função sobrepõe-se às VS Code definições de ruído do programa que chama a função.
Por exemplo, no programa anterior podes adicionar ruído imediatamente após a atribuição dos qubits.
operation GHzSample(n: Int) : Result[] {
use qs = Qubit[n];
// 5% bit-flip noise applies to all operations
ConfigurePauliNoise(0.05, 0.0, 0.0);
H(qs[0]);
ApplyCNOTChain(qs);
let results = MeasureEachZ(qs);
ResetAll(qs);
return results;
}
Ou pode adicionar ruído apenas à operação de medição.
operation GHzSample(n: Int) : Result[] {
use qs = Qubit[n];
H(qs[0]);
ApplyCNOTChain(qs);
// Noise applies to only the measurement operation
ConfigurePauliNoise(0.05, 0.0, 0.0);
let results = MeasureEachZ(qs);
ResetAll(qs);
return results;
}
Para modificar ou eliminar configurações de ruído em diferentes pontos do seu programa, ligue ConfigurePauliNoise várias vezes. Por exemplo, podes definir 5% de ruído de inversão de bit para a porta de Hadamard e depois definir ausência de ruído para o resto do programa.
operation GHzSample(n: Int) : Result[] {
use qs = Qubit[n];
// Noise applies to the H operation
ConfigurePauliNoise(0.05, 0.0, 0.0);
H(qs[0]);
// Clear the noise settings
ConfigurePauliNoise(0.0, 0.0, 0.0);
ApplyCNOTChain(qs);
let results = MeasureEachZ(qs);
ResetAll(qs);
return results;
}
Outras Q# funções de ruído
A ConfigureNoiseFunction função é suficiente para modelar qualquer tipo de Pauli ruído no seu programa, mas Q# tem outras funções de ruído que também pode usar. As seguintes funções estão disponíveis na biblioteca Std.Diagnostics para configurar ruído em programas Q#.
| Função | Description | Example |
|---|---|---|
ConfigurePauliNoise |
Configura Pauli o ruído para uma execução no simulador. Os parâmetros representam as probabilidades do ruído das portas Pauli X, Y e Z. A configuração de ruído aplica-se a todas as portas, medições e qubits subsequentes de um programa Q#. Anula as definições de ruído da VS Code extensão. Chamadas subsequentes para ConfigurePauliNoise anulam o ruído definido por chamadas anteriores. |
ConfigurePauliNoise(0.1, 0.0, 0.5)ou ConfigurePauliNoise(BitFlipNoise(0.1)) |
BitFlipNoise |
Configura apenas o ruído da porta X com a probabilidade especificada. | 10% de ruído de inversão de bits:ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0) |
PhaseFlipNoise |
Configura apenas o ruído da porta Z com a probabilidade especificada. | 10% ruído de inversão de faseConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1) |
DepolarizingNoise |
Configura o ruído para funcionar como a porta X, Y ou Z com probabilidades iguais. | 6% ruído despolarizante:ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2) |
NoNoise |
Redefine o modelo de ruído para que não haja ruído. |
ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0) |
ApplyIdleNoise |
Aplica ruído configurado a um único qubit durante a simulação. | ...use q = Qubit[2];ConfigurePauliNoise(0.1, 0.0, 0.0);ApplyIdleNoise(q[0]);... |