Skip to main content
IBM Quantum Platform

Qiskit 0.23 Versionshinweise


0.23.6

Terra- 0.16.4

Keine Änderung

Aer- 0.7.5

Vorspiel

Diese Version ist eine Bugfix-Version, die die Kompatibilität der vorkompilierten Binärradpakete mit den Numpy-Versionen < 1.20.0 behebt. Die vorherige Version 0.7.4 baute die Binärdateien auf eine Art und Weise, die numpy 1.20.0 erforderte, was nun behoben wurde, so dass die vorkompilierten Binärradpakete mit jeder numpy-kompatiblen Version funktionieren.

Ignis- 0.5.2

Keine Änderung

Aqua- 0.8.2

Keine Änderung

IBM Q Anbieter 0.11.1

Keine Änderung


0.23.5

Terra- 0.16.4

Vorspiel

Diese Version ist eine Bugfix-Version, die hauptsächlich die Kompatibilität mit numpy 1.20.0 behebt. In dieser Numpy-Version wurden die lokalen Aliase für die numerischen Typen von Python veraltet (np.int -> int, np.float -> float, etc.) und die Verwendung dieser Aliase in Qiskit führte zu einer großen Anzahl von Verwerfungswarnungen, die ausgegeben wurden. Diese Version behebt dies, so dass Sie Qiskit mit numpy 1.20.0 ohne diese Verwerfungswarnungen ausführen können.

Aer- 0.7.4

Fehlerkorrekturen

Behebt die Kompatibilität mit numpy 1.20.0. In dieser Numpy-Version wurden die lokalen Aliase für die numerischen Typen von Python veraltet (np.int -> int, np.float -> float, etc.) und die Verwendung dieser Aliase in Qiskit Aer führte zu einer großen Anzahl von Verwerfungswarnungen, die ausgegeben wurden. Diese Version behebt dies, so dass Sie Qiskit Aer mit numpy 1.20.0 ohne diese Verwerfungswarnungen ausführen können.

Ignis- 0.5.2

Vorspiel

Diese Version ist eine Bugfix-Version, die hauptsächlich die Kompatibilität mit numpy 1.20.0 behebt. Es ist auch die erste Version, die Unterstützung für Python 3.9 bietet. Frühere Versionen (einschließlich 0.5.0 und 0.5.1 ) funktionierten mit Python 3.9, aber dies wurde nicht in den Paketmetadaten angegeben, und es gab keine Upstream-Tests für diese Versionen. Diese Version behebt dies und wurde auf Python 3.9 (zusätzlich zu 3.6, 3.7 und 3.8 ) getestet.

Fehlerkorrekturen

  • networkx ist jetzt ausdrücklich als Abhängigkeit aufgeführt. Zuvor war es eine implizite Abhängigkeit, da es für das Modul qiskit.ignis.verification.topological_codes benötigt wurde, aber es wurde nicht korrekt als Abhängigkeit aufgeführt, da qiskit-terra auch networkx benötigt und auch eine Abhängigkeit von ignis ist, so dass es in der Praxis immer installiert werden würde. Es ist jedoch notwendig, es als Voraussetzung für zukünftige Versionen von qiskit-terra aufzuführen, die networkx nicht benötigen. Es ist auch wichtig, die Abhängigkeiten von ignis korrekt aufzulisten, für den Fall, dass es in Zukunft eine Inkompatibilität zwischen den Versionsanforderungen geben sollte.

Aqua- 0.8.2

IBM Q Anbieter 0.11.1

Keine Änderung


0.23.4

Terra- 0.16.3

Fehlerkorrekturen

  • Ein in 0.16.2 eingeführtes Problem wurde behoben, das zu Fehlern führte, wenn transpile() auf einer Schaltung mit einer Reihe von 1-Qubit-Gattern und einer Nicht-Gatter-Anweisung, die nur auf einem Qubit arbeitet (z.B. Reset), zu Fehlern führte. Behebt #5736

Aer- 0.7.3

Keine Änderung

Ignis- 0.5.1

Keine Änderung

Aqua- 0.8.1

Keine Änderung

IBM Q Anbieter 0.11.1

Keine Änderung


0.23.3

Terra- 0.16.2

Neue Funktionen

  • Python 3.9 unterstützung wurde in dieser Version hinzugefügt. Sie können Qiskit Terra jetzt mit Python 3.9 ausführen.

Anmerkungen zu Upgrades

  • Die Klasse MCXGrayCode erstellt nun eine C3XGate , wenn num_ctrl_qubits gleich 3 ist, und eine C4XGate , wenn num_ctrl_qubits gleich 4 ist. Dies ist eine Ergänzung zu der bisherigen Funktionalität, bei der für jeden der Modi der :class:' qiskit.library.standard_gates.x.MCXGate\ , wenn num_ctrl_bitsgleich 1 ist, einCXGateerstellt wird, und wenn 2, einCCXGate` erstellt wird.

Fehlerkorrekturen

  • Impuls Delay anweisungen werden jetzt explizit als PulseQobjInstruction objekte, die in der PulseQobj ausgabe von assemble().

    Zuvor konnten wir ignorieren Delay anweisungen in einer Schedule als Teil von assemble() ignorieren, da die Zeit explizit in den PulseQobj objekte. Aber jetzt gibt es Situationen, in denen wir mit Impulstoren NUR eine Verzögerung planen können und die Verzögerung selbst nicht einbeziehen, was die Verzögerung aufheben würde.

  • Schaltungen mit benutzerdefinierten Gatterkalibrierungen können nun mit dem Transpiler geplant werden, ohne dass die Dauer der einzelnen Schaltungskalibrierungen explizit angegeben werden muss.

  • Die BasisTranslator und Unroller durchgänge hatten in einigen Fällen die globale Phase des Schaltkreises bei der Transpilierung nicht beibehalten. Dies wurde behoben.

  • Ein Fehler in qiskit.pulse.builder.frequency_offset() bei dem, wenn compensate_phase eingestellt war, ein Faktor von 2π2\pi in der angehängten Phase fehlte.

  • Festlegung der globalen Phase der Ausgabe der QuantumCircuit methode repeat(). Wenn ein Schaltkreis mit globaler Phase an einen anderen Schaltkreis angehängt wird, wird die globale Phase derzeit nicht weitergegeben. Simulatoren sind darauf angewiesen, da die Phase sonst mehrfach angewendet wird. Dies setzt die globale Phase von repeat() auf 0, bevor die wiederholte Schaltung angehängt wird, anstatt die vorhandene Phase mit der Anzahl der Wiederholungen zu multiplizieren.

  • Behebt einen Fehler in SparsePauliOp bei dem die Multiplikation mit bestimmten nicht Python eingebauten Numpy-Skalar-Typen falsche Werte lieferte. Behebt #5408

  • Die Definition der Hellinger-Treue von wurde von der früheren Definition von 1−H(P,Q)1-H(P,Q) auf [1−H(P,Q)2]2[1-H(P,Q)^2]^2 korrigiert, so dass sie gleich der Quantenzustands-Treue von P, Q als diagonale Dichtematrizen ist.

  • Reduzieren Sie die Anzahl der CX-Gatter in der Zerlegung des 3-gesteuerten X-Gatters, C3XGate. Kompiliert und optimiert in der U-CX-Basis, werden jetzt nur noch 14 CX- und 16 U-Gatter statt 20 bzw. 22 verwendet.

  • Behebt das Problem, dass die Verwendung des Jupyter-Backend-Widgets oder qiskit.tools.backend_monitor() fehlschlägt, wenn die Basis-Gates des Backends nicht die traditionellen u1, u2 und u3 enthalten.

  • Wenn die Funktion qiskit.compiler.transpile() auf eine Liste von Schaltkreisen mit einem einzigen Element angewendet wird, gibt die Funktion einen Schaltkreis anstelle einer Liste zurück. Wenn nun qiskit.compiler.transpile() mit einer Liste aufgerufen wird, gibt sie eine Liste zurück, auch wenn diese Liste nur ein einziges Element hat. Siehe #5260.

    from qiskit import *
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    qc.measure_all()
    
    transpiled = transpile([qc])
    print(type(transpiled), len(transpiled))
    <class 'list'> 1

Aer- 0.7.3

Neue Funktionen

  • Python 3.9 unterstützung wurde in dieser Version hinzugefügt. Sie können Qiskit Aer jetzt mit Python 3.9 ausführen, ohne es aus dem Quellcode zu erstellen.

Fehlerkorrekturen

  • Behebt ein Problem mit der Einstellung von QasmSimulator Basis-Gates, wenn die Optionen "method" und "noise_model" zusammen verwendet werden, und wenn sie mit einem Simulator verwendet werden, der mit from_backend() erstellt wurde. Die aufgelisteten Basisgatter sind die Schnittmenge der Gatter, die von der Backend-Konfiguration, der Simulationsmethode und den Basisgattern des Rauschmodells unterstützt werden. Wenn die Schnittmenge der Basistore des Geräuschmodells und der Basistore des Simulators leer ist, wird eine Warnung ausgegeben.
  • Behebt einen Fehler, der dazu führte, dass c_if nicht funktionierte, wenn die Breite des bedingten Registers größer als 64 war. Siehe #1077.
  • Behebt einen Fehler in from_backend() und from_backend() , bei dem basis_gates für IBMQ-Geräte mit dem Basis-Gate ['id', 'rz', 'sx', 'x', 'cx'] falsch gesetzt war. Das Rauschmodell hat nun immer dieselben Basisgatter wie die Backend-Basisgatter, unabhängig davon, ob diese Anweisungen Fehler im Rauschmodell aufweisen oder nicht.
  • Behebt einen Fehler bei der Anwendung der Trunkierung in der Matrixprodukt-Zustandsmethode der QasmSimulator.

Ignis- 0.5.1

Keine Änderung

Aqua- 0.8.1

Keine Änderung

IBM Q Anbieter 0.11.1

Keine Änderung


0.23.2

Terra- 0.16.1

Keine Änderung

Aer- 0.7.2

Neue Funktionen

  • Fügen Sie das CMake-Flag DISABLE_CONAN (default=``OFF``) hinzu. Bei der Installation aus dem Quellcode ermöglicht die Einstellung ON die Umgehung des Conan-Paketmanagers, um Bibliotheken zu finden, die bereits auf Ihrem System installiert sind. Dies ist auch als Umgebungsvariable DISABLE_CONAN verfügbar, die Vorrang vor dem CMake-Flag hat. Dies ist nicht das offizielle Verfahren zur Erstellung der VRE. Daher ist der Benutzer dafür verantwortlich, alle benötigten Bibliotheken und die dazugehörigen Dateien bereitzustellen, damit sie von CMake gefunden werden können.

Fehlerkorrekturen

  • Behebt einen Fehler mit verschachtelten OpenMP Flagge wurde auf true gesetzt, wenn es nicht sein sollte.

Ignis- 0.5.1

Keine Änderung

Aqua- 0.8.1

Keine Änderung

IBM Q Anbieter 0.11.1

Keine Änderung


0.23.1

Terra- 0.16.1

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem ein Fehler in der Ausführung für gültige Schaltkreise, die mit Verzögerungen gebaut wurden, ausgelöst wurde.
  • Die QASM-Definition von ‘c4x’ in qelib1.inc wurde korrigiert, damit sie mit der Definition der Standardbibliothek für C4XGate übereinstimmt.
  • Behebt einen Fehler in der Subtraktion für Quantenkanäle A−BA - B wo BB ein Operator objekt war. Die Negation wurde in der Operator-Darstellung auf die Matrix angewandt, was nicht der Negation in der Quantenkanal-Darstellung entspricht.
  • Ändert die Art und Weise, wie _evolve_instruction() auf Qubits zugreift, um den Fall eines Befehls mit mehreren Registern zu behandeln.

Aer- 0.7.1

Anmerkungen zu Upgrades

  • Die minimale cmake-Version, um qiskit-aer zu bauen, wurde von 3.6 auf 3.8 erhöht. Diese Änderung war notwendig, um die Fixierung von GPU-Versionen zu ermöglichen, die auf x86_64 CPUs laufen, denen AVX2 Anweisungen fehlen.

Fehlerkorrekturen

  • qiskit-aer mit GPU-Unterstützung funktioniert nun auch auf Systemen mit x86_64 CPUs, denen AVX2 Anweisungen fehlen. Zuvor konnte das GPU-Paket nur ausgeführt werden, wenn die Anweisungen AVX2 verfügbar waren. Behebt #1023
  • Behebt einen Fehler mit AerProvider , bei dem Optionen, die für die zurückgegebenen Backends mit set_options() gesetzt wurden, im Anbieter gespeichert wurden und bei nachfolgenden Aufrufen von get_backend() für das gleiche benannte Backend bestehen bleiben würden. Jetzt gibt jeder Aufruf von und backends() eine neue Instanz des Simulator-Backends zurück, die konfiguriert werden kann.
  • Behebt einen Fehler in der Fehlermeldung, die ausgegeben wird, wenn eine Schaltung nicht unterstützte Simulatoranweisungen enthält. Zuvor wurden einige unterstützte Anweisungen in der Fehlermeldung zusammen mit den nicht unterstützten Anweisungen aufgeführt.
  • Fehler behoben, bei dem das "sx"-Gatter SXGate nicht als unterstütztes Gatter im C++-Code aufgeführt war, in StateOpSet von matrix_product_state.hp.
  • Behebung eines Fehlers, bei dem "csx", "cu2", "cu3" fälschlicherweise als unterstützte Basistore für die Methode "density_matrix" des QasmSimulator aufgeführt wurden.
  • In MPS arbeitete apply_kraus direkt mit den Eingabebits in den Parameter-Qubits, anstatt mit den internen Qubits. Beim MPS-Algorithmus sind die Qubits ständig in Bewegung, so dass alle Operationen auf die internen Qubits angewendet werden sollten.
  • Beim Aufruf von MPS::sample_measure müssen wir zunächst die Qubits in der Standardreihenfolge sortieren, da dies in qasm_controller.This durch den Aufruf der Methode move_all_qubits_to_sorted_ordering erfolgt. Sie war korrekt in sample_measure_using_apply_measure, fehlte aber in sample_measure_using_probabilities.

Ignis- 0.5.1

Fehlerkorrekturen

  • Die "auto" -Methode von TomographyFitter, StateTomographyFitter und ProcessTomographyFitter sollte nur dann "cvx" verwenden, wenn CVXPY installiert ist und ein anderer SDP-Löser als SCS verfügbar ist. Der Grund dafür ist, dass der SCS-Solver eine geringere Genauigkeit als andere Solver-Methoden aufweist und oft eine Dichtematrix oder Choi-Matrix liefert, die nicht vollständig positiv ist und die Validierung fehlschlägt, wenn sie mit dem qiskit.quantum_info.state_fidelity() oder qiskit.quantum_info.process_fidelity() funktionen.

Aqua- 0.8.1

0.8.1

Neue Funktionen

  • Ein neuer Algorithmus wurde hinzugefügt: die Born-Openheimer-Potential-Energie-Oberfläche für die Berechnung der Potential-Energie-Oberfläche entlang verschiedener Freiheitsgrade des Moleküls. Der Algorithmus heißt BOPESSampler. Darüber hinaus bietet es Funktionen zur Anpassung der potenziellen Energieoberfläche an eine analytische Funktion mit vordefinierten potentials.some Details.

Kritische Probleme

  • Beachten Sie, dass der Parameter initial_state in QAOA aufgrund einer Fehlerbehebung jetzt anders implementiert ist. Die bisherige Implementierung vermischte fälschlicherweise die vom Benutzer bereitgestellten initial_state mit Hadamard-Gattern. Das Problem ist jetzt behoben. Wenn Ihr Code den vom Benutzer bereitgestellten Parameter initial_state nicht verwendet, brauchen Sie nichts zu beachten.

Fehlerkorrekturen

  • optimize_svm-Methode von qp_solver schlug manchmal fehl, was zu einer Fehlermeldung wie dieser führte ValueError: cannot reshape array of size 1 into shape (200,1) Dieses Problem wird durch Hinzufügen eines L2 -Norm-Parameters, lambda2, behoben, der standardmäßig auf 0.001 eingestellt ist, aber über den QSVM-Algorithmus nach Bedarf geändert werden kann, um die Konvergenz zu erleichtern.
  • Eine Methode one_letter_symbol wurde in der neuesten Version von DOCplex aus VarType entfernt, so dass Aqua nicht mehr mit dieser Version kompatibel ist. Daher wurde anstelle dieser Methode eine explizite Typüberprüfung der Variablentypen im Aqua-Optimierungsmodul eingeführt.
  • :meth`~qiskit.aqua.operators.state_fns.DictStateFn.sample()` konnte nur reelle Amplituden verarbeiten, aber es ist jetzt auch für komplexe Amplituden geeignet. #1311 <https://github.com/qiskit-community/qiskit-aqua/issues/1311> für weitere Details.
  • Die Klasse Trotter hat das Argument reps im Konstruktor nicht verwendet. #1317 <https://github.com/qiskit-community/qiskit-aqua/issues/1317> für weitere Details.
  • Ein AquaError wird ausgelöst, wenn :class`qiskit.aqua.operators.converters.CircuitSampler` einen leeren Operator probiert. #1321 <https://github.com/qiskit-community/qiskit-aqua/issues/1321> für weitere Details.
  • to_opflow() gibt einen korrekten Operator zurück, wenn die Koeffizienten komplexe Zahlen sind. #1381 <https://github.com/qiskit-community/qiskit-aqua/issues/1381> für weitere Details.
  • Lassen Sie Backend-Simulatoren die Unterstützung von NoiseModel validieren, anstatt sich nur auf Aer in QuantumInstance zu beschränken.
  • Korrekte Behandlung von PassManager in der Methode QuantumInstance transpile durch Aufruf der Methode run , falls diese existiert.
  • Ein Fehler, der benutzerdefinierte initial_state in QAOA mit Hadamard-Gates vermischt, wurde behoben. Dies ändert nichts an der Funktionalität von QAOA, wenn vom Benutzer kein initialer Zustand angegeben wird. Vorsicht ist geboten, wenn Ihre Implementierung QAOA mit dem Parameter cusom initial_state verwendet, da die Optimierungsergebnisse abweichen können.
  • Zuvor wurde bei der Einstellung von seed_simulator=0 auf QuantumInstance kein Saatgut gesetzt. Dies wirkte sich nur auf den Wert 0 aus. Dies wurde behoben.

IBM Q Anbieter 0.11.1

Neue Funktionen

  • qiskit.providers.ibmq.experiment.Experiment hat nun drei zusätzliche Attribute, Hub, Gruppe und Projekt, die den Anbieter identifizieren, der zur Erstellung des Experiments verwendet wurde.
  • Die Methoden qiskit.providers.ibmq.experiment.ExperimentService.experiments() und qiskit.providers.ibmq.experiment.ExperimentService.analysis_results() unterstützen jetzt einen Parameter limit , mit dem Sie die Anzahl der zurückgegebenen Experimente und Analyseergebnisse begrenzen können.

Anmerkungen zu Upgrades

  • Ein neuer Parameter, limit , ist nun der erste Parameter für die Methoden qiskit.providers.ibmq.experiment.ExperimentService.experiments() und qiskit.providers.ibmq.experiment.ExperimentService.analysis_results() . Der Standardwert für limit ist 10, d. h., es werden nur 10 Experimente und Analyseergebnisse zurückgegeben, wenn Sie taub sind.

Fehlerkorrekturen

  • Behebt das Problem, dass ein Auftrag im Status CREATING verbleiben konnte, wenn die Auftragsübermittlung auf halbem Weg fehlschlug.
  • Behebt die Endlosschleife, die bei der Übergabe einer IBMQRandomService -Instanz an einen Kindprozess auftritt.

0.23.0

Terra- 0.16.0

Vorspiel

Die Version 0.16.0 enthält mehrere neue Funktionen und Fehlerkorrekturen. Die wichtigsten Funktionen in dieser Version sind die folgenden:

  • Einführung geplanter Schaltungen, bei denen Verzögerungen verwendet werden können, um den Zeitablauf und die Ausrichtung von Operationen in der Schaltung zu steuern.
  • Kompilierung von Quantenschaltungen aus klassischen Funktionen, wie z. B. Orakeln.
  • Kompilieren und Optimieren von Rotationen einzelner Qubits über verschiedene Euler-Basen sowie die Phase + Quadratwurzel(X)-Basis (d.h. ['p', 'sx']), die die ältere IBM Quantum-Basis von ['u1', 'u2', 'u3'] ersetzen wird.
  • Verfolgung von global_phase() auf die QuantumCircuit klasse wurde erweitert durch die transpiler, quantum_info, und assembler sowie die Simulatoren BasicAer und Aer erweitert. Unitäre und Zustandsvektor-Simulationen liefern nun globale phasenkorrekte unitäre Matrizen und Zustandsvektoren.

Von besonderer Bedeutung für diese Version ist auch, dass Python 3.5 nicht mehr unterstützt wird. Wenn Sie Qiskit Terra mit Python 3.5 verwenden, ist die Version 0.15.2 die letzte Version, die funktionieren wird.

Neue Funktionen

  • Globale R-Gates sind hinzugefügt worden zu qiskit.circuit.library. Dazu gehören das globale R-Tor (GR), das globale Rx (GRX) und das globale Ry (GRY), die von dem GR tor abgeleitet sind, und das globale Rz ( GRZ), das in ähnlicher Weise definiert ist wie die GR gatter definiert ist. Die globalen R-Gatter werden für eine Reihe von Qubits gleichzeitig definiert und wirken als direkte Summe von R-Gattern auf jedem Qubit.

    Zum Beispiel:

    from qiskit import QuantumCircuit, QuantumRegister
    import numpy as np
    
    num_qubits = 3
    qr = QuantumRegister(num_qubits)
    qc = QuantumCircuit(qr)
    
    qc.compose(GR(num_qubits, theta=np.pi/3, phi=2*np.pi/3), inplace=True)

    erstellt eine QuantumCircuit auf einem QuantumRegister von 3 Qubits und führt eine RGate eines Winkels θ=π3\theta = \frac{\pi}{3} um eine Achse in der xy-Ebene der Bloch-Kugeln, die einen Winkel von ϕ=2π3\phi = \frac{2\pi}{3} mit der x-Achse auf jedem Qubit bildet.

  • Ein neues Farbschema, iqx, wurde dem mpl Backend für die Schaltkreisschublade hinzugefügt qiskit.visualization.circuit_drawer() und qiskit.circuit.QuantumCircuit.draw(). Hier wird dasselbe Farbschema verwendet wie beim Circuit Composer auf der Website IBM Quantum Experience. Es sind jetzt 3 Farbschemata verfügbar - default, iqx und bw.

    Es gibt zwei Möglichkeiten, ein Farbschema auszuwählen. Die erste ist die Verwendung einer Benutzerkonfigurationsdatei, die sich standardmäßig im Verzeichnis ~/.qiskit befindet. In der Datei settings.conf unter der Überschrift [Default] kann ein Benutzer circuit_mpl_style = iqx eingeben, um das Farbschema iqx auszuwählen.

    Die zweite Möglichkeit besteht darin, {'name': 'iqx'} an den style kwarg der Methode QuantumCircuit.draw oder der Funktion circuit_drawer anzufügen. Bei der zweiten Möglichkeit wird die Einstellung in der Datei settings.conf außer Kraft gesetzt. Zum Beispiel:

    from qiskit.circuit import QuantumCircuit
    
    circuit = QuantumCircuit(2)
    circuit.h(0)
    circuit.cx(0, 1)
    circuit.measure_all()
    circuit.draw('mpl', style={'name': 'iqx'})
  • In der style kwarg für den Schaltkreis Schublade qiskit.visualization.circuit_drawer() und qiskit.circuit.QuantumCircuit.draw() das Feld displaycolor mit dem Backend mpl können nun sowohl die Gatterfarbe als auch die Textfarbe für jeden Gattertyp im Formular (gate_color, text_color) eingegeben werden. Dies ermöglicht die Verwendung von hellen und dunklen Torfarben mit kontrastierenden Textfarben. Die Benutzer können auch nur die Farbe des Tores einstellen. In diesem Fall wird das Feld gatetextcolor verwendet. Gate-Farben können im style dict für eine beliebige Anzahl von Gate-Typen eingestellt werden, von einem bis zum gesamten displaycolor dict. Zum Beispiel:

    from qiskit.circuit import QuantumCircuit
    
    circuit = QuantumCircuit(1)
    circuit.h(0)
    
    style_dict = {'displaycolor': {'h': ('#FA74A6', '#000000')}}
    circuit.draw('mpl', style=style_dict)

    oder

    style_dict = {'displaycolor': {'h': '#FA74A6'}}
    circuit.draw('mpl', style=style_dict)
  • Zwei Ausrichtungskontexte werden dem Pulse Builder hinzugefügt (qiskit.pulse.builder) hinzugefügt, um das Schreiben einer wiederholten Impulsfolge mit Verzögerungen zu erleichtern.

    • qiskit.pulse.builder.align_equispaced() fügt Verzögerungen mit gleicher Länge zwischen die Impulszeitpläne im Kontext ein.
    • qiskit.pulse.builder.align_func() bietet eine erweiterte Steuerung der Impulsposition. Dieser Kontext nimmt eine Callable auf, die eine Bruchkoordinate des i-ten Impulses berechnet und die Impulse innerhalb des Kontexts ausrichtet. Dies macht die Kodierung der dynamischen Entkopplung einfach.
  • Ein rep_delay Parameter wurde der QasmQobj klasse unter der Laufkonfiguration hinzugefügt, QasmQobjConfig. Dieser Parameter wird verwendet, um die Zeit zwischen den Programmausführungen anzugeben. Er muss aus dem Backend-Bereich gewählt werden, der durch die BackendConfiguration methode rep_delay_range() angegeben wird. Wenn kein Wert angegeben wird, wird der Backend-Standardwert, qiskit.providers.models.BackendConfiguration.default_rep_delay, verwendet. rep_delay funktioniert nur bei Backends, die eine dynamische Wiederholungszeit zulassen. Dies lässt sich mit der BackendConfiguration eigenschaft dynamic_reprate_enabled überprüft werden.

  • Die qobj_schema.json JSON Schema-Datei in qiskit.schemas wurde aktualisiert, um die rep_delay als optionale Konfigurationseigenschaft für QASM Qobjs aufzunehmen.

  • Die backend_configuration_schema.json JSON Schema-Datei in qiskit.schemas wurde aktualisiert, um dynamic_reprate_enabled, rep_delay_range und default_rep_delay als optionale Eigenschaften für eine QASM-Backend-Konfigurations-Nutzlast aufzunehmen.

  • Ein neuer Optimierungspass, qiskit.transpiler.passes.TemplateOptimization wurde dem Transpiler hinzugefügt. In diesem Durchgang wird ein Algorithmus zum Abgleich von Vorlagen angewendet, der in arXiv:1909.05270 beschriebenen Algorithmus an, der alle kompatiblen maximalen Übereinstimmungen in der Schaltung ersetzt.

    Um diesen neuen Transpilerpass zu implementieren, wurde der Schaltungsbibliothek ein neues Modul, template_circuits, hinzugefügt (qiskit.circuit.library). Dieses neue Modul enthält alle Toffoli-Schaltungsvorlagen, die in der TemplateOptimization.

    Dieser neue Pass ist derzeit nicht in den voreingestellten Pass-Managern enthalten (qiskit.transpiler.preset_passmanagers), um ihn zu verwenden, müssen Sie eine eigene PassManager.

  • Es wurde eine neue Version der Anbieterschnittstelle hinzugefügt. Diese neue Schnittstelle, die Sie unter qiskit.providerszu finden ist, bietet einen neuen Versionsverwaltungsmechanismus, der es ermöglicht, Änderungen an der Schnittstelle im Laufe der Zeit auf kompatible Weise vorzunehmen. Die neue Schnittstelle sollte sich leicht auf bestehende Anbieter übertragen lassen, da sie bis auf die explizite Versionierung weitgehend identisch ist.

    Neben den explizit versionierten abstrakten Klassen sind die wichtigsten Änderungen für die neue Schnittstelle, dass die BackendV1 methode run() nun auch ein QuantumCircuit oder Schedule objekt anstelle von Qobj Objekten als Eingabe verwenden kann. Außerdem sind die Optionen jetzt Teil einer Backend-Klasse, so dass die Benutzer Laufzeitoptionen konfigurieren können, wenn sie mit einem Schaltkreis arbeiten. Die letzte Änderung ist, dass qiskit.providers.JobV1 nun synchron oder asynchron sein kann. Die genaue Konfiguration und die Methode zur Konfiguration bleibt dem Anbieter überlassen, aber es gibt in der abstrakten Klasse JobV1 Schnittstellen-Hook-Points, die deutlich machen, unter welchem Ausführungsmodell ein Auftrag läuft.

  • Die Funktion wurde um einen neuen Kwarg, inplace, ergänzt qiskit.result.marginal_counts(). Dieser kwarg wird verwendet, um zu steuern, ob der Inhalt an Ort und Stelle marginalisiert wird oder eine neue Kopie zurückgegeben wird, für Result objekt-Eingabe. Dieser Parameter hat keine Auswirkung auf eine Eingabe dict oder Counts objekt.

  • Eine erste Version eines klassischen Funktionscompilers, qiskit.circuit.classicalfunctionwurde hinzugefügt. Dies ermöglicht die Kompilierung von typisierten Python-Funktionen (die im Moment nur mit Bits vom Typ Int1 arbeiten) in QuantumCircuit objekte. Zum Beispiel:

    from qiskit.circuit import classical_function, Int1
    
    @classical_function
    def grover_oracle(a: Int1, b: Int1, c: Int1, d: Int1) -> Int1:
         x = not a and b
         y = d and not c
         z = not x or y
         return z
    
    quantum_circuit = grover_oracle.synth()
    quantum_circuit.draw()

    Der Parameter registerless=False in der qiskit.circuit.classicalfunction.ClassicalFunction methode synth() erzeugt einen Schaltkreis mit Registern, die sich auf die Parameternamen beziehen. Zum Beispiel:

    quantum_circuit = grover_oracle.synth(registerless=False)
    quantum_circuit.draw()

    Eine dekorierte klassische Funktion kann wie jedes andere Quantengatter verwendet werden, wenn sie an eine Schaltung angehängt wird.

    circuit = QuantumCircuit(5)
    circuit.append(grover_oracle, range(5))
    circuit.draw()

    Das Gatter GROVER_ORACLE wird synthetisiert, wenn seine Zerlegung erforderlich ist.

    circuit.decompose().draw()

    Die Funktion erfordert tweedledum, eine Bibliothek zur Synthese von Quantenschaltungen, die über pip mit pip install tweedledum installiert werden kann.

  • Eine neue Klasse qiskit.circuit.Delay zur Darstellung einer Verzögerungsanweisung in einer Schaltung wurde hinzugefügt. Eine neue Methode delay() ist jetzt verfügbar, um auf einfache Weise Verzögerungen an Schaltungen anzuhängen. Damit ist es möglich, zeitkritische Experimente (z.B. T1/T2 Experiment) auf der Schaltungsebene zu beschreiben.

    from qiskit import QuantumCircuit
    
    qc = QuantumCircuit(1, 1)
    qc.delay(500, 0, unit='ns')
    qc.measure(0, 0)
    
    qc.draw()
  • Ein neues Argument scheduling_method für qiskit.compiler.transpile() wurde hinzugefügt. Sie ist erforderlich, wenn Schaltungen mit Verzögerungen umgesetzt werden. Wenn scheduling_method angegeben ist, gibt der Transpiler eine geplante Schaltung zurück, in der alle Leerlaufzeiten mit Verzögerungen aufgefüllt sind (d. h. die Startzeit jeder Anweisung ist eindeutig bestimmt). Auf diese Weise kann man sehen, wie geplante Anweisungen (Gatter) auf der Schaltungsebene aussehen.

    from qiskit import QuantumCircuit, transpile
    from qiskit.test.mock.backends import FakeAthens
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    
    scheduled_circuit = transpile(qc, backend=FakeAthens(), scheduling_method="alap")
    print("Duration in dt:", scheduled_circuit.duration)
    scheduled_circuit.draw(idle_wires=False)

    Siehe auch timeline_drawer() für die beste Visualisierung der geplanten Schaltungen.

  • Eine neue Funktion qiskit.compiler.sequence() wurde ebenfalls hinzugefügt, so dass wir eine geplante Schaltung in eine Schedule konvertieren können, um sie auf einem pulsfähigen Backend ausführbar zu machen.

    from qiskit.compiler import sequence
    
    sched = sequence(scheduled_circuit, pulse_enabled_backend)
  • Die Website schedule() wurde aktualisiert, so dass es Schaltungen mit Verzögerungen planen kann. Nun gibt es zwei Möglichkeiten, eine Schaltung mit Verzögerung zu planen:

    qc = QuantumCircuit(1, 1)
    qc.h(0)
    qc.delay(500, 0, unit='ns')
    qc.h(0)
    qc.measure(0, 0)
    
    sched_path1 = schedule(qc.decompose(), backend)
    sched_path2 = sequence(transpile(qc, backend, scheduling_method='alap'), backend)
    assert pad(sched_path1) == sched_path2

    Lesen Sie die Versionshinweise und die Dokumentation für transpile() und sequence() für die Details zum anderen Pfad.

  • Hinzufügen der GroverOperator zur Schaltungsbibliothek (qiskit.circuit.library) hinzugefügt, um den Grover-Operator zu konstruieren, der im Grover-Suchalgorithmus und in der Quantenamplituden-Verstärkung/-Abschätzung verwendet wird. Mit einem Orakel in Form einer Schaltung ausgestattet, erstellt GroverOperator den Grover-Operator aus dem Lehrbuch. Um dies für die Amplitudenverstärkung zu verallgemeinern und einen generischen Operator anstelle von Hadamard-Toren als Zustandsvorbereitung zu verwenden, kann das Argument state_in verwendet werden.

  • Die InstructionScheduleMap methoden get() und pop() methoden nehmen jetzt ParameterExpression instanzen zusätzlich zu numerischen Werten für Zeitplangeneratorparameter. Wenn der Generator eine Funktion ist, können Ausdrücke vor oder innerhalb des Funktionsaufrufs gebunden werden. Wenn der Generator ein ParametrizedSchedule ist, müssen Ausdrücke gebunden werden, bevor der Zeitplan selbst gebunden/aufgerufen wird.

  • Eine neue Klasse LinearAmplitudeFunction wurde der Schaltkreisbibliothek hinzugefügt (qiskit.circuit.library) hinzugefügt, um (stückweise) lineare Funktionen auf Qubit-Amplituden abzubilden,

F∣x⟩∣0⟩=1−f(x)∣x⟩∣0⟩+f(x)∣x⟩∣1⟩F|x\rangle |0\rangle = \sqrt{1 - f(x)}|x\rangle |0\rangle + \sqrt{f(x)}|x\rangle |1\rangle

Die Abbildung basiert auf einer kontrollierten Pauli-Y-Rotation und einer Taylor-Näherung, wie sie in https://arxiv.org/abs/1806.06893. Diese Schaltung kann zur Berechnung von Erwartungswerten linearer Funktionen unter Verwendung des Algorithmus zur Quantenamplitudenschätzung verwendet werden.

  • Das neue jupyter magic monospaced_output wurde dem qiskit.tools.jupyter modul hinzugefügt. Diese Magie setzt die Schriftart für die Ausgabe des Jupyter-Notebooks auf "Courier New", wenn möglich. Wenn Sie diese Schriftart verwenden, erhalten Sie besser ausgerichtete Textkreiszeichnungen.

    import qiskit.tools.jupyter
    %monospaced_output
  • Ein neuer Transpiler-Pass, Optimize1qGatesDecompositionwurde hinzugefügt. Dieser Transpiler-Pass ist eine Alternative zum bestehenden Optimize1qGates die die Klasse OneQubitEulerDecomposer klasse verwendet, um eine Kette von Einzel-Qubit-Gattern zu zerlegen und zu vereinfachen. Diese Methode ist mit jeder Basismenge kompatibel, während Optimize1qGates nur für u1, u2 und u3 funktioniert. Die Standard-Pass-Manager für optimization_level 1, 2 und 3 wurden aktualisiert, um diesen neuen Pass zu verwenden, wenn die Basisgruppe nicht u1, u2 oder u3 enthält.

  • Die OneQubitEulerDecomposer unterstützt jetzt zwei neue Basen, 'PSX' und 'U'. Diese können mit dem basis kwarg auf dem Konstruktor angegeben werden. Dadurch wird die Matrix in eine Schaltung zerlegt, die PGate und SXGate für 'PSX', und UGate für 'U'.

  • Eine neue Methode remove() wurde der qiskit.transpiler.PassManager klasse hinzugefügt. Diese Methode ermöglicht das Entfernen eines Passes aus einer PassManager instanz. Es funktioniert mit Indizes, ähnlich wie bei replace(). Zum Beispiel, um den RemoveResetInZeroState pass aus dem Passmanager der Optimierungsstufe 1 zu entfernen:

    from qiskit.transpiler.preset_passmanagers import level_1_pass_manager
    from qiskit.transpiler.passmanager_config import PassManagerConfig
    
    pm = level_1_pass_manager(PassManagerConfig())
    pm.draw()
    [0] FlowLinear: UnrollCustomDefinitions, BasisTranslator
    [1] FlowLinear: RemoveResetInZeroState
    [2] DoWhile: Depth, FixedPoint, Optimize1qGates, CXCancellation

    Die Bühne [1] mit RemoveResetInZeroState kann auf diese Weise entfernt werden:

    pass_manager.remove(1)
    pass_manager.draw()
    [0] FlowLinear: UnrollCustomDefinitions, BasisTranslator
    [1] DoWhile: Depth, FixedPoint, Optimize1qGates, CXCancellation
  • Mehrere Klassen zum Laden von Wahrscheinlichkeitsverteilungen in Qubit-Amplituden; UniformDistribution, NormalDistribution und LogNormalDistribution wurden der Schaltkreisbibliothek hinzugefügt (qiskit.circuit.library). Die Normal- und Log-Normal-Verteilung unterstützen sowohl univariate als auch multivariate Verteilungen. Diese Schaltungen sind von zentraler Bedeutung für Anwendungen im Finanzwesen, bei denen eine Quantenamplitudenschätzung verwendet wird.

  • Die Unterstützung für Impuls-Tore wurde der QuantumCircuit klasse hinzugefügt. Dies ermöglicht einem QuantumCircuit eine Definition einer Operation in Form von zeitlich geordneten Signalen über Hardwarekanäle hinweg zu überschreiben (für Basisgatter) oder zu spezifizieren (für Standard- und benutzerdefinierte Gatter) Gate operation in Form von zeitlich geordneten Signalen über Hardware-Kanäle hinweg. Mit anderen Worten, es ermöglicht die Option, benutzerdefinierte Gate-Kalibrierungen auf Impulsebene anzubieten.

    Die Schaltkreise sind genau wie bisher aufgebaut. Zum Beispiel:

    from qiskit import pulse
    from qiskit.circuit import QuantumCircuit, Gate
    
    class RxGate(Gate):
        def __init__(self, theta):
            super().__init__('rxtheta', 1, [theta])
    
    circ = QuantumCircuit(1)
    circ.h(0)
    circ.append(RxGate(3.14), [0])

    Anschließend kann die Kalibrierung für das Tor mit der QuantumCircuit methode add_calibration() registriert werden, die eine Schedule definition sowie die Qubits und die Parameter, für die sie definiert ist:

    # Define the gate implementation as a schedule
    with pulse.build() as custom_h_schedule:
        pulse.play(pulse.library.Drag(...), pulse.DriveChannel(0))
    
    with pulse.build() as q1_x180:
        pulse.play(pulse.library.Gaussian(...), pulse.DriveChannel(1))
    
    # Register the schedule to the gate
    circ.add_calibration('h', [0], custom_h_schedule)  # or gate.name string to register
    circ.add_calibration(RxGate(3.14), [0], q1_x180)   # Can accept gate

    Zuvor konnte diese Funktion nur über vollständige Impulszeitpläne genutzt werden. Außerdem können Schaltkreise jetzt mit Ihren benutzerdefinierten Definitionen an Backends übermittelt werden (abhängig von der Backend-Unterstützung).

    Schaltungen mit Impulstoren können noch auf ein Schedule senken, indem man die schedule() funktion.

    Das kalibrierte Gatter kann auch mit dem regulären Transpilierungsverfahren umgesetzt werden:

    transpiled_circuit = transpile(circ, backend)

    Die transpilierte Schaltung belässt die kalibrierten Gatter auf demselben Qubit wie die Originalschaltung und rollt sie nicht zu den Basisgattern ab.

  • Unterstützung für die Disassemblierung von PulseQobj objekten wurde in die qiskit.assembler.disassemble() funktion hinzugefügt. Zum Beispiel:

    from qiskit import pulse
    from qiskit.assembler.disassemble import disassemble
    from qiskit.compiler.assemble import assemble
    from qiskit.test.mock import FakeOpenPulse2Q
    
    backend = FakeOpenPulse2Q()
    
    d0 = pulse.DriveChannel(0)
    d1 = pulse.DriveChannel(1)
    with pulse.build(backend) as sched:
        with pulse.align_right():
            pulse.play(pulse.library.Constant(10, 1.0), d0)
            pulse.shift_phase(3.11, d0)
            pulse.measure_all()
    
    qobj = assemble(sched, backend=backend, shots=512)
    scheds, run_config, header = disassemble(qobj)
  • Ein neuer Kwarg, coord_type , wurde hinzugefügt zu qiskit.visualization.plot_bloch_vector(). Dieser Warg ermöglicht die Änderung des Koordinatensystems für den Eingabeparameter, der die Positionierung des Vektors auf der Blochkugel in der erzeugten Visualisierung beschreibt. Es gibt 2 unterstützte Werte für diesen neuen kwarg, 'cartesian' (der Standardwert) und 'spherical'. Wenn der coord_type kwarg auf 'spherical' gesetzt wird, hat die Liste der übernommenen Parameter die Form [r, theta,  phi] , wobei r der Radius, theta die Neigung aus +z-Richtung und phi der Azimut aus +x-Richtung ist. Zum Beispiel:

    from numpy import pi
    
    from qiskit.visualization import plot_bloch_vector
    
    x = 0
    y = 0
    z = 1
    r = 1
    theta = pi
    phi = 0
    
    
    # Cartesian coordinates, where (x,y,z) are cartesian coordinates
    # for bloch vector
    plot_bloch_vector([x,y,z])
    plot_bloch_vector([x,y,z], coord_type="cartesian")  # Same as line above
    # Spherical coordinates, where (r,theta,phi) are spherical coordinates
    # for bloch vector
    plot_bloch_vector([r, theta, phi], coord_type="spherical")
  • Impuls Schedule objekte unterstützen jetzt die Verwendung von ParameterExpression objekte für Parameter.

    Zum Beispiel:

    from qiskit.circuit import Parameter
    from qiskit import pulse
    
    alpha = Parameter('⍺')
    phi = Parameter('ϕ')
    qubit = Parameter('q')
    amp = Parameter('amp')
    
    schedule = pulse.Schedule()
    schedule += SetFrequency(alpha, DriveChannel(qubit))
    schedule += ShiftPhase(phi, DriveChannel(qubit))
    schedule += Play(Gaussian(duration=128, sigma=4, amp=amp),
                     DriveChannel(qubit))
    schedule += ShiftPhase(-phi, DriveChannel(qubit))

    Die Parametrierung erfolgt über die assign_parameters() methode:

    schedule.assign_parameters({alpha: 4.5e9, phi: 1.57,
                                qubit: 0, amp: 0.2})

    Ausdrücke und Teilzuweisungen funktionieren ebenfalls, wie z. B.:

    beta = Parameter('b')
    schedule += SetFrequency(alpha + beta, DriveChannel(0))
    schedule.assign_parameters({alpha: 4.5e9})
    schedule.assign_parameters({beta: phi / 6.28})
  • Eine neue Visualisierungsfunktion timeline_drawer() wurde dem qiskit.visualization modul hinzugefügt.

    Zum Beispiel:

    from qiskit.visualization import timeline_drawer
    from qiskit import QuantumCircuit, transpile
    from qiskit.test.mock import FakeAthens
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0,1)
    timeline_drawer(transpile(qc, FakeAthens(), scheduling_method='alap'))

Anmerkungen zu Upgrades

  • Die Typüberprüfung für den params kwarg des Konstruktors für die Gate klasse und ihrer Unterklassen wurde geändert. Zuvor mussten alle Gate parameter in einer Reihe von erlaubten Typen enthalten sein, die in der Instruction klasse definiert sind. Jetzt eine neue Methode, validate_parameter() wird verwendet, um festzustellen, ob ein Parametertyp gültig ist oder nicht. Die Definition dieser Methode in einer Unterklasse hat Vorrang vor der der übergeordneten Klasse. Zum Beispiel akzeptiert UnitaryGate einen Parameter des Typs numpy.ndarray und definiert eine benutzerdefinierte Methode validate_parameter() , die den Parameter zurückgibt, wenn es sich um einen numpy.ndarray handelt. Diese hat Vorrang vor der Funktion, die in ihrer übergeordneten Klasse Gate. Wenn UnitaryGate als übergeordnete Klasse für eine neue Klasse verwendet werden soll, wird diese Methode validate_parameter verwendet, es sei denn, die neue untergeordnete Klasse definiert ihre eigene Methode.

  • Die zuvor veralteten Methoden, Argumente und Eigenschaften namens n_qubits und numberofqubits wurden entfernt. Diese wurden in der Version 0.13.0 veraltet. Die Änderungen umfassen folgende Punkte:

    Klasse
    Alt
    Neu
    QuantumCircuitn_qubitsnum_qubits
    Paulinumberofqubitsnum_qubits
    Funktion
    Altes Argument
    Neues Argument
    qiskit.circuit.random.random_circuit()n_qubitsnum_qubits
    qiskit.circuit.library.MSGaten_qubitsnum_qubits
  • Einfügen einer parametrisierten Gate instanz in ein QuantumCircuit wird nun eine Kopie dieses Gatters erzeugt, die in der Schaltung verwendet wird. Wenn Änderungen an der in die Schaltung eingefügten Instanz vorgenommen werden, werden diese nicht mehr im Gatter der Schaltung angezeigt. Diese Änderung wurde vorgenommen, um ein Problem zu beheben, das beim Einfügen eines einzelnen parametrisierten Gate objekts in mehrere Schaltkreise.

  • Die Funktion qiskit.result.marginal_counts() ändert nun standardmäßig nicht den qiskit.result.Result instanz-Parameter. Zuvor wurde das Objekt Result immer an Ort und Stelle geändert. Es wurde ein neuer kwarg inplace hinzugefügt marginal_counts() hinzugefügt, der die Verwendung des vorherigen Verhaltens ermöglicht, wenn inplace=True gesetzt ist.

  • Die U3Gate definition wurde geändert und bezieht sich nun auf die UGate klasse. Die Klasse UGate klasse hat keine Definition. Es ist daher nicht mehr möglich, jede Schaltung in Form von U3 und CX abzuwickeln. Stattdessen können U und CX für jeden Stromkreis verwendet werden.

  • Die veraltete Unterstützung für die Ausführung von Qiskit Terra mit Python 3.5 wurde entfernt. Um Qiskit Terra ab dieser Version zu verwenden, müssen Sie mindestens Python 3.6 verwenden. Wenn Sie Python 3.5 verwenden, ist die letzte Version, die funktionieren wird, Qiskit Terra 0.15.2.

  • In den PulseBackendConfiguration in den Attributen hamiltonian wird das Feld vars jetzt in der Einheit Hz statt wie bisher in GHz zurückgegeben. Diese Änderung wurde vorgenommen, um mit den Einheiten, die für die anderen Attribute der Klasse verwendet werden, konsistent zu sein.

  • Die zuvor veraltete Unterstützung für die Übergabe eines Wörterbuchs als erstes Positionsargument an DAGNode konstruktor wurde entfernt. Die Verwendung eines dictonary für das erste Positionsargument wurde in der Version 0.13.0 veraltet. Zum Erstellen eines DAGNode objekt zu erstellen, sollten Sie die Attribute direkt als kwargs an den Konstruktor übergeben.

  • Die Schlüsselwortargumente für die Schaltkreismethoden (z.B.: qiskit.circuit.QuantumCircuit.cx) q, ctl*, und tgt*, die in der Version 0.12.0 veraltet waren, wurden entfernt. Stattdessen können nur qubit, control_qubit* und target_qubit* als benannte Argumente für diese Methoden verwendet werden.

  • Das zuvor veraltete Modul qiskit.extensions.standard wurde entfernt. Dieses Modul ist seit der Version 0.14.0 veraltet. Die qiskit.circuit.library kann stattdessen verwendet werden. Zusätzlich sind alle Gate-Klassen, die zuvor in qiskit.extensions.standard zu finden waren, weiterhin von qiskit.extensions.

  • Die zuvor veralteten Gates im Modul qiskit.extensions.quantum_initializer: DiagGate, UCG`, UCPauliRotGate, UCRot, UCRXGate, UCX, UCRYGate, UCY, UCRZGate, UCZ wurden entfernt. Diese wurden alle in der Version 0.14.0 veraltet und haben Alternativen in der Schaltkreisbibliothek (qiskit.circuit.library).

  • Die zuvor veraltete qiskit.circuit.QuantumCircuit gate-Methode iden() wurde entfernt. Dies wurde in der Version 0.13.0 veraltet und i() oder id() kann stattdessen verwendet werden.

Hinweise zu veralteten Versionen

  • Die Verwendung eines numpy.ndarray für einen Parameter im params kwarg für den Konstruktor der Gate klasse und Unterklassen wurde veraltet und wird in zukünftigen Versionen entfernt. Dies geschah im Rahmen der Überarbeitung der Art und Weise, wie die parms Typüberprüfung für die Gate klasse. Wenn Sie eine benutzerdefinierte Gate-Klasse haben, die eine Unterklasse von Gate ist (oder über eine andere übergeordnete Klasse in der Hierarchie), die einen ndarray Parameter akzeptiert, sollten Sie eine benutzerdefinierte validate_parameter() methode für Ihre Klasse definieren, die den zulässigen Parametertyp zurückgibt. Zum Beispiel:

    def validate_parameter(self, parameter):
        """Custom gate parameter has to be an ndarray."""
        if isinstance(parameter, numpy.ndarray):
            return parameter
        else:
            raise CircuitError("invalid param type {0} in gate "
                               "{1}".format(type(parameter), self.name))
  • Die num_ancilla_qubits eigenschaft der PiecewiseLinearPauliRotations und PolynomialPauliRotations klassen ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollte die Eigenschaft num_ancillas verwendet werden. Dies geschah aus Gründen der Kohärenz mit der QuantumCircuit methode num_ancillas().

  • Die Klasse qiskit.circuit.library.MSGate klasse ist veraltet, bleibt aber bestehen, um das Laden alter Aufträge zu ermöglichen. Sie wurde ersetzt durch die qiskit.circuit.library.GMS klasse ersetzt, die stattdessen verwendet werden sollte.

  • Der MSBasisDecomposer Transpiler-Pass ist veraltet und wird in einer zukünftigen Version entfernt werden. Der qiskit.transpiler.passes.BasisTranslator pass kann stattdessen verwendet werden.

  • Die Methoden QuantumCircuit methoden u1, u2 und u3 sind jetzt veraltet. Stattdessen können die folgenden Ersetzungen verwendet werden.

    u1(theta) = p(theta) = u(0, 0, theta)
    u2(phi, lam) = u(pi/2, phi, lam) = p(pi/2 + phi) sx p(pi/2 lam)
    u3(theta, phi, lam) = u(theta, phi, lam) = p(phi + pi) sx p(theta + pi) sx p(lam)

    Die Gate-Klassen selbst, U1Gate, U2Gate und U3Gate bleiben bestehen, um das Laden von alten Aufträgen zu ermöglichen.

Fehlerkorrekturen

  • Die Methoden der Klasse Result methoden der Klasse data(), get_memory(), get_counts(), get_unitary(), und get_statevector ` will now emit a warning when the ``experiment`() kwarg wird angegeben, wenn versucht wird, Ergebnisse entweder mit einer QuantumCircuit oder Schedule instanz zu holen, wenn mehr als ein Eintrag, der dem Instanznamen entspricht, im Result Objekt vorhanden ist. Beachten Sie, dass nur der erste Eintrag, der diesem Namen entspricht, zurückgegeben wird. Korrekturen #3207
  • Die qiskit.circuit.QuantumCircuit methode append() kann nun verwendet werden, um eine parametrisierte Gatterinstanz in mehrere Schaltkreise einzufügen. Dies behebt ein früheres Problem, bei dem das Einfügen eines einzelnen parametrisierten Gate objekts in mehrere Schaltkreise zu Fehlern führen konnte, wenn einem Schaltkreis ein Parameter zugewiesen wurde. Behebt #4697
  • Zuvor ließ die Funktion qiskit.execute.execute() fälschlicherweise nicht zu, dass die Wargs backend und pass_manager gleichzeitig angegeben wurden. Dies wurde behoben, so dass sowohl backend als auch pass_manager bei Aufrufen von execute() zusammen verwendet werden können. Korrekturen #5037
  • Die QuantumCircuit methode unitary() wurde so angepasst, dass sie eine einzelne ganze Zahl für das Argument qarg akzeptiert (beim Hinzufügen einer 1-Qubit-Unitary). Die zulässigen Typen für das Argument qargs sind jetzt int, Qubit, oder eine Liste von Ganzzahlen. Behebt #4944
  • Bisher konnte der Aufruf von inverse() für ein BlueprintCircuit Objekt fehlschlagen, wenn dessen interne Dateneigenschaft noch nicht ausgefüllt war. Dies wurde korrigiert, so dass der Aufrufer von inverse() die internen Daten auffüllt, bevor er die Umkehrung der Schaltung erzeugt. Korrekturen #5140
  • Es wurde ein Problem bei der Erstellung eines qiskit.result.Counts objekts aus einem leeren Datenwörterbuch. Dadurch wird ein leeres Counts objekt. Die Methode most_frequent() methode wurde ebenfalls aktualisiert und löst nun eine aussagekräftigere Ausnahme aus, wenn das Objekt leer ist. Korrekturen #5017
  • Behebt einen Fehler, bei dem das Setzen von ctrl_state einer UnitaryGate zweimal angewendet wurde; einmal bei der Erstellung der Matrix für die kontrollierte Unitary und ein weiteres Mal beim Aufruf der definition() methode der qiskit.circuit.ControlledGate klasse. Dies würde den Anschein erwecken, dass die Einstellung ctrl_state keine Auswirkungen hat.
  • Zuvor war die ControlledGate methode inverse() in einigen Fällen den Parameter ctrl_state nicht beibehalten. Dies wurde behoben, so dass der Aufruf von inverse() den Wert ctrl_state in seiner Ausgabe beibehält.
  • Fehler im Backend der mpl -Ausgabe der Schaltkreisschublade behoben qiskit.circuit.QuantumCircuit.draw() und qiskit.visualization.circuit_drawer() der dazu führte, dass die Schublade nicht funktionierte, wenn der style kwarg auf eine Zeichenkette gesetzt war. Das richtige Verhalten wäre, diese Zeichenfolge als Pfad zu einer JSON-Datei zu behandeln, die das Stylesheet für die Visualisierung enthält. Dies wurde behoben, und es werden Warnungen ausgegeben, wenn die JSON-Datei für das Stylesheet nicht geladen werden kann.
  • Ein Fehler wurde behoben, bei dem das Laden einer QASM-Datei über from_qasm_file() oder from_qasm_str() fehlschlug, wenn ein u, phase(p), sx oder sxdg Tor in der QASM-Datei vorhanden war. Behebt #5156
  • Es wurde ein Fehler behoben, der dazu führen konnte, dass Register falsch zugeordnet wurden, wenn ein Gatter, das mit nur einer 2-Qubit-Operation definiert wurde, entrollt/zerlegt wurde.

Aer- 0.7.0

Vorspiel

Diese Version 0.7.0 enthält zahlreiche Leistungsverbesserungen und bedeutende Erweiterungen der Simulatorschnittstelle und lässt die Unterstützung für Python 3.5 fallen. Die wichtigsten Änderungen an der Schnittstelle sind konfigurierbare Simulator-Backends und die Erstellung vorkonfigurierter Simulatoren aus IBMQ-Backends. Die Unterstützung für Rauschmodell und Basisgatter wurde auch für die meisten Standardgatter der Qiskit-Schaltungsbibliothek erweitert, einschließlich neuer Unterstützung für 1- und 2-Qubit-Rotationsgatter. Zu den Leistungsverbesserungen gehören das Hinzufügen von SIMD-Unterstützung zu den Dichtematrix- und unitären Simulationsmethoden, die Verringerung des verwendeten Speichers und die Verbesserung der Leistung von Schaltungen, die Zustandsvektor- und Dichtematrix-Snapshots verwenden, sowie das Hinzufügen von Unterstützung für Kraus-Befehle zur Gate-Fusion-Schaltungsoptimierung, um die Leistung von verrauschten Zustandsvektor-Simulationen erheblich zu verbessern.

Neue Funktionen

  • Fügt Basis-Gate-Unterstützung für die qiskit.circuit.Delay anweisung zu den Programmen StatevectorSimulator, UnitarySimulator und QasmSimulator hinzu. Beachten Sie, dass dieses Gatter während der Simulation als Identitätsgatter behandelt wird und der Parameter Verzögerungslänge ignoriert wird.

  • Fügt Basisgatter-Unterstützung für das Ein-Qubit-Gatter qiskit.circuit.library.UGate zu den Methoden StatevectorSimulator, UnitarySimulator und "statevector", "density_matrix", "matrix_product_state" und "extended_stabilizer" des QasmSimulator.

  • Fügt Basisgatter-Unterstützung für das Phasengatter qiskit.circuit.library.PhaseGate zu den Methoden StatevectorSimulator, StatevectorSimulator, UnitarySimulator und "statevector", "density_matrix", "matrix_product_state" und "extended_stabilizer" des QasmSimulator.

  • Fügt Basisgatter-Unterstützung für das phasengesteuerte Gatter qiskit.circuit.library.CPhaseGate zu den Methoden StatevectorSimulator, StatevectorSimulator, UnitarySimulator und "statevector", "density_matrix" und "matrix_product_state" der QasmSimulator.

  • Fügt Unterstützung für das mehrfach gesteuerte Phasengatter qiskit.circuit.library.MCPhaseGate zu StatevectorSimulator, UnitarySimulator und der "statevector" Methode von QasmSimulator.

  • Fügt Unterstützung für das Tor (X)\sqrt(X) qiskit.circuit.library.SXGate zu den Programmen StatevectorSimulator, UnitarySimulator und QasmSimulator.

  • Unterstützung für 1 und 2-Qubit Qiskit-Schaltkreisbibliothek Rotation Gates RXGate, RYGate, RZGate, RGate, RXXGate, RYYGate, RZZGate, RZXGate zu den Methoden StatevectorSimulator, UnitarySimulator und den Methoden "statevector" und "density_matrix" der QasmSimulator.

  • Fügt Unterstützung für mehrfach gesteuerte Rotationstore "mcr", "mcrx", "mcry", "mcrz" zu den StatevectorSimulator, UnitarySimulator, und der "statevector" Methode der QasmSimulator hinzu.

  • Simulator-Backends konfigurierbar machen. Dies ermöglicht die Einstellung persistenter Optionen wie Simulationsmethode und Rauschmodell für jedes Simulator-Backend-Objekt.

    QasmSimulator und PulseSimulator können auch über ein IBMQBackend Backend-Objekt konfiguriert werden, indem die Methode :meth:`~qiskit.providers.aer.QasmSimulator.from_backend verwendet wird. Für QasmSimulator werden die Kopplungskarte, die Basis-Gates und das grundlegende Geräuschmodell auf der Grundlage der Backend-Konfiguration und -Eigenschaften konfiguriert. Für PulseSimulator werden das Systemmodell und die Standardeinstellungen automatisch aus der Backend-Konfiguration, den Eigenschaften und Standardeinstellungen konfiguriert.

    Zum Beispiel kann ein verrauschter Dichte-Matrix-Simulator-Backend als QasmSimulator(method='density_matrix', noise_model=noise_model) oder ein idealer Matrix-Produkt-Zustands-Simulator als QasmSimulator(method='matrix_product_state') konstruiert werden.

    Ein Vorteil ist, dass eine PulseSimulator Instanz, die von einem Backend aus konfiguriert wurde, besser als Ersatz für das ursprüngliche Backend dienen kann, was es einfacher macht, einen Simulator und ein echtes Backend auszutauschen, z. B. wenn man Code auf einem Simulator testet, bevor man ein echtes Backend verwendet. Im folgenden Code-Block wird zum Beispiel die PulseSimulator vom FakeArmonk() Backend instanziiert. Alle Konfigurations- und Standarddaten werden in die Simulatorinstanz kopiert, so dass sie sich bei der Übergabe als Argument an assemble so verhält, als ob das ursprüngliche Backend geliefert wurde (z. B. sind die Standardwerte von FakeArmonk vorhanden und werden von assemble verwendet).

    armonk_sim = qiskit.providers.aer.PulseSimulator.from_backend(FakeArmonk())
    pulse_qobj = assemble(schedules, backend=armonk_sim)
    armonk_sim.run(pulse_qobj)

    Das obige Beispiel ist zwar klein, aber das demonstrierte "Drop-in-Ersatz"-Verhalten sollte die Benutzerfreundlichkeit in komplizierteren Arbeitsabläufen erheblich verbessern, z. B. wenn Kalibrierungsexperimente unter Verwendung von Backend-Attributen konstruiert werden.

  • Fügt Unterstützung für qobj global phase zu den Methoden StatevectorSimulator, UnitarySimulator und statevector von QasmSimulator hinzu.

  • Verbessert die Leistung allgemeiner verrauschter Zustandsvektorsimulationen durch Hinzufügen einer Kraus-Methode zur Gate-Fusion-Schaltungsoptimierung, die die Anwendung der Gate-Fusion auf verrauschte Zustandsvektorsimulationen mit allgemeinem Kraus-Rauschen ermöglicht.

  • Für die Methoden "statevector" und "density_matrix" der Website QasmSimulator ist eine Verschiebungssemantik für Zustandsvektor- und Dichtematrix-Snapshots zu verwenden, wenn sie die letzte Anweisung in einer Schaltung sind. Dadurch wird der Speicherbedarf des Simulators reduziert und die Leistung verbessert, da das Kopieren eines großen Arrays in den Ergebnissen vermieden wird.

  • Ergänzt die "matrix_product_state" Methode des QasmSimulator um die Unterstützung für allgemeine Kraus QauntumError Gatterfehler in der NoiseModel .

  • Fügt der Methode "matrix_product_state" der QasmSimulator die Unterstützung für die Density-Matrix-Snapshot-Anweisung qiskit.providers.aer.extensions.SnapshotDensityMatrix hinzu.

  • Erweitert die SIMD-Vektorisierung der Zustandsvektor-Simulationsmethode auf die Simulationsmethoden Unitar-Matrix, Superoperator-Matrix und Dichte-Matrix. Dies führt zu einer knappen Leistungssteigerung 2x allgemeinen Simulation mit der UnitarySimulator, der "density_matrix" Methode der QasmSimulator, der Gatterfusion und der Rauschsimulation.

  • Fügt dem C++-Code eine benutzerdefinierte Vektorklasse hinzu, die eine bessere Integration mit Pybind11 ermöglicht. Dies verringert den Speicherbedarf von StatevectorSimulator , indem eine Speicherkopie während der Python Bindung des endgültigen Simulatorstatus vermieden wird.

Anmerkungen zu Upgrades

  • Die VRE verwendet nun Lapack, um einige matrixbezogene Berechnungen durchzuführen. Es verwendet die Lapack-Bibliothek, die mit OpenBlas gebündelt ist (bereits verfügbar in Linux und den Macos-typischen OpenBlas -Distributionen; die Windows-Version wird mit der VRE verteilt) oder mit dem Accelerate-Framework in MacOS.

  • Die veraltete Unterstützung für die Ausführung von qiskit-aer mit Python 3.5 wurde entfernt. Um qiskit-aer >= 0.7.0 zu verwenden, benötigen Sie nun mindestens Python 3.6. Wenn Sie Python 3.5 verwenden, ist die letzte Version, die funktionieren wird, qiskit-aer 0.6.x.

  • Aktualisiert die Standardschwellenwerte für die Gatterfusion, so dass die Gatterfusion auf Schaltungen mit mehr als 14 Qubits für Zustandsvektorsimulationen auf StatevectorSimulator und QasmSimulator angewendet wird.

    Für die "density_matrix" -Methode der QasmSimulator und für die UnitarySimulator wird die Gate-Fusion auf Schaltungen mit mehr als 7 Qubits angewendet.

    Benutzerdefinierte Qubit-Schwellenwerte können mit der Backend-Option fusion_threshold eingestellt werden, d.h backend.set_options(fusion_threshold=10)

  • Ändert die fusion_threshold Backend-Option, um die Fusion anzuwenden, wenn die Anzahl der Qubits über dem Schwellenwert liegt, nicht gleich oder über dem Schwellenwert, um dem Verhalten des OpenMP Qubit-Schwellenwertparameters zu entsprechen.

Hinweise zu veralteten Versionen

  • qiskit.providers.aer.noise.NoiseModel.set_x90_single_qubit_gates() wurde veraltet, da der qiskit-Transpiler um das Abrollen zu benutzerdefinierten Basisgattern erweitert wurde. Der korrekte Weg, ein auf X90 basierendes Rauschmodell zu verwenden, besteht darin, Rauschen auf dem Sqrt(X) "sx" oder "rx" Tor und einem der Ein-Qubit-Phasen-Tore "u1", "rx" oder "p" im Rauschmodell zu definieren.
  • Der variance kwarg von Snapshot-Befehlen ist veraltet. Diese Funktion berechnete die Stichprobenvarianz in der Momentaufnahme aufgrund des Rauschmodells und nicht die Varianz aufgrund der Messstatistik, weshalb sie häufig falsch verwendet wurde. Wenn die Varianz der Rauschmodellierung erforderlich ist, sollten Einzelaufnahmen verwendet werden, damit die Varianz bei der Nachbearbeitung manuell berechnet werden kann.

Fehlerkorrekturen

  • Behebt einen Fehler in StatevectorSimulator , der dazu führte, dass es immer als CPU mit doppelter Genauigkeit ohne SIMD/AVX2 Unterstützung lief, selbst auf Systemen mit AVX2 oder wenn in den Backend-Optionen die einfache Genauigkeit oder die GPU-Methode angegeben wurde.
  • Behebung einiger for-Schleifen in C++-Code, die über Kopien statt über Referenzen von Containerelementen iterierten.
  • Behebt einen Fehler, bei dem Snapshot-Daten immer von C++ nach Python kopiert und nicht verschoben wurden, wo dies möglich war. Dadurch wird die Speichernutzung halbiert und die Simulationszeit bei großen Zustandsvektor- oder Dichtematrix-Snapshots verbessert.
  • Repariert State::snapshot_pauli_expval, um den korrekten Y-Erwartungswert im Stabilisierungssimulator zurückzugeben. Siehe #895 <https://github.com/Qiskit/qiskit-aer/issues/895> für weitere Einzelheiten.
  • Die controller_execute-Verschalungen wurden so angepasst, dass sie nun Funktoren (Objekte) und nicht mehr freie Funktionen sind. Dadurch können sie unter anderem in multiprocessing.pool.map verwendet werden.
  • Hinzufügen von Überprüfungen auf fehlenden verfügbaren Speicher für StatevectorSimulator und UnitarySimulator. Dies führt zu einer Ausnahme, wenn der für die Simulation der Anzahl der Qubits in einer Schaltung erforderliche Speicher den verfügbaren Speicher des Systems übersteigt.

Ignis- 0.5.0

Vorspiel

Diese Version enthält ein neues Modul zur Abschwächung von Fehlern bei der Erwartungswertmessung, verbesserte Plotting-Funktionen für Quantenvolumenexperimente, verschiedene Fehlerkorrekturen und die Unterstützung von Python 3.5.

Neue Funktionen

  • Die Funktion qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq() erlaubt die optionale Eingabe von Gate-Objekten als interleaved_elem. Darüber hinaus verfügt die CNOT-Dihedralklasse qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral über eine neue Methode to_instruction, und die bestehende Methode from_circuit hat eine optionale Eingabe einer Anweisung (zusätzlich zu QuantumCircuit ).

  • Die qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral enthält nun die folgenden neuen Funktionen. Initialisierung aus verschiedenen Arten von Objekten: CNOTDihedral, ScalarOp, QuantumCircuit, Instruction und Pauli. Umwandlung in eine Matrix mit to_matrix und in einen Operator mit to_operator. Tensorproduktmethoden Tensor und Expandieren. Berechnung der Adjungierten, Konjugierten und Transponierten mit Hilfe der Methoden der Konjugierten, Adjungierten und Transponierten. Überprüfen Sie mit der Methode is_cnotdihedral, ob ein Element CNOTDihedral ist. Die Zerlegungsmethode to_circuit eines CNOTDihedral-Elements in einen Schaltkreis wurde erweitert, um eine beliebige Anzahl von Qubits zu ermöglichen, basierend auf der Funktion decompose_cnotdihedral_general.

  • Fügt dem Mitigationsmodul eine Erwartungswert-Messfehlerbegrenzung hinzu. Dies unterstützt die Verwendung einer vollständigen N-Qubit-Zuweisungsmatrix, einer tensored single-qubit-Zuweisungsmatrix oder eines zeitkontinuierlichen Markov-Prozesses (CTMP) [1] zur Abschwächung von Messfehlern bei der Berechnung von Erwartungswerten von Diagonaloperatoren aus Zählwörterbüchern. Die Erwartungswerte werden mit Hilfe der Funktion qiskit.ignis.mitigation.expectation_value() berechnet.

    Kalibrierungsschaltungen zur Kalibrierung eines Messfehlerminderers werden mit der Funktion qiskit.ignis.mitigation.expval_meas_mitigator_circuits() erzeugt und das Ergebnis mit der Klasse qiskit.ignis.mitigation.ExpvalMeasMitigatorFitter angepasst. Der Fitter gibt ein Mitigator-Objekt zurück, das als Argument an die Funktion expectation_value() übergeben werden kann, um die Mitigation anzuwenden.


    [1] S. Bravyi, S. Sheldon, A. Kandala, D. C. Mckay, J. M. Gambetta,

    Abschwächung von Messfehlern in Multi-QuBit-Experimenten, arXiv:2006.14044 [quant-ph].

    Beispiel:

    Das folgende Beispiel zeigt die Kalibrierung eines 5-Qubit-Erwartungswert-Messfehlerabschwächers unter Verwendung der Methode 'tensored' .

    from qiskit import execute
    from qiskit.test.mock import FakeVigo
    import qiskit.ignis.mitigation as mit
    
    backend = FakeVigo()
    num_qubits = backend.configuration().num_qubits
    
    # Generate calibration circuits
    circuits, metadata = mit.expval_meas_mitigator_circuits(
        num_qubits, method='tensored')
    result = execute(circuits, backend, shots=8192).result()
    
    # Fit mitigator
    mitigator = mit.ExpvalMeasMitigatorFitter(result, metadata).fit()
    
    # Plot fitted N-qubit assignment matrix
    mitigator.plot_assignment_matrix()

    Im Folgenden wird gezeigt, wie der oben genannte Mitigator zur Anwendung der Messfehlerkorrektur bei Erwartungswertberechnungen verwendet wird

    from qiskit import QuantumCircuit
    
    # Test Circuit with expectation value -1.
    qc = QuantumCircuit(num_qubits)
    qc.x(range(num_qubits))
    qc.measure_all()
    
    # Execute
    shots = 8192
    seed_simulator = 1999
    result = execute(qc, backend, shots=8192, seed_simulator=1999).result()
    counts = result.get_counts(0)
    
    # Expectation value of Z^N without mitigation
    expval_nomit, error_nomit = mit.expectation_value(counts)
    print('Expval (no mitigation): {:.2f} \u00B1 {:.2f}'.format(
        expval_nomit, error_nomit))
    
    # Expectation value of Z^N with mitigation
    expval_mit, error_mit = mit.expectation_value(counts,
        meas_mitigator=mitigator)
    print('Expval (with mitigation): {:.2f} \u00B1 {:.2f}'.format(
        expval_mit, error_mit))
  • Fügt Numba als optionale Abhängigkeit hinzu. Numba wird verwendet, um die Leistung der Klasse qiskit.ignis.mitigation.CTMPExpvalMeasMitigator , die für die Abschwächung des Erwartungswert-Messfehlers mit der CTMP-Methode verwendet wird, erheblich zu steigern.

  • Fügen Sie zwei Methoden zu qiskit.ignis.verification.quantum_volume.QVFitter hinzu.

    • qiskit.ignis.verification.quantum_volume.QVFitter.calc_z_value() berechnung des z-Wertes in der Standardnormalverteilung unter Verwendung von Mittelwert und Standardabweichung sigma. Wenn sigma = 0 ist, wird eine Warnung ausgegeben und ein kleiner Wert ( 1e-10 ) für sigma zugewiesen, so dass der Code noch läuft.
    • qiskit.ignis.verification.quantum_volume.QVFitter.calc_confidence_level() zur Berechnung des Konfidenzniveaus mittels z-Wert.
  • Speichern Sie das Vertrauensniveau auch dann, wenn hmean < 2/3 in qiskit.ignis.verification.quantum_volume.QVFitter.qv_success().

  • Erklärungen zur Berechnung von Statistiken auf der Grundlage der Binomialverteilung in qiskit.ignis.verification.quantum_volume.QVFitter.calc_statistics() hinzufügen.

  • Die Methode qiskit.ignis.verification.QVFitter plot_qv_data() wurde aktualisiert und gibt nun ein Objekt matplotlib.Figure zurück. Zuvor gab sie nichts zurück. Durch die Rückgabe einer Abbildung wird es einfacher, die Visualisierungen in einen größeren matplotlib Workflow zu integrieren.

  • Die Fehlerbalken in der Abbildung, die mit der Methode qiskit.ignis.verification.QVFitter qiskit.ignis.verification.QVFitter.plot_qv_data() erstellt wurde, wurden aktualisiert, um Konfidenzintervalle mit zwei Sigma darzustellen. Zuvor stellen die Fehlerbalken Konfidenzintervalle von einem Sigma dar. Die Erfolgskriterien des Quantum-Volume-Benchmarking erfordern eine hohe Ausgabewahrscheinlichkeit > 2/3 mit einseitiger Zwei-Sigma-Vertrauenswahrscheinlichkeit ( ~97.7 %). Die Änderung der Fehlerbalken zur Darstellung von Zwei-Sigma-Konfidenzintervallen ermöglicht eine einfache Identifizierung des Erfolgs in der Abbildung.

  • Die Methode qiskit.ignis.verification.QVFitter qiskit.ignis.verification.QVFitter.plot_qv_data() wurde um einen neuen kwarg figsize erweitert. Dieser kwarg nimmt ein Tupel der Form (x, y) auf, wobei x und y die Dimensionen in Zoll sind, um die generierte Darstellung zu erstellen.

  • Die Methode qiskit.ignis.verification.quantum_volume.QVFitter.plot_hop_accumulative() wurde hinzugefügt, um die Wahrscheinlichkeit eines hohen Outputs (HOP) in Abhängigkeit von der Anzahl der Versuche darzustellen, ähnlich wie in Abbildung 2a im Quantum Volume 64 Paper ( arXiv:2008.08571 ). Die HOP der einzelnen Versuche sind als Streuungen und die kumulativen HOP als rote Linie dargestellt. Zwei-Sigma-Konfidenzintervalle sind als schattierte Fläche und die 2/3-Erfolgsschwelle als gestrichelte Linie eingezeichnet.

  • Die Methode qiskit.ignis.verification.quantum_volume.QVFitter.plot_qv_trial() wurde hinzugefügt, um einzelne Versuche darzustellen, wobei die qiskit.visualization.plot_histogram() methode von Qiskit Terra. Die Anzahl der Bitstrings wird als überlappende Histogramme für ideale (hohl) und experimentelle (gefüllt) Werte dargestellt. Die Legende zeigt die Wahrscheinlichkeit der experimentellen Leistung. Der Median der Wahrscheinlichkeit ist als rote gestrichelte Linie dargestellt.

Anmerkungen zu Upgrades

  • Die veraltete Unterstützung für die Ausführung von qiskit-ignis mit Python 3.5 wurde entfernt. Um qiskit-ignis >= 0.5.0 zu verwenden, benötigen Sie nun mindestens Python 3.6. Wenn Sie Python 3.5 verwenden, ist die letzte Version, die funktioniert, qiskit-ignis 0.4.x.

Fehlerkorrekturen

  • Behebung eines Fehlers in der Klasse qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral für Elemente mit mehr als 5 Quits.
  • Legen Sie den Schwellenwert für das Konfidenzniveau für qiskit.ignis.verification.quantum_volume.QVFitter.qv_success() auf 0.977 fest, der z = 2 entspricht, wie im QV-Papier Algorithmus 1 definiert.
  • Behebung eines Fehlers auf qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq() , der dazu führte, dass alle Subsysteme mit der gleichen Größe im angegebenen rb_pattern die gleichen Gates hatten, wenn der Funktion ein 'rand_seed'-Parameter übergeben wurde.

Aqua- 0.8.0

Vorspiel

Mit dieser Version wird eine Schnittstelle zur Ausführung der verfügbaren Methoden für bosonische Probleme eingeführt. Insbesondere haben wir eine vollständige Schnittstelle für die Durchführung vibronischer Strukturberechnungen eingeführt.

Mit dieser Version wird eine Schnittstelle für die Berechnung angeregter Zustände eingeführt. Für den Benutzer ist es nun einfacher, eine allgemeine Berechnung angeregter Zustände zu erstellen. Diese Berechnung basiert auf einem Treiber, der die relevanten Informationen über das Molekül liefert, einer Transformation, die die Informationen über die Abbildung des Problems in einen Qubit-Hamiltonian liefert, und schließlich einem Solver. Der Solver ist die spezifische Art und Weise, wie die Berechnung der angeregten Zustände durchgeführt wird (der Algorithmus). Diese Struktur entspricht derjenigen der Grundzustandsberechnungen. Die Ergebnisse werden dahingehend geändert, dass sie Listen von Erwartungswerten anstelle eines einzelnen Wertes annehmen. Die QEOM und NumpyEigensolver werden an die neue Struktur angepasst. Es wird eine Fabrik eingeführt, um einen Numpy-Eigensolver mit einem bestimmten Filter (für Zustände mit bestimmten Symmetrien) auszuführen.

Die VQE-Erwartungsberechnung mit Aer qasm_simulator führt nun standardmäßig zu einer Berechnung, die das erwartete Schrotrauschverhalten aufweist.

Neue Funktionen

  • Es wurde eine Option warm_start eingeführt, die verwendet werden sollte, wenn die Einstellung anderer Optionen nicht hilft. Wenn diese Option aktiviert ist, wird zunächst ein entspanntes Problem (alle Variablen sind kontinuierlich) gelöst und die Lösung wird zur Initialisierung des Optimierungsstatus verwendet, bevor der iterative Prozess in der Lösungsmethode beginnt.

  • Die Algorithmen zur Amplitudenschätzung verwenden nun QuantumCircuit Objekte als Eingaben, um die A- und Q-Operatoren zu spezifizieren. Diese Änderung geht einher mit der Einführung von GroverOperator in der Schaltungsbibliothek, die eine intuitive und schnelle Konstruktion verschiedener Q-Operatoren ermöglicht. Zum Beispiel kann ein Bernoulli-Experiment wie folgt konstruiert werden

    import numpy as np
    from qiskit import QuantumCircuit
    from qiskit.aqua.algorithms import AmplitudeEstimation
    
    probability = 0.5
    angle = 2 * np.sqrt(np.arcsin(probability))
    a_operator = QuantumCircuit(1)
    a_operator.ry(angle, 0)
    
    # construct directly
    q_operator = QuantumCircuit(1)
    q_operator.ry(2 * angle, 0)
    
    # construct via Grover operator
    from qiskit.circuit.library import GroverOperator
    oracle = QuantumCircuit(1)
    oracle.z(0)  # good state = the qubit is in state |1>
    q_operator = GroverOperator(oracle, state_preparation=a_operator)
    
    # use default construction in QAE
    q_operator = None
    
    ae = AmplitudeEstimation(a_operator, q_operator)
  • Hinzufügen der Möglichkeit, bedingte Value-at-Risk-Erwartungswerte ( CVaR ) zu berechnen.

    Bei einer diagonalen Beobachtungsgröße H, die oft der Zielfunktion eines Optimierungsproblems entspricht, sind wir oft nicht so sehr daran interessiert, die durchschnittliche Energie unserer beobachteten Messungen zu minimieren. In diesem Zusammenhang sind wir zufrieden, wenn zumindest einige unserer Messungen eine niedrige Energie erreichen. (Beachten Sie, dass dies bei chemischen Problemen ausdrücklich nicht der Fall ist).

    Zu diesem Zweck könnte man erwägen, die beste beobachtete Stichprobe als Kostenfunktion während der Variationsoptimierung zu verwenden. Das Problem dabei ist, dass dies zu einer nicht glatten Optimierungsoberfläche führen kann. Um dieses Problem zu lösen, können wir die Optimierungsoberfläche glätten, indem wir nicht nur die beste beobachtete Probe verwenden, sondern stattdessen den Durchschnitt über einen Teil der besten beobachteten Proben. Genau das leistet der CVaR Schätzer [1.]

    α\alpha sei eine reelle Zahl in [0,1][0,1], die den Anteil der besten beobachteten Stichproben angibt, die zur Berechnung der Zielfunktion verwendet werden. Es ist zu beachten, dass, wenn α=1\alpha = 1, CVaR einem Standarderwartungswert entspricht. Ähnlich verhält es sich, wenn α=0\alpha = 0, dann entspricht CVaR der Verwendung der besten beobachteten Stichprobe. Die Zwischenwerte von α\alpha interpolieren zwischen diesen beiden Zielfunktionen.

    Die Funktionalität zur Verwendung von CVaR ist in den Operatorfluss durch eine neue Unterklasse von OperatorStateFn mit der Bezeichnung CVaRMeasurement integriert. Dieses neue Objekt StateFn wird auf die gleiche Weise instanziiert wie OperatorMeasurement, mit der Ausnahme, dass es auch einen Alpha-Parameter akzeptiert und das Attribut is_measurement automatisch auf True setzt. Es ist unklar, was eine CVaRStateFn darstellen würde, wenn es sich nicht um eine Messung handeln würde.

    Beispiele:

    qc = QuantumCircuit(1)
    qc.h(0)
    op = CVaRMeasurement(Z, alpha=0.5) @ CircuitStateFn(primitive=qc, coeff=1.0)
    result = op.eval()

    In ähnlicher Weise kann ein Operator, der einem Standarderwartungswert entspricht, mit dem Konverter CVaRExpectation in einen CVaR Erwartungswert umgewandelt werden.

    Beispiele:

    qc = QuantumCircuit(1)
    qc.h(0)
    op = ~StateFn(Z) @ CircuitStateFn(primitive=qc, coeff=1.0)
    cvar_expecation = CVaRExpectation(alpha=0.1).convert(op)
    result = cvar_expecation.eval()

    Siehe [1] für weitere Einzelheiten zu dieser Technik und ihrer empirischen Leistung.

    Quellenangaben:


    [1] : Barkoutsos, P. K., Nannicini, G., Robert, A., Tavernelli, I., und Woerner, S.,

    "Verbesserung der Variations-Quanten-Optimierung mit CVaR” arXiv:1907.04769

  • Neue Schnittstelle Eigensolver für Eigensolver-Algorithmen.

  • Das Chemiemodul wurde um eine Schnittstelle für die Berechnung angeregter Zustände ergänzt. Für den Benutzer ist es nun einfacher, eine allgemeine Berechnung angeregter Zustände zu erstellen. Diese Berechnung basiert auf einer Driver , die die relevanten Informationen über das Molekül liefert, einer Transformation , die die Informationen über die Abbildung des Problems in einen Qubit-Hamiltonian liefert, und schließlich einem Solver. Der Solver ist die spezifische Art und Weise, wie die Berechnung der angeregten Zustände durchgeführt wird (der Algorithmus). Diese Struktur entspricht derjenigen der Grundzustandsberechnungen. Die Ergebnisse werden dahingehend geändert, dass sie Listen von Erwartungswerten anstelle eines einzelnen Wertes annehmen. Die Seiten QEOM und NumpyEigensolver sind an die neue Struktur angepasst. Es wird eine Fabrik eingeführt, um einen Numpy-Eigensolver mit einem bestimmten Filter (für Zustände mit bestimmten Symmetrien) auszuführen.

  • Zusätzlich zu den Arbeitsabläufen für die Lösung fermionischer Probleme wurden Schnittstellen für die Berechnung bosonischer Grund- und Anregungszustände hinzugefügt. Insbesondere haben wir eine vollständige Schnittstelle für die Durchführung vibronischer Strukturberechnungen eingeführt.

  • Die OrbitalOptimizationVQE wurde als neuer Grundzustandslöser in das Chemiemodul aufgenommen. Dieser Solver ermöglicht die simulative Optimierung der Variationsparameter und der Orbitale des Moleküls. Der Algorithmus wird in Sokolov et al. vorgestellt, Zeitschrift für Chemiephysik 152 (12).

  • Ein neuer Algorithmus wurde hinzugefügt: die Born-Openheimer-Potential-Energie-Oberfläche für die Berechnung der Potential-Energie-Oberfläche entlang verschiedener Freiheitsgrade des Moleküls. Der Algorithmus heißt BOPESSampler. Außerdem bietet es Funktionen zur Anpassung der potenziellen Energieoberfläche an eine analytische Funktion vordefinierter Potenziale.

  • Allen Optimierern im Optimierungsstapel wurde eine Durchführbarkeitsprüfung der erhaltenen Lösung hinzugefügt. Dies wurde durch Hinzufügen von zwei neuen Methoden zu QuadraticProgram realisiert: * get_feasibility_info(self, x: Union[List[float], np.ndarray]) akzeptiert ein Array und gibt zurück, ob diese Lösung machbar ist, sowie eine Liste der verletzten Variablen (verletzte Grenzen) und eine Liste der verletzten Beschränkungen. * is_feasible(self, x: Union[List[float], np.ndarray]) nimmt ein Array entgegen und gibt zurück, ob diese Lösung machbar ist oder nicht.

  • Fügen Sie schaltungsbasierte Versionen von FixedIncomeExpectedValue, EuropeanCallDelta, GaussianConditionalIndependenceModel und EuropeanCallExpectedValue zu qiskit.finance.applications hinzu.

  • Gradient Framework. qiskit.operators.gradients Gegeben ist ein Operator, der entweder einen Quantenzustand bzw. einen Erwartungswert, ermöglicht der Gradientenrahmen die Auswertung von Gradienten, natürlichen Gradienten, Hessians sowie der Quanten-Fisher-Information.

    Nehmen wir einen parametrisierten Quantenzustand |ψ(θ)〉 = V(θ)|ψ〉 mit Eingangszustand |ψ〉 und parametrisiertem Ansatz V(θ) sowie einen Operator O(ω) an.

    Gradienten: Wir wollen d⟨ψ(θ)∣O(ω)∣ψ(θ)〉/dωd⟨ψ(θ)|O(ω)|ψ(θ)〉/ dω bzw. d⟨ψ(θ)∣O(ω)∣ψ(θ)〉/dθd⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθ bzw. d⟨ψ(θ)∣i〉⟨i∣ψ(θ)〉/dθd⟨ψ(θ)|i〉⟨i|ψ(θ)〉/ dθ berechnen.

    Der letzte Fall entspricht der Steigung w.r.t. die Stichprobenwahrscheinlichkeiten von |ψ(θ). Diese Gradienten können mit verschiedenen Methoden berechnet werden, z. B. mit einer Parameterverschiebung, einer linearen Kombination von Einheiten und einer Methode der finiten Differenzen.

    Beispiele:

    x = Parameter('x')
    ham = x * X
    a = Parameter('a')
    
    q = QuantumRegister(1)
    qc = QuantumCircuit(q)
    qc.h(q)
    qc.p(params[0], q[0])
    op = ~StateFn(ham) @ CircuitStateFn(primitive=qc, coeff=1.)
    
    value_dict = {x: 0.1, a: np.pi / 4}
    
    ham_grad = Gradient(grad_method='param_shift').convert(operator=op, params=[x])
    ham_grad.assign_parameters(value_dict).eval()
    
    state_grad = Gradient(grad_method='lin_comb').convert(operator=op, params=[a])
    state_grad.assign_parameters(value_dict).eval()
    
    prob_grad = Gradient(grad_method='fin_diff').convert(operator=CircuitStateFn(primitive=qc, coeff=1.),
                                                         params=[a])
    prob_grad.assign_parameters(value_dict).eval()

    Hessens: Wir wollen d2⟨ψ(θ)∣O(ω)∣ψ(θ)〉/dω2d^2⟨ψ(θ)|O(ω)|ψ(θ)〉/ dω^2 bzw. d2⟨ψ(θ)∣O(ω)∣ψ(θ)〉/dθ2d^2⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθ^2 bzw. d2⟨ψ(θ)∣O(ω)∣ψ(θ)〉/dθdωd^2⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθdω bzw. d2⟨ψ(θ)∣i〉⟨i∣ψ(θ)〉/dθ2d^2⟨ψ(θ)|i〉⟨i|ψ(θ)〉/ dθ^2 berechnen.

    Der letzte Fall entspricht dem Hessischen w.r.t. die Stichprobenwahrscheinlichkeiten von |ψ(θ). Wie die Gradienten erster Ordnung können auch die Hessians mit verschiedenen Methoden ausgewertet werden, z. B. mit einer Parameterverschiebung, einer Linearkombination von Unitarien und einer Methode der finiten Differenzen. Bei einem Tupel von Parametern gibt Hessian().convert(op, param_tuple) den Wert für die Ableitung zweiter Ordnung zurück. Wenn eine Liste von Parametern angegeben wird, gibt Hessian().convert(op, param_list) die vollständige Hessian für alle angegebenen Parameter entsprechend der angegebenen Parameterreihenfolge zurück.

    QFI: Die Quanten-Fischer-Information QFI ist ein metrischer Tensor, der für die Darstellungskapazität eines parametrisierten Quantenzustands |ψ(θ)〉 = V(θ)|ψ〉 repräsentativ ist, der durch einen Eingangszustand |ψ〉 und einen parametrisierten Ansatz V(θ) erzeugt wird. Die Einträge des QFI für einen reinen Zustand lauten [QFI]kl=Re[〈∂kψ∣∂lψ〉−〈∂kψ∣ψ〉〈ψ∣∂lψ〉]∗4[QFI]kl= Re[〈∂kψ|∂lψ〉−〈∂kψ|ψ〉〈ψ|∂lψ〉] * 4.

    Wie bei den vorangegangenen Ableitungsarten kann der QFI mit verschiedenen Methoden berechnet werden: eine vollständige Darstellung auf der Grundlage einer linearen Kombination von Unitaries, eine Blockdiagonale und eine Diagonale auf der Grundlage einer Überlappungsmethode.

    Beispiele:

    q = QuantumRegister(1)
    qc = QuantumCircuit(q)
    qc.h(q)
    qc.p(params[0], q[0])
    op = ~StateFn(ham) @ CircuitStateFn(primitive=qc, coeff=1.)
    
    value_dict = {x: 0.1, a: np.pi / 4}
    qfi = QFI('lin_comb_full').convert(operator=CircuitStateFn(primitive=qc, coeff=1.), params=[a])
    qfi.assign_parameters(value_dict).eval()

    Die Kombination aus dem QFI und dem Gradienten führt zu einer besonderen Form des Gradienten, nämlich

    NaturalGradients: Der natürliche Gradient ist eine spezielle Gradientenmethode, die einen Gradienten w.r.t neu skaliert. einen Zustandsparameter mit der Umkehrung der entsprechenden Quantum Fisher Information (QFI) QFI−1d⟨ψ(θ)∣O(ω)∣ψ(θ)〉/dθQFI^-1 d⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθ. Dabei können wir sowohl eine Gradienten- als auch eine QFI-Methode und eine Regularisierungsmethode wählen, die zusammen mit einem Least-Square-Löser anstelle der exakten Invertierung der QFI verwendet wird:

    Beispiele:

    op = ~StateFn(ham) @ CircuitStateFn(primitive=qc, coeff=1.)
    nat_grad = NaturalGradient(grad_method='lin_comb, qfi_method='lin_comb_full', \
                               regularization='ridge').convert(operator=op, params=params)

    Das Gradienten-Framework ist auch mit den Optimierern von qiskit.aqua.components.optimizers kompatibel. Die Ableitungsklassen verfügen über eine gradient_wrapper()-Funktion, die die entsprechende Callable zurückgibt.

  • Einführung von transformations für die fermionische und bosonische Transformation eines Problemfalls. Transformiert den fermionischen Operator in einen Qubit-Operator. Die entsprechende Klasse für die Transformation ist fermionic_transformation . Sie wird in Algorithmen ground_state_solvers zur Berechnung von Grundzustandseigenschaften eingeführt. Die Berechnung kann entweder mit MinimumEigensolver oder mit AdaptVQE durchgeführt werden. chemistry/results wird eingeführt, wobei die Eigenzustände_resultate und die elektronischen_structure_resultate auch für die Algorithmen verwendet werden. Einführung von Minimum-Eigensolver-Fabriken minimum_eigensolver_factories , in denen chemiespezifische Minimum-Eigensolver initialisiert werden können Einführung der Orbitaloptimierung vqe oovqe als Grundzustandslöser für Chemieanwendungen

  • Neue Algorithmus-Ergebnisklassen:

    Grover die Methode _run() gibt die Klasse GroverResult zurück. AmplitudeEstimation die Methode _run() gibt die Klasse AmplitudeEstimationResult zurück. IterativeAmplitudeEstimation die Methode _run() gibt die Klasse IterativeAmplitudeEstimationResult zurück. MaximumLikelihoodAmplitudeEstimation die Methode _run() gibt die Klasse MaximumLikelihoodAmplitudeEstimationResult zurück.

    Alle neuen Ergebnisklassen sind abwärtskompatibel mit dem bisherigen Ergebniswörterbuch.

  • Neue Ergebnisklassen für den Linear Solver:

    HHL die Methode _run() gibt die Klasse HHLResult zurück. NumPyLSsolver die Methode _run() gibt die Klasse NumPyLSsolverResult zurück.

    Alle neuen Ergebnisklassen sind abwärtskompatibel mit dem bisherigen Ergebniswörterbuch.

  • MinimumEigenOptimizationResult stellt jetzt Eigenschaften zur Verfügung: samples und eigensolver_result. Letzteres ergibt sich aus dem zugrundeliegenden Algorithmus, der vom Optimierer verwendet wird, und ist spezifisch für diesen Algorithmus. RecursiveMinimumEigenOptimizer gibt nun eine Instanz der Ergebnisklasse RecursiveMinimumEigenOptimizationResult zurück, die ihrerseits Zwischenergebnisse aus den zugrunde liegenden Algorithmen enthalten kann. Die spezielle Ergebnisklasse stellt die Eigenschaften replacements und history zur Verfügung, die für diesen Optimierer spezifisch sind. Die Tiefe der Historie wird über den Parameter history des Optimierers verwaltet.

  • GroverOptimizer gibt nun eine Instanz von GroverOptimizationResult zurück und diese Ergebnisklasse stellt die Eigenschaften operation_counts, n_input_qubits und n_output_qubits direkt zur Verfügung. Diese Eigenschaften sind im raw_results Wörterbuch nicht mehr verfügbar.

  • SlsqpOptimizer gibt nun eine Instanz von SlsqpOptimizationResult zurück und diese Ergebnisklasse bietet zusätzliche Eigenschaften, die für die SLSQP-Implementierung spezifisch sind.

  • Unterstützung der Übergabe von QuantumCircuit Objekten als Generatorschaltungen an QuantumGenerator.

  • Hebt die Beschränkung auf reelle Eingangsvektoren in CircuitStateFn.from_vector auf. Die Methode ruft extensions.Initialize auf. Letztere unterstützt (in API und Dokumentation) ausdrücklich komplexe Eingabevektoren. Diese Einschränkung erscheint daher unnötig.

  • Vereinfachte AbelianGrouper unter Verwendung eines Graphfärbungsalgorithmus von retworkx. Er ist schneller als der numpy-basierte Färbungsalgorithmus.

  • Ermöglicht den Aufruf von eval für Zustandsfunktionsobjekte ohne Argument, was die VectorStateFn Darstellung der Zustandsfunktion zurückgibt. Dies entspricht dem Verhalten von OperatorBase.eval, das die Darstellung MatrixOp zurückgibt, wenn kein Argument übergeben wird.

  • Fügt max_iterations zur Klasse VQEAdapt hinzu, um die maximale Anzahl der vom Algorithmus durchgeführten Iterationen zu begrenzen.

  • Die VQE-Erwartungsberechnung mit Aer qasm_simulator führt nun standardmäßig zu einer Berechnung, die das erwartete Schrotrauschverhalten aufweist. Die spezielle Aer-Snapshot-basierte Berechnung, die viel schneller ist, mit dem idealen Ausgang ähnlich dem Zustandsvektor-Simulator, kann immer noch gewählt werden, aber wie vor Aqua 0.7 ist sie nun nicht mehr voreingestellt, sondern kann gewählt werden.

Anmerkungen zu Upgrades

  • Erweiterung des bisherigen klassischen Optimierers Analytic Quantum Gradient Descent (AQGD) um den AQGD mit Epochen. Jetzt führt AQGD die Gradientenabstiegsoptimierung mit einem Impulsterm, analytischen Gradienten und einem zusätzlichen angepassten Schrittlängenplan für parametrisierte Quantengatter durch. Die Gradienten werden bei der Auswertung der Zielfunktion "analytisch" mit Hilfe der Quantenschaltung berechnet.
  • Die veraltete Unterstützung für die Ausführung von qiskit-aqua mit Python 3.5 wurde entfernt. Um qiskit-aqua >= 0.8.0 zu verwenden, benötigen Sie nun mindestens Python 3.6. Wenn Sie Python 3.5 verwenden, ist die letzte Version, die funktioniert, qiskit-aqua 0.7.x.
  • Retworkx als neue Abhängigkeit hinzugefügt.

Hinweise zu veralteten Versionen

  • Das Argument i_objective der Algorithmen zur Amplitudenschätzung wurde in objective_qubits umbenannt.

  • TransformationType

  • QubitMappingType

  • Verwerfen Sie die CircuitFactory und abgeleitete Typen. Die CircuitFactory wurde als temporäre Klasse eingeführt, als der QuantumCircuit einige für Anwendungen in Aqua notwendige Funktionen fehlten. Da die Schaltung nun alle erforderlichen Funktionen aufweist, kann die Schaltungsfabrik entfernt werden. Die Ersetzungen sind in der folgenden Tabelle aufgeführt.

    Circuit factory class               | Replacement
    ------------------------------------+-----------------------------------------------
    CircuitFactory                      | use QuantumCircuit
                                        |
    UncertaintyModel                    | -
    UnivariateDistribution              | -
    MultivariateDistribution            | -
    NormalDistribution                  | qiskit.circuit.library.NormalDistribution
    MultivariateNormalDistribution      | qiskit.circuit.library.NormalDistribution
    LogNormalDistribution               | qiskit.circuit.library.LogNormalDistribution
    MultivariateLogNormalDistribution   | qiskit.circuit.library.LogNormalDistribution
    UniformDistribution                 | qiskit.circuit.library.UniformDistribution
    MultivariateUniformDistribution     | qiskit.circuit.library.UniformDistribution
    UnivariateVariationalDistribution   | use parameterized QuantumCircuit
    MultivariateVariationalDistribution | use parameterized QuantumCircuit
                                        |
    UncertaintyProblem                  | -
    UnivariateProblem                   | -
    MultivariateProblem                 | -
    UnivariatePiecewiseLinearObjective  | qiskit.circuit.library.LinearAmplitudeFunction
  • Die ising-Konvertierungsklassen qiskit.optimization.converters.QuadraticProgramToIsing und qiskit.optimization.converters.IsingToQuadraticProgram sind veraltet und werden in einer zukünftigen Version entfernt werden. Stattdessen sollten die Methoden qiskit.optimization.QuadraticProgram to_ising() und from_ising() verwendet werden.

  • Verwerfen Sie die WeightedSumOperator , die als WeightedAdder in qiskit.circuit.library in die Schaltkreisbibliothek portiert wurde.

  • Core Hamiltonian klasse ist veraltet zugunsten der Klasse FermionicTransformation Chemistry Operator ist veraltet zugunsten der Klasse tranformations minimum_eigen_solvers/vqe_adapt ist ebenfalls veraltet und wurde als Implementierung der Schnittstelle ground_state_solver applications/molecular_ground_state_energy ist veraltet zugunsten von ground_state_solver

  • Optimizer.SupportLevel nested enum wird durch OptimizerSupportLevel ersetzt und Optimizer.SupportLevel wurde entfernt. Verwenden Sie z. B. OptimizerSupportLevel.required anstelle von Optimizer.SupportLevel.required.

  • Verwerfen Sie die UnivariateVariationalDistribution und MultivariateVariationalDistribution als Eingabe für die QuantumGenerator. Stattdessen können einfache QuantumCircuit Objekte verwendet werden.

  • Die ignorierten Optionen fast und use_nx von AbelianGrouper.group_subops werden in einer zukünftigen Version entfernt.

  • Die GSLS-Optimierungsklasse hat den Parameter __init__ max_iter zugunsten von maxiter veraltet. Die SPSA-Optimierungsklasse hat den Parameter __init__ max_trials zugunsten von maxiter veraltet. die Funktion optimize_svm hat den Parameter max_iters zugunsten von maxiter veraltet. Die Klasse ADMMParameters hat den Parameter __init__ max_iter zugunsten von maxiter veraltet.

Fehlerkorrekturen

  • Die UCCSD-Anregungsliste, die Einzel- und Doppelanregungen enthält, wurde nicht korrekt generiert, wenn UCSSD über die Parameter active_(un)occupied explizit ein aktiver Raum zur Verfügung gestellt wurde.
  • Für die Algorithmen zur Amplitudenschätzung definieren wir die Anzahl der Orakelabfragen als Anzahl der Anwendungen des Q-Operators/Grover-Operators. Dazu gehört auch die Anzahl der Schüsse. Dieser Faktor wurde in MLAE und IQAE aufgenommen, fehlte aber in den "Standard"-QAE.
  • Reparieren Sie CircuitSampler.convert, so dass die Eigenschaft is_measurement auf konvertierte StateFns übertragen wird.
  • Die doppelte Berechnung von Koeffizienten in :meth`~qiskit.aqua.operators.VectorStateFn.to_circuit_op` wurde korrigiert.
  • Der Aufruf von PauliTrotterEvolution.convert für einen Operator mit einem Term, der ein skalares Vielfaches der Identität ist, ergab eine falsche Schaltung, die den skalaren Koeffizienten ignorierte. Diese Korrektur umfasst die Wirkung des Koeffizienten in der Eigenschaft global_phase des Stromkreises.
  • ListOp.num_qubits prüft, ob alle Operatoren in der Liste die gleiche num_qubits haben Bisher wurde die Anzahl der Qubits des ersten Operators in ListOp zurückgegeben. Bei dieser Änderung wird zusätzlich geprüft, ob alle anderen Betreiber ebenfalls die gleiche Anzahl von Qubits haben.
  • Bringen Sie PauliOp.exp_i() dazu, die richtige Matrix mit den folgenden Änderungen zu erzeugen. 1) Früher gab es einen Fehler in der Phase um den Faktor 2. 2) Die globale Phase wurde bei der Umwandlung der Schaltung in eine Matrix ignoriert. Wir verwenden nun qiskit.quantum_info.Operator, was im Allgemeinen nützlich ist, um eine Schaltung in eine unitäre Matrix umzuwandeln, wenn möglich.
  • Behebt die Zyklizitätserkennung, die als fehlerhaft in https://github.com/qiskit-community/qiskit-aqua/issues/1184.

IBM Q Anbieter 0.11.0

Anmerkungen zu Upgrades

  • Die veraltete Unterstützung für die Ausführung von qiskit-ibmq-provider mit Python 3.5 wurde entfernt. Um qiskit-ibmq-provider >= 0.11.0 zu verwenden, benötigen Sie nun mindestens Python 3.6. Wenn Sie Python 3.5 verwenden, ist die letzte Version, die funktionieren wird, qiskit-ibmq-provider 0.10.x.
  • Vor dieser Version wurde websockets 7.0 für Python 3.6 verwendet. Mit dieser Version wird websockets 8.0 oder höher für alle Python Versionen benötigt. Die Paketanforderungen wurden aktualisiert, um dies zu berücksichtigen.
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.