Ich bin nicht gut in Quantencomputern oder Yokuwakaranai, ich bin mir nicht sicher über das aufsteigende Modell, ich bin nicht gut in mathematischen Formeln wie Σ, aber ich kann es mit Python lesen.
Der Quellcode ist intuitiver als die mathematischen Formeln und kann durch Verschieben verstanden werden. Daher hielt ich es für eine gute Idee, "Quantenglühen", eine Methode des "Quantencomputers", in Python zu studieren. Ich habe es als zusammengefasst.
Der Begriff "Quantencomputer" bezieht sich auf eine Vielzahl von Wörtern.
Einer der sogenannten "Quantencomputer" ist das als "Quantenglühen" bezeichnete Verfahren.
Grob gesagt löst "Quantenglühen" das "Kombinationsproblem". Es ist kein Ersatz für die heutigen PCs, sondern löst einfach Kombinationsprobleme.
Es scheint vielleicht kein Kombinationsproblem zu sein, aber es ist eine Art Problem, bei dem Sie aus vielen Dingen eine bessere Kombination auswählen. Es gibt viele solche Probleme unerwartet auf der Welt, und es ist eine überraschend häufige Art von Problem, wie die Auswahl von Kleidung, die Auswahl des optimalen Transportweges und die Auswahl von Süßigkeiten für 300 Yen.
Die heutigen Computer sind schnell genug, aber es braucht Zeit, um viele Problemkombinationen zu lösen. "Quantenglühen" ist eine Technologie, die das Kombinationsproblem effizienter lösen kann.
... Es war also ein langes Vorwort, aber ich werde mit dem Quellcode beginnen.
Bereiten Sie zunächst eine Umgebung vor, in der Python ausgeführt werden kann. Installieren Sie die erforderlichen Bibliotheken mit pip.
pip install pyqubo
Lassen Sie uns ein schnelles und einfaches Beispiel machen.
from pyqubo import Binary, solve_qubo
#Aktuelle Lückenzeit
sukima_jikan = 45
a = Binary("Anime") #Ein halbe Stunde
b = Binary("Lustiges Video A.") #5 Minuten
c = Binary("Lustiges Video B.") #4 Minuten
d = Binary("Lustiges Video C.") #3 Minuten
e = Binary("Theater") #60 Minuten
H = (sukima_jikan - a*30 - b*5 - c*4 - d*3 - e*60)**2
qubo, offset = H.compile().to_qubo()
solution = solve_qubo(qubo)
print(solution)
#Ausführungsergebnis:
# {'Lustiges Video A.': 1, 'Lustiges Video B.': 1, 'Lustiges Video C.': 1, 'Anime': 1, 'Theater': 0}
Nehmen wir in diesem Beispiel an, Sie haben "** 5 Videos wie eine Tabelle " und jetzt haben Sie eine Lücke von " 45 Minuten **". Welche Art von Kombination von Videos kann ich zu diesem Zeitpunkt ausgeben? Ist das Problem.
Variable | Video | Zeit |
---|---|---|
a | Anime | Ein halbe Stunde |
b | Lustiges Video A. | 5 Minuten |
c | Lustiges Video B. | 4 Minuten |
d | Lustiges Video C. | 3 Minuten |
e | Theater | 60 Minuten |
Lassen Sie uns den Code der Reihe nach erklären.
Bereiten Sie zunächst Variablen vor, die jedes Video darstellen.
Binär
ist ein Typ, der 0
oder 1
sein kann.
a = Binary("Anime")
b = Binary("Lustiges Video A.")
c = Binary("Lustiges Video B.")
d = Binary("Lustiges Video C.")
e = Binary("Theater")
Und dann erstellen Sie so etwas wie eine sogenannte Bewertungsfunktion.
H = (sukima_jikan - a*30 - b*5 - c*4 - d*3 - e*60)**2
Ich möchte über die Kombination von a`` b`` c`` d
e
nachdenken, damit der Wert dieser Bewertungsfunktion H
** Minimum ** ist.
Erklärt die Bedeutung des Ausdrucks "H".
Sehen wir uns ein aktuelles Beispiel an.
Wenn Sie beispielsweise nur "Animation der Variablen a" mit "Freigabezeit 45 Minuten" ansehen, wird die Variable "a" zu "1" und die anderen zu "0", also "H = 225".
H = (sukima_jikan - a*30 - b*5 - c*4 - d*3 - e*60)**2
↓
H = ( 45 - 1*30 - 0*5 - 0*4 - 0*3 - 0*60 )**2
= ( 45 - 30 - 0 - 0 - 0 - 0 )**2
= ( 15 )**2
= 225
Wenn Sie "Lustiges Video der Variablen b" und "Lustiges Video der Variablen c" in einem anderen Muster ansehen, wird die Variable "b" "c" zu "1" und die anderen zu "0", also "H = 1296" Es wird `.
H = (sukima_jikan - a*30 - b*5 - c*4 - d*3 - e*60)**2
↓
H = ( 45 - 0*30 - 1*5 - 1*4 - 0*3 - 0*60 )**2
= ( 45 - 0 - 5 - 4 - 0 - 0)**2
= ( 36 )**2
= 1296
Mit anderen Worten, "H = 225" von "Animation der Variablen a" hat ein kleineres "H" als "H = 1296" von "lustiges Video der Variablen b + lustiges Video der Variablen c", daher wurde es hoch bewertet = Zeit wurde getötet. Es kann gesagt werden.
Wenn Sie sich also die Kombination von a``` b`` c
d`` e
und dem Wert von H
ansehen, sieht es so aus.
a | b | c | d | e | H |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 2025 |
1 | 0 | 0 | 0 | 0 | 225 |
0 | 1 | 0 | 0 | 0 | 1600 |
0 | 0 | 1 | 0 | 0 | 1681 |
0 | 0 | 0 | 1 | 0 | 1764 |
0 | 0 | 0 | 0 | 1 | 225 |
1 | 1 | 0 | 0 | 0 | 100 |
1 | 0 | 1 | 0 | 0 | 121 |
1 | 0 | 0 | 1 | 0 | 144 |
: | : | : | : | : | : |
1 | 1 | 1 | 1 | 0 | 9 |
: | : | : | : | : | : |
1 | 1 | 1 | 1 | 1 | 3249 |
: | : | : | : | : | : |
Mit diesem Gefühl möchte ich die Kombination mit dem kleinsten "H" auswählen, aber normalerweise muss ich sie einzeln lösen.
Hier ist der Teil, der dies irgendwie mit einem guten Gefühl löst.
H = (sukima_jikan - a*30 - b*5 - c*4 - d*3 - e*60)**2
qubo, offset = H.compile().to_qubo()
solution = solve_qubo(qubo)
print(solution)
Indem Sie eine Bewertungsformel "H" (tatsächlich Hamiltonian anstelle einer Bewertungsformel genannt) erstellen, ein darauf basierendes QUBO erstellen ("to_qubo ()") und es lösen ("lösen_qubo ()") Ich habe eine Lösung. "Quantenglühen" ist die Auswahl der Kombination, die die Lösung aus dieser Hamilton-Formel (≒ Bewertungsformel) sein wird, indem die Eigenschaften von "Quanten" ausgeliehen werden.
Wenn Sie es also ausführen und sehen, erhalten Sie Folgendes als Antwort.
{'Lustiges Video A.': 1, 'Lustiges Video B.': 1, 'Lustiges Video C.': 1, 'Anime': 1, 'Theater': 0}
Mit anderen Worten, wenn Sie eine Lücke von 45 Minuten haben,
Variable | Video | Zeit | Anzeigen |
---|---|---|---|
a | Anime | Ein halbe Stunde | sehen |
b | Lustiges Video A. | 5 Minuten | sehen |
c | Lustiges Video B. | 4 Minuten | sehen |
d | Lustiges Video C. | 3 Minuten | sehen |
e | Theater | 60 Minuten | Schauen Sie nicht |
** 30 Minuten + 5 Minuten + 4 Minuten + 3 Minuten ** ** Insgesamt 42 Minuten ** Sie erhalten eine gute Kombination.
Herzliche Glückwünsche
Zusammenfassend ist es wichtig, eine H-Formel für das Problem zu erstellen, das Sie ohne Details lösen möchten.
Es ist beispielsweise interessant, verschiedene Dinge auszuprobieren, z. B. die Lückenzeit zu ändern und die Anzahl der Videos zu erhöhen. Darüber hinaus wird empfohlen, dem Video die Anzahl ★ hinzuzufügen, damit Sie so viele Videos mit hohem ★ wie möglich ansehen können (erstellen Sie eine solche Bewertungsformel für H).
Das? Ist mein PC ein "Quantencomputer"? Warum hat dieser Code funktioniert? Sie haben vielleicht gedacht, aber der PyQUBO, den ich dieses Mal verwendet habe, hat einen Simulator, so dass er auf einem normalen PC funktioniert (danke!). Wenn Sie eine echte Quantenglühmaschine wie D-WAVE oder eine Art Glühmaschine (oder eine schnelle Glühmaschine, die kein Quantenglühgerät ist) verwenden können, können Sie auch ein tatsächliches Quantenglühen durchführen, indem Sie den Teil "Solve_qubo" des obigen Codes ersetzen. ..
Ursprünglich musste ich das Zing-Modell, QUBO, Hamilton usw. richtig erklären, aber als Ausgangspunkt für einen Programmierer / Ingenieur wie mich ist es schneller, mit einem "Programm" zu verstehen, also habe ich es basierend auf Python zusammengefasst.
Wir begrüßen Tsukkomi von Experten, also zögern Sie nicht zu kommentieren.
Recommended Posts