ルービックキューブを自力?で解く(失敗)

2025-12-19

こんにちは MJです。

この記事では、ルービックキューブを強化学習の手法であるQ学習を用いて解いてみました!

【背景】塾で煽られる

 ルービックキューブを揃えられるバイト先の塾の先輩が、塾のルービックキューブを持って言いました。

「誰か他に解いてくれる人いないかな~(圧)」

それを聞いたMJの闘志に火が付く🔥

よっしゃ、解いてやろうじゃぁ、ありませんか

しかしMJ君は理学部です。

解法暗記が大っ嫌い

そのため3x3のルービックキューブも自力で2層目までは揃えれますが、それ以降は全くできません

ここに来て大問題…

ではどうしようか…

頑張ってルービックキューブとにらめっこしたって、これまで解法は出てきませんでしたし、かといって群論の勉強はしたくありません。(一応、群論たるものでとけることは知っています。)

そこでMJ思いつく…

強化学習のAIに解かせればいいジャマイカ!

作ったAIに解かせたなら、自分で解いたも同然ですよね?(圧)

むしろそこから法則性を導けばいいのです。

実装

https://github.com/jellYTM/rubik_simulater_python?tab=readme-ov-file

まず2×2×2と3×3×3のルービックキューブに、ぞれぞれ以下の2つのクラスを実装しています。

rubik_NxNxN

  • 2次元ndarrayでルービックキューブの状態管理(下図参考)
  • ルービックキューブの操作(R, R’, L, L’, U, U’, D, D’, F, F’, B, B’)とそれに対応する状態変化の対応
  • ルービックキューブの2次元マップの表示
  • ルービックキューブの2次元マップの保存・読み込み

RubikCubeCamera

  • ゲームエンジン Ursinaを用いた3D描画(下図)
  • テンキーを想定した、ルービックキューブの操作
  • 強化学習モデルによる自動操作
  • 対応する2次元マップの読み込み・保存

主にrubik_NxNxNクラスのおかげで、強化学習のためのシミュレーションができるようになりました。これを基に強化学習を実装していきます。

Q学習

計算時間・リソースの問題から今回は2x2x2のルービックでのみ、実装しています。

3x3x3のルービックとまでなるとDQNが必要になってきますね(by gemini)

Q学習について簡単に説明をしておきます。

AIが次の行動を決める時、元にする情報として“価値”があります。

要は、行動する“価値”の高い行動をすればいいわけです。

そのためAIはそれぞれの行動の価値を知っておくことで、うまく動くことができるわけです。

Q学習ではある時刻tの状態から行動aを行ったときの価値をそれぞれ計算し、シミュレーションを行う中で、本当の価値というものを探索します。

詳しくは「ゼロから作る Deep Learning④ 強化学習編」をご覧ください

今回は6面がそろったら報酬として+100を、1操作加えるごとにー1の報酬を与えています。

結果とまとめ

大失敗!!!!!!!

AIに操作させるとずーっとそろいません

今回、初めて強化学習をしっかり勉強し、実装してみましたが、まだまだ勉強が足りないようです。時間に余裕があればDQNもやってみたい

ぜひ皆さんもこのルービックキューブ・シミュレータを使って強化学習に挑戦してみてください