読者です 読者をやめる 読者になる 読者になる

ごちゃログぴこっ

はなまるデジタル創作紀行(DTM、TAS、いろいろな技術)

Luck manipulation と乱数の説明

TAS(tool-assisted speedrun)関連のお話。乱数(random number)、運・確率(luck)およびluck manipulationに関する説明です。一応「なにそれ?」という方にわかるような説明を目指しています。

また、luck manipulationに対応する日本語はなにか? 今でこそ定まっている気もしますが、執筆当時は人によって多少言葉が違うような曖昧さもあったため、どう呼んだらいいかと考えたことを記しました。

乱数とは/乱数とゲームの関係

ランダムな数と書くと、案外耳慣れない人にも意味が伝わるのかもしれません。その名のとおり、乱数とは予測できないでたらめな数のことであり、それを発生させる装置(ソフトウェアにおいては関数など)のことを乱数発生器(random number generator、RNGと略す)と呼びます。TAS専門の用語ではなく数学の用語です。難しい定義はWikipedia:乱数列Wikipedia:擬似乱数にまかせて、ここではゲームに関連させながら乱数とはどういったものか説明します。

ゲームの処理に乱数を使うのは、確率的に物事を決めたいときです。たとえば、あるRPGで戦闘終了後に5%の確率でアイテムがもらえるものとしたとき、プログラムは内部でどのような処理をするのでしょうか。きっと多くのプログラムが「戦闘終了直後に1〜100の範囲の乱数を発生させて、その値が5以下ならアイテムを発生、そうでなければアイテムを発生させず戦闘終了」というような流れで処理をしていることと思います。プログラミングになじみのない人にとっては必要以上に回りくどく思えるかもしれませんが、コンピュータというのはそういうものなのです。

話は変わりますが、基本的にコンピュータは決まった数同士の計算しかできません。言い換えると、コンピュータには予測できない数を作り出すことはできないのです*1。そのため、コンピュータで乱数を扱いたいときには、不規則に見えるような数(実際にはなにかしらの規則に従う)を一定の計算によって作り出します。これらは真の意味での乱数と違い、規則性を持った擬似的なものですので、区別するために疑似乱数(pseudo random number)と呼ぶこともあります。RNG(乱数発生器)に関しても、同様の区別をするためにしばしばPRNG(pseudo random number generator)と呼ぶことがあります。

良い乱数・悪い乱数

せっかくなのでちょっと余談。疑似乱数を作り出す手法にはさまざまなものがあり、それらの乱数発生アルゴリズムにも善し悪しがあります。カジノのイカサマに特定の目が出やすくなるよう重心を偏らせた不正なサイコロを用いることがありますが、そんなサイコロの振る舞いを地でおこなってしまうのがいわば質の悪い乱数生成器と呼ばれるものです。

質の悪い乱数は時折市販ゲームにも顔を出していて、地でイカサマサイコロを使っているゲーム(例:カルドセプトサーガ)や、攻略本に記された確率よりはるかに低い確率でしかイベントが起きないゲームがあります。その他、ゲームと疑似乱数に関してはレトロゲームにおける確率論にいろいろと書かれています。興味のあれば目を通してみるとよいでしょう。

乱数とTAS(luck manipulation)

広く知られているとおり、TASでは一見ランダムに見える事象をも意のままに操ります*2。通常であれば「運頼み」になるような箇所を、多数のやり直しその他によっていわば強引に可能にしてしまうことから、この行為はluck manipulationと呼ばれます。この行為に対してよく使わる日本語表現としては確率操作、乱数調整、運操作などがありますが、果たしてどれが適当なのでしょうか。これに関しては私見を後述したいと思います。

ゲームにおいて一見「ランダム」に見える事象は、先述のような疑似乱数に基づいて決定されていることが多いです。疑似乱数生成器は仕組みとしては規則的に数を返すものです。よって、乱数を積極的に変化させるためには、乱数生成器により多くの(あるいは少ない)数を発生させるような処理をするか、あるいは疑似乱数の生成に関わるパラメータに直接影響を与える必要があります。どのような状況下で乱数生成がなされるのか、乱数生成にどのようなパラメータが関わっているのかを知っていると、求める結果をより効率的に得ることができます。また、乱数生成器に処理をさせて次に得られる数を変化させることを、しばしば乱数を消費する乱数を回すなどと表現します。

ランダムに見える事象の正体は乱数である場合もあれば、じつは乱数とは異なったパラメータに依存している場合もありますし、あるいは両方の組み合わせかもしれません。システム的に見れば、すべての事象はxxxHolicよろしく「必然」ですし、どこまでは「luck」の範囲なのかを言葉で定めるのは難しいところがありますが、だいたい共通感覚として持っているものが「luck」なのでしょう。そんな「luck」を変化させるためには、次のようなものに変化を与えてみるのが定石です。

  • 押すキーの組み合わせやタイミング
  • 別の場面へ移り変わるタイミング
  • 敵が生まれるタイミング
  • 敵を倒すタイミング
  • 宝箱の類を開くタイミング
  • 会話を進めるタイミング

「どれだけがんばっても変化しないところでは変化しない」ということもあります。あくまで「疑似」乱数、動画の制作者は時に乱数とロジカルに向き合わなければいけません (;`・д・)

おまけ: luck manipulation に相当する日本語

いくらか利用にばらつきのある、luck manipulationに対応する日本語。これに関して思うところを述べたいと思います。あくまで私見ですし、言葉の善し悪しを決めるものでもありません。ちなみに、FinalFighterさんの用語集には「確率操作」と書かれていました。

結論から言えば、どの語が適当でどの語が不適当と一概に言うことはできないでしょう。言葉の持つ意味は広く曖昧なものです。しかし、これで終わらせてしまうとどうにも思考停止っぽいので、仕方なく本文を続けます。

luck

なにをmanipulateすることがluck manipulationに相当するのか、原語の時点から意味するところには曖昧さが含まれるように思います。なので、個人的にはそういう曖昧さを残した語の方が受け入れやすそうな感じです。

確率
不適切とは思いません。ただ、数学的な用語としての側面が「曖昧さ」のイメージを欠いてしまう点が個人的には気に入っていません。
運(運勢)
運とはなにかと言えばひどく曖昧です。それが気に入る人がいれば、気に入らない人もいるかもしれません。運勢と2文字表記すると4文字熟語っぽくリズムもよいかもしれません。
乱数
言うまでもなくluckの訳ではありません。ゲーム中の疑似乱数に基づいて決まる事象に使う分には非常に的確な言葉かと思いますが、疑似乱数が関わらない事象にまで用いてしまうと少々不正確な表現になってしまうのではないかと思います。RNGによらない数のことはあまり乱数と呼びませんし。
manipulation

luckの意味合いの置き方によっても適当な語は変化するかもしれません。ただ、manipulationが意味するところは「ゲームに与える入力を変化させて目的とする結果を得ること」であり、luckよりは具体的な感じがあります。

操作
しばしば「改造を伴う行為と誤解されかねない」という理由で利用非推奨という主張を目にします。個人的は、操作という語を使用することにさほど問題はないと感じている一方、この主張にも一定の共感を覚えます。操作という語の方が他の語よりも自ら手を加える感が強いからなのか、あるいは操作という語は「不正操作」の意味合いで用いられる機会が多いためなのか……そう感じる理由は定かではありません。
調整
操作の代わりによく用いられる語。操作という語との間に大きな差異があるようにも思えないのですけど、両者の違いを決定づけるものはなんなのでしょう。

追記: 「スコア操作」と「スコア調整」って並べて書いてみるとたしかにずいぶん違う感じを受けますね*3

結局のところ

Luck manipulation という英語の表現からして幾分曖昧さがあり、そのまま訳そうとしてもあまりぱっとしないようです。

黎明期には呼び方がさまざまでしたが、気づけば国内ではだいたい「乱数調整」で通っているように見受けられます。生き物のように進化・淘汰を経て生き残った言葉だけあり、非常に本質を表した誤解のない語だと思います。

*1:コンピュータでは真の乱数を発生することはできないものの、電源投入時の状態が不定値である可能性はあります。しかし、その再現を試みると実行のたびに動作に違いが生じてしまい、動画の記録・再生が成り立たなくなってしまいます。そのため、動画記録用のエミュレータでは0などの無難な定数を設定するようにしているのが一般的です。

*2:あからさまに「なにか」を待って謎のおいのりダンスを繰り広げることもありますが (;´▽`)

*3:「スコア操作」と「スコア調整」の例はpirohikoさんが出してくれました。興味深いです。