Skip to main content
IBM Quantum Platform

Qiskit 0.5 Versionshinweise


0.5

Terra- 0.5

Schwerpunkte

Diese Version bringt eine Reihe von Verbesserungen für Qiskit, sowohl für die Benutzererfahrung als auch unter der Haube. Eine ausführliche Beschreibung der Änderungen finden Sie im Änderungsprotokoll - die wichtigsten sind:

  • neue statevector simulators sowie Funktions- und Leistungsverbesserungen an den bestehenden (insbesondere am C++-Simulator), zusammen mit einer Umstrukturierung der Arbeit mit Backends, die auf Erweiterbarkeit und Flexibilität ausgerichtet ist (Verwendung von Aliases und Backend-Providern)
  • umstrukturierung der asynchronen Funktionen, die eine benutzerfreundlichere Schnittstelle für die asynchrone Ausführung von Aufträgen über Job Instanzen bieten
  • zahlreiche Verbesserungen und Korrekturen im gesamten Terra, sowohl für die Bequemlichkeit der Benutzer (z. B. anonyme Register) als auch für die erweiterte Funktionalität (z. B. verbesserte Darstellung von Schaltkreisen)

Hinweise zur Kompatibilität

Bitte beachten Sie, dass in dieser Version einige abwärtskompatible Änderungen als Ergebnis der laufenden Entwicklung eingeführt wurden. Während einige dieser Funktionen noch eine Zeit lang unterstützt werden, bevor sie vollständig veraltet sind, ist es empfehlenswert, Ihre Programme zu aktualisieren, um sich auf die neuen Versionen vorzubereiten und die neuen Funktionen zu nutzen.

QuantumProgram Änderungen

Mehrere Methoden der Klasse QuantumProgram sind auf dem Weg, veraltet zu werden:

  • methoden für die Interaktion mit den Backends und der API :

    Es wird empfohlen, eine Verbindung zur IBM Q API zu öffnen und die Backends direkt über die Top-Level-Funktionen und nicht über die QuantumProgram Methoden zu verwenden. Insbesondere bietet die Methode qiskit.register() das Äquivalent zum vorherigen Aufruf von qiskit.QuantumProgram.set_api() . In ähnlicher Weise gibt es eine neue qiskit.available_backends(), qiskit.get_backend() und verwandte Funktionen zur direkten Abfrage der verfügbaren Backends. Zum Beispiel der folgende Ausschnitt für die Version 0.4:

    from qiskit import QuantumProgram
    
    quantum_program = QuantumProgram()
    quantum_program.set_api(token, url)
    backends = quantum_program.available_backends()
    print(quantum_program.get_backend_status('ibmqx4')

    würde dem folgenden Ausschnitt für die Version entsprechen 0.5:

    from qiskit import register, available_backends, get_backend
    
    register(token, url)
    backends = available_backends()
    backend = get_backend('ibmqx4')
    print(backend.status)
  • methoden zum Kompilieren und Ausführen von Programmen :

    Die Top-Level-Funktionen bieten nun auch Äquivalente für die Methoden qiskit.QuantumProgram.compile() und qiskit.QuantumProgram.execute() . Zum Beispiel der folgende Ausschnitt aus der Version 0.4:

    quantum_program.execute(circuit, args, ...)

    würde dem folgenden Ausschnitt für die Version entsprechen 0.5:

    from qiskit import execute
    
    execute(circuit, args, ...)

Im Allgemeinen empfehlen wir ab der Version 0.5, die einzelnen Objekte und Klassen direkt zu verwenden, anstatt sich auf QuantumProgram zu verlassen. Zum Beispiel kann ein QuantumCircuit instanziiert und konstruiert werden, indem QuantumRegister, ClassicalRegister und gates direkt angehängt werden. Bitte sehen Sie sich das Update-Beispiel im Abschnitt Quickstart oder die Beispiele using_qiskit_core_level_0.py und using_qiskit_core_level_1.py im Haupt-Repository an.

Änderungen am Backend-Namen

Um einen erweiterbaren Rahmen für Backends zu schaffen, wurden einige Designänderungen vorgenommen:

  • lokale Simulatoren-Namen

    Die Namen der lokalen Simulatoren wurden vereinheitlicht, um dem gleichen Muster zu folgen: PROVIDERNAME_TYPE_simulator_LANGUAGEORPROJECT - zum Beispiel heißt der C++-Simulator, der vorher local_qiskit_simulator hieß, jetzt local_qasm_simulator_cpp. Ein Überblick über die aktuellen Simulatoren:

    • QASM der Simulator soll wie ein Experiment sein. Man wendet eine Schaltung auf einige Qubits an und beobachtet die Messergebnisse - und man wiederholt dies für viele Aufnahmen, um ein Histogramm der Zählungen über result.get_counts() zu erhalten.
    • Statevector simulator ist es, den vollständigen Zustandsvektor ( 2n2^n Amplituden) zu erhalten, nachdem der Nullzustand durch die Schaltung entwickelt wurde, und kann über result.get_statevector() erhalten werden.
    • Unitary simulator ist es, das unitäre Matrixäquivalent der Schaltung zu erhalten, das über result.get_unitary() zurückgegeben wird.
    • Darüber hinaus können Sie Zwischenzustände von einem Simulator erhalten, indem Sie eine snapshot(slot) Anweisung an verschiedenen Stellen in der Schaltung anwenden. Damit wird der aktuelle Zustand des Simulators in einem bestimmten Slot gespeichert, der später über result.get_snapshot(slot) abgerufen werden kann.
  • backend-Aliase :

    Das SDK bietet jetzt ein "Alias"-System, mit dem automatisch der leistungsfähigste Simulator eines bestimmten Typs verwendet werden kann, sofern er in Ihrem System verfügbar ist. Zum Beispiel mit dem folgenden Ausschnitt:

    from qiskit import get_backend
    
    backend = get_backend('local_statevector_simulator')

    das Backend ist der C++-Zustandsvektor-Simulator, falls vorhanden, und der Python -Zustandsvektor-Simulator, falls nicht vorhanden.

Flexiblere Namen und Parameter

Mehrere Funktionen des SDK wurden flexibler und benutzerfreundlicher gestaltet:

  • automatische Schaltkreis- und Registernamen

    qiskit.ClassicalRegister qiskit.QuantumRegister und können jetzt instanziiert werden, ohne ihnen explizit einen Namen zu geben - eine neue Funktion zur automatischen Benennung weist ihnen automatisch einen Bezeichner zu: qiskit.QuantumCircuit

    q = QuantumRegister(2)

    Bitte beachten Sie auch, dass die Reihenfolge der Parameter vertauscht wurde QuantumRegister(size, name).

  • methoden, die Namen oder Instanzen akzeptieren

    In Kombination mit den Änderungen bei der automatischen Benennung akzeptieren mehrere Methoden wie qiskit.Result.get_data() nun sowohl Namen als auch Instanzen. Wenn Sie zum Beispiel die Ergebnisse für einen Auftrag mit einem einzigen Stromkreis abrufen, z. B:

    qc = QuantumCircuit(..., name='my_circuit')
    job = execute(qc, ...)
    result = job.result()

    Die folgenden Aufrufe sind gleichwertig:

    data = result.get_data('my_circuit')
    data = result.get_data(qc)
    data = result.get_data()
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.