rubick

21
数学とアルゴリズムとの関りについて ~ルービックキューブの例~ by小倉拳

Upload: ken-ogura

Post on 05-Jul-2015

1.267 views

Category:

Technology


1 download

DESCRIPTION

tokkuni

TRANSCRIPT

Page 1: Rubick

数学とアルゴリズムとの関りについて  ~ルービックキューブの例~

by小倉拳

Page 2: Rubick

自己紹介・名前 小倉 拳 (挙ではない)

・twitter @catupper

・シンボルカラー 赤・種族 猫 遊び人・NPCAでの呼称 赤い人・好きな物数学プログラミング立方体

Page 3: Rubick

テーマ

数学とアルゴリズムの関わりの歴史や実情をルービックキューブのコンピューターの世界における数学的な考察を例に考えてみたい(願望)

注:本プレゼンテーションはプレゼンター的な諸事情で話題が変な方向に行きがちですあと途中からスライドが手抜きです

Page 4: Rubick

ルービックキューブとは

シンプルかつ難解なパズル

エルノー・ルービック教授作

日本では1980年頃に

ツクダオリジナル社の平社員の独断で

発売開始

ブームが数十年置きに来る

隅に置けない四角いヤツ

Page 5: Rubick

コンピューターとの関わり3Dであらゆる方向の回転があることから3D処理やシミュレートの実演として度々話題になる

シンプルさから1980年ころから解法アルゴリズムの論文が飛び交う

誕生から25年したつい最近、やっとアルゴリズムが確立された長いこと処理速度、処理効率における問題があった

Page 6: Rubick

アルゴリズムの進化

基本的には全探索のみだった

数学的に解こうという試みがなされ

ステップを踏んだり、形式を確立したり

あらゆるアルゴリズムが考え出された

その過程で人間が大会などで使っているアルゴリズムが発明された

Page 7: Rubick

解法の歴史

人類用の解ツクダ社開発のツクダ式上面→下面→中層

スピードキューブ主流のLBL方式下層→中層→上層

目隠しのための解法3 cycle method

3つづつ入れ替える

これらは人間の脳の処理能力内

Page 8: Rubick

あるソルブロボット

あるリトアニアの少年が開発したルービックキューブソルブロボットはLBL方式をで解くシステムになっている

彼のブログ要約「アルゴリズムについてはちょっと

 ググっただけだからあんまり早く

 はない」

引用:Andrius Sutas's blog

Page 9: Rubick

どうすれば手数を少なく解く

ことができるのか?

力技は面白く無いからさらに

効率的なアルゴリズムが必要。

Page 10: Rubick

アルゴリズムPC用アルゴリズムは先述の人間用アルゴリズムのように視覚を使って解くのにやさしい必要がない

数学的にややこしい計算が出てきたりしても大丈夫。

オーダーが鍵になってくるのでアルゴリズムの上でどのように数値が絡んでくるか知る必要があった数値化して解く必要があった

Page 11: Rubick

そこで群論を使って解くという考えがでてきた

Page 12: Rubick

群論的考察ルービックキューブの各部位に名称をつける

R,L,U,D,F,B面 RUF(頂点) DU(辺) etc..

回転においてどのように各部位が入れ替わるか

分析

例:R面を時計回りに回転RFUがRUBに移る

向きが120度回転する

 →向きという要素もある 前 右

Page 13: Rubick

回転における分析

回転するとパーツの位置や向きが変わる各パーツの入れ替わりは写像の形をとっている

これらの写像はすべて全単射で合成可能

崩れた状態から目的の状態までの写像を

回転の写像の組み合わせであらわす

Page 14: Rubick

数値での処理各回転の場所、向きの変化、入れ替わりの関数を数値化する

各場所を番号付けしてそれらの移動を基に数値化

今回は移動後の数字で自分より左がわで自分より小さい数の個数で場合分け

0×1!+1×2!+2×3!+4×4!+1×5!+6×6!+7×7!=39950

1 2 3 4 5 6 7 8

2 6 3 4 1 5 7 8

例:

Page 15: Rubick

数値化からの考察

このような数値化を施すことでルービックキューブの全体像が見えてくるキューブの組み合わせの数は

(2^11)*(3^7)*12!*8!/2通りある

キューブの回転は順序を入れ替えること

ができない(非可換)ので少ない回転数

で多くの場合に到達できる

Page 16: Rubick

解法を見つけるにはこれらの入れ替わりの組み合わせをパターンごとに

分類して段階を踏んで完成に近づける。

人間用解法は場所単位で段階を踏むがコンピューター用解法は手順(動き)で段階を踏む例:{右、左、上、前面の回転だけで出来る状態}

 → {それ以外の回転で作ることの出来る状態}

→ {全部完成した状態}

今までいくつかのアルゴリズムが発見されている

Page 17: Rubick

解法の歴史コンピューター用の解放シスルウェイトのアルゴリズム 動きでグループ分けして   全探索  最大52手

コシエンバのアルゴリズム

 少ないグループわけをして  A*検索  最大40手

リチャードのアルゴリズム

場所でもグループ分けして A*検索   最大22手

Two-Phase-Argorithm

上3つのアルゴリズムの総称 群論関係

 

Page 18: Rubick

ソルブロボット事情

ソルブロボットの大半は先述のアルゴリズム

人間の手とはちがい早く動かせない代わりに

短く解く

アルゴリズムをいかに早く処理するかが課題最近では1秒かかる程度

回転中に処理することでロスを回避

スピードでは人間に叶いそうにない

Page 19: Rubick

残る課題サイズに関係ない一般化オーダーがN^2logNとなるアルゴリズムは見つかっている

最短手数探索が課題

ソルブロボットの高性能化技術面の課題

スピード

アルゴリズムだけが課題じゃない!

実用のためのアルゴリズム

Page 20: Rubick

ルービックキューブは奥が深い!PCの処理能力をもってしても解決はできないほど課題が沢山有る。

これを解決するためにも数学の技術やアルゴリズムのレベルの向上が必

要。プログラムを組むためにも

アルゴリズムは大事である!それに応じて数学も大事である!

結論

Page 21: Rubick

参考資料

 Andrius Sutas's blog

 The Q cube algo

「群論」におけるGoogle検索結果

 その他群論関連の本

 2ch数学板

 Yahoo知恵袋の人々