Ich möchte einen Quantencomputer mit Python betreiben

Einführung

Google hat Quantentranszendenz demonstriert und kürzlich gab es ein Thema über Quantencomputer, also habe ich mich leicht damit befasst. Es gab jedoch eine Methode, mit der jeder versuchen konnte, einen Quantencomputer zu betreiben (die später beschrieben wird, aber die Quantenglühmethode unterscheidet sich von der von Google entwickelten Methode). Also habe ich es hier zusammengefasst. Da ich kein Experte auf diesem Gebiet bin, kann die Erklärung einige Fehler enthalten. Bitte beachten Sie diesen Punkt.

Referenz

Ich bezog mich auf Folgendes, wenn ich den Quantencomputer verstand und den Quantencomputer tatsächlich bediente.

Was ist ein Quantencomputer?

Über die Erklärung des Quantencomputers Weil die Erklärung in der Nikkei-Zeitung vollständig und leicht verständlich war Zunächst werde ich es so zitieren, wie es ist.

▼ Quantencomputer Ein Computer, der das physikalische Gesetz "Quantenmechanik" anwendet, das in der mikroskopischen Welt gilt, wie die Atome und Elektronen, aus denen eine Substanz besteht. Herkömmliche Computer stellen Informationen in Einheiten von "0" - und "1" -Bits dar und berechnen sie. Je nachdem, wie 0 und 1 angeordnet sind, ist jedoch ein großer Rechenaufwand erforderlich. Quantencomputer verwenden dagegen einen speziellen Zustand namens "Überlagerung", der sowohl 0 als auch 1 ist. Durch die Anwendung dieses Prinzips wird erwartet, dass in der Vergangenheit schwierige Berechnungen in kurzer Zeit durchgeführt werden können.

In einem Quantencomputer ist die Existenz eines Quantenbits, das einen Überlagerungszustand von ** 0 und 1 ** aufweisen kann, sehr wichtig, und mit diesem kann die beste Kombination aus allen Kombinationen sofort ausgewählt werden. Es wird gesagt, dass die Maschine, die gefunden werden kann, ein Quantencomputer ist.

Derzeit werden zwei Arten von Quantencomputern entwickelt.

Methode Überblick Entwicklungsanbieter
Quantenglühverfahren Eine Methode, die auf die Aufgabenverarbeitung zur Kombinationsoptimierung spezialisiert ist D-Wellensysteme etc.
Quantum-Gate-Methode Eine Allzweckmethode, mit der sich alles wie mit einem herkömmlichen Computer berechnen lässt Google,IBM usw.

Derzeit führen Unternehmen Demonstrationsexperimente an Quantenglühmaschinen durch. Im Jahr 2011 begann ein Unternehmen namens D-Wave Systems in Kanada mit dem kommerziellen Verkauf von Quantenglühmaschinen, und verschiedene Unternehmen führen Demonstrationsexperimente durch.

Für japanische Unternehmen [Recruit Communications wendet Quantencomputer auf Anzeigenoptimierung an](http://dwavejapan.com/recruit-communications-d-wave-collaborate-apply-quantum-computing-marketing-advertising-communications- Es scheint, dass wir Forschung und Entwicklung betreiben, um die Optimierung zu erreichen /).

Diesmal ist es die Quantenglühmaschine von D-Wave-Systemen, die auf Python läuft. ** Ab November 2019 kann jeder die Quantenglühmaschine 1 Minute lang kostenlos betreiben, indem er sich registriert. ** ** **

Vorbereitung

Bereit zum Ausführen eines Quantencomputers

Registrieren Sie sich zunächst als Benutzer auf der Website hier. Sie können sich registrieren, indem Sie einfach Ihren Namen, Ihre E-Mail-Adresse und Ihre Berufsinformationen eingeben. Es sind keine Kreditkarteninformationen erforderlich.

スクリーンショット 2019-11-09 9.44.21.png

Wenn Sie sich anmelden, sehen Sie oben zuerst einen Bildschirm wie diesen. Ganz links erklären verschiedene Erklärungsfilme, was diese Quantenglühmaschine kann. Sie können eine Demo des Quantencomputers in der Mitte sehen, aber beachten Sie, dass er ab der einen Minute des Versuchs Zeit in Anspruch nimmt. Ganz rechts finden Sie eine Erklärung zum Ausführen einer Quantenglühmaschine mit der Python-Bibliothek.

スクリーンショット 2019-11-04 18.33.11.png

Wenn Sie scrollen, sehen Sie auch ein Dashboard wie dieses. Hier können Sie sehen, wie lange Sie den Quantencomputer ausführen können.

スクリーンショット 2019-11-04 18.33.30.png

Wenn Sie es verwenden, wird die Zeit auf diese Weise reduziert.

スクリーンショット 2019-11-09 9.53.24.png

Vorbereitung der Python-Bibliothek

Obwohl es sich um eine Bibliothek handelt, kann sie normal mit pip installiert werden. In der Umgebung, die ich immer benutze, traten während der Installation aus irgendeinem Grund häufig Fehler auf. Daher habe ich den Container aus dem Image für maschinelles Lernen mit Docker gestartet und dort installiert.

pip install dwave-ocean-sdk

Führen Sie nach Abschluss dieser Installation den folgenden Befehl aus.

dwave config create

Dann wird das Folgende in der Reihenfolge von oben angezeigt, aber im Grunde drücken Sie einfach die Eingabetaste und Geben Sie Ihr API-Token in das Feld "Authentifizierungstoken" ein. Sie können Ihr API-Token oben auf Meine Seite kopieren.

Confirm configuration file path [/home/jane/.config/dwave/dwave.conf]:
Profile (create new) [prod]:
API endpoint URL [skip]:
Authentication token [skip]:Beschreiben Sie Ihr API-Token
Default client class (qpu or sw) [qpu]:
Default solver [skip]:
Configuration saved.

Die Vorbereitungen sind hier abgeschlossen. Führen Sie den folgenden Befehl aus, um zu bestätigen, dass die Verbindung erfolgreich ist.

dwave ping

Wenn es so aussieht, ist es OK.

Using endpoint: https://my.dwavesys.url/
Using solver: My_DWAVE_2000Q

Wall clock time:
 * Solver definition fetch: 2007.239 ms
 * Problem submit and results fetch: 1033.931 ms
 * Total: 3041.171 ms

QPU timing:
 * total_real_time = 10493 us
 * anneal_time_per_run = 20 us
 * post_processing_overhead_time = 128 us
 * qpu_anneal_time_per_sample = 20 us

Lösen Sie Aufgaben mit einem Quantencomputer

Lassen Sie uns die Aufgabe nun tatsächlich mit einem Quantencomputer lösen.

Aufgaben, die mit einem Quantencomputer gelöst werden müssen

Dieses Mal wird es als [API-Referenzbeispielproblem] vorbereitet (https://docs.ocean.dwavesys.com/de/latest/examples/scheduling.html#scheduling). Wir werden die Planungsaufgabe mit Einschränkungen lösen.

Problem

Die folgenden Regeln sind als Bedingungen für das Halten von MTG festgelegt. Wir werden versuchen, die Bedingungen, unter denen MTG gehalten werden kann, umfassend zu extrahieren, ohne diese Regel zu verletzen. ** Regeln **

Löse die Aufgabe

Problemkonvertierung

Konvertieren Sie zunächst 0 und 1, damit die obigen Bedingungen vom Computer gelesen werden können.

Lassen Sie uns nun eine Funktion erstellen, die die obige 0,1-Konvertierung für die Regel löscht.

def scheduling(time, location, length, mandatory):
    if time:                                 #Pünktlich
        return (location and mandatory)      #Obligatorische Teilnahme am Büro
    else:                                    #Nicht geplant
        return ((not location) and length)   #Telefonkonferenz von 30 Minuten oder weniger

Erstellen Sie aus dieser Funktion mithilfe einer Bibliothek eine Einschränkungsbedingung.

import dwavebinarycsp
csp = dwavebinarycsp.ConstraintSatisfactionProblem(dwavebinarycsp.BINARY)
csp.add_constraint(scheduling, ['time', 'location', 'length', 'mandatory'])

Darüber hinaus wird dies in ein Format konvertiert, das als Alterungsmodell bezeichnet wird (Problem der Minimierung des sekundären Formats). ** Es ist wichtig, das Problem in dieses Format zu konvertieren, damit der Quantencomputer das Problem lösen kann **. Obwohl es sich um "min_classical_gap" handelt, das durch das folgende Argument angegeben wird, ist es im offiziellen Beispielcode nicht angegeben. Wenn Sie die Standardeinstellung beibehalten, funktioniert sie nicht, daher habe ich sie hier angegeben, aber ich konnte die Ursache auch nach einer Untersuchung nicht finden ... Ich würde es begrüßen, wenn mir jemand davon erzählen könnte.

bqm = dwavebinarycsp.stitch(csp, min_classical_gap=2.1)
print(bqm)
BinaryQuadraticModel({'a': -1.0, 'aux0': -2.0, 'aux1': 0.0, 'b': 2.0, 'c': 1.0, 'aux2': -1.0}, {('aux0', 'a'): 1.0, ('aux1', 'a'): 1.0, ('aux1', 'aux0'): -1.0, ('b', 'a'): -1.0, ('b', 'aux0'): -1.0, ('b', 'aux1'): -1.0, ('c', 'a'): 0.0, ('c', 'aux0'): -1.0, ('c', 'aux1'): -1.0, ('c', 'b'): 1.0, ('aux2', 'a'): 1.0, ('b', 'aux2'): -1.0, ('c', 'aux2'): 1.0}, 0.0, Vartype.SPIN)

Die obige Ausgabe entspricht dieser mathematisch. \sum_i^N q_ix_i + \sum_{i

Lassen Sie den Quantencomputer das Problem lösen

from dwave.system.samplers import DWaveSampler
from dwave.system.composites import EmbeddingComposite
sampler = EmbeddingComposite(DWaveSampler(endpoint='https://cloud.dwavesys.com/sapi', token='Beschreiben Sie Ihr API-Token', solver='DW_2000Q_2_1'))

Fordern Sie eine Abtastung vom Quantencomputer an. Da die Stichprobenergebnisse wahrscheinlich sind, werden durch das Anfordern vieler Stichproben anstelle einer nur mehrere "optimale" Lösungen aufgerufen, und Sie können sich nicht auf nicht optimale Lösungen festlegen. Das Folgende erfordert 5000 Beispiele als Argumente.

response = sampler.sample(bqm, num_reads=5000)
#Die Lösung mit dem kleinsten Energiewert ist die optimale Lösung
min_energy = next(response.data(['energy']))

Werfen wir einen Blick auf die Stichprobenergebnisse.

total = 0
for sample, energy, occurrences in response.data(['sample', 'energy', 'num_occurrences']):
    total = total + occurrences 
    if energy == min_energy:
        time = 'Pünktlich' if sample['time'] else 'Nicht geplant'
        location = 'Büro' if sample['location'] else 'Telefonkonferenz'
        length = '30 Minuten oder weniger' if sample['length'] else 'Länger als 30 Minuten'
        mandatory = 'Teilnahmepflicht' if sample['mandatory'] else 'Freiwillige Teilnahme'
        sub = str(sample['mandatory'])
#         print("{}: During {} at {}, you can schedule a {} meeting that is {}::{}".format(occurrences, time, location, length, mandatory, sub))
        print(" {}Ist{}damit,{}MTG{}Es kann bei gehalten werden.".format(time, location, length, mandatory))
Es ist eine Telefonkonferenz außerhalb der regulären Öffnungszeiten, und MTG von 30 Minuten oder weniger kann freiwillig abgehalten werden.
Sie können ein MTG von 30 Minuten oder weniger halten, wenn Sie während der geplanten Zeit im Büro teilnehmen müssen.
Sie können ein MTG länger als 30 Minuten halten, indem Sie während der geplanten Zeit obligatorisch am Büro teilnehmen.
Sie können ein MTG länger als 30 Minuten halten, indem Sie während der geplanten Zeit obligatorisch am Büro teilnehmen.
Sie können ein MTG länger als 30 Minuten halten, indem Sie während der geplanten Zeit obligatorisch am Büro teilnehmen.
Durch die obligatorische Teilnahme an einer Telefonkonferenz außerhalb der regulären Öffnungszeiten kann ein MTG von 30 Minuten oder weniger abgehalten werden.
Sie können ein MTG länger als 30 Minuten halten, indem Sie während der geplanten Zeit obligatorisch am Büro teilnehmen.

Es gibt mehrere überlappende Lösungen, aber alle konnten Lösungen extrahieren, die die Randbedingungen erfüllen.

Next Ich habe vorerst versucht, den Quantencomputer zu betreiben, aber es gab viele Dinge, die ich nicht verstand, wie die QUBO-Matrix und das Alterungsmodell. Deshalb würde ich gerne studieren, wenn ich Zeit habe. Auch diesmal war die im Test durchgeführte Datenmenge gering, und da dieser Quantencomputer selbst in der Cloud verbunden war, konnte ich die Berechnungsgeschwindigkeit des Themas nicht wirklich spüren. Ich denke, dieser Bereich ist ein Bereich, der von Tag zu Tag voranschreitet, deshalb möchte ich ihm richtig folgen.

Recommended Posts

Ich möchte einen Quantencomputer mit Python betreiben
Ich möchte ein Spiel mit Python machen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte mit Python debuggen
Ich möchte eine Python-Umgebung erstellen
Ich möchte Protokolle mit Python analysieren
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte den vollständigen Text mit elasticsearch + python durchsuchen
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich möchte mit Python ein Fenster erstellen
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
#Unresolved Ich möchte Gobject-Introspection mit Python3 kompilieren
Ich möchte APG4b mit Python lösen (Kapitel 2)
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich möchte einen Python-Generator viele Male iterieren
Ich möchte, dass DQN Puniki einen Homerun macht
Ich möchte schnell UUID generieren (Gedenknotiz) ~ Python Edition ~
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit Python-Datenklasse nach hinten erben
Vom Kauf eines Computers bis zur Ausführung eines Programms auf Python
Ich möchte eine Zeichenkette mit Hiragana teilen
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Ich möchte Lambda mit Python auf Mac AWS!
Ich möchte manuell eine Legende mit matplotlib erstellen
Ich möchte eine lokale Variable mit Lambda binden
Ich habe mit Python eine Lotterie gemacht.
Ich möchte ○○ mit Pandas machen
Ich habe mit Python einen Daemon erstellt
Ich möchte Daten mit Python analysieren können (Teil 3)
Ich möchte eine andere Version von Python mit pyvenv angeben
Ich möchte Daten mit Python analysieren können (Teil 1)
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
Ich möchte eine Jupyter-Umgebung mit einem Befehl starten
Ich möchte viele Prozesse von Python aus starten
Ich möchte ein Klickmakro mit pyautogui (Wunsch) erstellen.
Ich möchte Daten mit Python analysieren können (Teil 4)
Ich möchte Daten mit Python analysieren können (Teil 2)
Ich möchte ein Klickmakro mit pyautogui (Outlook) erstellen.
[Python] Ich möchte die Option -h mit argparse verwenden
Ich möchte eine virtuelle Umgebung mit Jupyter Notebook verwenden!
Ich möchte das Paket aus den Anforderungen.txt mit Poesie installieren
[Visualisierung] Ich möchte mit Plotly ein schönes Diagramm zeichnen
Ich möchte Python mit VS-Code ausführen können
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
[Python] Ich möchte nur den Index verwenden, wenn ich eine Liste mit einer for-Anweisung schleife
Ich möchte Leuten sagen, die mit Python direnv aus einem höheren Verzeichnis importieren möchten
[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich möchte Objekte mit OpenCV erkennen
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen