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_codesbenö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
MCXGrayCodeerstellt nun eineC3XGate, wennnum_ctrl_qubitsgleich 3 ist, und eineC4XGate, wennnum_ctrl_qubitsgleich 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\, wennnum_ctrl_bitsgleich 1 ist, einCXGateerstellt wird, und wenn 2, einCCXGate` erstellt wird.
Fehlerkorrekturen
-
Impuls
Delayanweisungen werden jetzt explizit alsPulseQobjInstructionobjekte, die in derPulseQobjausgabe vonassemble().Zuvor konnten wir ignorieren
Delayanweisungen in einerScheduleals Teil vonassemble()ignorieren, da die Zeit explizit in denPulseQobjobjekte. 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
BasisTranslatorundUnrollerdurchgä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, wenncompensate_phaseeingestellt war, ein Faktor von in der angehängten Phase fehlte. -
Festlegung der globalen Phase der Ausgabe der
QuantumCircuitmethoderepeat(). 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 vonrepeat()auf 0, bevor die wiederholte Schaltung angehängt wird, anstatt die vorhandene Phase mit der Anzahl der Wiederholungen zu multiplizieren. -
Behebt einen Fehler in
SparsePauliOpbei 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 auf 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 nunqiskit.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
QasmSimulatorBasis-Gates, wenn die Optionen"method"und"noise_model"zusammen verwendet werden, und wenn sie mit einem Simulator verwendet werden, der mitfrom_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()undfrom_backend(), bei dembasis_gatesfü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 EinstellungONdie Umgehung des Conan-Paketmanagers, um Bibliotheken zu finden, die bereits auf Ihrem System installiert sind. Dies ist auch als UmgebungsvariableDISABLE_CONANverfü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 wo ein
Operatorobjekt 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 mitset_options()gesetzt wurden, im Anbieter gespeichert wurden und bei nachfolgenden Aufrufen vonget_backend()für das gleiche benannte Backend bestehen bleiben würden. Jetzt gibt jeder Aufruf von undbackends()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
SXGatenicht 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"desQasmSimulatoraufgefü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 vonTomographyFitter,StateTomographyFitterundProcessTomographyFittersollte 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 demqiskit.quantum_info.state_fidelity()oderqiskit.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_stateinQAOAaufgrund einer Fehlerbehebung jetzt anders implementiert ist. Die bisherige Implementierung vermischte fälschlicherweise die vom Benutzer bereitgestellteninitial_statemit Hadamard-Gattern. Das Problem ist jetzt behoben. Wenn Ihr Code den vom Benutzer bereitgestellten Parameterinitial_statenicht 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_symbolwurde in der neuesten Version von DOCplex ausVarTypeentfernt, 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
transpiledurch Aufruf der Methoderun, falls diese existiert. - Ein Fehler, der benutzerdefinierte
initial_stateinQAOAmit 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 cusominitial_stateverwendet, 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.Experimenthat 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()undqiskit.providers.ibmq.experiment.ExperimentService.analysis_results()unterstützen jetzt einen Parameterlimit, 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 Methodenqiskit.providers.ibmq.experiment.ExperimentService.experiments()undqiskit.providers.ibmq.experiment.ExperimentService.analysis_results(). Der Standardwert fürlimitist 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
CREATINGverbleiben 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 dieQuantumCircuitklasse wurde erweitert durch dietranspiler,quantum_info, undassemblersowie 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 demGRtor abgeleitet sind, und das globale Rz (GRZ), das in ähnlicher Weise definiert ist wie dieGRgatter 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
QuantumCircuitauf einemQuantumRegistervon 3 Qubits und führt eineRGateeines Winkels um eine Achse in der xy-Ebene der Bloch-Kugeln, die einen Winkel von mit der x-Achse auf jedem Qubit bildet. -
Ein neues Farbschema,
iqx, wurde demmplBackend für die Schaltkreisschublade hinzugefügtqiskit.visualization.circuit_drawer()undqiskit.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,iqxundbw.Es gibt zwei Möglichkeiten, ein Farbschema auszuwählen. Die erste ist die Verwendung einer Benutzerkonfigurationsdatei, die sich standardmäßig im Verzeichnis
~/.qiskitbefindet. In der Dateisettings.confunter der Überschrift[Default]kann ein Benutzercircuit_mpl_style = iqxeingeben, um das Farbschemaiqxauszuwählen.Die zweite Möglichkeit besteht darin,
{'name': 'iqx'}an denstylekwarg der MethodeQuantumCircuit.drawoder der Funktioncircuit_draweranzufü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
stylekwarg für den Schaltkreis Schubladeqiskit.visualization.circuit_drawer()undqiskit.circuit.QuantumCircuit.draw()das Felddisplaycolormit dem Backendmplkö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 Feldgatetextcolorverwendet. Gate-Farben können imstyledict für eine beliebige Anzahl von Gate-Typen eingestellt werden, von einem bis zum gesamtendisplaycolordict. 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_delayParameter wurde derQasmQobjklasse 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 dieBackendConfigurationmethoderep_delay_range()angegeben wird. Wenn kein Wert angegeben wird, wird der Backend-Standardwert,qiskit.providers.models.BackendConfiguration.default_rep_delay, verwendet.rep_delayfunktioniert nur bei Backends, die eine dynamische Wiederholungszeit zulassen. Dies lässt sich mit derBackendConfigurationeigenschaftdynamic_reprate_enabledüberprüft werden. -
Die
qobj_schema.jsonJSON Schema-Datei inqiskit.schemaswurde aktualisiert, um dierep_delayals optionale Konfigurationseigenschaft für QASM Qobjs aufzunehmen. -
Die
backend_configuration_schema.jsonJSON Schema-Datei inqiskit.schemaswurde aktualisiert, umdynamic_reprate_enabled,rep_delay_rangeunddefault_rep_delayals optionale Eigenschaften für eine QASM-Backend-Konfigurations-Nutzlast aufzunehmen. -
Ein neuer Optimierungspass,
qiskit.transpiler.passes.TemplateOptimizationwurde 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 derTemplateOptimization.Dieser neue Pass ist derzeit nicht in den voreingestellten Pass-Managern enthalten (
qiskit.transpiler.preset_passmanagers), um ihn zu verwenden, müssen Sie eine eigenePassManager. -
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
BackendV1methoderun()nun auch einQuantumCircuitoderScheduleobjekt anstelle vonQobjObjekten 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, dassqiskit.providers.JobV1nun synchron oder asynchron sein kann. Die genaue Konfiguration und die Methode zur Konfiguration bleibt dem Anbieter überlassen, aber es gibt in der abstrakten KlasseJobV1Schnittstellen-Hook-Points, die deutlich machen, unter welchem Ausführungsmodell ein Auftrag läuft. -
Die Funktion wurde um einen neuen Kwarg,
inplace, ergänztqiskit.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ürResultobjekt-Eingabe. Dieser Parameter hat keine Auswirkung auf eine EingabedictoderCountsobjekt. -
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 TypInt1arbeiten) inQuantumCircuitobjekte. 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=Falsein derqiskit.circuit.classicalfunction.ClassicalFunctionmethodesynth()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_ORACLEwird synthetisiert, wenn seine Zerlegung erforderlich ist.circuit.decompose().draw()Die Funktion erfordert
tweedledum, eine Bibliothek zur Synthese von Quantenschaltungen, die über pip mitpip install tweedleduminstalliert werden kann. -
Eine neue Klasse
qiskit.circuit.Delayzur Darstellung einer Verzögerungsanweisung in einer Schaltung wurde hinzugefügt. Eine neue Methodedelay()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_methodfürqiskit.compiler.transpile()wurde hinzugefügt. Sie ist erforderlich, wenn Schaltungen mit Verzögerungen umgesetzt werden. Wennscheduling_methodangegeben 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 eineSchedulekonvertieren 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_path2Lesen Sie die Versionshinweise und die Dokumentation für
transpile()undsequence()für die Details zum anderen Pfad. -
Hinzufügen der
GroverOperatorzur 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, erstelltGroverOperatorden 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 Argumentstate_inverwendet werden. -
Die
InstructionScheduleMapmethodenget()undpop()methoden nehmen jetztParameterExpressioninstanzen 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 einParametrizedScheduleist, müssen Ausdrücke gebunden werden, bevor der Zeitplan selbst gebunden/aufgerufen wird. -
Eine neue Klasse
LinearAmplitudeFunctionwurde der Schaltkreisbibliothek hinzugefügt (qiskit.circuit.library) hinzugefügt, um (stückweise) lineare Funktionen auf Qubit-Amplituden abzubilden,
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_outputwurde demqiskit.tools.jupytermodul 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 bestehendenOptimize1qGatesdie die KlasseOneQubitEulerDecomposerklasse verwendet, um eine Kette von Einzel-Qubit-Gattern zu zerlegen und zu vereinfachen. Diese Methode ist mit jeder Basismenge kompatibel, währendOptimize1qGatesnur für u1, u2 und u3 funktioniert. Die Standard-Pass-Manager füroptimization_level1, 2 und 3 wurden aktualisiert, um diesen neuen Pass zu verwenden, wenn die Basisgruppe nicht u1, u2 oder u3 enthält. -
Die
OneQubitEulerDecomposerunterstützt jetzt zwei neue Basen,'PSX'und'U'. Diese können mit dembasiskwarg auf dem Konstruktor angegeben werden. Dadurch wird die Matrix in eine Schaltung zerlegt, diePGateundSXGatefür'PSX', undUGatefür'U'. -
Eine neue Methode
remove()wurde derqiskit.transpiler.PassManagerklasse hinzugefügt. Diese Methode ermöglicht das Entfernen eines Passes aus einerPassManagerinstanz. Es funktioniert mit Indizes, ähnlich wie beireplace(). Zum Beispiel, um denRemoveResetInZeroStatepass 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, CXCancellationDie Bühne
[1]mitRemoveResetInZeroStatekann 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,NormalDistributionundLogNormalDistributionwurden 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
QuantumCircuitklasse hinzugefügt. Dies ermöglicht einemQuantumCircuiteine 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)Gateoperation 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
QuantumCircuitmethodeadd_calibration()registriert werden, die eineScheduledefinition 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 gateZuvor 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
Schedulesenken, indem man dieschedule()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
PulseQobjobjekten wurde in dieqiskit.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 zuqiskit.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 dercoord_typekwarg auf'spherical'gesetzt wird, hat die Liste der übernommenen Parameter die Form[r, theta, phi], wobeirder Radius,thetadie Neigung aus +z-Richtung undphider 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
Scheduleobjekte unterstützen jetzt die Verwendung vonParameterExpressionobjekte 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 demqiskit.visualizationmodul 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
paramskwarg des Konstruktors für dieGateklasse und ihrer Unterklassen wurde geändert. Zuvor mussten alleGateparameter in einer Reihe von erlaubten Typen enthalten sein, die in derInstructionklasse 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 akzeptiertUnitaryGateeinen Parameter des Typsnumpy.ndarrayund definiert eine benutzerdefinierte Methodevalidate_parameter(), die den Parameter zurückgibt, wenn es sich um einennumpy.ndarrayhandelt. Diese hat Vorrang vor der Funktion, die in ihrer übergeordneten KlasseGate. WennUnitaryGateals übergeordnete Klasse für eine neue Klasse verwendet werden soll, wird diese Methodevalidate_parameterverwendet, es sei denn, die neue untergeordnete Klasse definiert ihre eigene Methode. -
Die zuvor veralteten Methoden, Argumente und Eigenschaften namens
n_qubitsundnumberofqubitswurden entfernt. Diese wurden in der Version 0.13.0 veraltet. Die Änderungen umfassen folgende Punkte:KlasseAltNeuQuantumCircuitn_qubitsnum_qubitsPaulinumberofqubitsnum_qubitsFunktionAltes ArgumentNeues Argumentqiskit.circuit.random.random_circuit()n_qubitsnum_qubitsqiskit.circuit.library.MSGaten_qubitsnum_qubits -
Einfügen einer parametrisierten
Gateinstanz in einQuantumCircuitwird 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 parametrisiertenGateobjekts in mehrere Schaltkreise. -
Die Funktion
qiskit.result.marginal_counts()ändert nun standardmäßig nicht denqiskit.result.Resultinstanz-Parameter. Zuvor wurde das ObjektResultimmer an Ort und Stelle geändert. Es wurde ein neuer kwarginplacehinzugefügtmarginal_counts()hinzugefügt, der die Verwendung des vorherigen Verhaltens ermöglicht, wenninplace=Truegesetzt ist. -
Die
U3Gatedefinition wurde geändert und bezieht sich nun auf dieUGateklasse. Die KlasseUGateklasse 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
PulseBackendConfigurationin den Attributenhamiltonianwird das Feldvarsjetzt 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
DAGNodekonstruktor wurde entfernt. Die Verwendung eines dictonary für das erste Positionsargument wurde in der Version 0.13.0 veraltet. Zum Erstellen einesDAGNodeobjekt 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*, undtgt*, die in der Version 0.12.0 veraltet waren, wurden entfernt. Stattdessen können nurqubit,control_qubit*undtarget_qubit*als benannte Argumente für diese Methoden verwendet werden. -
Das zuvor veraltete Modul
qiskit.extensions.standardwurde entfernt. Dieses Modul ist seit der Version 0.14.0 veraltet. Dieqiskit.circuit.librarykann stattdessen verwendet werden. Zusätzlich sind alle Gate-Klassen, die zuvor inqiskit.extensions.standardzu finden waren, weiterhin vonqiskit.extensions. -
Die zuvor veralteten Gates im Modul
qiskit.extensions.quantum_initializer:DiagGate, UCG`,UCPauliRotGate,UCRot,UCRXGate,UCX,UCRYGate,UCY,UCRZGate,UCZwurden 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.QuantumCircuitgate-Methodeiden()wurde entfernt. Dies wurde in der Version 0.13.0 veraltet undi()oderid()kann stattdessen verwendet werden.
Hinweise zu veralteten Versionen
-
Die Verwendung eines
numpy.ndarrayfür einen Parameter imparamskwarg für den Konstruktor derGateklasse und Unterklassen wurde veraltet und wird in zukünftigen Versionen entfernt. Dies geschah im Rahmen der Überarbeitung der Art und Weise, wie dieparmsTypüberprüfung für dieGateklasse. Wenn Sie eine benutzerdefinierte Gate-Klasse haben, die eine Unterklasse vonGateist (oder über eine andere übergeordnete Klasse in der Hierarchie), die einenndarrayParameter akzeptiert, sollten Sie eine benutzerdefiniertevalidate_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_qubitseigenschaft derPiecewiseLinearPauliRotationsundPolynomialPauliRotationsklassen ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollte die Eigenschaftnum_ancillasverwendet werden. Dies geschah aus Gründen der Kohärenz mit derQuantumCircuitmethodenum_ancillas(). -
Die Klasse
qiskit.circuit.library.MSGateklasse ist veraltet, bleibt aber bestehen, um das Laden alter Aufträge zu ermöglichen. Sie wurde ersetzt durch dieqiskit.circuit.library.GMSklasse ersetzt, die stattdessen verwendet werden sollte. -
Der
MSBasisDecomposerTranspiler-Pass ist veraltet und wird in einer zukünftigen Version entfernt werden. Derqiskit.transpiler.passes.BasisTranslatorpass kann stattdessen verwendet werden. -
Die Methoden
QuantumCircuitmethodenu1,u2undu3sind 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,U2GateundU3Gatebleiben bestehen, um das Laden von alten Aufträgen zu ermöglichen.
Fehlerkorrekturen
- Die Methoden der Klasse
Resultmethoden der Klassedata(),get_memory(),get_counts(),get_unitary(), undget_statevector ` will now emit a warning when the ``experiment`()kwarg wird angegeben, wenn versucht wird, Ergebnisse entweder mit einerQuantumCircuitoderScheduleinstanz zu holen, wenn mehr als ein Eintrag, der dem Instanznamen entspricht, imResultObjekt vorhanden ist. Beachten Sie, dass nur der erste Eintrag, der diesem Namen entspricht, zurückgegeben wird. Korrekturen #3207 - Die
qiskit.circuit.QuantumCircuitmethodeappend()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 parametrisiertenGateobjekts 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 Wargsbackendundpass_managergleichzeitig angegeben wurden. Dies wurde behoben, so dass sowohlbackendals auchpass_managerbei Aufrufen vonexecute()zusammen verwendet werden können. Korrekturen #5037 - Die
QuantumCircuitmethodeunitary()wurde so angepasst, dass sie eine einzelne ganze Zahl für das Argumentqargakzeptiert (beim Hinzufügen einer 1-Qubit-Unitary). Die zulässigen Typen für das Argumentqargssind jetztint,Qubit, oder eine Liste von Ganzzahlen. Behebt #4944 - Bisher konnte der Aufruf von
inverse()für einBlueprintCircuitObjekt fehlschlagen, wenn dessen interne Dateneigenschaft noch nicht ausgefüllt war. Dies wurde korrigiert, so dass der Aufrufer voninverse()die internen Daten auffüllt, bevor er die Umkehrung der Schaltung erzeugt. Korrekturen #5140 - Es wurde ein Problem bei der Erstellung eines
qiskit.result.Countsobjekts aus einem leeren Datenwörterbuch. Dadurch wird ein leeresCountsobjekt. Die Methodemost_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_stateeinerUnitaryGatezweimal angewendet wurde; einmal bei der Erstellung der Matrix für die kontrollierte Unitary und ein weiteres Mal beim Aufruf derdefinition()methode derqiskit.circuit.ControlledGateklasse. Dies würde den Anschein erwecken, dass die Einstellungctrl_statekeine Auswirkungen hat. - Zuvor war die
ControlledGatemethodeinverse()in einigen Fällen den Parameterctrl_statenicht beibehalten. Dies wurde behoben, so dass der Aufruf voninverse()den Wertctrl_statein seiner Ausgabe beibehält. - Fehler im Backend der
mpl-Ausgabe der Schaltkreisschublade behobenqiskit.circuit.QuantumCircuit.draw()undqiskit.visualization.circuit_drawer()der dazu führte, dass die Schublade nicht funktionierte, wenn derstylekwarg 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()oderfrom_qasm_str()fehlschlug, wenn einu,phase(p),sxodersxdgTor 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.Delayanweisung zu den ProgrammenStatevectorSimulator,UnitarySimulatorundQasmSimulatorhinzu. 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.UGatezu den MethodenStatevectorSimulator,UnitarySimulatorund"statevector","density_matrix","matrix_product_state"und"extended_stabilizer"desQasmSimulator. -
Fügt Basisgatter-Unterstützung für das Phasengatter
qiskit.circuit.library.PhaseGatezu den MethodenStatevectorSimulator,StatevectorSimulator,UnitarySimulatorund"statevector","density_matrix","matrix_product_state"und"extended_stabilizer"desQasmSimulator. -
Fügt Basisgatter-Unterstützung für das phasengesteuerte Gatter
qiskit.circuit.library.CPhaseGatezu den MethodenStatevectorSimulator,StatevectorSimulator,UnitarySimulatorund"statevector","density_matrix"und"matrix_product_state"derQasmSimulator. -
Fügt Unterstützung für das mehrfach gesteuerte Phasengatter
qiskit.circuit.library.MCPhaseGatezuStatevectorSimulator,UnitarySimulatorund der"statevector"Methode vonQasmSimulator. -
Fügt Unterstützung für das Tor
qiskit.circuit.library.SXGatezu den ProgrammenStatevectorSimulator,UnitarySimulatorundQasmSimulator. -
Unterstützung für 1 und 2-Qubit Qiskit-Schaltkreisbibliothek Rotation Gates
RXGate,RYGate,RZGate,RGate,RXXGate,RYYGate,RZZGate,RZXGatezu den MethodenStatevectorSimulator,UnitarySimulatorund den Methoden"statevector"und"density_matrix"derQasmSimulator. -
Fügt Unterstützung für mehrfach gesteuerte Rotationstore
"mcr","mcrx","mcry","mcrz"zu denStatevectorSimulator,UnitarySimulator, und der"statevector"Methode derQasmSimulatorhinzu. -
Simulator-Backends konfigurierbar machen. Dies ermöglicht die Einstellung persistenter Optionen wie Simulationsmethode und Rauschmodell für jedes Simulator-Backend-Objekt.
QasmSimulatorundPulseSimulatorkönnen auch über einIBMQBackendBackend-Objekt konfiguriert werden, indem die Methode :meth:`~qiskit.providers.aer.QasmSimulator.from_backend verwendet wird. FürQasmSimulatorwerden die Kopplungskarte, die Basis-Gates und das grundlegende Geräuschmodell auf der Grundlage der Backend-Konfiguration und -Eigenschaften konfiguriert. FürPulseSimulatorwerden 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 alsQasmSimulator(method='matrix_product_state')konstruiert werden.Ein Vorteil ist, dass eine
PulseSimulatorInstanz, 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 diePulseSimulatorvomFakeArmonk()Backend instanziiert. Alle Konfigurations- und Standarddaten werden in die Simulatorinstanz kopiert, so dass sie sich bei der Übergabe als Argument anassembleso verhält, als ob das ursprüngliche Backend geliefert wurde (z. B. sind die Standardwerte vonFakeArmonkvorhanden und werden vonassembleverwendet).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,UnitarySimulatorund statevector vonQasmSimulatorhinzu. -
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
QasmSimulatorist 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 desQasmSimulatorum die Unterstützung für allgemeine KrausQauntumErrorGatterfehler in derNoiseModel. -
Fügt der Methode
"matrix_product_state"derQasmSimulatordie Unterstützung für die Density-Matrix-Snapshot-Anweisungqiskit.providers.aer.extensions.SnapshotDensityMatrixhinzu. -
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 derQasmSimulator, 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
StatevectorSimulatorundQasmSimulatorangewendet wird.Für die
"density_matrix"-Methode derQasmSimulatorund für dieUnitarySimulatorwird die Gate-Fusion auf Schaltungen mit mehr als 7 Qubits angewendet.Benutzerdefinierte Qubit-Schwellenwerte können mit der Backend-Option
fusion_thresholdeingestellt werden, d.hbackend.set_options(fusion_threshold=10) -
Ändert die
fusion_thresholdBackend-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
variancekwarg 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
StatevectorSimulatorundUnitarySimulator. 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-Dihedralklasseqiskit.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.CNOTDihedralenthä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 Klasseqiskit.ignis.mitigation.ExpvalMeasMitigatorFitterangepasst. Der Fitter gibt ein Mitigator-Objekt zurück, das als Argument an die Funktionexpectation_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.QVFitterhinzu.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.QVFitterplot_qv_data()wurde aktualisiert und gibt nun ein Objektmatplotlib.Figurezurück. Zuvor gab sie nichts zurück. Durch die Rückgabe einer Abbildung wird es einfacher, die Visualisierungen in einen größerenmatplotlibWorkflow zu integrieren. -
Die Fehlerbalken in der Abbildung, die mit der Methode
qiskit.ignis.verification.QVFitterqiskit.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.QVFitterqiskit.ignis.verification.QVFitter.plot_qv_data()wurde um einen neuen kwargfigsizeerweitert. Dieser kwarg nimmt ein Tupel der Form(x, y)auf, wobeixundydie 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 dieqiskit.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.CNOTDihedralfü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
QuantumCircuitObjekte als Eingaben, um die A- und Q-Operatoren zu spezifizieren. Diese Änderung geht einher mit der Einführung vonGroverOperatorin der Schaltungsbibliothek, die eine intuitive und schnelle Konstruktion verschiedener Q-Operatoren ermöglicht. Zum Beispiel kann ein Bernoulli-Experiment wie folgt konstruiert werdenimport 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.]
sei eine reelle Zahl in , die den Anteil der besten beobachteten Stichproben angibt, die zur Berechnung der Zielfunktion verwendet werden. Es ist zu beachten, dass, wenn , CVaR einem Standarderwartungswert entspricht. Ähnlich verhält es sich, wenn , dann entspricht CVaR der Verwendung der besten beobachteten Stichprobe. Die Zwischenwerte von 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
Eigensolverfü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, einerTransformation, 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 SeitenQEOMundNumpyEigensolversind 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
OrbitalOptimizationVQEwurde 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
QuadraticProgramrealisiert: *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,GaussianConditionalIndependenceModelundEuropeanCallExpectedValuezuqiskit.finance.applicationshinzu. -
Gradient Framework.
qiskit.operators.gradientsGegeben 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 bzw. bzw. 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 bzw. bzw. bzw. 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, gibtHessian().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 .
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) . 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
transformationsfür die fermionische und bosonische Transformation eines Problemfalls. Transformiert den fermionischen Operator in einen Qubit-Operator. Die entsprechende Klasse für die Transformation istfermionic_transformation. Sie wird in Algorithmenground_state_solverszur Berechnung von Grundzustandseigenschaften eingeführt. Die Berechnung kann entweder mitMinimumEigensolveroder mitAdaptVQEdurchgeführt werden.chemistry/resultswird eingeführt, wobei die Eigenzustände_resultate und die elektronischen_structure_resultate auch für die Algorithmen verwendet werden. Einführung von Minimum-Eigensolver-Fabrikenminimum_eigensolver_factories, in denen chemiespezifische Minimum-Eigensolver initialisiert werden können Einführung der Orbitaloptimierung vqeoovqeals Grundzustandslöser für Chemieanwendungen -
Neue Algorithmus-Ergebnisklassen:
Groverdie Methode_run()gibt die KlasseGroverResultzurück.AmplitudeEstimationdie Methode_run()gibt die KlasseAmplitudeEstimationResultzurück.IterativeAmplitudeEstimationdie Methode_run()gibt die KlasseIterativeAmplitudeEstimationResultzurück.MaximumLikelihoodAmplitudeEstimationdie Methode_run()gibt die KlasseMaximumLikelihoodAmplitudeEstimationResultzurück.Alle neuen Ergebnisklassen sind abwärtskompatibel mit dem bisherigen Ergebniswörterbuch.
-
Neue Ergebnisklassen für den Linear Solver:
HHLdie Methode_run()gibt die KlasseHHLResultzurück.NumPyLSsolverdie Methode_run()gibt die KlasseNumPyLSsolverResultzurück.Alle neuen Ergebnisklassen sind abwärtskompatibel mit dem bisherigen Ergebniswörterbuch.
-
MinimumEigenOptimizationResultstellt jetzt Eigenschaften zur Verfügung:samplesundeigensolver_result. Letzteres ergibt sich aus dem zugrundeliegenden Algorithmus, der vom Optimierer verwendet wird, und ist spezifisch für diesen Algorithmus.RecursiveMinimumEigenOptimizergibt nun eine Instanz der ErgebnisklasseRecursiveMinimumEigenOptimizationResultzurück, die ihrerseits Zwischenergebnisse aus den zugrunde liegenden Algorithmen enthalten kann. Die spezielle Ergebnisklasse stellt die Eigenschaftenreplacementsundhistoryzur Verfügung, die für diesen Optimierer spezifisch sind. Die Tiefe der Historie wird über den Parameterhistorydes Optimierers verwaltet. -
GroverOptimizergibt nun eine Instanz vonGroverOptimizationResultzurück und diese Ergebnisklasse stellt die Eigenschaftenoperation_counts,n_input_qubitsundn_output_qubitsdirekt zur Verfügung. Diese Eigenschaften sind imraw_resultsWörterbuch nicht mehr verfügbar. -
SlsqpOptimizergibt nun eine Instanz vonSlsqpOptimizationResultzurück und diese Ergebnisklasse bietet zusätzliche Eigenschaften, die für die SLSQP-Implementierung spezifisch sind. -
Unterstützung der Übergabe von
QuantumCircuitObjekten als Generatorschaltungen anQuantumGenerator. -
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
evalfür Zustandsfunktionsobjekte ohne Argument, was dieVectorStateFnDarstellung der Zustandsfunktion zurückgibt. Dies entspricht dem Verhalten vonOperatorBase.eval, das die DarstellungMatrixOpzurückgibt, wenn kein Argument übergeben wird. -
Fügt
max_iterationszur KlasseVQEAdapthinzu, 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_objectiveder Algorithmen zur Amplitudenschätzung wurde inobjective_qubitsumbenannt. -
TransformationType
-
QubitMappingType
-
Verwerfen Sie die
CircuitFactoryund abgeleitete Typen. DieCircuitFactorywurde als temporäre Klasse eingeführt, als derQuantumCircuiteinige 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.QuadraticProgramToIsingundqiskit.optimization.converters.IsingToQuadraticProgramsind veraltet und werden in einer zukünftigen Version entfernt werden. Stattdessen sollten die Methodenqiskit.optimization.QuadraticProgramto_ising()undfrom_ising()verwendet werden. -
Verwerfen Sie die
WeightedSumOperator, die alsWeightedAdderinqiskit.circuit.libraryin die Schaltkreisbibliothek portiert wurde. -
Core Hamiltonianklasse ist veraltet zugunsten der KlasseFermionicTransformationChemistry Operatorist veraltet zugunsten der Klassetranformationsminimum_eigen_solvers/vqe_adaptist ebenfalls veraltet und wurde als Implementierung der Schnittstelle ground_state_solverapplications/molecular_ground_state_energyist veraltet zugunsten vonground_state_solver -
Optimizer.SupportLevelnested enum wird durchOptimizerSupportLevelersetzt undOptimizer.SupportLevelwurde entfernt. Verwenden Sie z. B.OptimizerSupportLevel.requiredanstelle vonOptimizer.SupportLevel.required. -
Verwerfen Sie die
UnivariateVariationalDistributionundMultivariateVariationalDistributionals Eingabe für dieQuantumGenerator. Stattdessen können einfacheQuantumCircuitObjekte 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_iterzugunsten vonmaxiterveraltet. Die SPSA-Optimierungsklasse hat den Parameter__init__max_trialszugunsten vonmaxiterveraltet. die Funktion optimize_svm hat den Parametermax_iterszugunsten vonmaxiterveraltet. Die Klasse ADMMParameters hat den Parameter__init__max_iterzugunsten vonmaxiterveraltet.
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_measurementauf 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
websockets7.0 für Python 3.6 verwendet. Mit dieser Version wirdwebsockets8.0 oder höher für alle Python Versionen benötigt. Die Paketanforderungen wurden aktualisiert, um dies zu berücksichtigen.