数値調整をする過程。
最近はすっかり画像を生成するだけのnoteでしたが、今日は元の路線に戻るための助走として、「数値(に限らない時があるけれど)調整」や「最適化アルゴリズム」について、まとめをしておこうと思います。
数値調整を行うためのステップ
数値を調整するためには、一般的に、以下のようなステップで実施すると、よいです。
目的関数の定義
最適化アルゴリズムの選択
初期値の設定
反復プロセス
終了条件の設定
結果の評価
それぞれのステップについて、おさらいしておきましょう。
具体例は、「バラバラと、向き合う」の中で書いていますので、理論より実践派の方はそちらも参照してみてください。
1.目的関数の定義
私は◯◯度(例えばでいうと、バラバラ度)という風に定義することが多いのですが、目指したい事象に対して、どういう数式、方式で評価することにするか、の定義をしなければ、最適化は始められません。
GPTさんにも説明してもらいましょう。
初期値の決定及び反復プロセスの中で、ここで導入した制約条件が重要になってきます。新規データ生成や、掛け合わせの時に、制約条件を守らないデータが出ないような工夫が必要ですね。
2.最適化アルゴリズムの選択
本稿で何度も触れている通り、私は遺伝的アルゴリズムのバランス感覚が、ゲームバランス調整には向いていると信じ切っています。
もっと単純なバランス調整であれば、勾配降下法などの単純なアルゴリズムで問題ないと思います。(勾配降下法については、以下の2記事で触れています)
単純な勾配法でうまくいかないときには、「焼きなまし法」「粒子群最適化」なども使ってみるとうまくいくかもしれません。
※どのくらいの種類の方法があるか興味がある人は、「最適化問題」で検索してみてください。めちゃくちゃあります。
また、遺伝的アルゴリズムの発展形として、評価関数から呼び出されるプログラム(関数の時もある)を遺伝させ、変異、交配させていく、そんなやり方も、あります。突き詰めていくとこれだけでしばらくお腹いっぱいになると思います。
3.初期値の設定
初期値は、通常、ランダムな値(もう一度書きますが、制約の範囲内で値が収まるようにするんですよ?)から始めます。凄く単純な探索空間(解の可能性がある範囲のことをこう呼びます)であれば、初期値は1つだけで充分ですが、私は、遺伝的アルゴリズムの初期遺伝子数を100、そしてその全てをランダム生成、とすることが多いです。一度次のステップに進んで、探索がうまくいきそうなリスポーン地点(セーブ地点)を見つけたら、そこからランダムにずれた場所(2次元、3次元をイメージして言っていますが、多次元のこともあります)から再スタートするのもいいでしょう。
4.反復プロセス
ここは、できれば自分で、何かしらのプログラム実装ができるのが望ましいとは思いますが、
でも触れた通り、ある程度ChatGPTのようなサービスも助けてくれますし、他にもいろんなプラットフォームがあって、中には、プログラミングがわからなくても、GUIをちょこっと触るだけで反復プロセスを提供してくれるものも、探せば、あります。(←でも、自分で作れる方が、細かい調整とかもできますし、良いと思います)あとは、
でも書きましたが、別に1人で作らなくたってよいと思うので、できる人とタッグを組めばいいと思うのです。ゲームのアイデアを考える人、バランスを調整する人、絵を描く人、3人でやりましょう!というチームもあっていいと思います。(実際、会社規模にもよりますが分業しているところかと思います)
5.終了条件の設定
で、無限の時間が与えれていれば、ただひたすらに反復していればいいのですけれども、たいていは、終わりの条件を設定しておくことに、なります。
・決められた回数が終わったらやめる
・決められた時間が終わったらやめる
・目的の値に達したらやめる
あたりでしょうか。1000回ずつループを回して、1000回前のデータと比較して値が1%以上動いていたら続行、1000回追加、とかいう具合に、複合したり、計算を交えたりしてもいいと思います。
6.結果の評価
もし、初期値を1つで始めたとかであれば、もう一度(10度くらい?)最初からやり直して、結果を比較してみる、ということをオススメします。「局所解」というのですが、本来は日本一の頂、富士山の頂上を目指していたはずが、たまたま大阪の山間部からスタートしたデータが、生駒山に登って、1番高い場所だと主張しているだけかもしれません。(大阪/生駒山は、みなさんの生まれ故郷の地名と、そのあたりで一番高い山に置き換えて理解してください)
そうでないならば、最適解(か、それに近しい値)が得られたはずです!実際のゲームとして遊んでみて、それが本当にバランスの取れたものか、思い描いていた◯◯度、が実現できているか、確認してください!
まとめ
今回は、久々の理論面でのお話ということで、最適化問題を取り上げた記事群は、こういう風に繋げて読んでもらえるといいなぁ、というまとめ記事のようなものになりました。たまにはこういう振り返りも、いいかな。というわけで今日はこのへんで。ほなね。
例のAI画像のコーナー
今日も今日とて「Stable Diffusion」です。プロンプトは「(4k, best quality, masterpiece, fantasy:1.2), very interesting and strategic tabletop-game like 'Terraforming Mars', 2 couples are coming together for an evening of board game, jolly, dices and coins, a big round table, darkness.」もうね、途中から何言ってるんだかわからなくなっています。ちなみに除外の方は「(worst quality, low quality:1.4),ugly,bad anatomy,badhandv4,bad-hands-5,(split view,grid view:1.3), (no helmet and hat:1.1)」です。以前のAI画像生成に比べて、指定が細かくなっているのがわかるかと思います。(その分、いろんなガチャが楽しめるようになっています)
いただいたサポートは、きっと、ドイツアマゾンからの送料に変わると思います。 温かいご支援、お待ちしております。