このブログ内を検索可能

2022年1月18日火曜日

UFOキャッチャーの性質

 DD解析の待ち時間を利用してちょっとUFOキャッチャーの話をする。ドラクエが好きなのでそのフィギュアを入手しようとUFOキャッチャーをやることがあるが…。

今の時代ならおそらくだいたいの人が知っていると思うが、所定の金額を投入するとほぼ確実にとれるようになっているのがUFOキャッチャーである。

ただしイオンモールやモーリーファンタジーの中にはそもそも取れる状態になっていない(アームのMAXの力が景品の重さに及んでいない状態)場所もあり、その場合は5000円どころか10000円、15000円を超えても延々ととれる気配はない。その場合店員はUFOキャッチャーの部分を触って(これで設定額が来ているか即座にチェックできるものと思われる)我々の「設定金額を超えていることをにおわせる発言」が嘘ではないと判断した場合は、そのアームで取れない状態でも取れるように景品を出口ぎりぎりにおいて取れる状態に常にしてくれ続ける。(さすがに今の時代動画などで拡散されるとまずいため)

このような店舗を3つくらい発見したがゲームセンター系列以外の(セガ、ナムコ、タイトー、ラウンドワンなど以外)場所ではその傾向が強いので注意。

ちなみにビッグクリアフィギュアを狙っていたが15000円でも取れないパターンが2回ほどあった。これらはどちらもイオンモール。ただイオンモールの中にもちゃんと設定金額で(=3000円周辺で)とれるようにしてくれている良心設定店もある。これ以上犠牲者を増やさないために行っておくとイオンモール大日とイオンモール熱田は15000円をかけても取れなかった。店員に10000円費やした(本当)といっても対応してもらえなかったが、さすがに15000円以上延々とやって都度店員にいうとようやく別の店員が対応してくれた。つまりビッグクリアフィギュア2体で少なくとも30000円は余裕で費やしている。

あとでよく見たら口コミにもクレーンゲームはひどすぎると複数アカウントで書かれていた。なるほどその通りだと思った。

なお基本的にこれらのフィギュアが取れるのは3000円程度で、3500円を超えだすともう一生取れないと思った方が良い。店員にアシストしてもらえなければ一生とれないことが確定する。(道行く人が我がやっているとこれ全然とれへんで、みたいなことを言うのが聞こえたのでここによく来る人はその絶対にとれない設定を知っているらしい)

それでも入手した景品(15000~18000円)が傷ついていたりしたら変えてくれたり袋をもってきてくれたりする店員もいたのでやはりイオンモールなどでは店員によって態度が違うと思われる。イオンモールのフィギュア2体で30000円を軽く超えてしまったのは悲しいが。

一方ゲームセンター系列(YAZ、アピナなどの共和コーポレーション系列)、ナムコ、タイトーなどの店舗はしっかりしており、ちゃんと設定金額でとれるようになっている。イオンやモーリーファンタジーは要注意。ベネクス系列、ドラマ系列、イミグランデ系列にもあるがやっていないので知らない。

余談だが、UFOキャッチャーの動きには複数個ある。

①つかんだ後頂上で離す

②つかんだ後しばらく保持するが移動開始時に離す

③つかんだ後移動中も保持するがゴール前で離す

④上に行く前に落とす

こういった動きをすることがほとんどで、③はひょっとすると、と思うかもしれないが、これは景品が奥の方にあるときのみに起こってているのを経験で感じた。機械なので自身の位置は把握できるので、これだけ移動すればゴールというのもわかっているので途中で外すフラグを簡単に立てることができるわけである。

なお設定金額に達するとゴールに到達するまでがっちりつかんだまま2本爪ですら離さない模様。経験談だがそこでつかむのを失敗しても以後はずっと取れる状態のままである。

④は、景品の重さに対してアームの力が最大でも持てない恐れがあるため、これは危険。

15000円以上、すなわちいくら金をかけてもとれないパターンはこれに当てはまる。

ただひょっとすると設定金額に達するとアームが最初から滑るのが治るかもしれないが、あまり期待できない。

後はたまたま予期せぬ幸運が発生した場合、他の人がつぎ込んでいた場合はそれより早く取れることがあるということくらいで、中古店などには設定金額の1/3程度で並ぶことが多いが、人気商品は設定金額とほぼ同程度(ドラクエのクリアフィギュア系統なら3000円周辺)か、過去のバージョンだと2倍くらいになったり、という感じである。


他にも糸をカットするゲームもあるが、これは我々の操作がかなりアバウトでも横移動はきちんとそろえるようになっており、縦操作はどれだけうまくやっても手前あるいは奥で止まって切れないようになっている。しかし設定金額が来ると、その周辺でボタンを離した場合毎回目的の位置に止まるようになっているというもの。

これはルーレットで⑤まで行くと景品がもらえるというファンシーリフターと同じ作戦を使っている。あれはプラスとマイナスが交互に並んでいるので、プレイヤーに「誤差の範囲で」マイナスに移動させることができるのである。

例えば+1,-1,+2,-2で並んでいるとする。

+1と-1の間で押せば普通に-1に到達

-1と+2の間で押せば+2を超えて-2に到達

+2と-2の間で押せば普通に-2に到達

とこのように「滑り」を利用してやりたい放題である。

なお我は昔はそれに気づかずやられていたものだった(幼稚園か小学生時代)。

1回くらいこれで300円?でうまい棒が大量に取れた回があったがそのうちの10個くらいはすでに賞味期限切れという。


ちなみに我が好きなプライズ、というかゲームは、かつてはアニマやDDであったがこれと永遠に決別してはや3か月。10年くらいやり続けたデータがあるeパスも完全に復元不能にしたのが功を奏した。普通に好きなゲームはドラクエ、マリオ、カービィなどで小学生時代からその性質はほぼ変わっていない。


処理時間の短縮案

DDのおまかせ最適化の処理時間をなんとか軽減できないか現在考えている。

鏡像、対称移動などは他のカードパターンで対応できないことが見込まれるのでなしとする。そこで最初の5球で同じグループに属するかを判定する方法があるのではないかと考えた。

たとえば{1,2,3,4,5}は{1,2}の部分を{1,3}{2,3}に、{4,5}の部分を{4,6}{5,6}に変えられることで他のパターンを短縮することができる。ちなみに最初からこれを考慮にいれたグループごとのパターンを考えても良かったが、それぞれの確率が異なって後で処理が面倒なため省略した。

たとえばグループ{1,2,3,4}といっても、カードの性質から{1}のところに2マス入っていたり、{3}のところに3マス入っていたり(SP1球が入った場合)などとこの{1,2,3,4}への写像が多すぎて困る。しかしマス(=番号と同意)の場合は単純にすべてのパターンの確率が等しいので処理しやすい。

これを実装した結果、全部で2429パターンだけで良いことが分かった。

ちなみにFREEの配置可能個数が違うものはもちろん最適解は違うので別物としている。

例えば{1,2,3,4,5}と{1,2,3,4,8}はINしたマスは同じであるが前者はFREE0個、後者はFREE1個なので異なるものとしている。

具体的には各マスのIN状況は入っている又はそうでないの2通りなので、これを2進数の考え方で10進数表記する。例えば1マス目からIN状況が1,0,0,1…のとき、

2^0*1+2^1*0+2^2*0+2^3*1+…となる。これは1対1対応なので、同じ表記に至る移動もとはない。あとはこれにFREEの個数を2^23あたりで規定する。

これによりidentityと名付けた10進数の値をそれぞれのカードは持つことになる。このidentity値が同じものは最適解が一致するので、過去に求めた最適解を使用できる。

そして2429パターンの計算という結果を得る。

これを行う手順は何気にちょっと行が多くなるが…。

一応カウンターを付けて必要な2429個をカウントするようにして実質推定時間もprintさせるようにしていよいよ稼働。これで大幅な時間短縮が見込めるのである。


一番上の列はそれぞれのマスのHIT状況を数値で表すものを重複なくならべていったものである。2つ目の列は1つ目の列で出てきたidentity値の場合は過去のどこの番号を参照すればよいかを示すもの。

3つ目の列はそれぞれの番号において参照すべき番号が記されている。ちなみに自分の番号と一致した場合はそれが自分で初めて出てくる、ということなので計算が必要。この条件に合致するものを53130通り調べると2429パターンとなった。



プログラムの整合性を確かめる

 とうとう真にプログラムの準備が整ったが、せっかくなのでその正当性を確かめるべく、ランダムにDDの結果を返すプログラムで、本当にその値に収束するかどうかを試したい。

やり方としては適当にSPなどの入り混じったボールデータをもってきて、それに従ってマスを埋めていく。これを延々と繰り返して理論値に収束していけば、きわめてこのプログラムの信ぴょう性は高くなるということである。

ということでランダムパターンを組み、そのランダム抽選を1000000回繰り返して理論値のPO率と比較した。なおパターンは{1,2,3,4,8}とし、最適解は{17}であったので(=23マス目)PO率は0.966639となる。

ちなみにSP0個、1個、2個、3個になる確率は理論値ではなくデュエルドリームの規則に則り、残り球数を判定して都度カウントしている。そして0になればこれ以上の抽選を打ち切り、というパターンにした。いわばさっき求めた確率の確認を行っているともいえる。

先ほど設定した確率の計算などがうまくいっていればこの値に近づくが果たして…?

以下は100万回に向けてそのPO率の平均(実測)をプロットしたものである。

1000000回の平均は0.968276となり、先ほどの理論値0.966639とわずか0.0015ほど(ペイアウト率0.15%)の差。これは誤差の範囲と見ることができるだろう。証明はしない。
さていよいよ53130通りを動かしていく。

DDにおける前半SP0個時の最適解について

 まだまだ解析途中だが、前半でSPが0球入った場合の最適解を探索中である。

とりあえず現在は後半SP0個、1個、2個、3個の場合で分けていると前記事で述べたが、そろそろそれらが起こる確率を考える必要がある。

簡単な例を挙げるとこうである。

1~6のさいころを入手できる確率が80%、1~10のさいころを入手できる確率が20%のときの期待値は?→0.8*3.5+0.2*5.5=2.8+1.1=3.9

現状、後半でSP0個と仮定しているので実際のゲームパターンと違うわけである。

{1,2,3,4,5}に対してもしSP0個のとき、{6,7}が期待値0.8,SP1個のとき{6,7}が期待値0.2

SP0個の時{7,8}が期待値0.7,SP1個のとき0.8だったとする。

SP0個が80%、SP1個が20%で起こると仮定すると

{6,7}の期待値は0.8*0.8+0.2*0.2=0.64+0.04=0.68が最終期待値

{7,8}の期待値は0.7*0.8+0.8*0.2=0.56+0.16=0.72が最終期待値

つまり、SP0個時の期待値の最大が必ずしも最適解を与えるとは限らないのである。

よって方針を変更し、それぞれに配置パターンで一挙に4球、5球、6球となるパターンも考えることにする。ただしここについては確率を求める必要があることに注意。

ということでちょっと高校の確率問題よろしく手で計算してみた。すると

SP0球→1140/1771

SP1球→459/1771

SP2球→144/1771

SP3球→28/1771

となることが判明。

これはどのように使うかというと、各FREEを配置したときに、

これまでは一律1140パターンのオッズを総和して最後に1140で割っていたが、

これが成立する理由は各パターンが1/1140で起こる(後半SP0個と仮定していたため)ので、

先に1140で割って総和をとっても全部分子のみ和をとってあとから1140で割っても同じだからである。具体的な例でいうと、2/5+3/5=0.4+0.6=1.0ではなく(2+3)/5=5/5=1ということ。有効数字についてはここでは深く考えない。

ここから、SP0球の場合はそれぞれのパターンは20C3あるので1140/1771を1140で割り、それぞれが起こる確率は1/1771である。各SPが起こる確率は同じでないので先ほどのように場合分けをしたが、その中での数の組み合わせは当然ながら等確率である。なので一つ一つあたりが1140で割れるのである。

SP1球の場合は、そもそも起こる確率が459/1771であるから、これになる数字のパターンは20球中4つを選ぶので20C4=4845パターンある。なので459/(4845*1771)の確率で例えば{1,2,3,4,5,6}などの組が選ばれることになる。

SP2球,3球も同様にする。

そして得られた個別の確率をオッズに乗じたものが期待値における個別のものである(なんかいい呼び方があるのだろうが期待値を高校で習っていない世代の我々)それを足し合わせる。

これにより完全に最初の5球に対しての最大の期待値が与えられることになる。

プログラムが間違ってないことを祈りたいが…。