見出し画像

バラバラと、向き合う。

その昔、「もじきゅーぶ」という同人ゲームを出したことがあるのだけれど、その時に「バラバラ」というものにどう向き合ったか、という話をしたいと思う。(人工知能、AIというよりは、最適化問題の方の回だ。)


最初に、数を決めた。

見た目の派手さを優先して、サイコロ(という名のただの立方体の木片)は100個使うことに、した。面は、x6すればいいので、600面あることになる。単語を作るゲームだったので、1つの面には、1つのひらがなを書くことにした。(本当に、ペンで書いたんだよなぁ。懐かしいなぁ。)600面の全てが同じ文字だったり、使いにくい文字だらけだと、ろくな単語が作れないと思ったので、一般的に文章に使われているひらがなの頻度に応じて、600個のうち何個そのひらがなを使うかを決めていった。(「う」「い」「ん」あたりの使用頻度が高かった)

「バラバラ」とは何か

ひらがなの割合が決まったところで、これを100個のサイコロに割り付けていきたいわけなのだが、できるだけ、バラバラに割り付けたい。そこで、「バラバラ」とはどういう状態を指すか、定義した。

2つのサイコロを手に取った時、6面の組み合わせが、全く同じだったら、「あ、これは間違えて同じサイコロが入ってしまったのかな、バラバラではないな」と感じるだろうと思った。(逆に、6面に書かれたひらがなの組み合わせが違っていて、2つで12種類の文字になっていたら、これはバラバラだなぁと思うだろうな、と思った)以下、これを①の条件と呼ぶ。

また、1つのサイコロを手に取った時、6面のうち3面に「い」、残り3面に「ん」が書かれていたら、「お、これはバラバラではないな」と感じるなと思った。以下、これを②の条件と呼ぶ。先ほどのバラバラ(①の条件)よりも、こちらのバラバラの方が、よりバラバラに感じるだろうなと思って、こちらは必須条件とした。

実際には、まず100個のサイコロに必ず6面のひらがなが違うように割り付け、その後、バラバラ度を高める際に、2つのサイコロ間で文字を入れ替え、その際、「同じ文字は入れ替えない」「入れ替えた後で同じ文字が同じサイコロに入らないようにする」とすることで②の条件が守られ続けるように、した。

「非バラバラ度」を決める。

100個のサイコロを、互いに、2個ずつ取る組み合わせは、100*99/2*1通りある。そのそれぞれについて、ひらがながN個一致している時、N³点が「非バラバラ度」として加算されるものとした。

「非バラバラ度」を下げる。

最初のセットを決めて、まずこの「非バラバラ度」を測る。次に、10回、「2つのサイコロを取り出し、②の条件が守られるように、ひらがなを交換する」を実施し、再度、「非バラバラ度」を測る。もし、「非バラバラ度」が下がったら、入れ替えた後の方がバラバラなので、こちらを元にさらに10回の交換を行う。もし、「非バラバラ度」が下がらなかったら、入れ替えた結果が良くなかったということなので、元のセットに戻す。

これを繰り返していくのだが、最初のうちは「非バラバラ度」が下がったり、下がらなかったりしながら徐々に下がっていき、段々と10回に1回、100回に1回と、だんだん下がりにくくなりつつもやはり少しずつ下がり、最終的にはほとんど下がらなくなる。入れ替えを1000回やっても、「非バラバラ度」が下がらなかった時、入れ替え操作を終了する。

映えあるバラバラ

で、スタートのセットを変えて、上記の実験を50回程度、それぞれ入れ替え操作が終了するまで、実施する。その中で、1番「非バラバラ度」が低かったセットが映えあるバラバラ…という風に定義するのだ。

このやり方で、この程度のテーマならば、充分に、バラバラなセットは手に入る。しかし、もっと効率のいいやり方や、より確実によりバラバラなセットを手に入れる方法が、他にありそうだ。

ひらがな同士の入れ替えの方法を変えたり、そもそも非バラバラ度の定義を変えたり、何だったら「あ段」「い段」…や「あ行」「か行」の偏りだって気にした方がバラバラなのかもしれない。

まとめ

たまにはChatGPTからも、人工知能からも、少し離れてはいるものの近いテーマである、最適化問題について、書いてみようと思った。そして書いている途中で思ったのだが、これに近い話は既に書いている。

問題意識あっての、解決手段であるAIだったり、人工知能だったりすると思っているので、これからも折に触れて、問題解決、最適化、あたりの話題は取り上げていこうと思う。というわけで今日はこのへんで。ほなね。

いただいたサポートは、きっと、ドイツアマゾンからの送料に変わると思います。 温かいご支援、お待ちしております。