Skip to main content

AlphaCube

AlphaCube is a powerful & flexible Rubik's Cube solver that extends EfficientCube. It uses a Deep Neural Network (DNN) to find optimal/near-optimal solutions for a given scrambled state.

[!NOTE] 🎮 Try the interactive demo: alphacube.dev

Use Cases

  • Solve any scrambled Rubik's Cube configuration with ease.
  • Find efficient algorithms, optimizing for either solution length or ergonomic move sequences.
  • Incorporate solving capabilities into custom Rubik's Cube applications and tools.
  • Analyze the statistical properties and solution space of the Rubik's Cube.
  • Illustrate AI/ML concepts such as self-supervised learning and heuristic search.

Installation

Open a terminal and execute the following command:

pip install -U alphacube

Usage

The first time you run alphacube.load(), the required model data will be downloaded and cached on your system for future use.

Basic Usage

import alphacube

# Load a pre-trained model (defaults to "small" on CPU, "large" on GPU)
alphacube.load()

# Solve a scramble
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, # Number of candidate solutions to consider at each depth of search
)
print(result)

Output

{
    '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,        # Total search nodes explored
    'time': 1.4068585219999659 # Time in seconds
}

Better Solutions

Increasing beam_width makes the search more exhaustive, yielding shorter solutions at the cost of extra compute:

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)

Output

{
    '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
}

beam_width values between 1024 and 65536 typically offer a good trade-off between solution quality and speed. Tune according to your needs.

GPU Acceleration

For maximal performance, use the "large" model on a GPU (or MPS if you have Mac).

alphacube.load("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)

Output

{
    'solutions': ["D F L' F' U2 B2 U F' L R2 B2 U D' F2 U2 R D'"],
    'num_nodes': 903448,
    'time': 20.46845487099995
}

[!IMPORTANT] When running on a CPU, the default "small" model is recommended. The "base" and "large" models are significantly slower without a GPU.

Please refer to our documentation for more, especially "Getting Started"

Applying Ergonomic Bias

The ergonomic_bias parameter can influence the solver to prefer certain types of moves, generating solutions that might be easier to perform.

# Define desirability for each move type (higher is more desirable)
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)

Output

{
    '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
}

How It Works

At its core, AlphaCube uses the deep learning method from "Self-Supervision is All You Need for Solving Rubik's Cube" (TMLR'23), the official code for which is available at kyo-takano/efficientcube.

The provided models ("small", "base", and "large") are compute-optimally trained in the Half-Turn Metric. This means model size and training data were scaled together to maximize prediction accuracy for a given computational budget, as detailed in the paper.

[!NOTE] 📖 Read more: "How It Works" on our documentation site.

Contributing

You are welcome to collaborate on AlphaCube! Please read our Contributing Guide to get started.

License

AlphaCube is open source under the MIT License.

Release files for alphacube 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for alphacube 0.1.6
File Interpreter ABI Platform
alphacube-0.1.6-py3-none-any.whl Python 3 none any Details

Release files / alphacube-0.1.6-py3-none-any.whl

Download URL alphacube-0.1.6-py3-none-any.whl
Size 27.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
339a426d1b7f5977051e5a3d16121a6e63b4f090baf06c894f4c05ec7bdc48a7
BLAKE2b-256 checksum
How to use checksums
3d76ac76b3d5a8eb2292d95c461706e95081092bd3ea0163c0d9f97c849d26c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.1

Release history Release notifications | RSS feed

This release

0.1.6 This release

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page