Skip to main content
IBM Quantum Platform

HRSCumulativeMultiplier

class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')

GitHub

Bases : Multiplier

Un circuit de multiplication pour stocker le produit de deux registres d'entrée hors place.

Le circuit utilise l'approche du [point 1.] Titre d'exemple, un circuit multiplicateur qui effectue une multiplication non modulaire sur deux registres de 3 qubits avec l'additionneur par défaut est le suivant (où Adder désigne le CDKMRippleCarryAdder) :

  a_0: ────■─────────────────────────

  a_1: ────┼─────────■───────────────
           │         │
  a_2: ────┼─────────┼─────────■─────
       ┌───┴────┐┌───┴────┐┌───┴────┐
  b_0: ┤0       ├┤0       ├┤0       ├
       │        ││        ││        │
  b_1: ┤1       ├┤1       ├┤1       ├
       │        ││        ││        │
  b_2: ┤2       ├┤2       ├┤2       ├
       │        ││        ││        │
out_0: ┤3       ├┤        ├┤        ├
       │        ││        ││        │
out_1: ┤4       ├┤3       ├┤        ├
       │  Adder ││  Adder ││  Adder │
out_2: ┤5       ├┤4       ├┤3       ├
       │        ││        ││        │
out_3: ┤6       ├┤5       ├┤4       ├
       │        ││        ││        │
out_4: ┤        ├┤6       ├┤5       ├
       │        ││        ││        │
out_5: ┤        ├┤        ├┤6       ├
       │        ││        ││        │
aux_0: ┤7       ├┤7       ├┤7       ├
       └────────┘└────────┘└────────┘

La multiplication dans ce circuit est mise en œuvre selon une approche classique en effectuant une série d'additions décalées en utilisant l'un des registres d'entrée tandis que les qubits de l'autre registre d'entrée agissent comme des qubits de contrôle pour les additionneurs.

Voir aussi

Cet MultiplierGate objet représente une multiplication, à l'instar de cette classe de circuit, mais permet au compilateur de choisir la décomposition optimale en fonction du contexte. Les implémentations spécifiques peuvent être définies via le HLSConfig, par exemple, ce circuit peut être sélectionné via Multiplier=["cumulative_h18"].

Références :

[1] Häner et al, Optimisation des circuits quantiques pour l'arithmétique, 2018. arXiv:1805.12445

Paramètres

  • num_state_qubits (int) – Le nombre de qubits dans l'un ou l'autre des registres d'entrée pour l'état a|a\rangle ou b|b\rangle. Les deux registres d'entrée doivent avoir le même nombre de qubits.
  • num_result_qubits (int | None) – Le nombre de qubits de résultat à limiter à la sortie. Si le nombre de qubits de résultat est nn, une multiplication modulo 2n2^n est effectuée pour limiter la sortie au nombre de qubits spécifié. La valeur par défaut est 2 * num_state_qubits pour représenter tout résultat possible de la multiplication des deux entrées.
  • adder (QuantumCircuit | None) – Circuit demi-additionneur destiné à effectuer des multiplications. La fonction « CDKMRippleCarryAdder » est utilisée par défaut si aucun additionneur n'est spécifié.
  • name (str) – Le nom de l'objet circuit.

Augmentations

NotImplementedError - Si num_result_qubits n'est pas la valeur par défaut et qu'un additif personnalisé est fourni.


Attributs

name

Type : str

Un nom lisible par l'homme pour le circuit.

Exemple

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.