ブログ内検索

2019年12月27日金曜日

17-7 ビンゴバルーンFREE4個解析途中経過(1)

上記のように、とりあえず53130通り中10000通りの(実際は対称など考慮して4000通り)解析が終了した。CPUをほぼフル稼働で回したが、上に書いてある通り、経過時間はおよそ百万秒。
得られたデータを見ていくと、やはり期待値40倍が多い。なぜなら縦または横の7個ラインにバルーンが3個でも発生したら7個ライン確定で、その後はオッズアップ候補が残り20個中4個もあるためである。

さて、残りのデータ解析であるが、とりあえず53130通りのうちの10000通りの中に、スキップできない解析が必要なデータが4138個あった。
なお、10001通り目から20000通り目には解析の必要なデータが2514個、
20001通り目から30000通り目には167個
30001通り目から53130通り目には23個

したがって、この計算はあと8日ほどで終わる見通しとなる。

この計算がすべて終われば、極めて正確なビンゴバルーンのPO率と各配置のFREE別最適解が提供されることになる。
ゆくゆくは画像処理などを使って超マルチ8面で瞬時に配置とFREE可能数を入力して最適解をたたき出すアプリとかを作れば面白そうだとは考えているが、今はいろいろ忙しくその時期ではない。


しかしそれっぽいものを作りつつあるらしい。
を参照。

2019年12月15日日曜日

17-6 ビンゴバルーンFREE3個解析結果

ついにFREE3個による解析結果が判明した。mathematica複数台体制で最後のほうはやることにした。
まず、FREE3個を置ける状況下でのPO率は488.2%。以下に各FREE配置可能個数別のPO率を再度掲載する。
FREE0個配置 7.6%
FREE1個配置 43.8% 
FREE2個配置 189.9%
FREE3個配置 488.2%
配当分布は以下。
もちろんこれより大きな配当もあるが、少ないので割愛している。
これを見ると、2倍以下の配当になることはほぼなく、ほぼ確実に2倍以上の配当が保証されるということであり、FREE3個はすさまじいメリットとなる。

次に具体例を見ていく。例えば以下のパターンではどこに配置するか悩むだろう。
縦の7個ラインリーチを取るか、確定5個ラインをとるか、それとも田の字型の3個ラインを期待するか。
こういうときにこの最適解探索が役立つ。すると以下のように配置するのが最適。
上記のように配置した場合のPO率は612.4%となる。

ほかのパターンでも検証する。
上の状態で、5個ライン確定1つと、もう一つのリーチで5個ライン2つを狙うか、確定4個ラインを1個作り、そのほかの4個ライン成立を狙うか、それとも5個ライン1つとオッズアップを狙うか。
そして最適解は以下。
5個ライン2つを狙いにいく、というのが正解らしい。
ただこれ、期待値でいうと5個ラインオッズアップよりシンキング終了時点での配当が低いので、確定した配当をすぐに得たい、というときは必ずしも上記のように配置するのが絶対良い、というわけではない。
もちろん、長い目で見れば上の配置が最適ではあるが。

次は以下の配置。
このとき、PO率は708.3%で、最適解は以下。
ちなみにだが、もし上のFREE配置をやめて、例えば期待が高そうな真ん中に、最も下の一のFREEを置き換えた場合、PO率は699.8%となり、8.5%くらいPO率が落ちる。
また、最も下のFREEをオッズアップとした場合は、PO率は680.4%となるので、またちょっと落ちる。
ただ、PO率的にはかなり類似しているので、判断は難しいと思われる。

2019年12月8日日曜日

18-3 ヘブンツリーのPO率

おそらくあっているであろうプログラムの元、フロアアップ4種類、そのそれぞれに対してオッズアップの配置15種類を考慮した60パターンのPO率などを求めることにした。
各パターン100000回の試行を行った。だいたい1,2時間程度だっただと思う。
以下、1Fからゲームがスタートするものとする。有効数字そろってないのとかは多めに見てや…。

2FUPのみ→平均3.0F、継続率41.7%
3FUPのみ→平均3.1F、継続率48.8%
2F2F混在→平均3.1F、継続率48.1%
2F3F混在→平均3.18F、継続率54.1%
グラフは上から上記の設定によるフロア別到達確率。初期フロアを1としており、最高フロアは9である。





上記のフロア到達確率を利用すれば、ヘブンツリーで35Fに行く確率も計算できるが今はやらないでおく。

上のグラフは上から1~15行目が最下段2FUPのみのもとで、
オッズアップの配置の組が{なし},{0,2},{0,3},{0,4},{0,5},{2,2},{2,3},{2,4},{2,5},{3,3},{3,4},{3,5},{4,4},{4,5},{5,5}の時の各種回数を与えている。
16~30行目は最下段に3FUP、31行目~45行目は最下段2FUP、2段目2FUP、46行目~60行目は最下段3FUP、2段目2FUPを表している。

横の列は右から配当獲得率(継続率)、1倍以上、3倍以上、5倍以上、10倍以上、30倍以上、50倍以上を100000回中の成立回数で表している。例えば41745と書かれていたらおよそ確率は41.7%であるとわかる。
最後の右の列はPO率を割合で表したものであり、例えば0.745903ならPO率74.6%程度を意味する。

ちなみに、AnimaLotta@2chwikiによると、アニマツリーは以下のPO率らしい。

アイテム別ペイアウト理論値


ODDS無 ODDSx2 ODDSx3 ODDSx4 ODDSx5
2FUP 65.11% 81.38% 97.65% 113.92% 130.18%
3FUP 73.28% 90.22% 107.16% 124.09% 141.03%
表はwikiのものをそのまま貼り付けた。
これと比較すると、一応ヘブンツリーのほうが総じて当たりやすい、ということが分かる。我のプログラム等に間違いがなければ。

間違いがないであろうことを確認するため、念のため上の表と同じデータが得られるかチェックする。ODDS無の2FUPのとき、我のプログラムによると、PO率は65.7%と出た。これは非常に近い値になっている。次にODDS5倍が配置され、かつ3FUPが配置されているときも計算してみたら、140.9%となった。これはわずか0.1%程度(100000回中100回程度の違い)しか違わないため、プログラムの正当性がほぼ担保された。
なのでだいたいPO率をパーセンテージで出したとき、一の位までは信頼度がかなり高いことが分かる。

上の表から結論を言わせてもらうと、ヘブンツリーは「ほぼ増えない」。
アニマツリーのシークレットゲームであるが、最下段にオッズアップがない場合はいくらフロアアップが発生していようがPO率53%である。これはアニマツリーの最低PO率65%より明らかに少ない。また、最下段に×2と×3あたりが両方ついたとしても、PO率は70%程度であることが多いなど、総じてPO率は低めである。
なにしろ最下段に×5が2つついており、さらに3FUPが最下段に、2FUPが2段目についているというおそらく最高の設定ですらPO率は122%と、アニマツリーのオッズアップ×4がついている場合とあまり変わらないからである。
あと、フロアアップが最下段に2FUPのものしかないとどんなオッズが出ようがPO率は100%を割ると思われる。

いやしかしこうしてみると、確かに設定や配置によってはPO率100%を超えるゲームもあるが、これまでの結果を総攬すると
ビンゴガーデン、チェーンボンバー→最大でもPO率90%台と思われる
アニマツリー、ビンゴファーム、ヘブンツリー、サンダースマッシュ、ビンゴバルーン、ハッピーフラワー、アニマドロップ、クラッシュドロップ→PO率100%超えの設定は可能
ハニーエイト、ハニーファイブ→最大PO率100%に届かない説濃厚
サンダーブレイク→不明


なお、現時点でインターネット上に公開されているアニマロッタの確率に関する情報は、メダルゲーム掲示板とアニマロッタのWiki(マイナーだが)であり、ここにビンゴガーデン、チェーンボンバー、アニマツリー、ワンダーチャンス、JPCのPO率が掲載されている。
ハニーエイトはたまにPO率が60%ちょっと云々とかいう話を聞く。
ただこれ以外、PO率に関する情報はアニマロッタではないと思われる。
カラコロッタではバブルクラップとあにまだま以外、たしか求めていた人がいたと思う。
あにまだまはかなり昔、我が消し玉出現率と配当出現率ごとに集計させたがなんか需要がなさそうだったので公開はやめた。


余談:アニマロッタとはあるラウンドワンで遭遇した。そのラウンドワンはもう閉店したが。メダル30枚無料チケットで興味をひかれたカザーンをやっており、その隣にアニマロッタ(初代)があった。カザーンに飽きた後、アニマロッタにはまったのがきっかけ。たぶん2012年だと思われる。

18-2 ヘブンツリーのプログラム

ビンゴバルーンを待っている間に、ちょっと合間に作った程度なのでプログラムに誤りがあるかもしれない。よって以下に示す情報はシミュレーション結果といえども、確実ではないことに注意。間違いに気づいたらこの記事は取り下げるつもりである。
ただ、いろいろなパターンでちゃんとオッズが計算されていることを確かめたので、たぶん正しいはず…。

プログラムは以下。まずは各種操作の定義。

 oddsmakingという関数は、フロアがアップしていくとき、出現フロアの階層に応じて何倍のオッズが出現するかを規定している。
oddsupという関数は、各フロアのHIT状況を判定し、HITかつそのマスにODDSUPがあればその倍率が加算される。なおその後加算された倍率値は初期化される。でないと毎回その値が加算されてしまうからである。ちなみにFor文でi=1からi=1と一見意味のないことをしているように見えるが、これは関数をひとまとめとして処理するためにやむなく付け加えている。そうしなければセミコロン以降の次の処理が無視されるためである。たぶんこれについてはもっといい方法があるはずだが安直にこれを採用しておいた。
floorup1は現在フロアから何フロア上昇するかを判定する関数。これは途中に出てくる2FUPや3FUPに対してもうまく動くのは一応確認しておいた。
Normというのが中にあるが、要するにNormが0でない、というのはいずれかのマスは必ず0でない、つまりそのフロアから次のフロアへ上昇できる、ということを意味している。
別に愚直に書いても良いが…。(「または」の記号を3つ使うことになる)
floorup2はfloorup1にて取得した上昇階数分、フロア上昇処理を行う。このときにオッズアップマスが生成されるのでoddmakingが役に立つ。また番号はアニマツリーの番号配置の定義に従っている。つまり、次のフロアに出てくる候補の番号は現時点までにすでに出ていない番号であってかつフロア移動後真ん中と下の段と番号がかぶらない番号の中から2つ昇順に選ばれる。この辺りの条件はComplement(補集合)とUnion(和集合)などを使って書いている。


そして用意が整ったのでいよいよゲーム処理実行。
最初の番号を固定しているが、これは別にほかの番号にしてもたぶん確率は変わらないのでこのままでよい。
上の画像ではヘブンツリーなのに中段と上段に番号が4つ配置されているがこれは後で修正した。
あとはまあ特筆すべきことはない…と思う。

これらのプログラムが正しいことを仮定して、以後はシミュレーションの話に移る。
一応いろんなパターンでうまく動作していることを確かめたのでおそらくあっていると思うが…。

18-1 ヘブンツリーについて

自作アニマロッタ側でヘブンツリーは当面の間作らない予定だが、まだヘブンツリーに関する情報がインターネット上で現れていないので、ちょっと片手間にプログラムを書いてみようかと思っている。スマッシュやハニーエイトはもうとにかく定義する部分が多すぎて面倒なのでやる気が起こらない。

すでにアニマツリーは、メダルゲーム掲示板みたいなところで確率が出されている。我も中学生の頃はこれすごっと思い参考にさせていただいた。こういうシミュレーションはどうやっているのか、と思った。

ヘブンツリーも、実際はアニマツリーと似たような処理であるから、できる人がいないはずがない…が、それでも確率がいまだ求められていないので、求めてみようと思う。

そのためにはヘブンツリーの初期配置の特徴等を観察しなければならない。
どうもPO率の調整は最下段にどんな倍率やフロアアップが配置されるかに起因していると思われるので、その配置を以下に動画を見て記していく。
以下、スタートフロアを1Fとする。まず固定で以下。
1F左 なし 番号4つ
2F左 2倍 番号3つ
3F左 2倍 番号3つ
4F左 3倍 番号2つ 0.3倍
5F左 4倍 番号2つ 0.6倍
6F左 5倍 番号2つ 1.2倍
7F左 5倍 番号2つ 2倍
8F左 5倍 番号2つ 3倍
9F左 5倍 番号2つ(実質意味なし) 5倍

次にランダムで以下の配置など。
パターン1 最下段なし 1Fに2FUP
パターン2 最下段なし 1Fに3FUP
パターン3 最下段なし 2Fに2FUP
パターン4 左2に2倍 1Fに2FUP
パターン5 左2に5倍 1Fに2FUP
パターン6 左2に2倍、左3に2倍 1Fに2FUP
パターン7 左2に3倍、左3に3倍 1Fに2FUP
パターン7 左2に3倍、左3に2倍 1Fに2FUP
パターン8 左2に2倍、左3に4倍 1Fに2FUP
パターン9 左2に4倍、左3に5倍 1Fに2FUP
パターン10 左2に5倍、左3に5倍 1Fに2FUP
パターン11 左2に4倍、左3に5倍 1Fに2FUP 2Fに2FUP

以上の配置から、2FUPと3FUPと2F3FUP同時出現の3パターンを考え、
そのそれぞれに対してオッズアップの配置がせっかくなので全部のパターンを考えようと思う。すなわち{左2つ目のオッズ、左3つ目のオッズ}として、
{0,0},{0,2},{0,3},{0,4},{0,5},{2,2},{2,3},{2,4},{2,5},{3,3},{3,4},{3,5},{4,4},{4,5},{5,5}の倍を考える。

2019年12月7日土曜日

17-5 同一パターン補間のプログラム

これまでに、回転や鏡像移動で同じものとみなせる配置はPO率計算を飛ばしても良い、としてきた。せっかくなので、どのようにプログラムしているかを解説する。
toID1という関数は、25個の中から5球取り出した組を、重複なく昇順に並べたものの順番付けをするものである。例えば{1,2,3,4,5}というベクトル値を受け取ると、1という値を返す。toID2はFREE2個の配置用で、toID1の2個取り出すバージョンである。
sgn0はある番号に対して90度回転を与える関数、mir0は左右反転を与える関数である。
最終的には集合を回転させたので、そのためには要素の回転が先に必要になるであろうということから、これを関数化する有用性が見て取れる。
toID11からtoID8は、toID1とかの11,10,9,8球バージョン。それぞれあらかじめオッズを格納したベクトルの指定用。
なにしろいちいちオッズの判定をしていると時間がかかるから…。
sgnとmirは、与えられた集合(長さは任意)を90度回転、左右対称反転するもの。
具体的に言うと、引数として指定した集合を要素ごとにバラバラにして各種回転、反転操作をかけて、それをまた集合に再構築し、さらにそれをsortすることによって昇順にする、というもの。Sortを使わないと例えば{1,2}を引数として渡すと{16,9}となってしまい、先述の重複なく昇順に並べる、という規則に反するので非常に不都合になってしまう。

最後にcheckは、与えられた引数(集合)の回転や対称反転を行った先の組み合わせのIDを順次7個、ベクトルとして返す関数である。

こういった先に関数を指定して後でそれを使うというアイデアはウディタのコモンイベントに引数があるのを見て、それを使うと楽になるのではないかと知ったのがきっかけ。
まだこれを知らなかったころ、自作アニマロッタ風ゲームなどですごく手間な入力をしていた時代があった。


これらで準備が整って、以下のようにプログラムを組む。
といっても思いつくままに書いて、後で修正をするやり方なのでプログラムのミスが頻発するが後で直すのであまり仰々しく丁寧に入力してはいない。
やっていることとしては、5000回に1回進捗状況を示して、という最初の命令と移動先を移動元に直すためには逆演算をする、ということを記述している。
例えば反転→回転→回転→回転でデータを見つけた場合、戻すためには回転→反転としなければならない。

この操作は十数秒程度で終わったと思う。

これでようやく、保留しておいた部分を埋めることができ、ようやくFREE2個のデータが完成するわけである。



17-4 ビンゴバルーン最適解適用例

せっかくなので、ここで得たデータを実際に適用してみようと思う。

http://s0531033.blog.fc2.com/blog-entry-14.html
上にあげるブログに、ビンゴバルーンの攻略法が載っている。

たぶん普通は我のブログ以外を参照したほうが直感的でしかも理解しやすいから良いと思う。だが我のブログは、数値の解析重視で話が進んでいるため、たぶん一般受けしない。がやってて楽しいので休憩がてらにやっているだけ。

さて、上記URLを参照すると、ある最初の5球の組が与えられたとき、どのように配置をするのが適切か、という問題が提起されている。

その中の「パターン1」では、我のブログでいうところの組{6,11,16,18,22}に相当し、これはID40393である。この時23マス目に配置するのが最適であり、払い戻し率は44.324%である。
あちら側でも、最適は9と書かれている番号、すなわち23マス目に入れるのが適当といっており、これは最適解の数値的検証により裏付けられた。

では次に「パターン2」を見てみる。これは組{17,18,20,21,23}でIDは53021。
これの最適解はID131で、{17,19}の組が最高配置を与えて、その払い戻し率は442.5439%と実に4.4倍。
これもやはり考察が正しいことが裏付けられている。

最後に「パターン3」についてこれは{4,6,8,13,20}の組で、最適解は{14,24}であり、その払い戻し率は289.7807%である。これはどうやら5個ラインを狙いに行ったほうがいいらしい。ここだけは「最適」とした結果が異なる。

このようにして、悩ましいパターンを解決していくことができる…がこれを使うかと言われれば我は使わないだろう…。

17-3 ビンゴバルーンFREE2個解析結果

ついにFREE2個による最適解の構成が終了した。1日と半分くらいで終わったと思われる。やはり予想通り20~30時間程度かかった。
なお、FREE3個は25C2のFREE配置が25C3となるため、およそ8倍弱に膨れ上がるので1週間以上はかるくかかるため、やるかどうかは不明。

さっそくお楽しみのデータ開帳である。

最高配置はID2423などであり、{1,3,7,13,19}で、最適解はID299、つまり{23,25}。
これは縦の7個ラインを意味する。そして期待値は3151.23%となり、平均31.5倍の払い戻し率。

最低配置はID17412など、つまり{2,9,13,17,24}で最適解はID72、つまり{4,7}であり、
この時の払い戻し率は23.0702%である。

FREE2個を得たときのPO率は189.8806601%であり、以後はこれを190%とする。

するとFREE1個とFREE2個ではPO率が45%と190%と、極めて大きな差異がみられる。

FREE3個の場合は、FREE2個+oddsupの配置を必ず取ることができるので、PO率は少なくとも380%を超えることは確定である。この上にさらに赤バルーンと被らないようにFREE3個を置けるので、最初5球での最適解はそのオッズアップ1個とFREE2個の配置か、それともその3個の配置の最大を取ることができるためである。
むろん、FREE4個の場合のPO率は確実に570%を超えると思われる。

するとここである案が浮かんでくる。
ビンゴバルーンの初期FREE設置数で勝てるか負けるかを判断できるのではないか?と。
以下、+FREEが1個配置される確率をx、+FREEが2個配置される確率をyとする。すると確率の定義から自動的に+FREEが3個配置される確率は1-x-yとなる。

さて、+FREEが1個設置された場合、FREE2個となる確率は、その+FREEにHITする確率なので、25C5通りの中から、その+FREE1個を含むため残り4球を24個から選ぶので24C4通り。この確率は24C4/25C5=1/5となる。
次に+FREEが2個配置される場合も同様に考えて、FREE3個を得る確率は1/30,FREE2個を得る確率は1/3,FREE1個のままの確率は19/30である。
最後に+FREEの3個配置も同様に考え、FREE4個を得る確率は1/230,FREE3個を得る確率は2/23,FREE2個を得る確率は19/46,FREE1個のままの確率は57/115である。

これらをまとめると、最終的に獲得できるFREEの個数は、
FREE1個がx*(4/5)+y*(19/30)
FREE2個がx*(1/5)+y*(1/3)+(1-x-y)*(19/46)
FREE3個がy*(1/30)+(1-x-y)*(2/23)
FREE4個が(1-x-y)*(1/230)
となっている。
今、FREE1個のPO率は45%、FREE2個のPO率は190%、FREE3個のPO率は380%以上、FREE4個のPO率は570%以上であるので、期待値は1.14-0.4x-0.095y以上、ということになる。

これからわかることは、0.4x+0.095y<0.14ならば、全体のPO率としては100%を超えるため、一応理論上は勝てる計算になる。
なお0.4x+0.095y>0.14ならばPO率100%未満、というわけではない。なぜならFREE3個とFREE4個の場合はおそらくもっとPO率が上がるとみているからである。

というわけで、全体としてのPO率は100%を超えるためには、例えばx=0.2,y=0.6ならば、
0.08+0.57=0.65となり、PO率100%を超えるかどうかは怪しい。不等式を満たさないが、先述の仮定から100%を超える可能性もある。

適用例としては、ビンゴバルーンを8面にして+FREE1個が5面、+FREE2個が2面、+FREE1個が1面で出た場合はx=5/8,y=1/4を代入してみるとよい。

ただやはり、FREE2個の適用パターンを暫定的に3、4個に適用しているのでx,yが満たさなければならない条件が厳しいのが問題。
これはもう、FREE3個などの計算が終わるのを気長に待つしかない。

最後に配当分布を載せておく。
上は全部のデータでは無く、だいたいの範囲を載せたもの。横軸は倍率、すなわち払い戻し率(PO率)、縦軸は53130通り中その範囲に収まったパターン数を表している。
例えば横軸の値が30を超えるものもあるが、ごく少数なので範囲に入れていない。
いれてしまうとなんかわかりにくいグラフになるためである。
すなわち縦軸の値を53130で割れば、その階級の確率が出てくる。

さて次はFREE3個の最適解構成だが、1週間以上PCに作業をさせるかどうか…。

なお最近はまったくアニマロッタ5をやっていないが、当時はビンゴバルーンを8面でよくやったものだった。これはやはり経験がものをいう。

2019年12月5日木曜日

17-2 ビンゴバルーンFREE1個解析結果





いやなんか、何度も記事の削除と作成を繰り返しているのは、いろいろとこちらにも事情があって…。つまり一筋縄ではいかないということ。
結局普通の総当たり法に行き着いた。

ここでは、比較的処理数が少ないFREE1個配置の場合を見ていく。
まず、FREE1個のもとで、最適解を選んだ場合のPO率は44.0738196%である。
これは、FREEの追加がなければものすごいスピードでメダルが減っていく、ということである。

ほぼすべての場合において、この場合に黄色バルーンを赤バルーンに重ねてオッズアップすることは期待値が下がるが、初めの53130パターンのうち189パターン、つまりわずか0.03557%である。

左上から順番にマスに番号1,2,3,4,5…とふる。

最初の5球で最も期待値が低いものは組{1,6,14,15,24}などであり、PO率は4.7472%。

逆に最も期待値が高いものは{2,6,12,18,22}でオッズアップを踏むパターンで、PO率は401.7544%である。

以下は配当分布。
ちなみに、わからない配当を仮定しており、とりあえず3個ライン7個は50倍、4個ライン4個は30倍としている。ただ、これが成立するのは前者はFREE3個以上、後者はFREE4個のときに限る。



縦軸が1の部分より高さの高い部分、すなわち小さいほうから数えて44000あたりから53130個目が払い戻し率が100%を超える。
なお、最大値が401.7544と低い理由は、7個ラインビンゴをシンキングタイム時に確定構成できないからである。これらは25倍であるといえども、残り1個に入賞する確率は15%なのでPO率は395.9752%となり、実はわずかに5個ライン確定の組み合わせのPO率に届かない。

もちろんFREE2個になれば確定7個ラインを成立させられるので、上のグラフの最大値は25以上になることは確実。

FREE2個も最終的には53130*2個のデータになるが、そのデータの貴重性がまるで違ってくる。

なお、学生用のmathematicaを自宅のPCにインストールしたので、これで12時間制限はないうえ、仮想サーバーより速く動くようになったので、たぶん20~30時間あればFREE2個のパターンは終わると思われる。

2019年12月4日水曜日

17-1 同一配置を与える置換

ビンゴバルーンのマスの定義の仕方から、{1,2,3,4,5}と{21,22,23,24,25}は180度回転を通じて同一パターンである。また最適解の組にもこの180度回転が適用できる。
このような同一パターンを見つけ出し、ビンゴバルーンの最適解の処理軽減を図りたい。
現状のプログラムでは、相当処理に軽減をする工夫を加えたもののFREE2個程度ですでに推定30時間となってしまっているためである。

まずは鏡像対称を考える。そこから90,180,270度までの回転を考える。これによってだいたい1/8くらいに軽減される。するとおやすみしているうちにFREE2個は完成するだろう。

どうすれば効率よく既に数値計算された組を見つけ出せるかが課題となる。
とりあえず各番号がどのように推移するかを考える。
例えば90度ずつ回転させると
1→16→25→10→1と循環する。ほかも同様に考えて、
2→9→24→17→2
3→15→23→11→3
これになんとか規則性を見出そうとがんばってみると、
とりあえず上の例では3つ目の数は初めのものを引数xとすると明らかに26-xである。
2つ目の数字が自明でない。その理由は同じ回転でもマスの定義の仕方と回転の相性が悪いからと思われる。そこで式にすることはあきらめて、とにかく地道に1~25まで書いていく。
がしかし、上を見てわかる通り25などは90度回転で10に移動するように、これは結局1からの回転の途中を開始としたものとみなせるので、実質
1→16→25→10→1
2→9→24→17→2
3→15→23→11→3
4→21→22→5→4
6→8→20→18→6
7→14→19→12→7
13→13
と上記7つに絞られる。
というわけで、例として5つ組{13,17,20,21,22}を考える。
すると13はいくら移動しても恒等置換なので意味がない。
17は上の推移により2というよりわかり番号へ行く。これはこの組の先頭が(=最も低い番号が)13であるため、この時点で目的は達成される。
するとこれは90度回転をすることになるので13→13、17→2、20→18、21→22、22→5となり、これを昇順に並べ替えて{2,5,13,18,22}となり、最適解も同様に移動したものが新しい組の最適解である。もちろん最高期待値も同じ。

このように順次変換をしていき、もともとの最小番号より小さいものが現れればその移動先を参照するプログラムを作ればよい、ということが分かる。
ただ、これでは組{1,3,4,7,8}のようなものは同一パターンが見つけられない。一応鏡像として{1,2,3,6,7と}という組があるが。
そこで上の話に鏡像パターンを組み込めば、とりあえず1/8くらいに処理が軽減されるのではないかと期待する。
具体的には先ほどの例{13,17,20,21,22}で鏡像を考えて{13,17,18,21,24}を得てどちらが先かをチェックする。
この場合は3番目の数が推移先のほうが若いのですでに数値は得られていることになる。

このようにして、鏡像と4回で恒等置換になるような回転の置換を考えて、その中から自分より順番が若いものを探すプログラムを作成する。順番が若い、というのは各要素の大小を順次判定しても良いが、普通に{1,2,3,…25}の5個の要素からなる部分集合族を与える関数Subsetsを利用できるため、そちらを使う予定。53130個の集合を持つ集合族なのでもしかすると要素抽出に時間がかかる恐れがあるが。

これで処理軽減はできると思うが、FREE3個以上になるとこれをもってしても厳しい可能性がある。が正直FREE3個や4個を配置できるような現場に遭遇することはたぶんあまりないし、FREE4個とか超レアなので確率は(5C3)/(25C5)で1/5313なのでほぼ0。しかもFREEが3個候補としてでるとも限らないので。
目標としてはFREE3個までを求めたいと思っている。

とりあえずはこの方法によりFREE2個の処理軽減を図ることにより、実際には、
1回あたりの処理がなんとか工夫を凝らして12秒まで減らすことができ、これを53000回繰り返すと10600分かかる。ただし、先述の対称、鏡像配置により1/8に単純に減らせると考えられる。もちろん{12,13,14,15,16}などの組は{3,7,13,19,23}が2つしかなかったりするのでこの例にはあてはまらない。
しかし、ざっくり1/8と考えてみることにすると、1325分。これは22時間程度相当。実際には上の例外があるので、たぶん1日~2日程度かかるのではないかとみている。




2019年11月29日金曜日

16-10 BETタイム再強化とおまけ

BETタイム時に、各種設定が見えないようにして、ロゴの追加や、BET時にBET額が徐々に上がっていく演出を実装。
閉じるボタンを描画したが、まだ閉じることはできない。

ちょっとここでネタをはさむ。
ビンゴファームはある規則により、配置番号が偏らないようにできているが、その制限を取り払うと以下のようになる。本家では起こらないので注意。
 上の画像のように1が入ればオールラインである。
オールラインになると2つ目の画像のようになり、
40ラインの配当が76倍、スーパーの配当10倍が16個で160倍、ハイパーの配当50倍が2個で100倍、計336倍のあたりとなる。

余談だが、現時点でのコモンイベントファイルはすでに6MB以上に膨れ上がっている。

2019年11月27日水曜日

16-9 サンダースマッシュのPO率(2)

さて、まずはサンダースマッシュにはこちらが調べたところでは12パターン存在して、
パターンxのことをxと表記することにして、左側がx,右側がyのことをx-yと表記することにすると、1,4,6,7,9,10,12が最下段に雷があり、2,3,5,8,11が最下段に雷がない。
さらに、左右対称となるような組み合わせは、最下段に必ず1個だけ雷マスが配置されることから、片方は1,4,6,7,9,10,12のいずれかから1つ、そしてもう片方は2,3,5,8,11のいずれかから1つ選ばれる。したがってそのような組み合わせは存在しない。

次に、1-2と2-1のようなひっくり返すと同じものになるような2つの組み合わせは、明らかにPO率が同一であるから、以後いろいろなパターンを調べる際は、左の最下段に雷があるものとしてよいことになる。

となると、全体の組み合わせとしては7*5=35通りの配置が考えられることになる。
この35通りの中で、どの組み合わせがPO率が良く、また期待値のおおまかな分布はどうなっているのか、そして片側全消し、両側全消しの確率はいくらか、を見ていくことにする。
あ、1とか2とかの配置は実際はどうやねん、ということについてはこの記事の下のほうでたぶん画像を張り付ける。画像の順番に、左から1,2,3,4,5,6,7,8,9,10,11,12という感じ。

以下は35種類の組み合わせを記述した「表」である。エクセルが使えるのは大学のPCだけや…。というわけで簡単なもので代用する。
左から組み合わせ、PO率、片側全消し回数、両側全消し回数、配当発生回数、1倍以上回数、3倍以上回数、5倍以上回数、10倍以上回数、30倍以上回数、50倍以上回数であり、それぞれ試行回数は10000回としている。これ以上は時間がかかる。
なお10000回なので、PO率の小数点1桁は信頼性がかなり低いと思われる。
仮定として、オッズアップは各ブロック50%で、全消しは100%でオッズアップすることにしているはず。
組  PO 片全 両全  獲得  ×1   ×3  ×5  ×10  ×30  ×50
1-2 87.5% 28回 0回 5392回 3451回 470回 116回 33回 28回 0回
1-3 98.9% 86回 6回 6055回 2445回 437回 187回 94回 92回 6回
1-5 85.0% 33回 2回 5431回 3285回 375回 95回 35回 35回 2回
1-8 82.2% 115回 3回 4734回 1417回 306回 190回 120回 118回 4回
1-11  94.6% 97回 12回 4939回 1812回 415回 199回 122回 109回 15回
4-2 85.1% 6回 0回 5055回 3293回 645回 134回 11回 6回 0回
4-3 75.6% 5回 0回 5618回 2298回 591回 205回 20回 5回 0回
4-5 81.7% 5回 0回 5159回 3191回 533回 116回 13回 5回 0回
4-8 55.5% 16回 0回 4267回 1382回 420回 196回 37回 16回 0回
4-11  61.8% 4回 1回 4614回 1726回 454回 181回 51回 6回 1回
6-2 83.2% 18回 1回 5321回 3225回 508回 197回 24回 19回 1回
6-3 92.7% 63回 5回 5354回 2066回 622回 407回 78回 68回 5回
6-5 77.9% 14回 2回 5406回 3090回 454回 170回 20回 16回 2回
6-8 84.1% 93回 5回 5106回 1285回 498回 401回 110回 98回 5回
6-11  80.3% 45回 6回 5547回 1615回 480回 281回 129回 51回 7回
7-2  119.0% 25回 2回 5637回 3854回 1044回 356回 54回 27回 2回
7-3  124.2% 49回 2回 6267回 3051回 1027回 612回 110回 51回 2回
7-5  104.1% 15回 1回 5556回 3550回 818回 251回 32回 16回 1回
7-8  102.1% 71回 4回 4744回 1930回 734回 517回 158回 75回 4回
7-11 102.9% 36回 6回 5022回 2192回 718回 411回 201回 42回 9回
9-2 65.5% 11回 1回 5756回 2166回 391回 98回 18回 12回 1回
9-3 63.0% 31回 3回 5742回 1357回 367回 148回 40回 34回 3回
9-5 61.0% 7回 4回 5765回 1850回 308回 82回 16回 11回 4回
9-8 53.4% 41回 6回 5134回 851回 263回 129回 51回 47回 6回
9-11 58.9% 32回 2回 5434回 1098回 311回 153回 60回 34回 6回
10-2 87.8% 33回 5回 4383回 2515回 704回 204回 50回 38回 5回
10-3  124.6% 132回 13回 5242回 2062回 751回 417回 155回 145回 16回
10-5 84.3% 32回 7回 4514回 2425回 581回 193回 43回 39回 7回
10-8  129.4% 204回 23回 3846回 1307回 539回 396回 236回 227回 26回
10-11 114.2% 137回 12回 4048回 1485回 528回 328回 197回 149回 22回
12-2  116.3% 22回 1回 7159回 4474回 642回 215回 38回 23回 1回
12-3  104.4% 35回 5回 7012回 2756回 771回 340回 57回 40回 5回
12-5  103.1% 9回 0回 7039回 3991回 558回 146回 17回 9回 0回
12-8  80.3% 62回 2回 5210回 1589回 479回 263回 84回 64回 3回
12-11 86.1% 31回 5回 5551回 1989回 569回 256回 89回 36回 5回
というわけで、このデータによると下の画像の組み合わせが最も悪い。
もちろんほかのカードの把握し忘れなどもあるので確実ではないが、それでもこの組み合わせの期待値は低い。組み合わせは8-9
逆に、下に挙げるほうは最高の期待値を誇る組み合わせ。8-10である。
片側全消し率はなぜか最も高く、2%にも上る。
期待値が高くなる原因としては、右側は雷が最下段のどこにHITしても必ず次の段も雷になる、ということに由来している…?
それにしても、パターン8が相手によってはよくも悪くもなりうるというのは意外である。

なお、パターン2,3,4,5,9が雷マス6個以下、1,6,7,8,10,11,12が雷マス7個以上である。
そこまで雷マスの個数による有利かどうかの判断はつけにくい傾向がある…?

片側全消しはざっくりとみて平均で0.5%(200回に1回)、両側全消しは0.05%(2000回に1回),
という感じか…?

たぶんこんな感じの分析であっていると思う。確証はないので注意。
なにしろサンダースマッシュの確率を解析する人物がほかにいなくて…。


ちなみに、実際に最高設定のスマッシュをたくさん実行したところ、やはり長くやるとPO率が110%を超えてくる。さらに、超高額リーチの発生頻度がそこそこ多め。やはり設定が良いと思われる。

16-8 サンダースマッシュのPO率(1)

PO調整をするようになってから気づいたが、サンダースマッシュのPO率がどうも初期雷数依存ではあまりないという事実が判明してきた。
高設定にしてもスマッシュは目標のPO率80%に届かないし、逆に低設定にしてもなかなか7割を割らない感じである。

これには考えられる原因が2つあって、一つ目は
そもそもPO率が低い⇔初期雷数が少ない を真としていることであって、
この場合は、それぞれのパターンの組み合わせのPO率を個別に調べ上げる必要あり。

2つ目は低設定や高設定パターンのサンプルを採取していない、ということである。

そういうわけで、演出を抜いた高速実験を行う。余計な部分を削り取って、とりあえずあったら面白そうな情報をピックアップして適当にいろいろ変更してみた。
上の動画はひたすら試行回数を重ねてPO率やその他の情報を割り出している最中である。
これにより、1回あたりのゲームにかかる時間が大幅に短縮された。

とりあえず数万回程度を目安にしてどういう状況化を把握していきたいと思う。
いやなんかmathematicaにスマッシュのパターンを再度うちこむのに嫌気がさして、もういっそのこと実装したゲームから演出やその他いろいろPO計算に不要なものは排除してウディタでそのままやったほうが、いい、という結論を得たので…。
もちろんこれはコピーしたゲームをいじくっているわけであり、もとのゲームは残っている。さすがにそんな愚かな行為はしない(といいつつつい先日もデータが消えていたりする)

ただ秒速8ゲーム程度なので、以後いろんなパターンで実際に確率やPOを求めていくときはもうちょっと余計な操作がないかチェックして、1ゲーム当たりの処理時間を早くしようと思っている。とりあえずたくさん試行すれば70%台におさまるはず。これまでのデータから見るに。

よく雲の大樹の攻略法を教えてください!とかいう質問を見かけるが、そもそもどんな配置がどんな確率で発生する等の情報が得られなければ、それは開発側でもない限り不可能である。なおKONAMIのアニマロッタを作っているグループは我の憧れである。一度はアニマロッタの機械構造やプログラムなどの事項をこちらのほうが知りたいほうや…。
プログラムなどや様々な確率を知ることができればこちらはシミュレーションでおそらく全ゲーム対応可能だと思う。
したがってこのブログで攻略法を扱うことは不可能である。だがこういう設定になるとこんな感じの挙動で、PO率がこれくらいで…という話はすることができる。



16-7 ペイアウト率とは

ペイアウト率(略してPO率、とこのブログでは記述する)とは、PAYという支払いに対してOUTという外に出す、つまり排出、ということで、ある掛け金に対してどれくらいの割合で手元に勝ち金?が返ってくるかを意味する。

例えばPO率80%ならば、100BETすれば平均80枚ほど勝つ計算になるし、
PO率105%ならば10000BETすれば平均で10500枚ほど勝つことになる。

簡単な例として、6面サイコロがあるとして、1が出れば掛け金5倍、それ以外は掛け金没収、というゲームがあれば、PO率はちょっと計算していくと83.3%となる。
また、この掛け金5倍が7倍だった場合、111.7%となる。
・・・というのはうそで、計算ミスだったので実際は116.7%だった。

100%より小さければかけた人は長い目で見ると損をするし、100%より大きければかけた人は得をする、というものである。短時間ではそうならないことも普通にある。

メダルゲーム等のPO率は最高設定でも100%であるらしい。よって最高設定以外の場合では基本負ける。

ではどのくらい負けるか、ということを実例を交えて紹介したいと思う。
まず、10000円で4000枚ほどメダルを購入するとする。そして個別に30BETずつしてナインビンゴということで10ゲーム分あるので、1回のゲームではトータル300BETということになる。1回あたり2分でゲームが回ると仮定するとだいたい以下の結論を得る。ただあくまで理論上なのでほかSTとの兼ね合いなども考えると、以下のようにはたぶん行かないと思われる。

PO率100% いつまででも遊べる
PO率95% 9時間ほど遊べる
PO率92% 6時間弱ほど遊べる
PO率90% 4時間強ほど遊べる
PO率88% 4時間弱ほど遊べる
PO率85% 3時間ほど遊べる

具体的な計算方法としては、PO率がn%であるとすると、1回あたり300*(1-(n/100))=300-3n枚を失うことになるので、もともと4000枚であるとすると、4000/(300-3n)回遊べることになり、これは1回あたり2分なので8000/(300-3n)分くらい遊べることになる。

我の自作アニマロッタでは目標として全体のPO率を70%~110%くらいに設定できるようにしたいと思っている。


2019年11月26日火曜日

16-6 PO率調整機構(4)

ver1.4にて、チェーンボンバーやビンゴバルーンに大きめの修正を加えたものが以下。
ナインビンゴを除いたINは14661000であり、OUTは11730300となり、POは80.01%と、ほぼ設定したPO率そのものとなった。
これより、少なくとも通常ゲームがPO率80%にはなるように設定できることが分かった。
そしてワンダー等の加算がだいたい10付近とみられるので、全体として90%。ラウンドワンが88%とかどこかで書かれていた気がするが、これくらいなら確かに設定可能な数値である。
上のゲーム別のPO率を見ると、どれもPO率80%の6%前後に収まっており、調整機構がよく働いているといえる。
アニマロッタがただ運だけで、設定とか関係ないという極論を展開しだした人物も過去にはいたが、そのようなことは通常否定される。が我はその決定的な証拠は見ていないので絶対に偽であるとは言わないが、ほぼほぼ確実にPOの設定はある。

通常ゲームのPO率設定がいったいどこまで可能か、ということでとりあえず状態値0と100固定でやってみて、どれくらいが設定可能なPO率かを推測したい。
状態値100や0はそこそこ設定が極端になっており、これより状態値を上げたり下げたりすると例えばビンゴバルーンで必ずFREE1個とか必ずFREE3個とかいう固定パターンっぽくなるので、これ以上状態値の幅を広げるのはまずいかと思われる。

ではいったいどれくらいのPO率ならまともに遊べるのか、という話で、上の例で考えることにする。ワンダー全部含めて、トータルのINは16290000、OUTは13977011で全体PO率は85%である。桁が多すぎてしっくりこないので100で割ってみる。すると、
INが162900に対してOUTは139770となる。
1ゲーム30000BETだったのでこれを100で割ると1ゲーム300BETとなり、各種ゲームにはそれぞれ30BETずつすることになる。

手持ちを例えば10000円でラウンドワンの価値に合わせて、4000枚程度を購入したとする。
ここから、300BETを続けた場合、PO率は85%なのでざっくり計算すると1ゲーム当たり45枚メダルを失うことになる。
もし2時間くらい遊べば、1ゲーム平均2分と仮定するとゲーム数は60回なので、2700枚を失うことになる。

まとめると1万円で4000枚購入して、2時間ほど遊べば残り枚数は1300枚。
これがPO率85%というものである。実際にも起こりそうな気がする。
遊べるか遊べないかでいうと、これは遊べない部類に入る。

とりあえず上記の話を次の記事で改めてまとめることにする。PO率とは何であるかを。

2019年11月25日月曜日

16-5 チェーンボンバー初期配置設定

PO調整機構ver1.4にて、ビンゴバルーンにそこそこましな配置アルゴリズムを適用。内容は全記事に書かれている。さて、ボンバーのPO率設定の基準は落下してくる爆弾の色にのみ依存する、とされていたが、さすがにこれでは弱そう、ということでチェーンボンバーの初期配置にも手を加えることにした。

チェーンボンバーの初期配置は現行ではランダムに1から54までの数字を2つ選んで、その2つのマス間で番号を入れ替える、というもの。最初には上のほうに1~25が配置されているが、この入れ替えを繰り返せばランダムっぽくなるであろう、という発想。

この現行の配置システムに基づけば、54までの数字の選びを48や42などにすると、上のほうにばかり番号がまばらに分散することになる。

これをつかさどる引数を「上段指数」とする。
この上段指数が大きければ大きいほど、上段に番号が集まりやすい、つまり低設定となる。
上段指数が100の場合は最低設定、ということで上から6段に分散させて、0の場合は普通に分散する、ということにする。下段に集中させるのはちょっといろいろ準備が必要なため。あと指数有効率として、たとえば80と設定すると80%の確率で上段指数に基づいた番号の入れ替えが行われる。でないと下1,2,3段とかにまったく出現しないなどの極端な例が発生してしまう。
上段指数が100で指数有効率が100ならば全部上5段におさまり、
上段指数が100で指数有効率が0ならただのランダム分散、
上段指数が0で指数有効率が0でもランダム分散、
上段指数0で指数有効率100のときもランダム分散。
こうするためには上段指数100で選択範囲が30、上段指数0で選択範囲を54としたいので一次関数の決定とまったく同様に考えて-0.24x+54でよい。

以下の画像は比較用。
上段指数100,指数有効率50
 上段指数100,指数有効率80
 上段指数100,指数有効率95(笑)
上段指数50,指数有効率80
上段指数50の場合、先述の式によると上限IDは42であるから、上から7段目同士までの入れ替えを90%の確率で行い、それ以外はランダム入れ替え、ということになる。
すると上の画像のように、上7段に集中しやすくなる。

いろいろ実験した結果、とりあえず上段指数100,指数有効率75を最低設定、つまり状態値0として、状態値100では上段指数0,指数有効率0にする予定。つまりランダム配置。
もっとPO率を上げるには、もっと爆弾の色を増やす。下段集中のプログラムはまたやりたかったら作る。

これらの設定を施しPO調整機構ver1.4を立ち上げる。

16-4 ビンゴバルーン暫定配置アルゴリズム

なんかアルゴリズムとか仰々しい名前を冠しているが、要するにただ最適化はできないので、それに近い良い配置法をこちらが考えてPCに実行させる、というそれだけのもの。

仮に最適解が求められたとしても、その配置データをまるごとウディタ側に持ってくるのも大変な上、なによりそんなに最適化してしまうとユーザー側の利益になってまうやん、という2つの理由から、そこそこのアルゴリズム、しかも実装しやすい簡単なものでよいだろう、という発想に至ったのである。

まず以下のように配置を優先する。
7個オッズアップ→7個ライン→7個リーチ→5個オッズアップ→5個ライン→…

途中で5個リーチ→4個オッズアップというなんかおかしい流れになるが、まあよしとする。
さてビンゴのパターンは7個ラインが2つ、5個ラインが4つ、4個ラインが8つ、3個ラインが10個ある。まずはn個ラインのm個目のビンゴとして、7つ組を返す関数を定義。
5個など7個に満たなければ、その5個以外は0を返すようにする。
こうしてできあがった、ある意味関数とも呼べるこの作用をfとしておく。

次に、現在までに入った球数から、すべてのmとnの組み合わせに対してfを作用させて、必要な各種ラインまでに何個必要であるのかを2+4+8+10個の変数に格納する。
そして配置可能なFREE個数とを比較して、以下のように処理を行う。

配置可能数<最低必要個数 しょうがないのでそれを採用する。
配置可能数=最低必要個数 この最低個数となるものをもってビンゴとなり処理終了
配置可能数>最低必要個数 最低個数分配置して、繰り返し上記の作業を行う。

もちろんこのやり方が最適解であるはずがないが、それでも現状の単純すぎる配置方法よりはなかなかに良いものになる…と期待している。

これに至っては、ペイアウト率をあらかじめたくさん試行させてだいたいの概算値をつかんでおく予定である。
本当はプログラムは大量計算と実際の演出をするウディタと別に分けたいが、なんか時間がもったいないので全部をウディタでさせることにする。
mathematicaとかはこういうのはifとかwhileやwhichやforなどでかなり楽に記述できる(単純とは言ってない)上に計算能力が非常に高いという利点はあるが…。

このプログラムを考えている間にもPO調整は進行中である。

2019年11月23日土曜日

16-3 PO調整機構(3)

以下にPO調整によってうまく目標のPO率80%に近づけられているかを順を追って確認していく。

ver1.0 調整機構を実装。状態値が+1,0,-1の間で変動,0や100を超えてしまう
結果 スマッシュ、バルーン、ガーデン、エイト→高 ドロップ、ファーム→低
9ゲームPO率 75.7%


ver1.1 調整幅に加重をとり、範囲を0~100に、その他数値の微調整
結果 459回試行 ガーデン、ファームがそれぞれ不調
9ゲームPO率 79.4% いい感じに調整できている。…が気のせいかもしれない


ver.1.2 ビンゴガーデンの状態値が高いときより良いカードが出る、ファームの状態値が低い時のカードによりFREE1個が出やすく、バルーンの状態値高でFREE2,3個がさらに出やすくする修正を実行。
結果 ガーデン、バルーンがPO率低。ただこれはアルゴリズム等の問題なので、保留。
ファームのPOが低下し、理想に近く。ハニーエイトは30倍ボーナスが7回くらい出ており、これで630000枚の放出。これを除くと744000枚のIN中532800となり、71.6%となる。
したがって7連以降は設定のいかんにかかわらずスタート隣接マスが2個になる確率を高くすることが望まれる。スマッシュはより高設定低設定の差を大きくする、などが改善点。
9ゲームPO率 85.0%

ver1.3 ハニーエイト7連以降連荘しにくくなり、ファーム、スマッシュなどの設定をさらに調整。また、ハニーエイトで2個以下の時にも3個になってしまう問題を修正。
結果 824ゲーム分を集計。おおむね試行回数を増加させたおかげでよい感じに収束。
すべてのゲームが設定した80%周辺に収まっている。
9ゲームPO率 78.6%
注意:最下段のPO率が82%とかいうのはバグで、これはおそらくINが10000000を超えていることによる変数参照か何かの問題と思われる。
状態値の参考↓
アニマドロップ 79
チェーンボンバー 0
サンダースマッシュ 90
ビンゴバルーン 100
ビンゴガーデン 100
ビンゴファーム 23
ハニーエイト 100
アニマツリー 100
ハッピーフラワー 100
ボンバーはやはり数字が上に偏るか下に偏るかでより調整をかけたほうがよさそう。
バルーン、ガーデンは保留として、ファームがようやくPO率80%に対応した。
ハニーエイトは8連以降必ずスタート周辺拠点が2個という条件にしたため、やはり周辺スタートが3個以上でもエイトボーナスなしでは70%少しが限界?ということでエイトボーナス獲得の条件をもとに戻す。ツリーは全体的に良い設定として見直したい。フラワーはまあ…とりあえずこのままにしておくかちょっといじくる。

ver1.4 ビンゴバルーンの配置アルゴリズムを一新。ハニーエイトでエイトボーナス発生率を通常に戻す。やっぱり適切なパラメータ設定が難しいのはこういうところでも同じ。
しかしこうやって回収率を自ら設定してプログラムして実際にうまくいくことがなんか快感を覚えるというか…(変態)
ビンゴバルーンの配置の基準は以下
「まず7個ラインについて判定し、ビンゴになるならそれらをビンゴになるように配置、リーチになるならそのように配置。そしてビンゴとリーチの両方を考えて、残ったFREEの個数を5個ラインの判定に回す。5,4,3個ラインでもまったく同様の処理を行い、それでも余ったものはオッズアップとして配置する。」
なおこれまでの配置アルゴリズムは「あと1個でビンゴのところにFREEを配置。それ以外は適当(いい加減)なところに配置」というしょぼい配置方法だったため、PO率のそこそこの上昇が見込まれる。こうなると7個ラインの成立確率が高くなるわけである。

あと、ハッピーフラワーの高状態値により良い初期芽構成になるように修正。またビンゴガーデンも同様に高状態値に期待値最良のカードが出やすく(具体的には状態値100で80%)なるように修正。これで再び様子を見る。ついでにツリーも修正。
ボンバーも上段指数と有効率を実装、詳細は次の記事で。

結果



16-2 PO調整機構(2)

しばらくゲームをさせた結果、以下のようになった。
内部値↓
アニマドロップ -28
チェーンボンバー 67
サンダースマッシュ 150
ビンゴバルーン 150
ビンゴガーデン 146
ビンゴファーム -48
ハニーエイト 128
アニマツリー 65
ハッピーフラワー 40
ナインビンゴを除くと、2565000のINに対してOUTは1942300となり、PO率は75.7%である。一見なんとなくうまくいってそうに見えるが、これはもしかするとたまたまな可能性がある。内部値を見てわかる通り、100や0を超えてしまっている。
アニマドロップやビンゴファームは内部値をマイナスにしなければいけないほど高設定であり、ビンゴバルーン、ビンゴガーデンは低設定であることが分かる。

ここから言えることは、もう少しアニマドロップなどの状態値を引数とする設定を下げる必要があり、ビンゴガーデン、ビンゴファームの設定を全体的に上げる必要がある、と思われる。まだ100ゲームもやっていないので何とも言えないが、これまでの調整しないPO結果からもファームとドロップのPOが高く、ガーデンとバルーンのPOが低いことは承知していた。
ガーデンとバルーンはまだこちらの配置アルゴリズムがそこまでよくないのに起因している。特にビンゴバルーンとか。
ビンゴバルーンの配置基準は極めて難しい問題なのでとりあえず保留するとして、
ドロップとファームは修正の余地あり。
ファームはチャンスカードでしかPOを操作していないので、やはり通常時のカードのFREEマスでも制御しようと思う。


16-1 PO調整機構(1)

ゲームのシステムもまあまあ整ってきたところで、そろそろPO調整システムを実装しようと思っている。
本当は昨日やっていたが、突然USBが抜けた扱いに(抜けていないにも関わらず)なった音がして、その後更新をしてセーブをすると「CommonEvent.dat 0KB」という我々にとってスーパーデラックス0%0%0%並みの衝撃になる事案発生。
それを解決するのに時間がかかってしまったので、日を改めて今日ついに実装していくことにする。

それに伴い、ハニーエイトの設定案件としてスタートの周囲に何個番号があるか、ということでPO率調整をしようと思う。(ほかにも数字の偏りや、端っこに出現しやすい、などもあるが今回は考えない。理由は端っこの定義とかをすると面倒なので。周囲のマスを判定してマスが存在しない(=0)が1以上とかの要件が必要になるためである)
真ん中付近で、周囲のマスを判定して番号があれば1以上が返される。
がよく見てみるとマスが存在しない場合は0を返すので、上のプログラムだと実は変数0番に1以上の値があるとそれをカウントしてしまう…という問題があることがぱっと見るとわかるがその場所はなんとなく変数として使っていないので問題ない。
カウントが1以下ならやり直し、としているが、これを設定ごとに「1以下やり直し」「2以下やり直し」の2つに分ければよいだけである。
ただもしかすると周囲に3個マスがないような配置になることもあるので、一定回数やって周囲3を見つけられなければおとなしく周囲2でよい、ということにする。
目安としては100回程度。

さて、ここまで準備が整ったところで、いよいよPO率がうまく働いているか長時間稼働させてテストする。

PO率調整には状態値を用いる。最初は状態値50で、以後目標POより低ければ状態値を+1補正し、高ければ-1補正する。するといい感じにある値に収束するのではないか、という考え。かなり単純でこの方法だとすぐさま攻略法がばれてしまうわけだが(最初に100BETして合計WINが合計BETより下がった時点で最低BETにして内部値を上昇させまくって100になったころ合いを見計らって大量BETするというやり方)最初なのでこれくらいでよい。

だがしかし、PO率80%に相当する状態値が0~100にない場合は、おそらく0か100の値をとってしまうだろうとみている。その場合は、0や100に達したゲームの状態値を引数とした各種確率を見直すことになる。
いずれにせよ、長いことゲームを回さなければなにもできないので、ゲームスタートや。

今は9ゲームのPO率80%を目標として動作させている。
ナインビンゴは現状ではほかのゲーム依存なので、POの調整のしようがない。
本物ならばラインがそろえば配当GETなどがあるのでそれでいけるかもしれないが。

ワンダーチャンスとかを含めればこの80%に少し加わってくるので、たぶんPO率88%とか90%とかいう実機に近い形を出せるのではないかと期待している。

このPO率調整という楽しい遊びができるようになるまで一体何十万行のプログラムを書いたことか…。

次の記事では、ある程度の階数ゲームを行わせた時の結果と考察を書く予定。





2019年11月22日金曜日

15-15 自作アニマロッタプレイ動画

まだまだ不十分ではあるが、ひとまずそれっぽいものができたので中間発表的な意味合いで動画をとっておくことにする。
自動的に開始時に全ゲーム500BETずつされるようにしている。
定義によると内部値は3000~4000なので、これは金りんごLv2またはLv3のゾーンと思われる。
ちなみに我がいろいろ加工や自作などして頑張って作ったピクチャは以下。
png形式のものが852個、bmp形式のものが79個ある。
プログラム作成もなかなか時間がかかるが、良い画像を探してきたり加工したり透過処理すること自体も実は相当大変である。

今後の予定としては、BETタイム時の各ゲームの状態を再現しようと考える。
例えばビンゴガーデンはFREE配置はまだ行われていないし、チェーンボンバーも色の組み合わせや爆弾、番号の配置は決まっていない。これらに加えて、現時点での問題であるオッズ表等の更新も併せて行おうと思っている。

なお、BETタイムをより精密化し、上限なども設けた。
一つでも上限オーバー見込みが発生すると全ゲームBETは押せなくなり、もちろんその該当ゲームも押下できなくなる。
アニマの基準通り、3000BETを上限とし、アニマツリーのみ前回WINを引き継げる。ただし3000より大きい継続では追加のBETはできない。また、5000を超えると自動的に継続は5000となる。

BETタイムの条件設定は相当複雑なので、これはたぶん作るのは難しいと思う。