Erste Schritte
Installation
Um AlphaCube zu installieren, öffnen Sie ein Terminal und führen Sie folgenden Befehl aus:
pip install alphacube
Verwendung
Grundlagen
Die Verwendung von AlphaCube in Python ist so einfach wie folgt:
import alphacube
# Ein trainiertes DNN laden
alphacube.load(model_id="small") # das Standard-Modell
# Den Würfel mit einem gegebenen Scramble lösen
result = alphacube.solve(
scramble="D U F2 L2 U' B2 F2 D L2 U R' F' D R' F' U L D' F' D R2",
beam_width=1024,
)
print(result)
Ausgabe{
'solutions': [
"D L D2 R' U2 D B' D' U2 B U2 B' U' B2 D B2 D' B2 F2 U2 F2"
],
'num_nodes': 19744,
'time': 1.4068585219999659
}
Verbesserung der Qualität
Wenn Sie noch kürzere Lösungen wünschen, erhöhen Sie einfach den Parameter beam_width
:
alphacube.load() # model_id="small"
result = alphacube.solve(
scramble="D U F2 L2 U' B2 F2 D L2 U R' F' D R' F' U L D' F' D R2",
beam_width=65536,
)
print(result)
Ausgabe{
'solutions': [
"D' R' D2 F' L2 F' U B F D L D' L B D2 R2 F2 R2 F'",
"D2 L2 R' D' B D2 B' D B2 R2 U2 L' U L' D' U2 R' F2 R'"
],
'num_nodes': 968984,
'time': 45.690575091997744
}
Zulassen einiger zusätzlicher Züge
Möglicherweise möchten Sie nicht nur die kürzesten Algorithmen erhalten, sondern auch leicht redundante. Auf diese Weise können Sie das Risiko verringern, großartige Algorithmen zu übersehen.
alphacube.load() # model_id="small"
result = alphacube.solve(
scramble="D U F2 L2 U' B2 F2 D L2 U R' F' D R' F' U L D' F' D R2",
beam_width=65536,
extra_depths=1
)
print(result)
Ausgabe{
'solutions': [
"D' R' D2 F' L2 F' U B F D L D' L B D2 R2 F2 R2 F'",
"D2 L2 R' D' B D2 B' D B2 R2 U2 L' U L' D' U2 R' F2 R'",
"D R F2 L' U2 R2 U2 R2 B2 U' F B2 D' F' D' R2 F2 U F2 L2",
"L' D' R' D2 L B' U F2 U R' U' F B' R2 B R B2 F D2 B",
"R' F L2 D R2 U' B' L' U2 F2 U L U B2 U2 R2 D' U B2 R2",
"L' U' F' R' U D B2 L' B' R' B U2 B2 L2 D' R2 U' D R2 U2"
],
'num_nodes': 1100056,
'time': 92.809575091997744
}
Anwenden von ergonomischer Gewichtung
Ergonomische Gewichtungen ermöglichen es Ihnen, die Wünschbarkeit bestimmter Züge, die sich schneller und einfacher ausführen lassen, numerisch anzugeben. Um eine ergonomische Gewichtung anzuwenden, geben Sie in der Methode solve ein Wörterbuch ergonomic_bias
an. Jedem Zug (z. B. "U", "U'", "U2") wird eine Punktzahl zugewiesen, wobei höhere Punktzahlen ergonomischere Züge anzeigen.
ergonomic_bias = {
"U": 0.9, "U'": 0.9, "U2": 0.8,
"R": 0.8, "R'": 0.8, "R2": 0.75,
"L": 0.55, "L'": 0.4, "L2": 0.3,
"F": 0.7, "F'": 0.6, "F2": 0.6,
"D": 0.3, "D'": 0.3, "D2": 0.2,
"B": 0.05, "B'": 0.05, "B2": 0.01,
"u": 0.45, "u'": 0.45, "u2": 0.4,
"r": 0.3, "r'": 0.3, "r2": 0.25,
"l": 0.2, "l'": 0.2, "l2": 0.15,
"f": 0.35, "f'": 0.3, "f2": 0.25,
"d": 0.15, "d'": 0.15, "d2": 0.1,
"b": 0.03, "b'": 0.03, "b2": 0.01
}
result = alphacube.solve(
scramble="D U F2 L2 U' B2 F2 D L2 U R' F' D R' F' U L D' F' D R2",
beam_width=65536,
ergonomic_bias=ergonomic_bias
)
print(result)
Ausgabe{
'solutions': [
"u' U' f' R2 U2 R' L' F' R D2 f2 R2 U2 R U L' U R L",
"u' U' f' R2 U2 R' L' F' R D2 f2 R2 U2 R d F' U f F",
"u' U' f' R2 U2 R' L' F' R u2 F2 R2 D2 R u f' l u U"
],
'num_nodes': 1078054,
'time': 56.13087955299852
}
GPU-Beschleunigung
Wenn Sie eine GPU haben, empfehlen wir dringend, das größte Modell für die bestmögliche Leistung auszuwählen:
alphacube.load(model_id="large")
result = alphacube.solve(
scramble="D U F2 L2 U' B2 F2 D L2 U R' F' D R' F' U L D' F' D R2",
beam_width=65536,
)
print(result)
Ausgabe{
'solutions': ["D F L' F' U2 B2 U F' L R2 B2 U D' F2 U2 R D'"],
'num_nodes': 903448,
'time': 20.46845487099995
}
Ausführlicher Modus
Zusätzlich können Sie alphacube.set_verbose()
aufrufen, um den Fortschritt zu verfolgen. Dadurch wird die aktuelle Suchtiefe in Ihrem Terminal angezeigt.
Modelle und Kompromisse
AlphaCube bietet die drei größten Modelle aus dem EfficientCube-Paper an: "small"
, "base"
und "large"
.
Obwohl Sie aufgrund ihrer höheren Genauigkeit erwarten könnten, dass das "large"-Modell am besten abschneidet (und "base" besser), ist dies in der Praxis ohne GPU nicht der Fall.
Tatsächlich erweist sich das "small"-Modell ohne GPU als die optimale Wahl für eine CPU-Laufzeit. Der Grund dafür ist, dass CPUs von Natur aus viel Zeit für die Berechnung auf einem DNN aufwenden. Das "small"-Modell erweist sich als das zeiteffizienteste, um ein bestimmtes Maß an Optimalität zu erreichen.
Obwohl es bei der Vorhersage der nächsten Züge weniger genau ist als die größeren Modelle, verarbeitet das kleinere Modell einen Batch von Zuständen viel schneller. Wenn Sie keinen Zugriff auf GPUs haben, liefert die Wahl des "small"-Modells mit einer ausreichend großen Strahlbreite im Allgemeinen die besten Lösungen innerhalb desselben Zeitrahmens.
Andererseits weist das größte Modell ("large") bei Einsatz auf einer GPU die höchste zeitliche Effizienz auf, wie in der folgenden Abbildung dargestellt.
CLI-Option
Wenn Sie es vorziehen, AlphaCube über die Befehlszeilenschnittstelle (CLI) zu verwenden, können Sie dies tun:
alphacube \
--model_id large \
--scramble "F U2 L2 B2 F U L2 U R2 D2 L' B L2 B' R2 U2" \
--beam_width 100000 \
--extra_depths 3 \
--verbose
Mit abgekürzten Flags,
alphacube \
-m large \
-s "F U2 L2 B2 F U L2 U R2 D2 L' B L2 B' R2 U2" \
-bw 100000 \
-ex 3 \
-v
Weitere Details finden Sie unter API-Referenz > CLI.
Hinweis: Bitte beachten Sie, dass die CLI-Option das Laden (und Entladen) des angegebenen Modells für jede Anfrage beinhaltet. Daher wäre diese CLI-Option am besten für die einmalige Ausführung des Pakets geeignet.