
こんにちは 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もやってみたい
ぜひ皆さんもこのルービックキューブ・シミュレータを使って強化学習に挑戦してみてください


