Skip to main content
IBM Quantum Platform

Qiskit 0.19 Versionshinweise


0.19.6

Terra- 0.14.2

Keine Änderung

Aer- 0.5.2

Keine Änderung

Ignis- 0.3.3

Anmerkungen zu Upgrades

  • Eine neue Anforderung scikit-learn wurde der Anforderungsliste hinzugefügt. Diese Abhängigkeit wurde in der Version 0.3.0 hinzugefügt, wurde aber in dieser Version nicht richtig als Abhängigkeit angezeigt. Dies würde zu einer ImportError führen, wenn das Modul qiskit.ignis.measurement.discriminator.iq_discriminators importiert würde. Dies ist nun korrekt als Abhängigkeit aufgeführt, so dass scikit-learn zusammen mit qiskit-ignis installiert wird.

Fehlerkorrekturen

  • Behebt ein Problem in qiskit-ignis 0.3.2, das einen ImportError auslöste, wenn qiskit.ignis.verification.tomography.fitters.process_fitter importiert wurde, ohne dass cvxpy installiert war.

Aqua- 0.7.3

Keine Änderung

IBM Q Anbieter 0.7.2

Keine Änderung


0.19.5

Terra- 0.14.2

Keine Änderung

Aer- 0.5.2

Keine Änderung

Ignis- 0.3.2

Fehlerkorrekturen

  • Die Methode qiskit.ignis.verification.TomographyFitter.fit() verfügt über eine verbesserte Erkennungslogik für den Standardeinrichter. Zuvor wurde die Methode cvx fitter verwendet, wenn cvxpy installiert war. Es war jedoch möglich, cvxpy ohne einen SDP-Solver zu installieren, der für die Fitter-Methode cvx geeignet war. Diese Logik wurde überarbeitet, so dass die cvx Fitter-Methode nur verwendet wird, wenn cvxpy installiert ist und ein SDP-Löser vorhanden ist, der verwendet werden kann. Andernfalls wird der lstsq fitter verwendet.
  • Behebt einen Randfall in qiskit.ignis.mitigation.measurement.fitters.MeasurementFitter.apply() für Eingaben, die ungültige oder falsche Zustandsbezeichnungen haben, die nicht mit dem Kalibrierungskreis übereinstimmen. Zuvor war dies kein Fehler und lieferte lediglich ein leeres Ergebnis. Stattdessen wird dieser Fall nun korrekt abgefangen und eine QiskitError Exception wird ausgelöst, wenn falsche Bezeichnungen verwendet werden.

Aqua- 0.7.3

Anmerkungen zu Upgrades

  • Die cvxpy-Abhängigkeit, die für den svm-Klassifikator erforderlich ist, wurde aus der Liste der Anforderungen entfernt und zu einer optionalen Abhängigkeit gemacht. Der Grund dafür ist, dass die Installation von cvxpy nicht in jeder Umgebung nahtlos verläuft und oft die Installation eines Compilers erfordert, um ausgeführt werden zu können. Um den svm-Klassifikator jetzt zu verwenden, müssen Sie cvxpy installieren, indem Sie entweder pip install cvxpy<1.1.0 ausführen oder es mit aqua unter pip install qiskit-aqua[cvx] installieren.

Fehlerkorrekturen

  • Die Methode compose der CircuitOp verwendete QuantumCircuit.combine , die durch QuantumCircuit.compose ersetzt wurde. Die Verwendung von combine führt zu dem Problem, dass ein Operator mit einem CircuitOp , der auf einem benannten Register basiert, die Operatoren nicht verkettet, sondern stapelt. E.g. wenn man Z ^ 2 mit einer Schaltung auf der Grundlage eines benannten 2-Qubit-Registers zusammensetzt, erhält man einen 4-Qubit-Operator anstelle eines 2-Qubit-Operators.
  • Die Methode MatrixOp.to_instruction gab bisher einen Operator und keine Anweisung zurück. Diese Methode wurde aktualisiert und gibt nun eine Anweisung zurück. Beachten Sie, dass dies nur funktioniert, wenn das Operatorprimitiv unitär ist, andernfalls wird bei der Konstruktion der Anweisung ein Fehler ausgelöst.
  • Die Methode __hash__ der Klasse PauliOp verwendet die Methode id() , die verhindert, dass Mengenvergleiche wie erwartet funktionieren, da sie auf Hash-Tabellen beruhen und identische Objekte keine identischen Hashes haben. Jetzt verwendet die Implementierung einen Hash der String-Darstellung inline mit der Implementierung in der Klasse Pauli .

IBM Q Anbieter 0.7.2

Keine Änderung


0.19.4

Terra- 0.14.2

Anmerkungen zu Upgrades

  • Die Konverter circuit_to_gate und circuit_to_instruction hatten bisher das erzeugte Gatter oder die Anweisung automatisch in das aktive SessionEquivalenceLibrary aufgenommen. Diese Konverter akzeptieren nun ein optionales equivalence_library Schlüsselwortargument, um anzugeben, ob und wo die konvertierten Instanzen registriert werden sollen. Das Standardverhalten ist, die konvertierte Instanz nicht zu registrieren.

Fehlerkorrekturen

  • Bei den Implementierungen des mehrfach gesteuerten X-Gate (MCXGrayCode, MCXRecursive und MCXVChain) wurden die Eigenschaften von name geändert, um ihre Implementierung genauer zu beschreiben (mcx_gray, mcx_recursive bzw. mcx_vchain ) Früher trugen diese Gatter den Namen mcx` with ``MCXGate, was dazu führte, dass diese Gatter falsch transpiliert und simuliert wurden.
  • ControlledGate instanzen mit einem Satz ctrl_state wurden in einigen Fällen nicht als gleich bewertet, selbst wenn die verglichenen Gates gleichwertig waren. Dieses Problem wurde behoben.
  • Die Umrechnung der SI-Einheiten für qiskit.pulse.SetFrequency wurde korrigiert. Der Befehl SetFrequency sollte am Frontend in Hz angegeben werden und muss bei der Umwandlung von SetFrequency in PulseQobjInstruction in GHz umgewandelt werden.
  • Offene Kontrollen wurden durch Änderung der Definition eines Gates implementiert. Wenn das Gatter jedoch bereits in der Basis vorhanden ist, wird diese Definition nicht verwendet, was zu falschen Schaltungen führt, die an ein Backend gesendet werden. Dadurch wird die Abrollvorrichtung so verändert, dass sie die Definition ausgibt, wenn sie auf ein kontrolliertes Gate mit offenen Steuerelementen trifft.

Aer- 0.5.2

Keine Änderung

Ignis- 0.3.0

Keine Änderung

Aqua- 0.7.2

Vorspiel

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

Anmerkungen zu Upgrades

  • cvxpy ist nun in der Anforderungsliste als Abhängigkeit für qiskit-aqua enthalten. Es wird für den Löser des quadratischen Programms verwendet, das als Teil von qiskit.aqua.algorithms.QSVM eingesetzt wird. Zuvor war cvxopt eine optionale Abhängigkeit, die installiert werden musste, um diese Funktion zu nutzen. Dies ist nicht mehr erforderlich, da cvxpy mit qiskit-aqua installiert wird.
  • Für die Zustandstomographie, die als Teil von qiskit.aqua.algorithms.HHL mit einem QASM-Backend ausgeführt wird, wird die Tomographie-Fitter-Funktion qiskit.ignis.verification.StateTomographyFitter.fit() nun explizit aufgerufen, wobei die Methode auf lstsq gesetzt ist, um immer die Anpassung nach dem Prinzip der kleinsten Quadrate zu verwenden. Zuvor versuchte er gelegentlich, den Installateur cvx zu verwenden, wenn cvxpy installiert war. Der cvx -Fitter hängt jedoch von einer speziell konfigurierten cvxpy -Installation mit einem als Teil von cvxpy installierten SDP-Solver ab, der in einer Umgebung mit cvxpy nicht immer vorhanden ist.
  • Die VQE-Erwartungsberechnung mit der qiskit.providers.aer.extensions.SnapshotExpectationValue -Anweisung von qiskit-aer ist nicht mehr standardmäßig aktiviert. Dies wurde in 0.7.0 zur Standardeinstellung gemacht, weil es deutlich schneller ist, aber es führte zu unerwarteten idealen Ergebnissen ohne Schrotrauschen (siehe #1013 für weitere Details). Die Standardeinstellung wurde nun wieder an die Erwartungen der Benutzer angepasst. Die Verwendung der schnelleren Erwartungsberechnung kann nun durch Setzen des neuen include_custom kwarg auf True im qiskit.aqua.algorithms.VQE Konstruktor aktiviert werden.

Neue Funktionen

  • Ein neuer kwarg include_custom wurde dem Konstruktor für qiskit.aqua.algorithms.VQE und seine Unterklassen (hauptsächlich qiskit.aqua.algorithms.QAOA) hinzugefügt. Wenn diese Option auf true gesetzt ist und der expectation kwarg auf None gesetzt ist (die Voreinstellung), wird die Verwendung der VQE-Erwartungsberechnung mit der Anweisung qasm_simulator qiskit.providers.aer.extensions.SnapshotExpectationValue von Aer aktiviert. Die spezielle Aer-Snapshot-basierte Berechnung ist viel schneller, aber mit dem idealen Ausgang ähnlich dem Zustandsvektorsimulator.

IBM Q Anbieter 0.7.2

Keine Änderung


0.19.3

Terra- 0.14.1

Keine Änderung

Aer- 0.5.2

Fehlerkorrekturen

  • Fehler behoben, bei dem Statevector- und Unitary-Simulatoren eine der Anzahl der CPU-Threads entsprechende Anzahl von (parallelen) Schüssen ausführten, anstatt nur einen einzigen Schuss auszuführen.
  • Behebt die fehlerhafte Anwendung der "diagonalen" qobj-Gate-Anweisungen in der Dichtematrix-Methode des Qasm-Simulators.
  • Es wurde ein Fehler behoben, bei dem bedingte Gatter bei der Dichtematrix-Simulationsmethode nicht korrekt angewendet wurden.
  • Behebung eines Fehlers in CZ-Gate und Z-Gate für die Methoden "density_matrix_gpu" und "density_matrix_thrust" QasmSimulator.
  • Behebt ein Problem, bei dem der Speicherbedarf der Simulation auf QasmSimulator nicht überprüft wurde, wenn eine nicht-automatische Simulationsmethode verwendet wurde.
  • Behebung eines Speicherlecks, das die Methoden des GPU-Simulators beeinträchtigte

Ignis- 0.3.0

Keine Änderung

Aqua- 0.7.1

Keine Änderung

IBM Q Anbieter 0.7.2

Fehlerkorrekturen

  • qiskit.provider.ibmq.IBMQBackend.jobs() gibt nun die korrekte Liste der IBMQJob Objekte zurück, wenn der status kwarg auf 'RUNNING' gesetzt ist. Behebt #523
  • Die Paketmetadaten wurden aktualisiert, um die Abhängigkeit von qiskit-terra >= 0.14.0 korrekt wiederzugeben. Diese Abhängigkeit wurde implizit als Teil der Veröffentlichung von 0.7.0 hinzugefügt, war aber nicht in den Paketanforderungen enthalten, so dass es früher möglich war, qiskit-ibmq-provider mit einer zu alten Version von qiskit-terra zu installieren. Behebt #677

0.19.0

Terra- 0.14.0

Vorspiel

Die Version 0.14.0 enthält mehrere neue Funktionen und Fehlerkorrekturen. Die größte Änderung in dieser Version ist die Einführung einer Quantenschaltungsbibliothek in qiskit.circuit.librarydie einige interessante Schaltkreisfamilien enthält.

Die Schaltkreisbibliothek bietet den Nutzern Zugang zu einer Vielzahl gut untersuchter Schaltkreisfamilien, deren Instanzen als Benchmarks, als Bausteine für den Aufbau komplexerer Schaltkreise oder als Werkzeug zur Erforschung der Vorteile von Quantenberechnungen gegenüber klassischen Schaltkreisen verwendet werden können. Der Inhalt dieser Bibliothek wird weiter wachsen und reifen.

Die erste Version der Schaltkreisbibliothek enthält:

  • standard_gatesdies sind Gatter mit fester Breite, die üblicherweise als primitive Bausteine verwendet werden und aus 1-, 2- und 3-Qubit-Gattern bestehen. Zum Beispiel die XGate, RZZGate und CSWAPGate. Der alte Standort dieser Gates unter qiskit.extensions.standard ist veraltet.
  • generalized_gates: Es handelt sich um Familien, die sich auf beliebig viele Qubits verallgemeinern lassen, zum Beispiel a Permutation oder GMS (Globales Molmer-Sorensen-Tor).
  • boolean_logic: Schaltungen, die Basiszustände gemäß einfacher boolescher Logikfunktionen umwandeln, wie ADD oder XOR.
  • arithmeticeine Reihe von Schaltkreisen für die klassische Arithmetik wie WeightedAdder und IntegerComparator.
  • basis_changes: Schaltungen wie die Quanten-Fourier-Transformation, QFTdie mathematisch Basisänderungen anwenden.
  • n_local: Muster zur einfachen Erstellung großer Schaltungen mit Rotations- und Verschränkungsschichten, wie z. B TwoLocal das Ein-Qubit-Rotationen und Zwei-Qubit-Verschränkungen verwendet.
  • data_preparationschaltkreise, die klassische Eingangsdaten in einen schwer zu simulierenden Quantenzustand kodieren, z. B. PauliFeatureMap oder ZZFeatureMap.
  • Andere Schaltungen, die sich in der Literatur als interessant erwiesen haben, wie z. B QuantumVolume, GraphState, oder IQP.

Um die Verwendung dieser Schaltungen als Bausteine zu erleichtern, haben wir eine compose() methode der qiskit.circuit.QuantumCircuit für die Komposition von Schaltungen entweder mit anderen Schaltungen (durch Verschweißen an den Enden und optionales Vertauschen von Drähten) oder mit anderen einfacheren Gattern:

>>> lhs.compose(rhs, qubits=[3, 2], inplace=True)
            ┌───┐                   ┌─────┐                ┌───┐
lqr_1_0: ───┤ H ├───    rqr_0: ──■──┤ Tdg ├    lqr_1_0: ───┤ H ├───────────────
            ├───┤              ┌─┴─┐└─────┘                ├───┤
lqr_1_1: ───┤ X ├───    rqr_1: ┤ X ├───────    lqr_1_1: ───┤ X ├───────────────
         ┌──┴───┴──┐           └───┘                    ┌──┴───┴──┐┌───┐
lqr_1_2: ┤ U1(0.1) ├  +                     =  lqr_1_2: ┤ U1(0.1) ├┤ X ├───────
         └─────────┘                                    └─────────┘└─┬─┘┌─────┐
lqr_2_0: ─────■─────                           lqr_2_0: ─────■───────■──┤ Tdg ├
            ┌─┴─┐                                          ┌─┴─┐        └─────┘
lqr_2_1: ───┤ X ├───                           lqr_2_1: ───┤ X ├───────────────
            └───┘                                          └───┘
lcr_0: 0 ═══════════                           lcr_0: 0 ═══════════════════════
lcr_1: 0 ═══════════                           lcr_1: 0 ═══════════════════════

Damit gehen die Schaltkreise von Qiskit nicht mehr von einem impliziten Anfangszustand ∣0⟩|0\rangle aus und werden auch nicht mit diesem Anfangszustand gezeichnet. Bei der Ausführung eines Schaltkreises wird in einem Backend immer noch der Anfangszustand Null angenommen.

Neue Funktionen

  • Eine neue Methode, has_entry()wurde der Klasse qiskit.circuit.EquivalenceLibrary hinzugefügt, um schnell zu prüfen, ob ein bestimmtes Tor in der Bibliothek bekannte Zerlegungen aufweist.

  • Eine neue Klasse IQPzur Konstruktion eines momentanen Quantenpolynomschaltkreises, wurde dem Modul der Schaltkreisbibliothek hinzugefügt qiskit.circuit.library.

  • Eine neue compose() methode wurde hinzugefügt zu qiskit.circuit.QuantumCircuit. Sie ermöglicht die Komposition von zwei Quantenschaltungen, ohne dass eine davon in ein Gatter oder einen Befehl umgewandelt werden muss. Es erlaubt auch Permutationen von Qubits/Clbits zum Zeitpunkt der Komposition sowie eine optionale Änderung an Ort und Stelle. Er kann auch anstelle von append()verwendet werden, da er es ermöglicht, auch Anweisungen und Operatoren in die Schaltung einzubauen.

  • qiskit.circuit.library.Diagonal schaltungen wurden der Schaltkreisbibliothek hinzugefügt. Diese Schaltkreise implementieren diagonale Quantenoperatoren (die nur auf der Diagonalen aus Nicht-Null-Elementen bestehen). Sie lassen sich mit dem Aer-Simulator effizienter simulieren als dichte Matrizen.

  • Hinzufügen from_label() methode zu der qiskit.quantum_info.Clifford klasse für die Initialisierung als Tensorprodukt von Ein-Qubit-I-, X-, Y-, Z-, H- oder S-Gattern.

  • Schedule Transformer qiskit.pulse.reschedule.compress_pulses() führt einen Optimierungsdurchlauf durch, um die Nutzung des Wellenformspeichers in der Hardware zu reduzieren, indem mehrere identische Instanzen eines Impulses in einem Impulsplan durch einen einzigen Impuls ersetzt werden. Zum Beispiel:

    from qiskit.pulse import reschedule
    
    schedules = []
    for _ in range(2):
        schedule = Schedule()
        drive_channel = DriveChannel(0)
        schedule += Play(SamplePulse([0.0, 0.1]), drive_channel)
        schedule += Play(SamplePulse([0.0, 0.1]), drive_channel)
        schedules.append(schedule)
    
    compressed_schedules = reschedule.compress_pulses(schedules)
  • Die Website qiskit.transpiler.Layout hat eine neue Methode reorder_bits() die verwendet wird, um eine Liste virtueller Qubits auf der Grundlage des Layout-Objekts neu zu ordnen.

  • Es wurden zwei neue Methoden zur qiskit.providers.models.PulseBackendConfiguration für die Interaktion mit Kanälen hinzugefügt.

    • get_channel_qubits() um eine Liste aller Qubits zu erhalten, die von dem angegebenen Kanal betrieben werden, und
    • get_qubit_channel() um eine Liste der Kanäle zu erhalten, die auf dem angegebenen Qubit arbeiten.
  • Neue qiskit.extensions.HamiltonianGate und qiskit.circuit.QuantumCircuit.hamiltonian() werden Methoden eingeführt, die die Hamilton'sche Entwicklung der Wellenfunktion des Schaltkreises durch einen vom Benutzer angegebenen hermiteschen Operator und die Entwicklungszeit darstellen. Die Entwicklungszeit kann a Parametersein, so dass parametrisierte UCCSD- oder QAOA-ähnliche Schaltungen erstellt werden können, die zu UnitaryGate Objekten kompiliert werden, wenn time Parameter bereitgestellt werden. Die Unitary eines HamiltonianGate mit Hamilton-Operator H und Zeitparameter t ist e−iHte^{-iHt}.

  • Das Modul der Schaltkreisbibliothek qiskit.circuit.library bietet jetzt eine neue boolesche logische UND-Schaltung, qiskit.circuit.library.ANDund eine ODER-Schaltung, qiskit.circuit.library.ORzur Verfügung, die die entsprechenden Operationen mit einer variablen Anzahl von Qubits ausführen.

  • Neue Fake-Backends werden unter qiskit.test.mock hinzugefügt. Dazu gehören nachgebildete Versionen von ibmq_armonk, ibmq_essex, ibmq_london, ibmq_valencia, ibmq_cambridge, ibmq_paris, ibmq_rome und ibmq_athens. Wie bei anderen gefälschten Backends enthalten diese Schnappschüsse von Kalibrierungsdaten (z. B. backend.defaults()) und Fehlerdaten (d.h. backend.properties()) die dem realen System entnommen sind und für lokale Tests, Kompilierung und Simulation verwendet werden können.

  • Der Parameter last_update_date für BackendProperties kann nun auch als datetime Objekt übergeben werden. Zuvor wurde nur eine Zeichenkette im Format ISO8601 akzeptiert.

  • Fügt hinzu qiskit.quantum_info.Statevector.from_int() und qiskit.quantum_info.DensityMatrix.from_int() methoden, die es ermöglichen, einen rechnerischen Basiszustand für bestimmte Systemdimensionen zu konstruieren.

  • Die Methoden der Klasse qiskit.circuit.QuantumCircuit klasse zum Hinzufügen von Gates (zum Beispiel h()), die zuvor dynamisch zur Laufzeit zur Klassendefinition hinzugefügt wurden, wurden zu statisch definierten Methoden der Klasse umgestaltet. Das bedeutet, dass statische Analysatoren (wie IDEs) diese Methoden jetzt lesen können.

Anmerkungen zu Upgrades

Hinweise zu veralteten Versionen

  • Die Methode qiskit.dagcircuit.DAGCircuit.compose() methode nimmt nun eine Liste von Qubits/Clbits entgegen, die die Positionsreihenfolge der Bits angeben, die zusammengesetzt werden sollen. Die wörterbuchbasierte Methode der Zuordnung mit dem Argument edge_map ist veraltet und wird in einer zukünftigen Version entfernt werden.

  • Die Methode combine_into_edge_map() für die Klasse qiskit.transpiler.Layout klasse ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollte die neue Methode reorder_bits() verwendet werden, um eine Liste virtueller Qubits entsprechend dem Layout-Objekt neu zu ordnen.

  • Übergabe eines qiskit.pulse.ControlChannel Objekts über den Parameter channel für die qiskit.providers.models.PulseBackendConfiguration methode control() ist veraltet und wird in einer zukünftigen Version entfernt werden. Die ControlChannel Objekte werden nun aus dem channels Attribut der Backend-Konfiguration generiert, das die Informationen über alle Kanäle und die Qubits enthält, auf denen sie arbeiten. Nun wird von der Methode control() den Parameter qubits der Form (control_qubit, target_qubit) und den Typ list oder tuple entgegennehmen und eine Liste von Kontrollkanälen zurückgeben.

  • Die Methoden AND und OR von qiskit.circuit.QuantumCircuit sind veraltet und werden in einer zukünftigen Version entfernt. Stattdessen sollten Sie die booleschen Logikklassen der Schaltkreisbibliothek verwenden qiskit.circuit.library.AND und qiskit.circuit.library.OR verwenden und diese Objekte dann an Ihre Klasse anhängen. Zum Beispiel:

    from qiskit import QuantumCircuit
    from qiskit.circuit.library import AND
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    
    qc_and = AND(2)
    
    qc.compose(qc_and, inplace=True)
  • Das Modul qiskit.extensions.standard ist veraltet und wird in einer zukünftigen Version entfernt werden. Die Gatterklassen in diesem Modul wurden nach qiskit.circuit.library.standard_gates verschoben.

Fehlerkorrekturen

  • Die qiskit.circuit.QuantumCircuit methoden inverse(), die Methoden mirror() sowie der Setter QuantumCircuit.data würden einen ungültigen Schaltkreis erzeugen, wenn sie auf eine parametrisierte Schaltkreisinstanz angewendet würden. Dieses Problem wurde behoben und diese Methoden sollten nun mit einem parametrisierten Schaltkreis funktionieren. Behebt #4235

  • Bisher wurde bei der Erstellung einer kontrollierten Version eines Standard-Qiskit-Gates bei Angabe von ctrl_state ein generisches ControlledGate -Objekt zurückgegeben, während ohne dieses ein Standard-Qiskit-kontrolliertes Gate zurückgegeben wurde, wenn es definiert war. Dieser PR ermöglicht es standardmäßigen qiskit-gesteuerten Gates, ctrl_state zu verstehen.

    Darüber hinaus behebt dieser PR einen Fehler, bei dem das Setzen von ctrl_state eines bereits kontrollierten Gatters dazu führte, dass der angegebene Zustand auf die gesamte Kontrollbreite angewandt wurde, anstatt dass die Kontroll-Qubits hinzugefügt wurden. Zum Beispiel:

    circ = QuantumCircuit(2)
    circ.h(0)
    circ.x(1)
    gate = circ.to_gate()
    cgate = gate.control(1)
    c3gate = cgate.control(2, ctrl_state=0)

    würde ctrl_state auf alle drei Kontroll-Qubits angewandt, statt nur auf die beiden hinzugefügten Kontroll-Qubits.

  • Es wurde ein Fehler in random_clifford() behoben, der verhinderte, dass die gesamte Clifford-Gruppe abgetastet wurde. Behebt #4271

  • Die qiskit.circuit.Instruction methode qiskit.circuit.Instruction.is_parameterized() hatte zuvor True für jede Instruction Instanz zurückgegeben, die ein qiskit.circuit.Parameter in irgendeinem Element des params Arrays hatte, selbst wenn Parameter vollständig gebunden war. Dies wurde korrigiert, so dass .is_parameterized False zurückgibt, wenn der Befehl vollständig gebunden ist.

  • qiskit.circuit.ParameterExpression.subs() hatte einige Fälle nicht korrekt erkannt, in denen das Ersetzen von Parametern zu zwei verschiedenen Parameters Objekten in einem Ausdruck mit demselben Namen führte. Dies wurde korrigiert, so dass in diesen Fällen eine CircuitError erstellt wird.

  • Verbesserung der Leistung von qiskit.quantum_info.Statevector und qiskit.quantum_info.DensityMatrix für Low-Qubit-Schaltungssimulationen durch Optimierung der Methoden der Klasse __init__ . Behebt #4281

  • Die Funktion qiskit.compiler.transpile() arbeitet jetzt korrekt, wenn der Parameter basis_gates auf None gesetzt ist. Dadurch wird jedes Gatter in der transformierten Ausgangsschaltung zugelassen, einschließlich der durch den Transpilierungsprozess hinzugefügten Gatter. Beachten Sie, dass die Verwendung dieses Parameters bei der Optimierung einige unbeabsichtigte Folgen haben kann. Einige Transpilerdurchläufe hängen davon ab, dass ein basis_gates gesetzt ist. Zum Beispiel, qiskit.transpiler.passes.Optimize1qGates nur die Ketten von u1, u2 und u3 Gattern optimiert und ohne basis_gates nicht in der Lage ist, Gatter aufzurollen, die sonst optimiert werden könnten:

    from qiskit import *
    
    q = QuantumRegister(1, name='q')
    circuit = QuantumCircuit(q)
    circuit.h(q[0])
    circuit.u1(0.1, q[0])
    circuit.u2(0.1, 0.2, q[0])
    circuit.h(q[0])
    circuit.u3(0.1, 0.2, 0.3, q[0])
    
    result = transpile(circuit, basis_gates=None, optimization_level=3)
    result.draw()
         ┌───┐┌─────────────┐┌───┐┌─────────────────┐
    q_0: ┤ H ├┤ U2(0.1,0.3) ├┤ H ├┤ U3(0.1,0.2,0.3) ├
         └───┘└─────────────┘└───┘└─────────────────┘

    Korrekturen #3017

Sonstige Anmerkungen

Aer- 0.5.1

Keine Änderung

Ignis- 0.3.0

Keine Änderung

Aqua- 0.7.0

Vorspiel

Die Version von Qiskit Aqua 0.7.0 bietet eine Vielzahl neuer Funktionen und eine verbesserte Integration mit qiskit.circuit.QuantumCircuit objekten. Die zentralen Beiträge sind das Optimierungsmodul von Qiskit, ein kompletter Refactor von Operatoren, die Verwendung von Schaltkreisen als nativer Input für die Algorithmen und die Entfernung der deklarativen JSON-API.

Optimierungsmodul

Das Modul qiskit.optimization` bietet nun Funktionen zur Modellierung und Lösung quadratischer Programme. Es bietet verschiedene kurzfristige Quanten- und konventionelle Algorithmen, wie z. B. die MinimumEigenOptimizer (die z. B. VQE oder QAOA) oder CplexOptimizer, sowie eine Reihe von Konvertern zur Übersetzung zwischen verschiedenen Problemdarstellungen, wie z.B. QuadraticProgramToQubo. Eine Liste der hinzugefügten Funktionen finden Sie im Changelog.

Betreiberfluss

Die in qiskit.aqua.operators` enthaltene Operatorlogik wurde vollständig überarbeitet und ist nun ein vollständiger Satz von Werkzeugen für die Konstruktion physikalisch intuitiver Quantenberechnungen. Es enthält Zustandsfunktionen, Operatoren und Messungen und stützt sich intern auf die Operator-Objekte von Terra. Die Berechnung von Erwartungswerten und Entwicklungen wurde stark vereinfacht, und Objekte wie ExpectationFactory erzeugen den passenden, effizientesten Erwartungsalgorithmus auf der Grundlage des Eingabetyps Operator. Einen Überblick über die neuen Funktionen finden Sie im Änderungsprotokoll.

Native Schaltungen

Die Algorithmen verwenden in der Regel parametrisierte Schaltkreise als Eingabe, zum Beispiel VQE, VQC oder QSVM. Zuvor mussten diese Eingänge vom Typ VariationalForm oder FeatureMap sein, die das Schaltkreisobjekt umhüllten. Jetzt werden Schaltkreise in diesen Algorithmen nativ unterstützt, was bedeutet, dass jede individuell konstruierte QuantumCircuit an diese Algorithmen übergeben werden kann. In Kombination mit der Veröffentlichung der Schaltkreisbibliothek, die eine breite Sammlung von Schaltkreisfamilien bietet, ist es nun einfach, ausgefeilte Schaltkreise als Algorithmus-Input zu konstruieren.

Deklarative JSON-API

Die Möglichkeit, Algorithmen unter Verwendung von Wörterbüchern als Parameter auszuführen und die grafische Benutzeroberfläche von Aqua zu verwenden, wurde entfernt.

IBM Q Anbieter 0.7.0

Neue Funktionen

  • Eine neue Ausnahme, qiskit.providers.ibmq.IBMQBackendJobLimitError, wird nun ausgelöst, wenn ein Auftrag nicht übermittelt werden konnte, weil das Limit für aktive Aufträge erreicht wurde.
  • qiskit.providers.ibmq.job.IBMQJob und qiskit.providers.ibmq.managed.ManagedJobSet haben jeweils zwei neue Methoden update_name und update_tags. Sie werden verwendet, um den Namen und die Tags eines Auftrags bzw. eines Auftragssatzes zu ändern.
  • qiskit.providers.ibmq.IBMQFactory.save_account() und qiskit.providers.ibmq.IBMQFactory.enable_account() akzeptieren jetzt optionale Parameter hub, group und project, mit denen ein Standardanbieter für die Speicherung auf der Festplatte bzw. die Verwendung angegeben werden kann.

Anmerkungen zu Upgrades

  • Die Methoden qiskit.providers.ibmq.job.IBMQJob creation_date und time_per_step geben nun Datums- und Zeitinformationen als datetime -Objekt in lokaler Zeit statt in UTC zurück. Auch die Parameter start_datetime und end_datetime sowie qiskit.providers.ibmq.IBMQBackendService.jobs() und qiskit.providers.ibmq.IBMQBackend.jobs() können nun in Ortszeit angegeben werden.
  • Die Methode qiskit.providers.ibmq.job.QueueInfo.format() verwendet nun einen benutzerdefinierten Formatierer datetime to string, und das Paket arrow ist nicht mehr erforderlich und wurde aus der Anforderungsliste entfernt.

Hinweise zu veralteten Versionen

  • Die Methoden from_dict() und to_dict() von qiskit.providers.ibmq.job.IBMQJob sind veraltet und werden in der nächsten Version entfernt.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem nest_asyncio.apply() eine Ausnahme auslösen konnte, wenn es aufgrund von Threading keine Asyncio-Schleife gibt.
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.