人はなぜ自動プレイヤーを作りたがるのか

人はなぜ自動プレイヤーを作りたがるのか 趣味数とは?
人はなぜ自動プレイヤーを作りたがるのか

なして、この話題?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

こんにちは。惰性慣性です

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

こんにちは。張り出し記事にも律儀に付き合ってる働き者なゆめで〜す

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

律儀に付き合う? 元々はお前さんがいてきた話題だろうが……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そだっけ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

忘れたんかーい!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そんなことより、内容をはよ

(☝キレたふりをして誤魔化し? 略してキレゴマ?)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

何とも逆ギレ的だが、まあいい。本記事は前回記事『趣味数って何?中にて出たお前さんの質問に対する回答なんで、まずはお前さんから経緯を説明してもらわんとな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

うっ。それは……えっと……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ん? もしや……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

何だっけ? てへぺろ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ほほう。もう忘れとる、と。では、前回記事を読み直しの上、今回記事に至る流れをしっかり思い出すように。ほれ

(☝と言いつつ、前回記事(下記)を表示)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ひぇ。しんど……

(☝熟読するふりをしてじつは雑に斜め読み)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

……

(☝横から眺めて前回記事の内容を再確認)

(☟読み終わった直後、いきなり)

☝賀知夢未: 
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ふう

(☝上記の表情&発言&ポーズで発散して復活?)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

だから、その顔はめろと言っとるじゃろがい!

(☝夢未さんが前回記事でもばなな顔を連発した結果からの反応?)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

仕方ないな。それはそれとして、経緯の説明を頼む

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

えっと。趣味数ブログってのは、パズルやゲームをネタにしておっちゃんが好き勝手しゃべるとこで……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

語弊のある言い方だが、あながち間違いでもないので、まあ良しとしよう……。それで?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

好き勝手ってゆっても、それなりにおっちゃんの好みがあって、その一つがなんてゆ〜かアレで……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

誤解を招きそうな言い回しではあるが、まあいい。で、アレとは?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

えっと、コンピューターが遊び人の真似っこするきしょいナニカ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ゲームやパズルの自動プレイヤーのことだな。ときに、プレイヤーすなわち『パズルやゲームで遊ぶ人』と言ったかったんだろうが、『遊び人』はちと意味が違うのではないかな? 加えて、『気色悪い』ってのは、お前さんの個人的な感想に過ぎんと思うが……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

それそれ、自動プレイヤー。でもって、ゲームの自動プレイヤーさんは、トランプゲームとかを一人で遊びたいときにお相手してくれるんで、割と良い子なんだけど……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

お前さんでも直ぐに納得できるような実用性がある、と

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

でもでも、パズルの自動プレイヤー君は、パズルを勝手に解いちゃって人の楽しみを奪うなヤツ!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そんな使い方をしたら確かに嫌なやつだが、そういうことではない

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

とかなんとかおっちゃんが言うから、『ならなんなの?』って感じで。そしたら、『作りたいから作る』、『ヤりたいからヤる』みたいな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

『やる』を『ヤる』と書くとニュアンスが悪いゆえめて欲しい

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

それはそれとして、研究者が自動プレイヤーを開発する動機や目的は必ずしも実用性に限定されない、と言いたかったんだが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そんな流れで、『じゃあなんで作るん? kwsk(くわしく)』っていたら、『面倒臭いから先送り』って結論になったような

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

『面倒臭い』のが理由ではなく、内容が『少々長くなる』および『ブログ紹介記事に書くには深入りしすぎ』なんだが。更に、『先送り』ではなく『別記事として切り分け』!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そうともいうねっ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

いやいや、全く違うんだが……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まあ、ここまでの概説、お前さんにしては頑張った方か?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

どゆ意味?!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ぐぬぬ……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ではこの辺で、本題⸺研究者がパズルの自動プレイヤーを開発する動機についての考察⸺に入るとしよう

結局のところ、作りたいから作る……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まず言葉の使い方なんだが、パズルの自動プレイヤーは、パズルを自動的に解く者ってことで自動ソルバー (automatic solver)、あるいは短縮して単にソルバー (solver) と呼ぶことが多い

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

カタカナ用語ウザす。ソルバーなんて言葉、聞いたことないし

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ソルブ (solve)』は『解く、解決する』という意味の英単語で、それを『解く者』に変化させたのが『ソルバー (solver)』だ。『走る』という意味の『ラン (run)』が変化して『走る者、走者』という意味の『ランナー (runner)』になるのと同様

参考または蛇足: 綴りは b ではなく v ですので、本当はソルブ⇒ソルヴ、ソルバー⇒ソルヴァーと書くところなのかも知れません。が、多くの論文、解説記事等では『ソルバー』と書いている感触です。加えて、『ソルヴァー』といった書き方は、そこはかとなく衒学的な印象が……。☜『げん学』という単語を使うこと自体が衒学的ですか……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

英語の意味を説明されてもウザさが減るもんじゃなし〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

で、あるか。そこは我慢して欲しい

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

……本題に入るが、最初に言っておく。動機の根本を追求すると、結局のところ『作りたいから作る』

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

パズルやゲームの自動プレイヤーはまあ、研究分野的には人工知能 (AI, Artificial Intelligence) なんだが。この分野の研究者には、古くからの根源的な知的欲求がある

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

読めた! もろたで工藤

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

……しかしてその欲求とは『知能とは何か?』、『コンピューターはどこまで人間の知能に近づけるか?』、『はたまた越えられるのか?』

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

『知能とは何か?』、『コンピューターはどこまで人間の知能に近づけるか?』等を追求する一環として、人間ソルバーの知的行為を摸倣する自動ソルバーを開発したり、その性質を調べたりしたくなるのだな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

でもそれって、『知りたいからやる』ってこと。要するに『やりたいからやる』

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

左様

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

知能とは何かを考える知能……何とも自己言及

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

む?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

類する状況としては、①『意味』という単語の意味、とか、②数学を使って『定理や証明といった数学の基本構造』を考察する数理論理学、などなど。正にメタ認知じつメタ循環的

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ほよよん。ばなな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

またもやその顔!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ふう

(☝上記の表情&発言&ポーズで発散して復活?)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

メタいとかなんとか、わけわかんない話はおいといて。コンピューターが人間の知能を超えるなんてこと、あるん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

コンピューターが最初に実務適用された分野として例えば、経理というか会計処理なんてのがあるぞ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そりゃ、単なる足したり引いたりに限れば速いのかもしんないけど……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そうかな? では、いかにも高度な知能という感じの例として、チェス、囲碁、将棋といった古くからある奥深いゲームの世界チャンピオンってのはどうだ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

確かに、そゆのは『いかにも』かも。名人級になると、何がどうなってるのかさっぱりわからん、ってレベルで強いし〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そこでだ。まずチェスだが、1990年前後にコンピューターが世界チャンピオン級に勝つ『こともある』ようになった。そして2005年頃から後はもはや、人間がコンピューターに勝つのは難しくなってきているとか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

む?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

囲碁は長らく、チェスよりコンピュータープレイがずっと難しいと考えられていたんだが。2010年代に深層学習を活用するブレークスルーがあり、2016年辺りからコンピューターが世界トップ級のプレイヤーに勝つようになってきている

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

むむ……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

将棋はチェスに似たゲームだが、ルール上、チェスより難しいと考えられてきた。加えて、将棋はほぼ日本限定ゆえ研究者もほぼ日本限定的となり、世界的に遊ばれているチェスに比べコンピュータープレイヤーの進化が遅かった面もある。しかしついに、2017年辺りから名人級に勝てるようになってきたという。上述した囲碁分野での深層学習活用法も援用されとる模様

参考: 詳しくは、『コンピューターチェス』、『コンピューター囲碁』、『コンピューター将棋』などでインターネット検索を是非

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

むむむ。コンピューターやばすぎ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

更に『知的なトーク』についても、お前さん自身が前回、『AIひろゆきが進化したら本人は不要になるかも』的な発言をしていたと思うんだが

☝AIひろゆき云々うんぬんの話は、前回記事『趣味数って何?の『趣味数ブログの主な話題』節中にある『ロジック系パズル自動生成の話題から派生したAI生成に関する脱線』の箇所を開くと出てきます

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

うっ。そうだった……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

でもでも、体を使う仕事とか職人の手作りとかがどんどん機械に置き換えられてきてるのに。頭を使う仕事までコンピューターに取られちゃったら……。みんな失業じゃん。ホームレスの嵐じゃん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

現状では、全ての仕事が機械とコンピューターに置き換えられるところまでは行きついていないと思うが。ひょっとすると将来、次第にその方向になるのでは、という危惧はあるな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

う〜ん。毎日が日曜日状態に突入してるおっちゃんはまあ、いいかもだけど。残りの人生が長いあたしとか、一体どうすりゃいいっちゅうねん!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

個人レベルで悩んでも詮無い問題だと思うぞ。それにアレだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

アレって何よ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

今後も自動化技術が良い意味で進化し、核融合発電等によりエネルギー問題も解消したら。面倒な仕事は機械とコンピューターに任せ、人類は皆、悠々自適状態、てな未来もありえんことではないし

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ならいいけど。でもでも、仕事を任せてるコンピューターが暴走したらターミネーターの世界、かも知れないじゃん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

過度に自律性を与えたり、どう変化するか予測困難な『自我』を与えたりしてしまうと、そうならんとも限らん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

が、そういった社会学未来編的な領域には詳しくないし、わしが進めたい趣味数ブログの方向性でもないんで、この話題は終了

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

。ケチ

<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>

惰性慣性

(☟趣味数的でない要求をスルーしつつ)

さて、ここで本件を終わらせると身も蓋もないので、もう少し具体的な動機を挙げてみるぞ

賀知夢未 お手上げ
☝賀知夢未: 
へぇへぇ
(☝社会学未来編(?)的な話の続きを終了されて、ちと不満?)
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

でも、まっ、ようやく本当ほんとの本題、ってとこか

具体的な動機1. パズルの答えがあるか知りたい

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まずは……。ソルバーを作る動機の一つとして、解ける問題かどうか判定したい、というものがある。堅苦しく言うと『解の存在判定』だな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

むむむ。解けるか解けないかの判定って、もしや……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

解けない問題なんてもんがあるんかい?! そんなんインチキじゃん!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そこか?!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

普通にある、というか、手抜きで作ると結構そうなるぞ。紙と鉛筆パズルロジック系、例えば数独ナンプレでも、何も考えずに表出数字を適当に散りばめると、高い確率で、解がゼロだったり複数あったり、って結果になる

数独/ナンプレ概要
ナンバープレイスの例題とルール概要
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

む。表出数字って、前回記事のとき聞いた気もするけど、何だっけ?

☝前回記事『趣味数って何?』の『趣味数ブログの主な話題』節中にある『パズル雑誌系の各種パズルに関する数学的な話題の例』の箇所を開くと出てきます

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

表出数字ってのは、パズル作家/愛好家界隈で使われる用語らしい。意味は、数独/ナンプレの問題で最初から書いてあるヒントの数字

数独/ナンプレの表出数字
数独/ナンプレの表出数字
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そっか、そっか。表出数字はわかったけど……。適当に作ると答えが無い問題になりがちだとすると、パズル雑誌社って、そういうインチキ臭い問題も出題してるん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

いやいや。そんなことはない。真っ当なパズル雑誌社なら、解が丁度1つになる問題のみ出題するという暗黙のお約束があり、律儀に遵守しているはず

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

誤って解がゼロまたは2つ以上の問題を出題してしまうことも稀にあるのだろうが……。わしがニコリ社のものを中心に多くのロジック系パズルを解いてきた経験では、解が丁度1つ以外の『お約束破り』問題に遭遇した記憶は無い

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

へ〜。そんなお約束があるんだ〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

まあ、答えが幾つもあるのは、別にそれでもいいって思うけど

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

解がゼロの場合だけでなく、2つ以上の場合も排除されている件については、なぜか昔からそういうものだとしか……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

江戸時代からある詰将棋なるパズルでも、既に『複数解⸺いわゆる余詰あり⸺問題はよろしくない』との評価だったらしいので、洗練されていない不完全な問題との印象だったのだろう

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

あっそ。まっ、謎の伝統ってことで

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そうだ。急にひらめいたんだけど、答えが幾つもあると、解答欄が長っちょろくなってウザ、とか? プレイヤーさんの正解チェックが面倒になってウザ、とか?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ありえるな。っと、わしも急に思いついたんだが、解が複数ある問題は解き味が悪い傾向があるのかも知れん。これは……吟味が必要だな

☝パズルの『解き味』については、前回記事『趣味数って何?』の『趣味数ブログの主な話題』節中にある『解き味に関する細かすぎて伝わらない(?)話』の箇所を開くと、多少の怪しい解説もどきが出てきます

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ふ〜ん。頑張ってね〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まるで他人ひと事?!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

正にそのとおり!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ぐぬぬ。正論ではあるが……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

んなこたぁどうでもいいとして、適当に問題を作るとお約束破りになりがちだとすると、パズル雑誌の問題はどうやって作ってるんだってばよ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そこがパズル作家の腕の見せ所ってやつだ。逆に言えば、いい加減な配置で真っ当なパズル問題をサクサク作れるのなら、そもそもパズル雑誌系のパズル作家自体が不要で存在しとらんわけで

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

なお、デキるパズル作家は、お約束遵守の基本に加えて、難易度調整や解き味の追求なども行うはず

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そゆことか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

じつは更に、万全を期すため、問題作成者以外の上級プレイヤーがチェック的に解いて、解の存在と一意性を確認している場合が多い模様。併せて難易度の評価もな。雰囲気としては恐らく、解き味の評価まで

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

特に、読者から投稿された問題は、ぱっと見では品質が良くわからんわけで、解きチェックはほぼ不可避と思われ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

なんと。読者投稿の問題なんてあるんだ〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

割と

注: 惰性慣性親父おやじはパズル雑誌社等の関係者ではありませんので、一読者としての予想を述べているだけと思われます。このため実態とずれているかも知れませんが、ご了承の程、何とぞよろしくお願い申し上げます

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

実際のところ、パズル雑誌読者の大半は解き専だと思われる。まあ、わしもだが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ところが、少数派ではあるものの、『パズルを解くのも良いけれど、自分で作りたい』的な『もの作り志向』の人もいるんだな、これが。パズル作家の卵というか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

もの作り好き好き人間っているよね

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そんな人々が、雑誌社の問題募集に応じてくる。にんのパズルだと、思いのほか多くの問題が集まる感触

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

パズルの問題なんか募集しても、ちっとも集まらないんじゃ? なんて一瞬思ったけど、趣味のパズル作家ってそれなりにいるんだねぇ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

中には、パズル作りにどっぷり浸かって、高品質な問題を多数投稿する人が現れてきたり。すると、パズル雑誌社がスカウトしてお抱えにしたり

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

パズル作家誕生秘話

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

パズル雑誌社がスカウト云々うんぬんは単なるわしの想像だが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

後付け誕生秘話かい!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

読者投稿云々うんぬんはさておき、お約束破り問題の排除は、現状ではパズル作家やお約束チェック要員が対応していることが多いと思われる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

こういった処理をコンピューターで行うのが自動ソルバーとなる。以下では、紛らわしい場合を除き、自動ソルバーのことを単にソルバーと呼ぶ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

数独/ナンプレは世界的に有名なんでソルバーの検討が進んでいるが、それ以外のロジック系パズルでも、パズル自体の知名度見合いでソルバーに関する報告や論文等が増えてきている感触

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そんなん作ったら、人間のお仕事が奪われちゃうんじゃ……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

既に言ったとおり、そういった社会学的な考察は当ブログの範ちゅう外だ。そもそも、わしはパズル雑誌社等の実情をほとんど知らんしな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ケチ〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

(☟趣味数的でない要望を完全スルーしつつ)

なお、お約束破りチェックでは、解があるかどうかだけでなく、解の一意性判定も行う必要がある。解が2つ以上ないことの確認だな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ソルバーは解が無ければ『なし』と答え、解があればその1つを解答するが、全ての解を列挙する処理形態にすることもできるので、一意性判定にも使えるわけだ。といっても、一意性を確認するだけなら全解を求める必要はない。二つ目の解が見つかった時点で『お約束破り』と分かるからな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ふ〜ん

(☝細かい話はどうでもいい?)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

考えてみると、ソルバーは投稿問題のお約束遵守チェック等に使えるわけだから、実用性があると言えんこともないな。利用局面はかなり限定的だが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

でもでも、そゆのって人の仕事を奪う使い方じゃ……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

先程も似たような発言をしていたな⸺

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まあ、その辺は利用する人の考え方次第

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

出たよ。兵器にも使える技術を開発した科学者の言い訳、的な。原子力とか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そういった話は古くからあるが……。16世紀に自動編み機を発明したものの『手編み職人の仕事を奪う』論争を引き起こし、中々商用展開できなかったウィリアム・リー (William Lee) 先生(発音)とか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

19世紀にダイナマイトを発明、商用展開して巨万の富を得たものの『死の商人』といったそしりを受け、そのイメージを払拭する等のため、得た富を突っ込んでノーベル賞の財団を創設したアルフレッド・ノーベル (Alfred Nobel) 先生(発音)とか。そう言えば、ノーベル賞に数学が含まれない理由、なんて話もあったような

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そこんとこ、kwskくわしく

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

いやいや。分野が機械工学や物理、化学になるんで、本ブログの主題とはちと違うし。科学技術の商用化に伴う光と影といった社会面は更に激しく違う。よって割愛

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ちっ、乗ってこないか〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

舌打ちかい!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

……まあいい

具体的な動機2. パズル問題の自動生成に使いたい

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

さて、ソルバーができたら、パズル問題の自動生成にも繋がる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

え〜っ?! 問題を解くのと作るのは全然違うっしょ!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

素朴にはそう思うだろうが、実は密接な関係がある。が、その前に⸺

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

例によって言葉の使い方だ。パズル問題等を自動生成する仕組みは、パズル問題を自動的に生成する者ってことで自動ジェネレーター (automatic generator)、あるいは短縮して単にジェネレーター (generator) と呼ぶことが多い

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

またもやカタカナ用語とかテラウザす。ジェネレーターなんて言葉、聞いたことないし……って、あれっ? なんか聞いたことあるような気も……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ジェネレーターは『何か』を生成する者/仕組みなんで、『電気』を生成する装置、すなわち発電機という意味で使われることが多い

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

更に、『何かを生成する者』は如何いかにもな単語なんで、SF系の小説、アニメ、ゲーム等でもたまに出てくるかも知れん。何らかのエネルギーやパワーを生成する、といった感じか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ん。発電機は初耳だけど……。アニメとかゲームに出てきたから聞いたことあるのかなぁ……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ともあれ、『ジェネレート (generate)』は『生み出す、生成する』という意味の英単語で、それを『生成する者』に変化させたのが『ジェネレーター (generator)』だ。以下では、『パズル問題』を生成するコンピューター処理という限定的な意味で使うが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

だから、英語の意味を説明されても、ますますウザくなるだけだっちゅーの

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そこは冷静に

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

(☟謎の言い回しを無視して)

ジェネレーターの作り方としては、少なくとも2通りの方法がある。一つめは、パズル作家の作り方を摸倣する方法。二つめは、コンピューターの計算パワーに頼ったゴリ押し的な方法で、力まかせ探索 (brute-force search)、しらみつぶし探索 (exhaustive search) あるいは generate and test search に似た手段を用いる

注: 力まかせ/しらみつぶし探索は本来は全ての解を探し出すための方法と考えられますが、パズル問題の自動生成ではほとんどの場合、数理的に厳密な意味での全問題を生成できるようにする必要はありません。そこで、抜け漏れが無いように細心の注意を払う点に関しては適当に手抜きして、むしろ生成効率が上がる方向に力を入れたりします

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

。パズルの作り方なんて、きっとパズル作家の虎の巻じゃん。そんなん教えてもらえるわけないっしょ!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そのような状況はありがちだが、公開されていることもあるぞ。例えば数独については、ニコリ社の『パズル通信ニコリ』および『数独通信』編集長による直々の作り方解説動画がある。なお、パズル通信ニコリは、わしがかつて愛読していたパズル雑誌だ

参考: 上記動画で解説されている安福先生は、動画UP当時は編集長でしたが、現在(記事執筆時点)では社長に就任されていますね

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そんな雑誌を愛読してたんだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そこかい!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ってか、「愛読して」ってことは、今は読んでないわけ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

うーむ。何年前だったか……近くの書店で販売されなくなってしまってな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

なら、遠くの書店に行くなり amazon とかでポチればいいじゃん!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

それはそうなんだが、同時期に仕事も忙しくなったりしてな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

へ〜。給料泥棒でも忙しくなることあるんだ(www)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

むっ!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

でもでも、定年退職して暇になったときに再開すればよかったんでは?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

その頃からは、ロジック系パズル以外も含めた数理的なパズル/ゲーム全般の調査検討に力を割いてきとるんでな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

あっそ
(☝成り行きで話を引っ張っただけで、じつはどうでもいい?)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

話がれたが、パズル作家の解き方は、公開されたとしても、細かいステップがアバウトというか雰囲気だったり恣意的だったりすることもある。そういった箇所を詰めないといけないんで、あっさり摸倣できるとは限らん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そうなん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

誰がやっても寸分たがわず同じことができるレベルに手順を詳細化、具体化しなければ、コンピュータープログラムを書くことはできん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

面倒めんどくさ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

左様。パズル作家の作り方が公開されている場合でも、詳細化の手間が容易ではないことがありえる。加えて、作り方が公開されていないパズルも多々ある。公開されている数独/ナンプレはむしろ例外的かも知れん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

なお、パズル作家の模倣をする方法がうまくいく場合は、ソルバーは使わなくて済むだろう。とはいえパズル作家の方法でも、問題を作成する作業の中に、問題を解く作業が微妙に入り混じっている感触ではあるが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

へ〜

(☝細かいことはどうでもいい?)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そんなこんなで第一のパズル作家摸倣式が駄目なときは、第二の方法、すなわち力まかせ探索系の方法に頼るのがよくあるパターン。ソルバーが必要になるのはこちらの場合だな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

何か名前からして手間がかかりそうな悪寒

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まあな。単純明快な方法ゆえ色々なパズルに適用可能なんだが、パズル毎のルールの特徴に合わせて工夫しないと、非常に重いというか、なかなかお約束遵守な問題が出てこないことになりがち

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そんなアバウトなこと言われても、パズルを解くやつを使ってパズルを作れるって話につながらないんだけど

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

その点だな。ざっくり言うと、次のような流れだ⸺

ソルバーを活用して力任せ的にパズル問題を生成する方法
パズルの盤面ルール等、単純で基本的と思われる一部ルールに沿って適当な問題候補を作る
このままではお約束破りかも知れないので、①で作った問題候補に対してソルバーを使い、解の存在と一意性をチェックする
上記②でチェックした結果、解が一つならお約束遵守問題が1個できたことになる。そうでない場合、その問題候補は失敗なので捨てて①からやり直す
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

なんてゆっか、①で読者投稿問題を集めてきて、②でお約束チェック要員が調べてお約束OKな問題だけ残すって感じ。でもって、②はきちんと解けるかどうかのチェックだから、人の代わりにソルバーってのを使うのはまあ分かるけど⸺

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

①で問題候補を作るとこが、結局、謎のままじゃん!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

うむ。気持ちは分かる。問題作成ではなく問題『候補の作成、ってところがポイントなんだが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ナニ、その微妙すぎる違い! わけがわからないよ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

問題候補の作成では、パズルの制約条件的なルールに適合しているかどうかはあまり考えないで雑に作る。といっても、どう作るかの詳細はパズル種別に依存するんで、ここでは数独/ナンプレの場合を例にとって説明しよう

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そこが肝心なとこっぽいんで、4649ヨロシク

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

む。4649は素数の臭いがする

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

出たな。妖怪素数なめ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

なんじゃそりゃ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

んなこたど〜でもいいから続きをはよ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

了解だ。数独/ナンプレの問題は、9×9のマスの中に適当な個数の表出数字を散りばめた形になっている。これが盤面ルールと考え、この点は遵守して候補を作る

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ありがちな問題では表出数字の個数は20から30程度ゆえ、まずはこの個数をランダムに決める。表出数字が少ない方が難しい問題になる傾向があるようなんで、表出数字の個数は人間が指定してもよいかも知れん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ランダムとな?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

サイコロを振って決める感じだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そゆことか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

コンピュータープログラム中では、疑似乱数という技法を使ってサイコロ振りを摸倣するのが普通だが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

(☝コンピュータープログラムの詳細にはまるで興味がない?)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

で、表出数字の個数を決めて、例えば25個になったとしよう。そうしたら、表出数字が25個になるまで盤面にランダムに数字を置いていく。具体的には、9×9=81個あるマスの中から、ランダムに数字を記入するマスを選ぶ。次に、1から9までの数字を一つランダムに選び、先に決めた記入マスに書く。これを25個になるまで繰り返す

注: ランダムにマスを選ぶと、既に数字を記入したマスと同じマスが重複して選ばれる可能性があったりしますが、そういった細かい話は、数独/ナンプレ問題の自動生成法といった個別パズル記事で扱うとのこと

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

さすれば、盤面に表出数字が25個入った問題候補の出来上がり

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

それなら候補ができそうって雰囲気は感じたけど、すっごく適当な作り方!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そのとおり。雑だからこそ簡単に作れる。これが正に、問題そのものでなく問題の候補を作るということ。で、雑作りの候補がお約束遵守の正しい問題になっているかどうかは、ソルバーを使って確認すればよいわけだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

それはいいんだけど、サイコロって1から6なのに、1から81とか1から9とかから1つ選ぶって、どないすればいいねん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そこんとこが怪しいから、おっちゃんがさっき説明したやり方は却下!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

これはまた妙なところを気にしとるな。既に述べた疑似乱数を用いれば、選択する数字の範囲が1から81でも1から9でも比較的容易に対応できるんだが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そうやって謎の技を使えばできるとか言って誤魔化そうとするし。そういうの、良くないと思います

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

別に誤魔化しではなく事実なんだが……。うーむ。正攻法で疑似乱数の簡明な説明をしようとすると長くなるし。かといって、端折はしょった説明では『ばなな顔』とかだろうし。……っと、そうだ。現実のサイコロを用いる路線でお茶をにご⸺ではなく、とりあえずは納得してもらうことにするか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ん? 現実のサイコロ? って……物理サイコロ(www)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

その物理サイコロでも、1から9といった場合に対処できるって話

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

だから、物理サイコロは1から6までだとあれほd!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

人生経験の足りない(?)お前さんは普通の6面体サイコロしか知らんようだが、世の中には他のタイプのサイコロが色々ある。少なくとも、4面体8面体10面体12面体20面体100面体があるぞ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

うそでしょ! 何それ?!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

インターネット検索してもらえば商品の写真が出てくるが、わしもその昔に買ったものを持っていたはず。確か机の引き出しに……

(☝と言いつつごそごそと探す親父おやじ)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

む…………

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

……あった、あった。ほれ、実物

惰性慣性親父おやじが昔買った各種サイコロ
100面、20面といった各種サイコロ
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

マジだ……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ってか、このって何に使うん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

テーブルトークRPG (TRPG) 等で使うようだな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

。おっちゃんはそんなんやったことあるんだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

若かりし頃に多少やっただけで、それから〇十年やっとらんが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

〇十年前に使ってたヤツがよく残ってたね。物持ち良すぎ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

かさ張るものではないし、形が面白いんでコレクター的にな。あとたまに乱数的な数値が欲しいときに10面ダイスを使うことがある

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ところで、なんで急に変なサイコロの話に振ったん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

サイコロは振るものゆえ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

マジな質問をしてるのにしょうもない駄洒落回答とか、サイアク

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

……真面目な話に戻ると、サイコロで乱数の話をしたら、お前さんがサイコロはあくまでも1から6という点に固執していたようなんでな。コンピューターの中だけでなく、現実の世界でも0から9といったサイコロがあることを理解して欲しかったわけで

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

例えば数独/ナンプレのマスに1から9までのどれかの数字をランダムに入れたければ、物理でやるなら10面ダイスを使えばよいわけで。なお、コンピュータープログラムで疑似乱数を使うときも、サイコロの使い分け的なことができる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

それは分かったことにするけど。でもでも、10面ダイスだと0も出るでしょ? そんときはどうすんの?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

0が出たらもう一度振れば問題ない

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

何回振っても0ばっかし出るかも知れないじゃん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

イカサマサイコロならいざ知らず。もし通常の10面ダイスを何回振っても0ばかりだとすれば、振った者は超能力者だな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ふむ。ただのおっさんには、より一層興味がない、と?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

なんかグダグダしてきたんで、この話は終了!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

さて、1から9あるいは1から81の中からランダムに数を選べる件は一応、納得してもらえたと思うので、話を進めるが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

じつは、先程説明した数独/ナンプレの問題候補作成方法には、大きな欠点がある

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

えっ。後でソルバーでチェックするから候補は雑な作りでいいんでしょ? まあ、適当に数字を散らしただけって感じだけど一応、初期配置みたいのが出来そうじゃん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

一言で言えば雑過ぎ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

何、その微妙な程度問題!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

もう少し具体的に言うと、表出数字の範囲内だけで制約条件的なルールに違反する危険性が極めて高い

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

表出数字がルール違反とな?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

先程示した方法は、制約条件のことなど全く考えず、盤面ルールだけを考慮してランダムに数字を詰めていくのでな。例えばどこかのマスに適当な数字をめたとき、同じ行、列またはブロックにその数字と同じ数字が既にある状況がありえる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

こういった表出数字間の制約条件違反が1カ所でもあれば、その問題候補は解なしになってしまう。で、ランダムに二十数カ所も数字を詰めると、どこかしらで違反が発生する確率が非常に高い

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

要するに先述の雑過ぎる方法では、作った問題候補の大半が解なしとなり、解がある候補は滅多に得られない。そういった候補をソルバーに入れても空振りだらけで、非効率の極み

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

駄目駄目じゃん!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そうなんだが、ちょっとした工夫で状況がかなり改善される

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

むむ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

工夫の一例だが、マスに数字を入れる都度、その数字が既に記入済の数字とバッティングするかどうかチェックする。具体的には、記入マスと同じ行、列、ブロックにある全ての他マスについて、今まさに記入しようとしている数字が既に記入済かどうか調べる。このチェック処理は簡単なんで、あまり手間がかからない

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

で、支障がなければ次の数字に進むが、重複数字だったときは、それ以外の数字をランダム生成して差し替える。1から9までのどの数字でも重複になる不幸なマスに遭遇したらどうするか、といった細かい話はあるが、今回はその辺の説明は割愛する

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

このようにちょっとしたひねりを加えるだけで、解のある候補が得られる確率がかなり高くなったりするんだな、これが。ざっくりいえば、完全ランダムの『雑過ぎ』候補ではなく、最低限の簡易チェックを混ぜた『多少はマシ』候補にしただけで、結構空振りが減るってこと

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

『雑過ぎ』とか『多少はマシ』とかアバウト過ぎで謎だけど……「わけわかんないからもっとkwskくわしく」とか言うと益々面倒な話になりそうだから、この辺にしとくか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

なお、今回は数独/ナンプレの例だったが。パズル種別が違えば、完全ランダム候補の作り方も効率を高めるひねりかたも違ってくる。数独/ナンプレのやり方だけ知っていれば万能、というわけではないんで要注意

注: パズル種別によっては、問題候補をいきなりランダムに作るのではなく、全部の記入箇所が埋まった最終解答をランダムに作ってから、情報を削除して問題候補を作る方が良い場合、などもあるとか。こういった解答先行方式では、情報を削除しても解の存在は保証されることが多いのですが、情報削除により別解が生じる危険性が残るため、結局のところソルバーによるチェックは必要となります

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

世の中、そこまで甘くはないってことか

具体的な動機3. パズルの難易度などを知りたい

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

さて、ソルバーが出来たら、それをもっと凝った作りにしてパズル問題の『難易度判定』を行う方向もあるな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

難易度判定とな? それってきっと、パズル問題が初級、中級、上級、みたいな区別のことだよね? 雑誌だと大抵、初級のから順に出てくるよね。ひたすらパズル問題ばっかし載ってる単行本みたいのだと、初級問題集、みたいに冊子がわかれてたり

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

左様。なお、各問題について、初級者なら解くまで10分、中級者なら5分、のように予想解答時間を付けている場合もあったが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そゆのもあるんだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

うむ。ちなみに、難易度判定、より一般的には何らかの評価尺度を付ける者は、人間にしろコンピューターにしろ『グレーダー』と呼んだりする。で、コンピューターでやる点を強調したければ、『自動』を付けて『自動グレーダー』てな感じ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

むむむのむ。『ソルバー』、『ジェネレーター』に続いて『グレーダー』なんていう謎のカタカナ用語まで使うとは……絶許

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

グレード (grade) は等級や成績、学年等を意味する英語の名詞だが、『等級や成績を付ける』という意味の動詞としても使われる。で、例によってグレーダー (grader) は『等級や成績を付ける者』となる

注: 『グレーダー』という片仮名外来語は、現状では『土をならす建設土木機械』の意味で使われるのが一般的なようです。英単語 grade には『土をならす』的な意味もあるため、そちらから来ている模様。一方、パズルの難易度評価は、数独/ナンプレではある程度進んでいるため、熟語 sudoku grader はそこそこ使われるようになってきているものの。それ以外のパズルについては xxx grader といった使い方は、まだあまり見つかりません

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

だ・か・ら、英語の意味を説明されてもウザさは変わらないとあれほd

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

辛抱たまらん!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

茶番はこの辺にして、グレーダーの件だ。単にグレーダーと言うと、人間がやるのかコンピューターなのか分からんし、どんな評価尺度についてのグレードを付けるのかも分からん。なんで以下では、単にグレーダーと言ったら、パズル等の難易度を付ける自動グレーダーを指すこととしたい

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ふむ。で、ここで言う難易度とは『人間が解いたときに感じる』難易度を意味するので、グレーダー開発ではその点が面倒臭い

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

なんか『人間が解いたとき』を強調してるけど、コンピューターで解くときと何か違うん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

良い質問だ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

フッ、当然

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

じつは人間とコンピューターとでは、得意分野が違う面が多々ある

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そうなんだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

人間の行う知的処理の中には、どんな作業ステップをどんな順番で処理しているのか自分ではっきり認識できているタイプがある。形式知というか。既に言及した会計処理などだな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

こういうのはコンピュータープログラムで摸倣しやすいので、コンピューターでも容易に実現できる。そうなれば、今日のコンピューターは人間の1億倍以上の速度で処理を遂行するんで、圧倒的にコンピューターが有利だ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

人間の一億倍! コンピューターの計算ってそんなに速いんだ

注: 最新の Intel プロセッサー等は1億倍より更に速いようですね

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

左様。一方で、人間の知的処理の中には、自分でどんな処理を行っているのか全く説明できない無意識的なものもある。暗黙知ってやつだ。典型例の一つとして画像認識がある

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

例えば机の上にリンゴが一つ置いてあったとする。人間がこれを見ると瞬時に直感的にリンゴだと分かるが、その過程は無意識的で、認識処理過程を自分で全く説明できない。大脳生理学者等が研究を進めているが、脳内でどんな認識処理が行われているのか、今日でも部分的にしか解明できていないはず

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

確かに『見れば分かるだろ』としか言いようがないけど

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

まっ、とあるインターネット情報(www)によると、リンゴを見てるのにバナナと言っちゃう頭の悪い人もいるらしいけどね(www)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

むむっ。わしの説明が暴走気味なときなど、たまにお前さんがほうけた表情で『ばなな』と言っとったが⸺

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

その元ネタはそれか?!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ぎくっとな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まあいい。画像認識等、人間が自分の知能を自分で説明できない処理は、コンピュータープログラムで単純に摸倣できないから、そのままではコンピューター処理に置き換えられない。つまり、コンピューターには難しい分野ってこと

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そゆことか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

なお、画像認識については、コンピュータービジョン (computer vision) という研究分野があり、コンピューターで画像認識する方法を追求している

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

それって、コンピューターには難しいって言ったばっかし!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

左様。人間の画像認識方法がほとんど分かっていないのだから、他のアプローチで何とか摸倣できないかを模索していくわけで。努力と根性というか、血と汗と涙、試行錯誤とひらめきの積み重ね、的な分野だ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

人間のやり方がわかってないのに、他のやり方で同じようなことをしようとするなんて、鬼じゃん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そのとおりだが、長年に渡る研究の結果、かなり高度な画像認識ができるようになってきている。形式知的な、つまりは説明可能な処理方法で人間が無意識に行う暗黙知過程を摸倣できるのは、驚くべき成果と言えるだろう

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そりゃすごいね

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ちなみに、人間を含む生物の脳内にある神経細胞網の動作を摸倣する人工ニューラルネットワークというアプローチにおいて、21世紀に入ってから技術的なブレークスルーがあり、急速に研究実用化活動が展開している。深層学習とか呼ばれているやつだ。画像認識分野でもこの手段を用いると人間の能力に肉薄する結果が得られる場合がある模様

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

む?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

反面、このアプローチには、『こんにちのコンピューターパワーをもってしても計算が重い』とか『知能の本質が超多数のシナプス重み値に拡散していて賢さの説明が困難』といった課題も残っている

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

画像認識とかの話はもういいっちゅうねん!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そうか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

知りたいのは、パズルを解くのはどっちのタイプか、ってことでしょ!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

うむ。パズル雑誌等にあるロジック系はほぼ全て完全情報パズルだから、基本的には人間が解く手順を自分で説明できるタイプだな。だからこそ、解き方を他の人に解説する動画等が多々あるわけで。つまりは、コンピュータープログラムで摸倣しやすいたぐ

注: 数独/ナンプレはゴリゴリに理詰めで解く感じですが。完全情報パズルでもナンバーリンクのように『ひらめきも大切』と言われるものもあります。ので、パズル雑誌等にあるロジック系パズルの全てが手順説明可能、とは断言できないかも……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

だとすると、自動ソルバーがやってることは、人間の解き方と同じなんでしょ? なら、『人間が解いたときの』難易度もついでにわかるっしょ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

何? その古語みたいな言い方!

(☝古語は言い過ぎ?)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

これは失礼をば

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

古語はどうでもいいけど、何で駄目なん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

多様な問題の解き方について、より効率的な手順/方法を追求するアルゴリズム論という研究分野があってな。70年を超える研究の歴史の中で、人間が素朴に思いつく解き方手順よりずっと効率的な手順が色々発明されてきておる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

逆に言えば、人間が処理手順を明確に自己認識できるようなタイプであっても、アルゴリズム論の成果を多用すると、人間の素朴な手順とはかなり違ってくる、ってことだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そんなんあるんだ。でも全然イメージ湧かないんで、わかりやすい例プリーズ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

アルゴリズム論の発端になった処理の一つは、恐らくソート (sort) だな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

またもやカタカナ外来語! いじめ? いじめなの?!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そのような意図はありますん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

どっち?!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

……ソートとは、乱雑に並んでいる伝票等を所定の順序で並べ替える処理だ。例えば伝票番号順、日付順、取引先コード順、等々

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

外来語とか使って難しい作業かと思ったら、めっちゃ簡単なお仕事じゃん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そう、何をやるかは単純だ。しかし、並び替える伝票等の数が多くなってくると、工夫無しでは次第につらいことになる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

お前さんだったら、どんなやり方をする?

注: 伝票番号が1から200だったら比較的楽なのですが。もしも伝票番号が5桁で範囲も限定されていないとすると。例えば、32042, 96848, 63722, 14595, 13712, 89939, 67626, 03970……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そんなん急に言われても……えっと……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ふむ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

伝票を通しで見て、一番小さいのを選んで……それから、えっと……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

なるほど。まず、伝票のたばを全部見て一番小さいものを選ぶ。次に、残りの伝票のたばから一番小さいものを選ぶと、それが二番目となる。以下同様、って感じか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そうそう、それをいいたかったんだよ。先回りして言っちゃダメ〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ソートしろと言われて素朴に思い付くやり方は、まあ大抵そんな感じだろうな。だがしかし、そのやり方だと、枚数が多くなるにつれ次第に思い切り時間がかかるようになる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

2つの伝票を比較して必要に応じて持ち替えたり差し替えたりする作業に平均1秒かかるとしよう。今のやり方で200枚の伝票をきちんと並び替える作業は、5時間では終わらないだろうな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ばんなそかな たかが200枚を順に並び替えるのに5時間以上とか!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

今は詳しい説明は省くが、納得できなければ後でじっくり考えて欲しい。まずは一番小さい最初の一枚を選び出すのに何分かかるか、とかな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

おっちゃんが5時間以上っていうんなら、きっとそうなんでしょ。ってことで、話を進めましょ〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

……人間がやって手間取る手順は、同様にプログラム化するとコンピューターでも手間取るわけで。コンピューターが出始めのころは、『ソートってのは単純な割に意外に手間取る処理』的に思われていたようだが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

アルゴリズム論れい明期の鋭い先人たちが、バケットソート (bucket sort)マージソート (merge sort)クイックソート (quicksort)ヒープソート (heap sort) といった効率的な処理手順を発明し、効率がかなり改善された

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

例えばマージソートは安定して高効率な方法で、手順も比較的分かりやすいから、ちょっと練習すれば人間も同様な手順で作業効率を高めることができる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

マージソートとやらの修行は遠慮しとくけど、それでやると200枚の並び替えはどの位の時間になるん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

劇的に速くなるわけではないが、30分以下にはなるだろうな。時間の比率では約10分の1というか、逆に10倍の高速化というか

注: 広々とした机が使えるなら、バケットソートの方がよいかも?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

確かに劇的じゃないかもだけど、それなりに速くはなってるね

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

とはいえ、200枚の並び替えに30分とか、やっぱり遅くて駄目駄目っぽい

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まあ、あれだ。ソートのようなルーチンワークは、人間の手作業ではなく一億倍以上速いコンピューターに押し付けるのが一番。伝票は作成時から電子データ化しておき、以降のワンパターン処理はコンピューターにやらせる、ってのが合理化された事務現場の在り方と言えよう

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

結局はそれかい!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

さて、今の例では10倍程度の高速化だったが

(☝上記例示の中で説明した状況の場合です)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

他の処理でデータ量も多い場合など、状況によっては、更に激しく高速化できることもある。素朴な手順で3分かかっていたコンピューター処理について、アルゴリズム論の成果を活用し洗練された手順に変えたら1秒以下、なんてこともままある。なお、処理手順を変えただけで、コンピューター自体を高性能版に変えたわけではない

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そんなに速くなるなんて!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

カプヌも3分じゃなくて1秒になればいいのに

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

カプヌ? とは何ぞや?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

カプヌと言えばミルクの音Daisuke だよ

(☝単品の『Daisuke』についてはこちら)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

っ。お湯をかけて3分のアレを知らないなんて……

参考または蛇足: カップ麺の待ち時間は、袋入りインスタント麺のこうチキンラーメン』の時点から『3分』の伝統があるようですね。この時間設定は物理化学的な理由だけではない雰囲気です。例えば、3分以上待つとイライラする人が出てくるとか、その限界の3分『おあずけ』状態になることでむしろ食欲が増す、といった消費者心理的な考察もあるとか。より水を吸った麺が好きな人は、3分⇒5分⇒7分⇒10分のように時間をかけて自分の嗜好を追求、といった個人差による独自調整もありで

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

……ひょっとしてカップヌードルのことか?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そうに決まってるじゃん

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

麺を熱湯でふやかすのは物理現象ゆえ、アルゴリズム論とは別な意味で高速化は容易ではないはず

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

圧力鍋的に加圧して熱湯の温度を上げる? には容器から出して色々セッティングが必要そうだし。加えて、徐々に減圧冷却しないと激しく沸騰したりして危険そうだし

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

電子レンジ利用? は容器が危ないだろうし。耐熱容器等に中身を移し替えて電子レンジ? でも1秒は無理か

警告: カップ麺の容器にお湯を注いだ後、そのまま電子レンジに入れて加熱するのは非常に危険です。良い子は絶対に真似しないようにしましょう。詳しくは『カップ麺 電子レンジ』等でインターネット検索を是非

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

麺の加工方法等を研究して短縮? できるものなら、カップ麺の長い歴史からして、メーカーがとっくに発売しとるだろうし……

参考または蛇足: 現実の商品では、とにかく早く食べたい人向けの55秒商品が出現している模様。一方、待ってもいいからうまい麺を求める人向けの5分、7分物も色々発売されるなど、二極化が進んでいるとの意見も。というわけで、技術的には55秒までは実用化しているようですが、やはり1秒は厳しい? 詳しくは『カップ麺 3分 短縮 研究』等でインターネット検索を是非

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

んなことマジに考えなくていいから!

(☝上記脱線中で惰性慣性親父おやじのカップ麺に関する考察が暴走気味だったので)

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

自動ソルバーの解き方手順は人間のと同じか違うか、って話でしょ!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そうだったな。正直すまんかった

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

で、自動ソルバーの解き方手順だが、対象パズルによる違いがあるので、ここでは研究が進んでいる数独/ナンプレの場合で考えるとしよう

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

数独ソルバーの手順として定番化しているのは恐らく、数独ルールを厳密被覆 (exact cover) 問題として定式化した後、同問題を効率的に解くクヌース (D. Knuth) 先生発案のアルゴリズムX (Algorithm X) ダンシングリンク風味 (with dancing links) を適用する方法だな

☝①英語だとほぼ『exact cover』一択なのですが、日本語用語はばらつきがあるようで、『完全被覆』と呼ぶ専門家もいる模様。②ダンシングリンク『風味』の用語表現は、惰性慣性親父おやじによる独自の適当な言い回しです

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

何、そのわけわからん方法! ばなな顔寸前!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

今後も寸止め希望

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

いや無理!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

即答かい?!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ばなな顔はどうでもいいでしょ!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

うむ。詳しい説明は省くが、先述のアルゴリズムX云々うんぬんは凝り凝りな方法なんで、『人間ならそうはやらんやろ』というか『人間が律儀に真似するのはつらすぎ』な内容。要するに、人間の解き方とは似ても似つかないレベル

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

人類には早すぎるやり方、的な?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まあな。そんなわけで、数独自動ソルバーが答えを出すまでの手間を計測しても、人間が解くときの難易度とは言いがたい。数独以外のパズルでも、状況はおおむね似たようなものだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

それはまあ、わかったことにするけど。なら、その、何だっけ? 難易度を判定するヤツ……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

グレーダーだな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そうそう。そのグレーダーってのは、どうやって作るんかいな?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

まず、パズルの初期配置から簡単に計算できる数値を使って難易度を粗く見積もる方法がある。数独/ナンプレは難易度判定についても研究が進んでいるので、このパズルを例にとると⸺

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

①表出数字の数裏を返せば初期状態での空きマスの数を用いる流儀がある。プレイヤーが答えを書き込まなければならない空きマスの数が多いほど難しい問題なのではないか、というアバウトな考え方だな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

②もう少し凝った方法としては、各空きマスについて、表出数字と数独ルールから直接的に除外できる数字を除いて残った候補数字の数をカウントする。それぞれの空きマスについて、初期の選択候補数字セットが多いか少ないかって感じだな。これらを一定の公式で計算して『数独エントロピー』と呼ばれる数値を算出し、これにより難易度を見積もる流儀がある。空きマスに入る候補数字が多いほど、1つに絞るまでの手間が多くて難しいだろう、との考え方だ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

②の細かいとこは謎だけど、どっちも考え方の気持ちはわかるような。けど、初期配置だけ見て適当に計算してるだけで、全然解いてないじゃん。そんなんで難易度を決められるのかなぁ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

雑誌等から初級中級といった難易度区分付きの数独/ナンプレ問題を多数収集し、それらの空きマス数や数独エントロピーを計算して、雑誌社が付けた難易度区分との相関を統計的に調べた報告があるな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

結論としては、『それなりに当たる』ってところ。空きマス数より数独エントロピーの方が計算がちと大変だが、雑誌社による難易度との相関は高くなるようだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

それなりに?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

もっとも、空きマスが多い割に妙に簡単な問題やその逆パターンなど、これらの値と実際に解いてみた難易度とのずれが大きい例外も散見される。あくまでも『簡単にラフ見積もり』したい場合用だな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

まあ、そんなもんか。てゆっか、なしてそんなアバウトなもんを考えるんだろ?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

簡単な計算でそこそこ当たる指標が得られるなら楽ではないか。だもんで、数独/ナンプレ以外のパズルでも同様に、簡単な計算で難易度をざっくり見積もれそうな方法が考案されとる雰囲気。『概算見積もり』グレーダー的な

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

数独/ナンプレの場合は、精度の高い見積もりにはなっていない感触だが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

あっそ。でも、もっときちんと難易度を判定するには、やっぱり解いてみるしかないんじゃないの?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そのようだな。解いて判定するからソルバー的グレーダーというか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ただし、単なるソルバーなら、専門家が発明したアルゴリズムX+ダンシングリンク等の飛び道具を好きなだけ使えるのに対し、グレーダーは『人間プレイヤーが感じる』難易度を求めるものゆえ、『人間の解き方』を摸倣しなければならない

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

数独/ナンプレのように人間向けの解き方パターンがかなり多いパズルも結構あるんで、それらを全て組み込むとなると開発は大変になりがち

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

つまり、グレーダー作るのは、ソルバー作るより難儀、ってことね?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

うむ。加えて、プレイヤーの個性もあるし

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

例によって世界的に知名度が高く研究も多い数独/ナンプレを題材にすると、既に数十の解き方が知られている。が、多くのプレイヤーはそれらの一部しか知らないので、知っている範囲が違えば当然、解き筋も違ってくるだろう

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

また、Aさんは解き方1は得意だが解き方2は苦手、Bさんはその逆というように、個々の解き方についても人による得手不得手がありえる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

こういった人による違いがあるため、万人に共通的な難易度は恐らく定義できない。『平均的な難易度』あるいは更に『プレイヤー熟練度別の難易度』といった工夫が必要になる点も面倒だな

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

へ〜。ナンプレの解き方ってそんなに沢山あるんだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

重要なのはそこかい?!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

まっ、グレーダーがソルバーより大変そうだって雰囲気は感じたかも。ってことは、まだグレーダーはあんまり作られてないのかな?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

パズルの種類による模様

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

なるほど。じゃ、どんなパズルのは出来てるん?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

数独/ナンプレは進んでいる感触。十年以上前に既にかなり凝ったグレーダーを試作開発して評価した云々の論文があり、それ以降も国内外でより完成度の高いグレーダーに関する報告が色々でている

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ナンプレは世界的に有名とか言ってたから、やっぱグレーダーも進んでるんだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

そのようだな。一方、数独/ナンプレ以外のパズルだと、取り組み報告がぐっと減ったりするんで、全体的にはまだまだ、とは思うが

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

ってことは、おっちゃんがめっちゃ頑張れば(www)、今までにないグレーダーが作れるかもね(www)。全く期待しないで待ってま〜す

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

ソルバーやジェネレーターは色々やってみるつもりだが。数独のは大体出来とるし、それ以外のも幾つか着手しとるし

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

だがしかし、グレーダーはどこまでいけるか何とも。概算見積もり系は概算のアイデアさえあれば比較的簡単そうだが、本格的なソルバー的グレーダーとなると、人間の解き方をかなり調べなければならないんで

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そっか。プログラム作りより、その辺の調査が大変なんだ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

うむ。難易度グレーダーの話をしたので、わしが難易度系以上に関心を持っている解き味グレーダーにも言及しておくか

☝『解き味』の詳細は前回記事『趣味数って何?』の『趣味数ブログの主な話題』節中の『解き味に関する細かすぎて伝わらない(?)話』の箇所を開くと出てきます

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

解き味って、解いた後の満足度、みたいなのだっけ? 難易度よりもっとアバウトっていうか謎。そういえば、解き方がワンパターンか、とかなんとか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

解き方がワンパターン云々は単なる仮説の一つだ。その点の確認も含め、解き味グレーダーについては、グレーダーの作り方以前に、そもそも解き味とは何かをより深く究明する必要がある

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

現在のところ、そのような取り組み報告は非常に少ない感触だが、今後の展開を期待しつつ、わし自身もちょっとした実験等を試みたい所存

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

『やりたいからやる』ってんなら、『お好きにどうぞ』だけど

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そんなん作ったら誰か嬉しいのかな?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

誰か嬉しいのかについては、以下のような考察がある

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

はて?

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

前回記事で述べたとおり、『コンピューターで自動生成されたパズルはパズル作家作品に比べ解き味が悪い』との見解があるわけだが

☝『解き味が悪い』云々うんぬんの記述は、前回記事『趣味数って何?』の『趣味数ブログの主な話題』節中に出てきます

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

関係者が納得できるような結果を出す『使える』自動解き味グレーダーが完成した暁には、この意見が真実かどうか見極められる

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

それだと研究者は嬉しいかもだけど。そうじゃなければ『ふん』って感じ

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

更に、パズル作家が作る問題は100%解き味OK、自動生成された問題は100%解き味NGという『白か黒か』ではないはず。パズル作家の勝率は80%、自動生成の勝率は1%といった『程度の問題』と思われる。であれば⸺

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

コンピューターは結構な速度で延々と問題を生成し続けるものゆえ、自動解き味グレーダーが使えるなら、それを用いて解き味の良い問題だけ選別すればよい。生成ペースは大分落ちるものの、解き味グッドな問題だけ提出することが可能になるだろうて

☝力任せ探索的といいますか、『下手な鉄砲も数撃ちゃ当たる』からの『量が質を生む』的なアプローチですね。他には、パズル作家の作成過程を形式知化して摸倣するアプローチも考えられますが、どこまで形式知化できるのかが不明確です。特に、パズル作家が解き味の調整をどのように行っているか、となりますと

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

なるほどね。パズル作家にとっては強力なライバル出現で嫌かもだけど、パズル雑誌社とかは嬉しいのかも?

長くなったので、一旦、この辺で

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

さて、次の動機だが⸺

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

なんだ? やぶから棒に

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

話が長くなってきたんで、休憩を要求するっ!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

む。そんなに時間が経ってしまったか。確かに、ソルバーの基本用途とも言える解の存在判定/一意性判定、ソルバーを活用した問題ジェネレーター、ソルバーを改変した難易度グレーダーと、3つも動機を述べたからな。しかも、色々と突っ込みがあって派生的な話もかなり混ぜたし……

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

30分お仕事したら3時間は休憩しないと!

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

それは休み過ぎではないかと思うが……。仕方がない。少し休憩するとして、残りの動機については続編とするか

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

そうして

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-indigo-color">惰性慣性</mark>
惰性慣性

では皆さん、続編の記事でまたお会いしましょう

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

まったね〜

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-teal-color">賀知夢未</mark>
賀知夢未

あっ、そうそう。この記事へのコメントは、Xのポスト『人はなぜ自動プレイヤーを作りたがるのか』へのリプで是非、お願いしま