Lösen Sie Optimierungsprobleme mit Quantenglühen auf Python-Basis so einfach wie möglich

Was?

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.

Quantencomputer und Quantenglühen

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.

Umweltvorbereitung

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.

Was ist danach zu tun?

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).

Zusammenfassung

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

Lösen Sie Optimierungsprobleme mit Quantenglühen auf Python-Basis so einfach wie möglich
Kombinationsoptimierung mit Quantenglühen
Lösen Sie Optimierungsprobleme mit Python
So einfach wie möglich eine GUI mit Python erstellen [tkinter edition]
Beheben von AtCoder-Problemen Empfehlung mit Python (20200517-0523)
Lösen Sie Probleme bei der Kombinationsoptimierung mit den OR-Tools von Google. (5) Legen Sie einen Termin fest
Das Problem, dass Windows Python in pipenv auf WSL aufgerufen wird
Löse AtCoder 167 mit Python
Löse Mathe mit Python
Machen Sie einfach einen Piepton mit Python
Löse POJ 2386 mit Python
Einstellungen der Python3-basierten maschinellen Lernumgebung auf dem Mac (Koexistenz mit Python2)
Lösen Sie AtCoder-Probleme Bootcamp für Anfänger (Medium 100) mit Python
Löse AtCoder ABC166 mit Python
Mit Python mit Kelch ganz einfach ohne Server
Erste Schritte zur Lösung linearer Planungsprobleme mit PuLP
Versuchen Sie, mit Python (1) eine Erfassungssoftware zu erstellen, die so genau wie möglich ist.
So schreiben Sie offline in Echtzeit Lösen von F01-Problemen mit Python