このブログ内を検索可能

2024年7月12日金曜日

テキサスホールデムの確率(10) ゲームの流れ

 テキサスホールデムのゲームをプレイしたのだが、何回やってもどういうルールなのかがさっぱりわからない。毎フェーズ賭けるプレイヤーが変わるうえ、全掛けすると急にディーラー側に5枚一気に配られるのでルールがまったくわからずシミュレーションのしようがない。

そしてなんか適当にやっていたら一瞬で全チップ消えた。

なのでまずこのゲームがどういう流れで進行するかを知らなければならない。

そういうわけで現在ゲームの学習中である。

2024年7月11日木曜日

テキサスホールデムの確率(10) 勝率計算

相手の平均的な役の確率分布が分かれば勝率が判明する。

相手の役の確率分布を{0,0,0,0,0,0,0,…,1(ワンペア数字3柄2),2(ワンペア数字3柄3),2(ワンペア数字3柄4),1(ワンペア数字4柄1),0,0,0…}と仮定した場合、

自分のカード7組の最大役がワンペア数字3柄3であった場合、「勝ち」となるのは相手がワンペア数字3柄2まですなわち1通りであり、勝率は全体の1+2+2+1=6に対して1なので1/6。

もし自身の現在のカードが6枚ならば、ここから1枚が提示されてこの7組になる確率は1/46でありその勝率は1/6である。結局1/(46*6)=1/276となる。

そしてその6枚のカードは他にも45通り存在し、それらに対して勝率が計算される。その和をとったものは期待値の定義になり、すなわちペイアウト率が判明する。

ただし重複を避けるために最初に結果の7組から、さかのぼって到達可能なパターンを判別し順次加算するため、各2~6組にたいしての並立作業は行えない。

かかる時間としては、7組は133784560通りあり、その各通りに対して7C2+7C5+7C6+7C7=21+21+7+1=50パターンの勝率判定があるので、67億回くらい大小の判定をしなければならない。よってその判定はとにかく簡略化する必要がある。

判定方法としては自身の役の強さ未満の確率分布の総和/確率分布を出すために行った試行回数で求められる。しかしこれは途方もない時間がかかることが予想されるのでいったん試行回数を650000回程度で止めてみた確率分布を採用してみる。

最初の2枚のカードのものでまず計算すると、100000回で32秒かかる。これを133784560通りやるので32*1337ということで40000秒くらいかかる。これは650分に相当し1日足らずで出来る。これは時間がかからず現実的である。

これが分かれば最初2枚時点での勝率がおおまかにわかるので、まず標準の確率分布をしっかりと計算させる。

7C2通りに対して加算処理を行うのが11時間程度なので、

7C5通りに対しても同じく11時間程度。

7C6通りに対しては7/21倍が期待されるので4時間程度。

7C7通りについてはそのまま勝率を用いることができる。

ただし7枚の組に関しては格納すべきリストの量が1億少々になるのでエクセルなどに保存できなさそうでそこをどうするかが課題。

一応下の結果は【ポーカーの確率表】テキサスホールデムポーカーの役の確率や勝率を解説 (pokerguild.jp)に記されているが、この数値が本当かどうかをチェックする。

例えば柄1のAと柄1の5ならば柄が一致しているのでsuitedであり、この表を見ると60%であるが、我の52C2通りのリストでそれに似た数値を得られているかをチェックする。ただし答え合わせまでは時間がかかる。
これがおおむねあっていると分かれば5,6,7枚の組に対しても勝率があっていることがおそらく保証されるので、いよいよ実用化可能。5~7枚の組に関して全データが載っているサイトはおそらくなく、有料レベルである。
正直ポーカーのプログラムとテキサスホールデムの仕様は知り始めてまだ1週間かそこらなので専門用語はほぼ何も知らない。
とりあえずルールに則って厳密な確率を求めることはできるが時間がかかることと、簡易バージョンの作成ができる程度である。そしてそれは先行データにはかけた時間の関係上勝てないがとりあえずカジプロでどれくらい通用するかが気になる。

途中経過として{2500000,{{1,1},{1,3},{1,6},{1,7},{2,6},{2,9},{4,9}},136,0.682751,136,{0.500769,0.151746,0.104533,0.10521,0.0651906,0.0656041,0.0633125,0.0636142,0.0645725,0.0649154,0.0652869,0.0656869,0.0869254,0.0650688,0.0549903,0.0551082,0.0555999,0.0505558,0.0510104,0.05118,0.051496,0.0526326,0.0529934,0.0533849,0.0538071,0.087283,0.0652069,0.0549194,0.0550502,0.0555457,0.050558,0.051025,0.0511983,0.0515161,0.0526592,0.0530217,0.0534151,0.0538389,0.0883532,0.0656368,0.0550524,0.0551591,0.0556651,0.0506536,0.0511237,0.0513004,0.0516234,0.0527719,0.0531412,0.0535426,0.0539735,0.0544433,0.0547887,0.0551341,0.0525799,0.0529617,0.0533603,0.0536252,0.0545335,0.0548358,0.0551643,0.0555193,0.0753445,0.0571774,0.0460347,0.0464242,0.0468182,0.0436464,0.0440715,0.0445159,0.0447856,0.0458574,0.0461668,0.0465039,0.0468689,0.0758109,0.0573871,0.0460522,0.0464423,0.0468424,0.0436676,0.0440928,0.044538,0.0448089,0.0458817,0.0461926,0.0465314,0.0468979,0.0767469,0.0578123,0.0461243,0.0465163,0.0469245,0.0437526,0.0441804,0.0446292,0.0449048,0.0459827,0.0462998,0.0466459}}という結果を得た。
これは{{1,1},{1,2}}というカードの組はもはやこれ以降は出現しないため第1要素のみ計算が完了していることを意味するが勝率は50.1%となっている。だが実際の確率は57%であり、そこそこ異なる。やはりその2枚を除いたもので計算していなかったため誤差がでたものと考えられる。
いずれにせよ、7%も差ができてしまうとこれだけ時間をかけてもあまり有効とは言えないので、自身の役の強さから勝負に出る確率を遺伝的に計算するプログラムへとシフトする。
具体的にはノーペアに対して全掛けする遺伝子は短命であるが、適切にBETを調整する遺伝子は生き残る。ランダムに役毎にどれくらいBETするかの遺伝子を構成し、それ同士で戦わせる。そして相手のBETに応じてBETを変えたりする遺伝子も導入してみたいと思っているが、まずは簡単バージョンでそれを入れないものでやってみたい。

理想としてはそれによって世代を経て成熟していった遺伝子が、ランダムなものに対して非常に高い勝率を維持し続けることである。
この操作は上記のように時間もかからないので、やってみる価値はある。それが無理ならルーレットなどの「偏り」を利用した作戦に出るかもしれない(プレイしていると放出期と回収機の差が激しいため何らかの法則あるいは傾向があるのではないかと考えた)

テキサスホールデムの確率(9) 途中経過(2)

{3130000,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,78,593,0,31,701,5191,0,75,2693,19871,0,306,7563,56048,0,661,17323,131581,0,1295}}

上はノーペアの強弱判定でまず大小判定をする数字とは別に、5枚の中で最大の柄で役を分けたもので、下はおそらくルール通りにその数字内での柄での強弱判定に切り替えたもの。

 {100000,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,3,8,5,36,28,42,45,203,180,163,181,524,521,488,539,1207,1206,1157,1191,2411,2487}}

これによると29番目すなわちノーペアで数字9の場合の最弱柄の出現率が大幅に上がっているのが分かる。1つ目の解釈では5枚の中で最大の数値をとっていたので、{1,2,3,4}の柄からランダムに5つピックアップすると当たり前ながら最大値が4となる確率は大きくなる。2つ目の解釈ではその7という数字での柄を見ているので最大値はそもそも候補がただ1つなので、29~32番目は均等に出るはずで、実際まだ試行回数が少ないがまあそれなりにその傾向は出ている。

今度こそちゃんと標準の確率分布が出るはずなので待つ。これがある程度データがそろえば、いよいよすべての7組のカードに対して役をこれと比較し勝率をただちに計算でき、その7組に至る2~6組の各フェーズでのカードからの到達率を計算し(例えば5組ならあと2枚で成立するので1/47C2)勝率を加算していき期待値としてその和をとればよい。

これを行えばついに近似値ではあるが各フェーズでの自身のカードおよびディーラーの札での勝率が分かることになりひと段落する。

そうなれば後はBET額のやりとりのみが指標となるので、この指標をどのように設定したCPUが生き残っていくのかいろんなパターン(遺伝子)に対してバトルさせるがやったことないのでうまく行くかは不明。少なくとも勝率が出ればかなり有利の可能性。

なお10000回で1.5分ほどかかっているのでサンプル1000万回は1500分すなわち25時間かかる。明日の朝には計算を中断してそれをサンプルに用いる予定。

なぜか通常勝てないはずのカジプロで数十億チップもっているのがVIPではやたらといるのが不思議ではあるが、ただ課金するだけではそこまでいけないはず。おそらく何かで稼いでいることは確かで、特にRMT業者はテキサスホールデムで稼いでいるはずなので、ここに何か方法があるはず。我レベルのプログラミングができる者が通常のプレイヤーの中に大量にいるとは考えづらいが、業者はおそらく相当賢いものと思われる。

一応我も業者であるが、プログラムの考案、作成、実施、販売すべてを行っているので組織ではない。エミュレータとは非常に便利なものである。小4からすでにそれで何ができるかを知っており野望があったのである。

テキサスホールデムの確率(8) 途中経過

 手持ちのカードに関する条件なしのベースとなる確率分布の計算が進行中である。

現時点では夜通し回していたので3130000回試行できており、そのサンプルをとると

{3130000,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,78,593,0,31,701,5191,0,75,2693,19871,0,306,7563,56048,0,661,17323,131581,0,1295}}

となっている。これは役を低いものから50個ほど抽出しているもので、最初の方にゼロが多いのはノーペアで弱い柄になることは起こらないことを意味している。この場合29番目まではほぼ起こらないということであるが、ノーペアでは最大の数字が優先される強さとなっているので、まず最大が2(最弱)となるのはどの柄1~4でも起こらない。これが2,3,4,5,6,7,8までは一度も起こっていないのは、たとえば8であっても9以上の数字が7枚のどこにも表れないというのは(7/13)^7であり、最大が8だとするならばまず他のカードが8の時点でワンペアなので7以下確定。そして次は6以下確定…となると8,7,6,5,4,3,2の構成しかありえなくなるがこれはストレート以上を構築する。よってワンペア以上が確定で出る(鳩の巣原理)ので、理論上テキサスホールデムでノーペアの8以下は出ない。9ならば柄の弱いものから順に0,4,7,593と出てくるが最弱の柄がでないのは一応理論上{1,2},{1,3},{1,4},{1,5},{1,7},{1,8},{1,9}などの場合にありうるが、極めて低い確率なので出ないだけ。ノーペアでは数字ついで柄を強さの順としているが今回のシミュレーションではその数字内の柄で強さを競うのかそうでないのかが不明なので(例として{1,2},{1,3},{1,4},{3,5},{1,7}と{1,2},{1,3},{1,4},{2,5},{2,7}の比較では前者はと後者は最大7で同じ、柄の比較は組での最大ならそれぞれ3と2、7という数字内なら1と2なので結果が異なる)とりあえず柄の最大値としているがどちらにしてもそこまで確率は変わってこない気がするのでここはスルー(いちいち計算をやり直すとまた1日かかるので)…としたかったがノーペアKの確率が131581/3130000と案外無視できない結果になったのでやり直す。

2024年7月10日水曜日

テキサスホールデムの確率(7) 処理回数の最適化

 同じパターンに対して役を計算するのは面倒なので、判明している2~7枚のカードの組になる確率をすべての2~7枚のパターンに対して順次計算していく方式に切り替える。

何を言っているのかわからないと思うし自分でも何を書いているかわからないので具体例を提示する。

例えば{{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7}}の組があるとすると、すでにこのカードの組で形成される最高役は定義済み(柄1のストレートフラッシュ数字7)。

そしてこのカードを形成しうる初期パターンは、最初の2枚提示段階ではこの集合から2つの要素を持つ部分集合で{1,1},{1,2}から{1,6},{1,7}が該当し、残り5枚がこれになるのは50枚から5枚が選ばれる確率なので1/50C5になり、

最初の2枚+3枚提示では5つの要素を持つ部分集合で7C5通りでそれらがこの結果に行きつく確率は1/47C2となる

これをすべての52C7通りについて実行すればよい。

そうすると全フェーズにおいて確率を求めることができ、おそらく処理時間もましになるはず。

そのためには{1,1},{1,2}をID=1とし、{4,12},{4,13}をID=52C2とするような変換が必要だがこれは二項係数を多項式で計算させておいたほうがはやいのでそれでいく。

なお、それぞれのカードの組に対して各役の確率を示す配列を作ろうとすると、例えば7枚判明していたら52C7個の要素に関して考え得るすべての役448個となるのでデータの個数は59935482880個となり、600億個にも膨れ上がる。

こうなるとPCのメモリがある程度良性能でも厳しいので、各要素に代入あるいは加算するのは勝率にしなければならない。

しかしながら、勝率を計算するためには現在の7枚の組に対して残り45枚から7枚を選ばせる必要があり、この7組はすべて出現確率が等しいのだがそれらすべてに対して役を判定していると、45379620通り計算しなければならず、それをこちらのパターン分すなわち133784560通りに対して行うので6071092494667200通り(6071兆通り)になり、一生終わらない見込み。

よってここでは各7枚の組を持つカードに対して、相手の7枚の確率分布はこちらの手が分からないとする場合の7枚として一律に扱うこととする。

ただおそらくその操作もすさまじく時間がかかる。何しろそれぞれのカードに対して最大の役の判定(7枚中5枚を使うので21通り)を行うからである。ここではノーペアとワンペアなどのそれぞれのパターンの生成率は、最大の役をとるという制約上同様に確からしくないので逐一計算が必要になる。

順序としてはメモリの関係上先にこちらの計算が必要であり、もし何十日もかかりそうならランダム生成数十万回程度で計算する。

→30秒で1000回。133784560回なので133784*30でおよそ4000000秒。すなわち65000分となり、1100時間。およそ40~50日に相当するので、前のビンゴバルーンの例と比較するとまあ待てない機関ではないが、そもそもそれを求めたところでその確率分布が厳密な数値として活きる場合がない。というのも52枚から7枚を相手が選んでことに対して、自身の見えている手が0枚ということはありえないからである。(初期から2枚オープン)

しかしこれはいろんな状態に対して近似値を与えるのでこのパターンを用いているに過ぎない。…がそもそも近似値ならばそこで厳密値を求める価値はほぼない。よってランダムにして回数をある程度増やすことにする。

およそ1日くらいで終了させたいので、1分で2000回、1時間で120000回、1日で2880000回。明日の昼くらいにはいい感じになってほしく、途中で中断することもできるので一応10000000回に設定してみる。

この結果が出れば、すべての自身のパターン2,5,6,7組のカードに対してこれと役の強さを比較し勝率を各パターンに順次代入、加算していく。

なおカジプロは明日ついにVIPとなる。自分で増やせないうちはやはりRMTというのは非常に良いものである。1日30000円収入が入ると仮定すれば5000万チップ3000円なので毎日5億チップは手に入る。


どうでもいい話だが、7月9日にクレーンゲーマー(tiktokなどを駆使し昨年くらいから登録者数千人から急に100万人を記録したクレーンゲーム系youtuber。すでにもっかいちゃんねるやKTGを超え、いよいよTOPであるつるなかに迫る勢い。我もクレーンをするが登録者は数百人の雑魚である。彼らは我の1000倍はすごいということである)である「だぶるあっぷ」氏がトップラン東大阪の一番奥にあるトリプルキャッチャーメガダッシュの筐体でカービィ(むてきキャンディ)をGETしている動画があった。

そして千日前線でそれと同じカービィだけを袋に入れずに抱えて持っている客を同日に見かけた。まさか…?

いやしかしトップランから千日前線に乗っているのは不自然で、通常ならバスで若江岩田に行くか長田or新石切方面に抜けるはずで、前者ならその動きはありえない。とすると中央線経由で谷町4で乗り換えたのか…?

いずれにせよ信憑性はないがぬいぐるみを素でかかえてしかも同日に同じ景品というのはなかなか珍しいものである。ただトップラン東大阪はあの筐体から帰る途中右側に大きな袋が置かれているので素で持って帰るのも珍しい。

我もぬいぐるみを素で持って帰るのは最近では岩手の万SAI堂北上でかばんに直接ぶちこんだときくらい。直近の遠征先でのぬいぐるみは広島新井口のアルパーク北棟のカービィであるがあれは袋に入れた。

なお生駒山上の動画もあがっており、あの風船の動画だけで隣が入り口かつ特徴のあるぼろい床であの場所ということが瞬時に分かった。うつっているエアホッケーややっていたスマートボールは我もちょっと前プレイした。

特にだぶるあっぷ氏はトップラン東大阪でのプレイ動画が多く(拾円遊戯場、バケツ回転設定が特異的で前者はアイビス太子、ままんまるしぇ高鍋、縁日堂とここくらいしか該当せず、バケツ回転設定はアイビス太子とここだけの特徴的な設定。うーさんが考案しているのだが我はうーさんに会ったことがある。しかしながらビッグクリアフィギュアをめぐって敗北したが)プレイ場所を同定できる動画がいくつか存在する。

ちなみにトップラン東大阪は以前はかなり取れた印象だが最近は取れにくくなったのでほとんど行っていない。あとあそこの問題点は、景品の入荷が結構遅れるというところ…。レトロ感が出ていて雰囲気はいいのだが…。

2024年7月9日火曜日

テキサスホールデムの確率(7) 現在のカードから勝率を計算

 すでに手持ちとディーラーカードを合算したカードでどれが最高役になるかは判定できたので、次に相手のカードは分からないので、各フェーズにおいてディーラーのカードからの相手の役の確率分布を知りたいところ。

しかしそれを知ろうとすると、途方もない時間がかかってしまう。およそ計算に30日かかる見込みであるが、そこまで厳密な値は知れなくても良いので適当に100000回くらいやったものをサンプルとして利用しようと思う。

同様に、カード枚数が少なくパターンが多すぎる場合は適当に試行を途中でうちきって勝率をチェックする。

それにより、それぞれのフェーズで勝率を計算しようと思っていた…のだが、ランダムに100回実行するだけでも十数秒かかるため制限時間内でどうにかなるものではない。

そのため、都度確率を計算するには数が足りないのであらかじめ計算しておく必要がある。

よって最初のカード2枚(+ディーラー側5枚)に対して各役の成立確率を計算する必要がある。

とはいうものの、最初の2枚が与えられても残りは50C5通りと非常に総数が多く、現時点で1000パターンに十数秒(1秒50パターン程度)かかるのである2枚の組に対して2118760パターンしらべるので、それだけで数時間かかる見込み。そしてそれが52C2=1326通りあるのでとてもではないが計算しきれない。なのであらかじめ計算するといってもそこでもやはり10000回くらいで打ち切らざるを得ない。

全パターンでおよそ1日くらいで出来上がってほしいので86400秒、すなわち4320000パターン探索可能なのでそれを1326で割るとだいたい3000回試行ができそうである。

その後のフェーズでは最初の2+3枚が与えられるのだが、ここでもやはり同じパターンで計算を行う必要がある。

はたして3000回の試行で勝率をそれなりに把握することができるのか。

スーパーコンピューターでも使えるのならば一気に総当たりで確率を算出してそれをデータとして保存し利用できるが…。

このあたりは計算リソースの限界なので、これ以上はどうしようもない。

一応2+4枚まで来ると各パターンは46通りなのでランダムは必要なく

2+3枚で各パターンは47C2=47*23=1081なのでここでも厳密な値は求められる。

なので最初の2枚だけはおおざっぱな確率、以後は厳密な確率を求めることができる。

…のだが、その場合各パターンが膨れ上がるので総当たりは厳しい。

具体的には2+3枚時点で2809475760回、2+4枚時点で936491920回、2+5時点で133784560回なので、一番簡単なものでもすさまじく時間がかかる。

するとやはり都度計算が必要になる。

この点で最適解を構築することが非常に難しい。

テキサスホールデムの確率(6) カードの組をIDに変換する

 {{1,1},{1,2},{1,3},{1,4},{1,5}}をID1とし、{{4,9},{4,10},{4,11},{4,12},{4,13}}をID52C5とするようなプログラムを作りたい。

まずは{1,1}から{4,13}を1次元の数に変換した方が都合よさそうなのでこれは{2,6}ならば{1,13}まで13個、{2,1}から6個なので19番目という例を利用すれば、

13*((第1要素)-1)+(第2要素)=13*(第1要素)+(第②要素)-13で与えられる。

すると{1,2,3,4,5}をID1,{48,49,50,51,52}をID52C5=2598960とする問題に変わる。

まず1つ目の値が2となるのは、{1,2,3,4,5}から{1,49,50,51,52}までの総数であるがこれは{2,3,4,5}から{49,50,51,52}までの2~52の51個の数字を4つ選ぶ組み合わせに相当するので51C4通りである。その51という数字は2~52由来、またその2は第1要素であるから、以後要素をそれぞれq,b,c,d,eと置き換えるとa~52由来なので52-a+1C4=53-aC4となる。

例えば{4,5,6,7,8}ならば1スタートは{1,2,3,4,5}から{1,49,50,51,52}の52-2+1C4通り、{2,3,4,5,6}から{2,49,50,51,52}の50C4通り…と{3,49,50,51,52}まで51C4+50C4+49C4通りが存在することになるのでSUMを用いてSUM(i=2,a,53-iC4)となる。

つづいて{4,7,8,9,10}はここまでの{4,6,50,51,52}までのどれだけのパターンがあるかを考える。第2要素bは7であるが、5,6,7,8から5,50,51,52までは52-5+1C4通り存在する。これを6についても同様に行うのでSUMの開始は5(=a+1)で始まり6(=b-1)で終わる。

具体的には{4,5,6,7,8}から{4,5,50,51,52}の6~52の3つ選びで47C3通り、{4,6,7,8,9}から{4,6,50,51,52}の7~52の3つ並びで46C3通りがある。

すなわちSUM(i=a+2,b,53-iC3)(=i=a+1,b-1,52-iC3)となる。以後同様に繰り返せばよい。

実際30000番目は{{1, 1}, {1, 3}, {2, 2}, {3, 3}, {4, 12}}であるが、これを先ほどの関数に代入すれば30000となり逆関数が成立する。

ここまでSUMで式を表したが、Combinationにおいては変数を使っても多項式で表すことができるので先に計算すると

1/120 (31212504 a - 1249250 a^2 + 24995 a^3 - 250 a^4 + a^5 - 

   5 (-514898 b + 15299 b^2 - 202 b^3 + b^4 - 

      4 (-1765218 + 7802 c - 153 c^2 + c^3 + 309 d - 3 d^2 + 6 e)))という多項式で表すことができる。なのでこの辺りは普通に高校範囲。京大あたりの入試問題に出ててもおかしくなさそう。

これにより先ほどの7組のカードから最大の役を判定するプログラムは一瞬でできるようになったので、次は各フェーズにおける最大の役の確率分布を計算する段階へと入る。

(1000回試行で16秒程度)

テキサスホールデムの確率(5) 確率計算簡略化

これまではポーカーの各カードの組の確率を求めたが、よく考えればテキサスホールデムではその確率は変わってくることに気づいたので、改めて一部プログラムを変更して考える。

手元にカードが2枚ありそれを{{1,1},{1,2}}のペアであったとすると残りディーラ札5枚の組み合わせすなわち{{1,3},{1,4},{1,5},{1,6},{1,7}}から{{4,9},{4,10},{4,11},{4,12},{4,13}}の52C5通りが存在し、そのそれぞれに対して作れうる最大の役を取得しなければならない。

そして2+5枚から5枚を選ぶのは7C5=21通りあり、そのそれぞれに対して役の最大値を計算すればよい。

例えば{{1,3},{1,4},{1,5},{1,6},{1,7}}の場合、最大の役はストレートフラッシュであり{{4,9},{4,10},{4,11},{4,12},{4,13}}の場合もそうである。

この情報を役リスト(すべての強さにかかわる役と数字、柄のリスト)に格納する。

役リストは最弱の{0(ノーペア),2(数字の最弱),1(柄の最弱)}から始まり{9(ロイヤルストレートフラッシュ),14(固定),4(柄の最強)}まで存在する。

{{1,1},{1,2}}と{{1,3},{1,4},{1,5},{1,6},{1,7}}の場合、7C5通りに対してこの役リストを作成しその最大値をとる。

実際にプログラムを組むと、これの最大値は最弱の役から数えて407番目、すなわち{8,1,7}であると分かる。つまりストレートフラッシュで柄1(最弱)かつ最大値7である。

確かにディーラーの札5枚を全部使うとそれになり、そしてそれが最も強い手札となる。

他にも実施すると{{1, 1}, {1, 4}, {1, 5}, {2, 2}, {2, 3}, {2, 5}, {3, 5}}の例では柄1,2,3で5のスリーカードも強いが1,2,3,4,5のストレートも作れる。

実際出力は{211,{4,5,3}}となっており最弱から211番目の役、4すなわちストレートで最大の数は5、柄は3であることがわかり確かに{1,1},{2,2},{2,3},{1,4},({1,5}or{2,5}or{3,5})でストレートを形成し、その中でも最も柄の強い3が選ばれていることが分かる。

このプログラムは自身の2枚とディーラーの札5枚に対して最大の役を計算するプログラムであるが、ディーラーの札が見えていない場合は総当たり法により行う。(例えばディーラー3枚なら残り2枚の組み合わせを考えて実施する)

がしかし一つ問題がある。

入力の7つのカードの組から選ばれた5つの組に対してそれをID化しなければいけないのだが、その処理はできるものの1~52C5通りをチェックしなければならないので時間がかかる。そこで、{{1,1},{1,2},{1,3},{1,4},{1,5}}をID1とし、{{4,9},{4,10},{4,11},{4,12},{4,13}}をID52C5にすばやく変換するプログラムが必要。でなければここの操作に時間がかかり十数秒結果を出すのにかかってしまい実用化できなからである。

ということでその変換を行うプログラムを考えるが、このやり方過去にビンゴバルーンの組→ID変換でやったことあるような気がする。


テキサスホールデムの確率(4) カードの組に対する勝率実践

 とりあえずプログラムが組みあがったので確認する。

{1,{{1,1},{1,2},{1,3},{1,4},{1,5}},1533905/1533939,64973/64974}

第1要素はID、第2要素はカードの組、第3要素は勝率、第4要素はプレイヤーのカードの組を含めず52枚あると仮定した場合の簡略版(計算時間およそ半分)

一番わかりやすいのはID=1すなわち最弱の柄(1)で1,2,3,4,5のストレートフラッシュである。

第3要素では、このストレートフラッシュに勝てるものはこれ以外のすべてのストレートフラッシュである。

ちなみに例外として同じ柄の1,2,3,4,5vs6,7,8,9,10では5vs10で右の勝利

同じ柄の1,2,3,4,11vs6,7,8,9,10では14(1)vs10で左の勝利

前者はストレート由来なので最大は5という扱い、後者はフラッシュの離散値なので最大は1(A,14)であるということにする。

実際そのようなレアケースは見たことがないのでこの仕様かどうかは不明だが確率計算にもほぼ影響しないレベルなのでこれでよいとする。

この場合第3要素は同じ柄は6~13しか残っていないので6,7,8,9,10…9,10,11,12,13の4通り、他柄には全部負けるので1,2,3,4,5…10,11,12,13,1の10通りが3つずつで合計34通り。

よって第3要素では(47C5-34)/47C5=1533905/1533939の確率で勝利。

第4要素では柄1に対する1,2,3,4,5が存在することを仮定しているのでこの場合のみ引き分け。それ以外は全部負けるので勝率としてはこの1+39パターンのみに勝てない。よって

(2598960-40)/2598960の確率で勝利。

そして出力された結果は先ほどのデータ。

{1,{{1,1},{1,2},{1,3},{1,4},{1,5}},1533905/1533939,64973/64974}

第3要素は一致。

第4要素2598920/2598960=64973/64974なので一致。

これにより勝率が正しく計算できていることが分かる。

すると任意の組に対して勝率を厳密に計算することができた…のだが。

1パターン探索するのにおよそ1分程度かかってしまい、知っての通り総数は52C4=2598960通りある。となるとかかる時間は2598960分=43316時間なので1805日、すなわち5年くらいかかる。PC20台でやれば3か月だがそんなにmathematicaのライセンスを持っていないしPCによりメモリやCPUが違うのでおそらくこれより遅くなる。

なお他のパターンでも実践してみる。

{1,{{1,1},{1,2},{1,3},{1,4},{1,5}},0.999978,0.999985}

{2,{{1,1},{1,2},{1,3},{1,4},{1,6}},0.995872,0.99664}

{3,{{1,1},{1,2},{1,3},{1,4},{1,7}},0.995873,0.99664}

{4,{{1,1},{1,2},{1,3},{1,4},{1,8}},0.995873,0.99664}

{5,{{1,1},{1,2},{1,3},{1,4},{1,9}},0.995874,0.99664}

{6,{{1,1},{1,2},{1,3},{1,4},{1,10}},0.995873,0.99664}

{7,{{1,1},{1,2},{1,3},{1,4},{1,11}},0.995873,0.99664}

{8,{{1,1},{1,2},{1,3},{1,4},{1,12}},0.995872,0.99664}

{9,{{1,1},{1,2},{1,3},{1,4},{1,13}},0.995871,0.99664}

{10,{{1,1},{1,2},{1,3},{1,4},{2,1}},0.913909,0.891241}

{11,{{1,1},{1,2},{1,3},{1,4},{2,2}},0.49752,0.501177}

{12,{{1,1},{1,2},{1,3},{1,4},{2,3}},0.518684,0.533683}

{13,{{1,1},{1,2},{1,3},{1,4},{2,4}},0.53989,0.566188}

{14,{{1,1},{1,2},{1,3},{1,4},{2,5}},0.991489,0.992512}

やはりストレートフラッシュでは強く、フラッシュでは勝てる確率はおよそ99.59%であり、2のワンペア(勝率49.75%)より3のワンペアの方が強い(勝率51.87%)ことが分かり、同じ役でも数字の違いで勝率が大きく変わることが分かる。ちなみにID2→5で勝率があがっているのは同じ柄でのストレートフラッシュを封じているから(ID=5のとき、1,2,3,4,9で構成される場合同じ柄のストレートフラッシュは5~8では4個なので作れず、10~13においても4個なのでまったく作れないからである。ID5→ID9で勝率が下がるのはその作れなかったストレートフラッシュが生成してくるからである。たとえばID6では柄1の5,6,7,8,9のストレートフラッシュが相手側に存在するからである。とはいえその確率は0.0001%程度しか変わらないので正直誤差ではあるが。

おまけにいちいちこんな計算時間をとることもできないので、厳密な勝率を求めることは時間制約的に不可能。

したがって簡易バージョンを考える必要がある。

それは最も弱いカードから最も強いカードまで順にその役の成立確率を並べるというものである。

とにかく相手のパターン総数2000000~3000000通りをいちいち調べ上げるのに1分程度かかるので、ここをどうにかしたいわけである。ランダムに10000回相手の手数を判定してそれでおおまかな勝率を出すという手もあるが、とりあえずそれと相手のカードが52枚からの確率分布と仮定してどの自分のカードに対しても同じとして処理を簡略化するのとどちらが真の勝率に近いのかを、何個か実際に1分かけて出した結果とサンプリングしてその優劣をお互いに判定してみる。

とはいえ、ランダム10000回ならばmathematicaを常に起動して自動化の最中でやりとりしなければならないので他PCでライセンスがなければ使用できないのが残念なところ。なので実践的にはあらかじめ用意した順に配当が強くなる確率分布を作ってそれとの比較が手っ取り早い。ちなみにその分布を自身の手に応じて山札が減ったバージョンで作ろうとすると当たり前だがすさまじい数の処理を要求されるので意味がない。

具体的には{ノーペア(柄1、数字2)、ノーペア(柄1、数字3)、…ロイヤル(柄3)、ロイヤル(柄4)}のように、各役とその同じ役同士での強さまで考慮した確率分布を出す。でないとワンペアのAと2ではかなり勝率が違うことが分かっているからである。

この相手の役の確率分布の配列は常に固定であり(時間の関係上固定せざるを得ない)、自身の役を判定してそれをこれと比較して勝率を計算するだけなので、その数値を格納するエクセルシートでもあれば比較が可能と思われる。

こういうイメージでポーカーの勝率を再構築していくことにする。

とにかくカジプロで強くなる、というより本目的はRMTで稼ぐためにはまずチップを稼げないと話にならないので、そこをどうにかしなければならない。

一応ポーカーではその簡略化したプログラムで勝負できなくもないが、ポーカーだとおそらく勝率計算ツールとかまだ簡単な部類なので同業者が発生している可能性があるため危険。より難易度の高いテキサスホールデムの方が持ち込み金も多いし、まねできる者が少ないという点では有利。


2024年7月7日日曜日

テキサスホールデムの確率(3) ポーカーの確率計算

 テキサスホールデムはポーカーの派生版のようなものなので、まずはポーカーの役の確率を計算する。全カードのパターン52C4=2598960通りに対してそれぞれ役を判定する。

ワンペアの部分集合はツーペアとスリーカード、その共通集合がフルハウスで、ストレートおよびフラッシュはワンペアと空集合でその共通集合はストレートフラッシュ、さらにその部分集合がロイヤルストレートフラッシュとなる。フォーカードはスリーカードの部分集合(ツーペアの部分集合ともとれるが)であることを考慮して場合分けするとwikipediaにあるように

その組み合わせはノーペアから順に

{1302540, 1098240, 123552, 54912, 10200, 5108, 3744, 624, 36, 4}

となる。確かに一致していることが確かめられる。しかし我がしたいのはこんな基本的なことではなく、これをどうカジプロに応用するかである。普通にテキサスホールデムをカジプロでプレイしているとおそらくぼこぼこにされる(実際適当にプレイしていると勝てないが、今にみとけ)。

カジプロのルールではペア系(ノーペア含む)とストレートはその数字で強さが決まり、(ロイヤル)ストレートフラッシュとフラッシュはその柄で強さが決まる。よって勝ち負けを正確に判定するためには同じ役でその数字と柄の取得が必要となる。

よってこれを解析するとき以下のような解析にしている。

{2140000,{{2,2},{2,11},{3,1},{3,2},{4,1}},2,14,4,0,0,{2,11,1,2,1},{2,11,14,2,14}}

第1要素はIDすなわち何番目か、第2要素はカードの組(あとで順序定義を簡単にするために1=♣、2=♦、3=♥、4=♠とする)、第3要素は役名、第4要素はその役での数字の強さ、第5要素はその役での柄の強さを表す。なおこの2つの要素はフラッシュなどでは先に柄を判定するため、この場合は反転する。第5要素はストレートかどうかのフラグ、第6要素はフラッシュかどうかのフラグで、出力としては不要。第7要素は数字のみの抽出、第8要素はその数字に対してA=14という強さ扱いにしたときのもの(あとで比較が容易になる)。

これにより同じ役でも勝敗を判定するのが簡単になるわけである。

というわけで次に行うのは勝敗判定である。これは第4要素の大小、第4要素が同じ場合第5要素の大小で決する。それも同じ場合は引き分け。ただまだベットの方式などを実はあまり把握していないので実際にプレイしたり動画を見たりしてルールを把握しなければならない。でないと遺伝的アルゴリズム実施時に重要なBETの概念を取得できないのである。



2024年7月2日火曜日

テキサスホールデムの確率(2) 勝つためにはどうすればよいか

 テキサスホールデムはプレイヤー同士の戦いのため、ディーラーとの基本1対1のペイアウト率100%割のゲームに比べて勝てる可能性がある。

しかし相手はほとんどカジプロをやりこんでいる者ばかりなので、普通にやっているとおそらく勝てない。実際リバーシもことごとく惨敗している。

しかしテキサスホールデムで稼いで売っているRMT業者もいるので、おそらくここが攻略所だと踏んでいる。とりあえず現時点ではカジプロではRMT購入側であるが、このプログラムがうまく行けばチップの自給自足が可能で、かつ売却もいずれは視野に入れる。

ダイヤ購入での時間短縮はどうにもならないが、とりあえずチップを稼げば楽しめるし金も稼げる。できれば維持のために月100万はほしいがおそらく買い手があまりいない。

さてテキサスホールデムにおいてはまず自身の勝率を正確に把握することが重要で、そのうえで相手の掛け金で相手の手の良さが尤度比で変わることを考慮し、確率分布を再計算する必要がある。

しかしながら尤度比は人によって異なる(ワンペアでも強気にいく者の場合は尤度比は低くなり、確実に勝てると踏んだ時のみBET額を上げる者の場合は尤度比は大きくなる)ので、ここに関しては自分の(=一般的な人の考え方)データで学習させたいが、機械学習はあまり知らないがもしかすると遺伝的アルゴリズムでいけるかもしれない。多数のCPUで長期間対戦させて相手の尤度比をどのように決定すれば全体的な勝率(実際はペイアウト率すなわち時間チップ高率)があがるかでできるかもしれないができないかもしれない。

さすがに10年くらい経った普通のゲームで、ここまでデータとプログラムを駆使してできるプレイヤーはおそらくほぼいないと思うので、おそらく通常のプレイヤー相手ならば勝てるかと思われる。

ただ初の試みなのでこれが成功するかどうかはわからないし失敗に終わる可能性もある。しかしやってみる価値はあるので、とりあえずまずは5つのカードから役を判定するプログラムを作る。順番としては

カードから役を判定

手元の札の全パターンに役を取得し確率分布(離散)を計算

相手にも同様のことを行う

なおそれぞれの確率分布は役の個数分しかデータはないので先に計算したものを利用する手もあるがそのあたりはデータ量と計算時間で都度判断する

勝利確率を計算

相手の挙動により勝利確率を調整

という流れになる。


2024年6月29日土曜日

もっかいちゃんねるのやきにクレゲ旅と広島遠征とお宝発見北神戸

 最近のもっかいちゃんねるの動画でベネクス川越とベネクス川崎がとりあげられており、うちベネクス川崎は入試前日に1回、4週前にアニマ8のロケテストを含めていった。

川越だけまだ行っていないが川崎は懐かしいので見てみると…。

最初のアーモンド缶は近くのシルクハット川崎で入手。動画ではBCで100円で取れていたが我はこの缶1つに5000円かかった模様。しかし店員のはからい(店内放送でサポートを積極的に行っていることをアピールするのに利用されているということだがwin-winなのですばらしいと思う)により5000円で2個とらせてもらった。大幅に我が赤字だがこういう計らいがあると我はそういうのを一生覚えているので好印象となる。

他の食品系の景品は徒歩+バスの我には獲得不可能。ベネクスならワンチャン発送という手もあるが、ゲームセンターの食品はほとんどがあまり健康的ではないものが多い…。お菓子とかは大好きだがちょっと体重が増えそうなので食べまくりたいのに食べれないつらさがある。インスタント食品はやはり現地で食う郷土料理や手料理に比べると添加物ましましなので厳しい。こう見えても我は結構食べ物にうるさいタイプ。遠征すればそこの食べ物を食べないと気が済まない。昔はジェットコースターに乗るために九州や三重、山梨に行っていたがそのときはすき家などで適当に済ませていたが…。

あと最近ベネクスでは景品がはさまるという現象が多く発生するらしいが、確かにベネクスは橋幅が狭いと思われる。しかし我のほしい景品は橋渡しにはあまり入っていないのでそれを感じることは少ない。ただ一つ言えるのは我のような中級者かどうか、くらいの人物が常連用に設定していると思われるベネクスにちょこっと行ったところでまず攻略できるはずがない。そのためほとんど8割方の景品は店員にサポートをお願いしなければ取れない(なおベネクスでは2000円使えばサポートをお願いしてもよいと個人的に思っている。ナムコやセガなら4000円は使わないと相手にしてくれないと思うが)。

したがってベネクスは最近東京方面に遠征したときも行く頻度が少なくなっている。しかしベネクスの難といっても一番うれしいところはサポート体制の充実と、景品発送サービスである。この2つに関してベネクスを超えるところはない。



次に先週行った広島遠征。

みぞしょくチャンネル及びたくとりチャンネルが行っていたブラックジャックアクアが気になったのとRMT用のPC調達のためになんとなく広島まで遠征。ついでに岩国の錦帯橋にも行っておいた。

ブラックジャックアクアでは彼らがプレイしていたグランドクロスを見た。メダルコーナーはたしかににぎわっていた。そしてクレーンに関してであるが、残念ながらそこまでよい設定ではない。お菓子パックに関してはおそらく取りやすいのだが、通常の景品は取りにくい印象。カップ麺のコンテナの橋渡しをしたが、パワーはそれなりに入っていたが下降制限があり景品がある程度下に沈んだ時に下角を持てず動きがあまり出ないという罠にやられる。しかしコンテナは2000円程度で取れたのでまあそこまで悪くはない。しかし1プレイ100円のお菓子激取れ台で全然取れないのはどうかと思った。

他にはいろいろとアクシデントがあったためクレーンはしていない。(別に広島の駅店員に怒られたりバスに乗り遅れたわけではない)


最後に今日行ったお宝発見北神戸。

キングスライムのどんぶりをとりにいったがまだなかった…。

景品のラインナップはまあそれなりだが我の好みのものは少な目。コンテナについてはまあ一般的な倉庫系の感じだがやはり回遊館の方が取れやすい。ミニマスコットの設定金額は1500円で、確率は独立(確率無視の後上乗せがかからないタイプ)であり回遊館のように若干持ち運ぶ設定ではなくほぼ確率待ち。

上位倉庫系なら800円で取らせてくれると思っていたが1500円だったので少々疑問を感じた。ほかカービィのマスコット(タイトーではおおむね設定金額2000円)の確率は1800円で、明らかに倉庫系にしては高い。おそらく加古川のポップワールドなら1200円で取れている。ただここはラクチャレに入っておりシールドも低く確率無視が狙える台だった。ただ我は初見であまりうまくないのでそれは1回しか決まらず、4種そろえるのに7000円かかった。確率無視もそう簡単ではないので、倉庫系にしてはそこまで設定がよいとは言えない。

結局マスコット6個とコンテナ2個をとるのにかかった金額は12900円。駿河屋ならおよそ8000円程度のイメージなので、まあ普通というイメージ。

なお開店当初大量にあったトライポッドのコアラのマーチの密度は大幅に減少しており、そこらの都会のトライポッドのようになっていたのは残念。

結論として、明らかに回遊館長浜に天井金額の点で劣っていることが分かり、また景品の入荷も少々遅いようなのでここは今後近畿圏で優先して取りに行く候補から外れた。

よって狙うべき店舗は加古川のオタイチポップワールド、浪漫遊松阪、回遊館松阪となる。


2024年6月27日木曜日

テキサスホールデムの確率(1) テキサスホールデムとは何か

カジプロにおいてプレイヤーからチップを巻き上げる?ためにプログラムによる戦法を構築することにした。RMTで買うのも確かに安いが、それでは浪費なだけなので、このゲームでチップ及び現実の金を稼ぐためには必勝法ではないにしろ、長期的にみてコンスタントに勝てる方法を樹立しなければならない。

事実、RMT業者は(我もそうだが)テキサスホールデムで儲けているようである。

ブラックジャックでは最適化構築の結果97%少々のペイアウト率となり勝てないことが判明し、スロットなどはいわずもがな、リバーシは過疎っているのと効率が悪く過ぎて論外。マリンレースも一時的にはあったが要するに競馬(GI)なのでオッズの逆数の総和が1を割るに決まっているということでだめ。

もしテキサスホールデムで勝てるようなら、それを我のリゾートの肥やしにするとともにチップ販売の手法の模索およびRMTも並行してやっていこうと思っている。

ルーレットで必勝法とかなんとかいうのもあるが、あれは本当に目が偏る法則を真につかんでいなければ長期的に見て減るゲームでしかないので、我はルーレットの攻略はやらない。理論で根拠づけられた勝負でなければ勝てる算段がないからである。(もしそれ以外で攻略法があるならこの10年くらいの間に発見されているか運営が対処しているはず)


まず我はそもそもテキサスホールデムが何かすら知らなかったので、そのルール把握から始まる。

おおざっぱにいうと、手元の札2枚と、また別に用意されている札0or3or4or5枚(ゲーム進行にしたがって順次オープンされる)で強い役を作り競うというもの。

これで勝つためには自身がもらえるオッズを計算し、それに至るアウツがどうのこうのとかいう専門用語が出てきてややこしい。結局のところ自身の手札から残り52枚のカードに対する全パターン52C3通りに対して最大の役を適用して相手の役の予想分布と比較して勝率を求めればよいだけである。

したがってわざわざ有料のツールなどを使う必要もなく、先ほどのブラックジャックやマジカルマインより明らかに簡単に計算できる。

例えば{1,3},{1,12}(第1要素は柄を表しスペード1、ダイヤ2、クローバー3、ハート4として第2要素は数字とする)ではフラッシュになる確率は52枚のうちスペードは13枚、その中ですでに2枚引かれているので確率は11C3/52C3である。ストレートの確率は3,12は離れているのでこれをつなぐものはできず、1,2,3,4,5や2,3,4,5,6、8,9,10,11,12などの組み合わせとなる。なお13と1をまたぐものがストレートになるかはルールをあまり知らないのでまた見ておく。

ただ大きな模試や試験が来週末に控えており残念ながら深い考察および本稼働ができない。しかし夏休みになれば時間ができるので一気に実装あるいは結論までもっていくことができる。まあとりあえずは期待値を求めて、模擬CPUや自身の直感的手法と対戦させて最適解+遺伝的アルゴリズムによるさらなる最適化、あたりまではいけたらいきたい。

2024年6月26日水曜日

マジカルマインのシミュレーション(4) ペイアウト率及び全消し率

 再度以下のカードを用いてペイアウト率および全消し率を計算する。

1~25の順列25P7通りすべてのパターンをチェックすればよい…のだがなぜかメモリ不足でできないので、ランダムに番号を生成してそれを複数回行い近似値を得ることにした。

ただ、100回回すのに42秒かかるという事態。となると10000回試行するだけでも4200秒と1時間以上かかってしまう。これはさすがにプログラムがしょぼいか…。

とりあえず翌朝まで回してどうなるかみたいので、翌朝7時までは12時間つまり43200秒あるので、100000回くらい試行することはできそうであるからやってみる。

途中経過

600回試行→

宝箱獲得率左から24%、45%、30%、21%、15%、15%

ペイアウト率107%

全消し率0.3%

結論として若干良いカードらしいことが分かる。このカードが出続ければ徐々にメダルが増えていくという理論になる…が100%そんなことはない。



なお我が作った即席の荒いプログラムは以下。全然きれいではないが、とりあえず正しい結果を返しているのでまあそれなりに役には立つ。

numtomat[x_] := {1 + QuotientRemainder[x - 1, 6][[1]], 

  1 + QuotientRemainder[x - 1, 6][[2]]}; group = Table[Table[0, 6], 9];

pos[number_] := 

  For[j = 1, j <= 1, j++, return = {}; 

   For[i = 1, i <= 54, i++, 

    If[num[[numtomat[i][[1]], numtomat[i][[2]]]] == number, 

     return = Append[return, i]]]; Return[return]];

fall[number_] := 

  For[l = 1, l <= 1, l++, eraselist = {}; 

   If[pos[number] != {}, 

    erasegroup = 

     group[[numtomat[pos[number][[1]]][[1]], 

       numtomat[pos[number][[1]]][[2]]]]; 

    For[k = 1, k <= 54, k++, 

     If[erasegroup == group[[numtomat[k][[1]], numtomat[k][[2]]]], 

      eraselist = Append[eraselist, k]]]; Return[eraselist]]];

erase[list_] := 

  For[r = 1, r <= 1, r++, 

   For[i = 1, i <= Length[list], i++, 

    If[list != {}, 

     block[[numtomat[list[[i]]][[1]], numtomat[list[[i]]][[2]]]] = 0; 

     num[[numtomat[list[[i]]][[1]], numtomat[list[[i]]][[2]]]] = 0]; 

    group[[numtomat[list[[i]]][[1]], numtomat[list[[i]]][[2]]]] = 0]; 

   renzoku = Length[list]; retu = RandomInteger[{1, 6}]; 

   Which[renzoku == 7, odds[[retu]] += 0.5, renzoku == 8, 

    odds[[retu]] += 1.5, renzoku == 9, odds[[retu]] += 4, 

    renzoku == 10, odds[[retu]] += 4, renzoku == 11, 

    odds[[retu]] += 9, renzoku == 12, odds[[retu]] += 11.5, 

    renzoku == 13, odds[[retu]] += 14, renzoku >= 14, 

    odds[[retu]] += 5*renzoku - 51]];

haitouall = 0; kakutokuall = {0, 0, 0, 0, 0, 0};

zenkesi = 0; For[times = 1, times <= 100000, times++, 

 in = RandomChoice[Table[i, {i, 1, 25}], 8];

 block = {{3, 1, 1, 1, 2, 2}, {3, 1, 1, 1, 2, 2}, {3, 2, 2, 4, 2, 

    3}, {3, 1, 2, 4, 2, 3}, {3, 1, 2, 4, 3, 3}, {3, 1, 2, 3, 3, 

    2}, {1, 1, 3, 4, 2, 2}, {1, 3, 3, 4, 2, 2}, {3, 3, 4, 4, 4, 4}};

 num = {{0, 0, 20, 2, 0, 0}, {0, 0, 0, 17, 19, 11}, {4, 12, 0, 0, 0, 

    10}, {16, 0, 22, 9, 6, 0}, {0, 0, 21, 23, 8, 0}, {0, 0, 0, 0, 0, 

    3}, {14, 13, 15, 7, 0, 0}, {0, 0, 18, 0, 5, 25}, {24, 0, 1, 0, 0, 

    0}};

 group = Table[Table[0, 6], 9];

 treasure = {5, 2, 2, 2, 2, 5}; odds = {1, 1, 1, 1, 1, 1}; 

 For[lotta = 1, lotta <= 5, lotta++, groupcount = 0; 

  group = Table[Table[0, 6], 9]; For[i = 1, i <= 54, i++,

   If[group[[numtomat[i][[1]], numtomat[i][[2]]]] == 0 && 

      block[[numtomat[i][[1]], numtomat[i][[2]]]] != 0, 

     groupcount += 1; 

     group[[numtomat[i][[1]], numtomat[i][[2]]]] = groupcount;

     pre = post = 0; first = 0; 

     color = block[[numtomat[i][[1]], numtomat[i][[2]]]];

     While[pre != post || first == 0, first = 1;

       pre = Sum[Count[group[[l]], groupcount], {l, 1, 9}];

       For[j = 1, j <= 54, j++, 

        If[group[[numtomat[j][[1]], numtomat[j][[2]]]] == 0, 

         hidari = migi = ue = sita = {0, 0}; 

         If[numtomat[j][[2]] >= 2, 

          hidari = {numtomat[j][[1]], numtomat[j][[2]] - 1}];

         If[numtomat[j][[2]] <= 5, 

          migi = {numtomat[j][[1]], numtomat[j][[2]] + 1}];

         If[numtomat[j][[1]] >= 2, 

          ue = {numtomat[j][[1]] - 1, numtomat[j][[2]]}];

         If[numtomat[j][[1]] <= 8, 

          sita = {numtomat[j][[1]] + 1, numtomat[j][[2]]}];

         If[

          hidari != {0, 0} && 

           block[[hidari[[1]], hidari[[2]]]] == 

            block[[numtomat[j][[1]], numtomat[j][[2]]]] && 

           group[[hidari[[1]], hidari[[2]]]] > 0, 

          group[[numtomat[j][[1]], numtomat[j][[2]]]] = 

           group[[hidari[[1]], hidari[[2]]]]];

         If[

          ue != {0, 0} && 

           block[[ue[[1]], ue[[2]]]] == 

            block[[numtomat[j][[1]], numtomat[j][[2]]]] && 

           group[[ue[[1]], ue[[2]]]] > 0, 

          group[[numtomat[j][[1]], numtomat[j][[2]]]] = 

           group[[ue[[1]], ue[[2]]]]];

         If[

          migi != {0, 0} && 

           block[[migi[[1]], migi[[2]]]] == 

            block[[numtomat[j][[1]], numtomat[j][[2]]]] && 

           group[[migi[[1]], migi[[2]]]] > 0, 

          group[[numtomat[j][[1]], numtomat[j][[2]]]] = 

           group[[migi[[1]], migi[[2]]]]];

         If[

          sita != {0, 0} && 

           block[[sita[[1]], sita[[2]]]] == 

            block[[numtomat[j][[1]], numtomat[j][[2]]]] && 

           group[[sita[[1]], sita[[2]]]] > 0, 

          group[[numtomat[j][[1]], numtomat[j][[2]]]] = 

           group[[sita[[1]], sita[[2]]]]];]]; 

       groupall = 

        Sum[If[group[[numtomat[k]]] == groupcount, Return[1], 

          Return[0]], {k, 1, 54}]; 

       post = Sum[Count[group[[l]], groupcount], {l, 1, 9}];;]];];

  Which[lotta == 1, erase[fall[in[[1]]]]; erase[fall[in[[2]]]]; 

   erase[fall[in[[3]]]], lotta == 2, erase[fall[in[[4]]]]; 

   erase[fall[in[[5]]]], lotta == 3, erase[fall[in[[6]]]], lotta == 4,

    erase[fall[in[[7]]]], lotta == 5, erase[fall[in[[8]]]]]; 

  onemore = 1;

  

  While[onemore == 1, nonmovelist = Table[Table[0, 6], 9]; first = 0; 

   pre = 0; post = 0;

   

   While[pre != post || first == 0, first = 1; 

    pre = Sum[Count[nonmovelist[[l]], 1], {l, 1, 9}]; 

    For[m = 54, m >= 1, m--, 

     If[group[[numtomat[m][[1]], numtomat[m][[2]]]] != 0 && m >= 49, 

      nonmovelist[[numtomat[m][[1]], numtomat[m][[2]]]] = 1]; 

     If[group[[numtomat[m][[1]], numtomat[m][[2]]]] != 0 && 

       numtomat[m][[1]] <= 8 && 

       nonmovelist[[numtomat[m][[1]] + 1, numtomat[m][[2]]]] == 1 && 

       group[[numtomat[m][[1]], numtomat[m][[2]]]] == 

        group[[numtomat[m][[1]] + 1, numtomat[m][[2]]]], 

      nonmovelist[[numtomat[m][[1]], numtomat[m][[2]]]] = 1];

     If[group[[numtomat[m][[1]], numtomat[m][[2]]]] != 0 && 

       numtomat[m][[1]] >= 2 && 

       nonmovelist[[numtomat[m][[1]] - 1, numtomat[m][[2]]]] == 1 && 

       group[[numtomat[m][[1]], numtomat[m][[2]]]] == 

        group[[numtomat[m][[1]] - 1, numtomat[m][[2]]]], 

      nonmovelist[[numtomat[m][[1]], numtomat[m][[2]]]] = 1];

     If[group[[numtomat[m][[1]], numtomat[m][[2]]]] != 0 && 

       numtomat[m][[2]] >= 2 && 

       nonmovelist[[numtomat[m][[1]], numtomat[m][[2]] - 1]] == 1 && 

       group[[numtomat[m][[1]], numtomat[m][[2]]]] == 

        group[[numtomat[m][[1]], numtomat[m][[2]] - 1]], 

      nonmovelist[[numtomat[m][[1]], numtomat[m][[2]]]] = 1];

     If[group[[numtomat[m][[1]], numtomat[m][[2]]]] != 0 && 

       numtomat[m][[2]] <= 5 && 

       nonmovelist[[numtomat[m][[1]], numtomat[m][[2]] + 1]] == 1 && 

       group[[numtomat[m][[1]], numtomat[m][[2]]]] == 

        group[[numtomat[m][[1]], numtomat[m][[2]] + 1]], 

      nonmovelist[[numtomat[m][[1]], numtomat[m][[2]]]] = 1];

     If[group[[numtomat[m][[1]], numtomat[m][[2]]]] != 0 && 

       numtomat[m][[1]] <= 8 && 

       nonmovelist[[numtomat[m][[1]] + 1, numtomat[m][[2]]]] == 1, 

      nonmovelist[[numtomat[m][[1]], numtomat[m][[2]]]] = 1];

     

     ]; post = Sum[Count[nonmovelist[[l]], 1], {l, 1, 9}];]; 

   For[m = 54, m >= 1, m--, 

    If[nonmovelist[[numtomat[m][[1]], numtomat[m][[2]]]] == 0 && 

      group[[numtomat[m][[1]], numtomat[m][[2]]]] > 0, 

     block[[numtomat[m][[1]] + 1, numtomat[m][[2]]]] = 

      block[[numtomat[m][[1]], numtomat[m][[2]]]];

     group[[numtomat[m][[1]] + 1, numtomat[m][[2]]]] = 

      group[[numtomat[m][[1]], numtomat[m][[2]]]];

     num[[numtomat[m][[1]] + 1, numtomat[m][[2]]]] = 

      num[[numtomat[m][[1]], numtomat[m][[2]]]];

     block[[numtomat[m][[1]], numtomat[m][[2]]]] = 0;

     group[[numtomat[m][[1]], numtomat[m][[2]]]] = 0;

     num[[numtomat[m][[1]], numtomat[m][[2]]]] = 0]]; onemore = 0;

   For[s = 1, s <= 54, s++, 

    If[nonmovelist[[numtomat[s][[1]], numtomat[s][[2]]]] == 0 && 

      group[[numtomat[s][[1]], numtomat[s][[2]]]] > 0, 

     onemore = 1]]];];

 groupwin = Table[Table[0, 6], 9]; groupcount = 0;

 For[i = 1, i <= 54, i++,

  If[groupwin[[numtomat[i][[1]], numtomat[i][[2]]]] == 0, 

    groupcount += 1; 

    groupwin[[numtomat[i][[1]], numtomat[i][[2]]]] = groupcount;

    pre = post = 0; first = 0; 

    color = block[[numtomat[i][[1]], numtomat[i][[2]]]];

    While[pre != post || first == 0, first = 1;

      pre = Sum[Count[groupwin[[l]], groupcount], {l, 1, 9}];

      For[j = 1, j <= 54, j++, 

       If[groupwin[[numtomat[j][[1]], numtomat[j][[2]]]] == 0, 

        hidari = migi = ue = sita = {0, 0}; 

        If[numtomat[j][[2]] >= 2, 

         hidari = {numtomat[j][[1]], numtomat[j][[2]] - 1}];

        If[numtomat[j][[2]] <= 5, 

         migi = {numtomat[j][[1]], numtomat[j][[2]] + 1}];

        If[numtomat[j][[1]] >= 2, 

         ue = {numtomat[j][[1]] - 1, numtomat[j][[2]]}];

        If[numtomat[j][[1]] <= 8, 

         sita = {numtomat[j][[1]] + 1, numtomat[j][[2]]}];

        If[

         hidari != {0, 0} && 

          block[[hidari[[1]], hidari[[2]]]] == 

           block[[numtomat[j][[1]], numtomat[j][[2]]]] && 

          groupwin[[hidari[[1]], hidari[[2]]]] > 0, 

         groupwin[[numtomat[j][[1]], numtomat[j][[2]]]] = 

          groupwin[[hidari[[1]], hidari[[2]]]]];

        If[

         ue != {0, 0} && 

          block[[ue[[1]], ue[[2]]]] == 

           block[[numtomat[j][[1]], numtomat[j][[2]]]] && 

          groupwin[[ue[[1]], ue[[2]]]] > 0, 

         groupwin[[numtomat[j][[1]], numtomat[j][[2]]]] = 

          groupwin[[ue[[1]], ue[[2]]]]];

        If[

         migi != {0, 0} && 

          block[[migi[[1]], migi[[2]]]] == 

           block[[numtomat[j][[1]], numtomat[j][[2]]]] && 

          groupwin[[migi[[1]], migi[[2]]]] > 0, 

         groupwin[[numtomat[j][[1]], numtomat[j][[2]]]] = 

          groupwin[[migi[[1]], migi[[2]]]]];

        If[

         sita != {0, 0} && 

          block[[sita[[1]], sita[[2]]]] == 

           block[[numtomat[j][[1]], numtomat[j][[2]]]] && 

          groupwin[[sita[[1]], sita[[2]]]] > 0, 

         groupwin[[numtomat[j][[1]], numtomat[j][[2]]]] = 

          groupwin[[sita[[1]], sita[[2]]]]];]]; 

      groupall = 

       Sum[If[groupwin[[numtomat[k]]] == groupcount, Return[1], 

         Return[0]], {k, 1, 54}]; 

      post = Sum[Count[groupwin[[l]], groupcount], {l, 1, 9}];;]];];

 haitou = 0; kakutoku = {0, 0, 0, 0, 0, 0}; 

 For[i = 49, i <= 54, i++, flug = 0; 

  If[SubsetQ[

      groupwin[[1]], {groupwin[[numtomat[i][[1]], 

         numtomat[i][[2]]]]}] == True && 

    block[[numtomat[i][[1]], numtomat[i][[2]]]] == 0, 

   haitou += odds[[i - 48]]*treasure[[i - 48]]; 

   kakutoku[[i - 48]] = 1]]; 

 If[group == {{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 

     0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 

     0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}}, 

  zenkesi += 1]; kakutokuall += kakutoku; haitouall += haitou; 

 If[QuotientRemainder[times, 100][[2]] == 0, 

  Print[{times, N[kakutokuall/times], N[haitouall/times], 

    N[zenkesi/times]}]]]; Print[{N[kakutokuall/times], 

  N[haitouall/times], N[zenkesi/times]}]

マジカルマインのシミュレーション(3) 宝箱獲得処理とオッズアップ

 宝箱のオッズアップはおそらく以下がほぼ正しいと思うのでそれを採用する。

オッズアップはランダムに、獲得済の宝箱にもつく可能性があり以下のテーブルに従う。

7個 +0.5倍

8個 +1.5倍

9個 +4倍

10個 +4倍

11個 +9倍

12個 +11.5倍

13個 +14倍

n個(n>=14) 5*n-51倍 例えばn=14ならば+19倍、n=21ならば54倍

宝箱は最上段の空白と開通しているときに入手できる。そしてオッズを{1,1,1,1,1,1}とし、配当を{5,2,2,2,2,5}などのようにしてそれぞれの宝箱の配当を計算することにする。

宝箱獲得処理については実はグループ分けのプログラムを流用すればよく、これまで空白マスは0としていたがこれをグループ分けすれば、そのグループが上と下でマスがつながっていれば配当獲得となるのである。

すなわち、宝箱の真上に存在するマスのグループが上まで通じている(=上の6マスに最低でも1つ同じグループのマスが存在する)ことを各宝箱でチェックすればよいのである。

よさそうな例は以下。参考youtubeのURL:アニマロッタ8/ロケテスト/マジカルマイン/ファンタジーワンダーチャンス (youtube.com)

これで入った番号は{14, 15, 4, 11, 2, 21, 16, 23}であるが、7球終了時点で以下の状態。
初期値を2つ上の画像のように設定して7球終了時点で番号7つを入れてシミュレートすると以下。当たり前だが完全に一致している。(オッズ配置はたまたま)
オッズアップについては1つが2.5倍、もう1つが12.5倍となっており、下図「オッズ」を見ると確かに場所は違うが、2.5と12.5の表記がある。そして獲得フラグは一番左の列だけちゃんと出ており、3,4,5列目が一見上が空いているようにみえても閉じ込められているので獲得判定になっていないことも確かめられる。なおここの判定には各宝箱の上のマスのグループ番号(空白もグループ化する)が、最上段のグループ番号の組(ここでは{1,1,1,1,1,1})の部分集合であるかどうかを用いている。
これをもって配当の計算ができたので、ペイアウト率及び全消し率も簡単に求めることができる。ペイアウト率はオッズアップがどこにつくかランダムなので完全な正確値ではないが、全消し率は正確に出る。次の記事ではそれについて記述する。

マジカルマインシミュレーション(2) HIT処理と落下処理

 先ほどグループ化の処理を行ったが、HIT処理と落下処理もマジカルマインを構成する重要な処理である。HIT処理についてはHITした番号と同じグループのブロックを消すだけなので実は非常に簡単。

これをグループ化して行列形式にしたものが以下。
1 2 2 2 3 3
1 2 2 2 3 3
1 4 4 5 3 6
1 7 4 5 3 6
1 7 4 5 6 6
1 7 4 6 6 8
7 7 9 10 8 8
7 9 9 10 8 8
9 9 10 10 10 10
確かにグループ分けができており、ここで例えば{13,14,1}にHITしたとするとどうなるか。
グループ7とグループ10のブロックが消えるのでプログラムを構築すると以下になる。
3 1 1 1 2 2
3 1 1 1 2 2
3 2 2 4 2 3
3 0 2 4 2 3
3 0 2 4 3 3
3 0 2 3 3 2
0 0 3 0 2 2
0 3 3 0 2 2
3 3 0 0 0 0
たしかにグループ7とグループ10が消えているのが分かる。

続いて落下処理であるが、これもチェーンボンバーと似たような方式。ただし各ブロックの下にマスがあるかの判定ではなく、各グループのすべてのマスの下にマスがないことが条件となる。
具体的な例を挙げるとすると
〇〇  △△〇
〇××    〇
〇〇×  〇〇
  ××   〇
      〇
ーーーーーーーー
このような状態のとき、一番右の〇グループは動かない。△は1マスだけ落ちる。×は1マス落ち、一番左の〇は1マス落ちる。これをどう処理するか。

まず、グループのいずれかのマスの下に地面があればそのグループは確実に動かない。
それ以外のものは動く「可能性のある」ものとする。
その後、各グループに関してそれらのマスの中に一つでも下に「絶対に動かない」マスがあれば当たり前だがそのグループに属するマスは動かない。
それ以外のマスは1マス分落ちることとなるので
      〇
〇〇  △△〇
〇××   〇〇
〇〇×   〇
  ××   〇
ーーーーーーーー
のようになる。そして再度同じ処理を行うと、今度は×が絶対に動かないマスになり、左の〇と△はともに絶対に動かないマスの上に位置するマスがあるため、動かないこととなる。これで処理は終了する。
以上の考え方をプログラムに適用する。
すると、
1 2 2 2 3 3
1 2 2 2 3 3
1 4 4 5 3 6
1 0 4 5 3 6
1 0 4 5 6 6
1 0 4 6 6 8
0 0 9 0 8 8
0 9 9 0 8 8
9 9 0 0 0 0
のグループに対して(7と10グループは13,14,1番HITにより消えている)
0 1 1 1 0 0
0 1 1 1 0 0
0 1 1 0 0 0
0 0 1 0 0 0
0 0 1 0 0 0
0 0 1 0 0 0
0 0 1 0 0 0
0 1 1 0 0 0
1 1 0 0 0 0
となり(1=停止、0=落ちる)、確かに落ちるor落ちない判定ができている。
そして落ちるブロックをすべて1段ずらしてまた同じ処理を繰り返し、状態が変わらなくなるまで繰り返せば落下処理は確定する。これをプログラムで構築すると
0 1 1 1 0 0
0 1 1 1 0 0
0 1 1 0 0 0
0 0 1 0 0 0
0 0 1 0 0 0
0 0 1 0 0 0
0 0 1 0 0 0
0 1 1 0 0 0
1 1 0 0 0 0
上:1回目落ちるものと落ちないものの区別
下:1マス分落ちた後の状態
0 2 2 2 0 0
1 2 2 2 3 3
1 4 4 0 3 3
1 0 4 5 3 6
1 0 4 5 3 6
1 0 4 5 6 6
1 0 9 6 6 8
0 9 9 0 8 8
9 9 0 0 8 8
そしてその次の操作で
0 1 1 1 0 0
0 1 1 1 1 1
0 1 1 0 1 1
0 0 1 1 1 1
0 0 1 1 1 1
0 0 1 1 1 1
0 0 1 1 1 1
0 1 1 0 1 1
1 1 0 0 1 1
上:2回目落ちるものと落ちないものの区別
下:1マス分落ちた後の状態
0 2 2 2 0 0
0 2 2 2 3 3
1 4 4 0 3 3
1 0 4 5 3 6
1 0 4 5 3 6
1 0 4 5 6 6
1 0 9 6 6 8
1 9 9 0 8 8
9 9 0 0 8 8
確かに右ブロック群は1マス落ち、左ブロック群は2マス落ちていることが分かる。
これにより落下処理は完了したので、いよいよ入賞番号が与えられれば最終的なブロックの配置が確定することになるので、実際に確かめてみる。
ちなみに入賞した番号の順によって結果は変わることに注意する。
具体例として
2 2 1
1 1 2
1 1 2
2 2 3
のカラーであった場合、12マス目→4マス目が消えた場合
2 2 0
1 1 1
1 1 2
2 2 2
からの
0 0 0
0 0 0
2 2 2
2 2 2
になるのに対して、
4マス目→12マス目が消えた場合
0 0 1
0 0 2
2 2 2
2 2 3
からの
0 0 0
0 0 1
2 2 2
2 2 2
になるので違う。

なので最初3球同時消え+2球同時消え+順に1球ずつ3回、に分けなければならない点に注意する。実際の消滅例をいくつか動画のもので試せばプログラムの正確性は保証されてくるのでさっそくやりたい。
すると以下の結果になった。

残っているブロックの位置およびグループ分け、そして番号配置も完全に一致。これを持って我のマジカルマインのブロック関係のプログラムは正しいことがおそらく証明された。

となれば次は宝箱GET判定とオッズアップ判定、そしてオッズ処理を行って期待値計算や全消し確率の計算にもっていく。ここまで来ればほぼ完成に近い状態で、まもなくマジカルマインのペイアウト率が計算できるであろう。


マジカルマインシミュレーション(1) 初期配置データ化とグループ化

カジプロのブラックジャックでは勝てないことも分かったので、テキサスホールデムで他プレイヤーに勝ちまくる作戦を考える前に、少々息抜きでマジカルマインのペイアウト率のシミュレーションを行う。

プログラムなどはいずれ動画化してアップロードする可能性もある。アニマ8のロケテ動画を挙げるものは多く、我はわざわざ川崎まで新幹線で遠征したがあまりプレイしていないので撮れ高はそこまでない。全消しもなければファンタジーJPもない。(ファンタジーJPCは見れて他の人のJPCは結構見れてBGMも堪能できた。なお我はそこそこWCには行ったがJPCには一度も行かなかった)

なおここで注意すべきことは、初期配置とボール入賞番号が与えられたからといって一意に結果が決まるわけではないという点で、その理由はオッズアップがどこの宝箱につくかわからないからである。

しかしながら最終的な配置や全消し率は計算できるので、それらも計算しようと思う。

なおこのプログラムはビンゴガーデンやビンゴファームのようにそこまで簡単ではない。しかしアニマドロップほど難しくはない。かつてアニマ5の通常ゲームをことごとく再現した者にとってはマジカルマインのシミュレーションくらいはたやすい。はず。


ではまず初期配置をデータ化する。今回は赤=1、緑=2、青=3、紫=4として処理し、番号もあわせて格納した6*9*2=108個のデータを作成する。


そして肝心のグループ分けについては以下のモデルを考える。

〇〇〇△△

××〇△〇

×〇〇△〇

×△〇〇〇

これをグループ分けしたい場合どうすればよいか。以前アニマドロップのプログラム構築の際やったのだがだいぶん忘れたので考え直す。

まずグループごとにどこまで続くかをチェックする。

例えば左上に1とつけたならば、その周囲を探索していき隣り合っている番号をチェックする。すなわち1→2→3→8→13→12,18→23→24→25→20→15のように進展する。これを繰り返し、新しいグループ1の所属が増えなくなればグループ分け終了である。

すなわち

1 1 1 0 0

0 0 1 0 1

0 1 1 0 1

0 0 1 1 1

のようになる。

次にグループ1に所属していないもので最初のものを2とつけて探索。

1 1 1 2 2

0 0 1 2 1

0 1 1 2 1

0 0 1 1 1

となる。以下これを繰り返すのみ。これによりグループ分けが完了する。

なお初期配置のグループ分けおよび落下後のグループ分けで、その操作は非常に多く使う。

この手法を用いて上の画像をグループ分けしたものが以下。

{{1,2,2,2,3,3},{1,2,2,2,3,3},{1,4,4,5,3,6},{1,7,4,5,3,6},{1,7,4,5,6,6},{1,7,4,6,6,8},{7,7,9,10,8,8},{7,9,9,10,8,8},{9,9,10,10,10,10}}

確かに10個のグループに分けられていることが分かる。

なお例えば適当に、かなり複雑なグループ分けをしてみると…

〇〇△△××

〇△×△△×

〇×〇〇△×

〇〇〇△△×

〇×△△×〇

〇××××〇

〇×△△×〇

〇×△〇×〇

〇〇〇〇〇〇

上は通常の配置規則を逸脱しているがややこしい例を出すには最適。これを先ほどのプログラムに従ってグループ分けさせると

{{1,1,2,2,3,3},

{1,4,5,2,2,3},

{1,6,1,1,2,3},

{1,1,1,2,2,3},

{1,7,2,2,7,1},

{1,7,7,7,7,1},

{1,7,8,8,7,1},

{1,7,8,1,7,1},

{1,1,1,1,1,1}}

となり、入り組んだ形でも確かにグループ分けできていることが分かる。

2024年6月24日月曜日

カジプロブラックジャック攻略(3) 各見せカードによる期待値

降りるは期待値0.5、倍掛けは1枚分引くが期待値としては変わらず1枚引いた後の枚数の確率分布をディーラーの見せカードに対する確率分布と対応させればよいので簡単。

ただし次々にカードを引いて行くものは、例えば{6,7}という組み合わせが初期の場合、2を引いたら{6,7,2}で合計15、8を引けば{6,7,8}で合計21、とさらにその先のパターンまで読まなければならない。すなわち合計13での期待値には合計14,15…21の期待値が必要で、エースが絡むものとそうでないものに分けて21の期待値から帰納的に計算しなければならないことが分かった。

具体的には「Aを含む19」の状態では、1を引けば「Aを含む20」の期待値、2を引けば「Aを含む21」の期待値、3を引けば「Aを"含まない"12」の期待値…10を引けば「Aを"含まない"19」の期待値が必要となる。
「Aを含む20」の期待値はまたそれに付随してその上位の期待値が必要になり、結局の大本は「21」の期待値に行きつく。
このようにして計算できるものから順次計算していき、降順で(実際はもう少し複雑だが)それぞれのAを含むまたは含まない状態の期待値を順次算出していくスタイルになる。

簡単な例は「Aを含まない20」での状態で、1/13の確率で21となる。それ以外12/13の確率でバーストとなるので、期待値はあらかじめ計算されたディーラーの見せカードの確率分布に従いそれぞれのパターンで勝率を計算して、例えばディーラーのある見せカードnでのBJ率が0.05としてバースト率0.50と仮定すると21の数値では、ディーラーに勝てる確率は0.95で通常の21では2倍のオッズなので期待値1.9、引き分けの確率は0.05でオッズは1なので0.05ということで期待値は1.95となり、100BETに対して平均195WINが期待できる計算となる。ただし確率1/13なので実際は1.95/13=0.15程度になりそのまま(=ステイ)の方が期待値は高い(これも確率分布に照らし合わせれば求められる)結論を得る。

次に「Aを含まない19」での状態では1/13の確率で「Aを含まない20」になり、1/13の確率で「Aを含まない21」、それ以外でバースト。
そして「Aを含まない20」での期待値最大は、先ほど求めた「ステイ」であり、「Aを含まない21」は明確に「ステイ」である。このように前に計算した期待値を順に使用していく形となるのがこの計算の特徴である。いわば高校の漸化式。


ここでそのさらなる詳細な原理を書くには結構ややこしいので割愛するが、とりあえず結果はそれっぽいのが出た。確実に計算があっている保証はないが、予想通りの値は出ているし内部におかしな点もないはず。

実はカジプロの攻略wikiにも同じ考察がされているのだが、我の手法とせっかくなので比較しようと思っている。ただ1日足らずで作った即席プログラムなのでこっちの方が間違っている可能性も否めないが、期待値の数値つきで出来上がったので確認する。
そしてその総合の期待値が1を超えればこのゲームは「勝てる」という結論を得、無限にチップを理論上は増やせてRMTで金を稼ぐ1手法となる。

そして結果は以下。wikiのものと勝負か降りるかあたりはほぼ完全に一致した。
なお倍掛けに関してはトータルで増える枚数(差分)ではなく期待値(割合)で計算している。そのため倍掛けの結果が若干異なっているものかと思われる。
参考:ブラックジャック - カジプロ攻略wiki | Gamerch
この計算は漸化式などを用いてそれなりに煩雑な計算だったため、朝からちょこちょこやって丸1日近くかかってしまった。しかしとりあえずおそらく最適解っぽいものを探し出せたのでこの手法に従ってプレイを自動化すればよい…といいたいのだが。

期待値は0.972(97.2%)

ということでこの最適化の手法でもやはり負けるように設定されている。なおルーレットは単純に36/37=0.97297なので97.3%となり、ルーレットとほぼ同じ期待値になってしまう。

結論として、プログラム構築化によりwikiの最適解を自ら再発見した…がやはり勝てないゲームだということが確定したのでブラックジャックRMT作戦は失敗ということになる。
Q.E.D


なお我が購入しているRMT業者はテキサスホールデムで勝っているようである。テキサスホールデムについては我はあまり仕様を知らないが、なんか手元のカードと中央のカードとあわせてポーカーのように強い役を作るとかいう雰囲気のゲームらしい。
このゲームはプレイヤーとの勝負なので、ディーラーが絡まないゲームなのでもしかすると勝てるのかもしれない。

ということでまた暇なときにテキサスホールデムの場面別最適化プログラムを構築してそれで勝てるのならばエミュレーター上での自動化まで落とし込むところまでは行きたい。
プレイヤーとの勝負ということになるが我はカジプロ初心者なので圧倒的に経験は不足しているが、データと戦術で(どこかできいたような)勝負する。

ちなみに現時点であのRMTを行うために稼働させているPCは最大で19台。カジプロで必勝法を見つければただちにエミュレーター複数×19台を起動させて無限量産体制に入りたいのだが…。(ただし過疎っているとお互いがお互いのアルゴリズムで勝負する意味のない戦いになる可能性がある)
リバーシもほとんどのパターンで負けることが多いので、カジプロ上級者に勝つにはやはりコンピューターなのである。

現在のRMTがくたばったときの万が一の場合を考慮して一応カジプロで早めに対策を考えているが、当面の間は大丈夫そうなので安心。月100万円ももはや間近。

余談だが2日前は岩国の錦帯橋(激すき)と宮島(ほとんど外国人&激混み)に行った。同級生は金曜日から大学にショッキングピンクのスーツケースを持ってきていて博多に行っていたようであるが、当然ながら我は博多には何度も行ったことがあり、博多のカービィカフェで3回食っている。今日博多通りもんの袋をかかえて近くの仲の良い女子とシェアしていたとみられる。旅行自慢をしているようだがそのはるか格上の(=試験周辺以外ほぼ毎週旅行している)存在を忘れているようだが
なお我のおすすめの博多土産は苺フロマージュである。スペースワールドはなくなったので残念。ただし最近は博多はあまりレアではないのであまりお土産は買わないと思われる。買うならやはり佐賀(みかん、佐賀錦)や長崎(カステラ)のお土産。
しかし我も近日中に博多に行くことを忘れてはならない。というのもみぞしょくチャンネルやもっかいチャンネルでおなじみの荒尾のグリーンランドおよびサープラ荒尾、そして佐賀も探索して佐賀錦を喰い、長崎も見て佐世保バーガーを喰ったりハウステンボスに行ったりしながらご当地ベアを回収しようと考えているからである。ただし休みが全然取れないので夏休みに行かざるを得ない。夏休みは九州を見て回り、さらに北海道からの東北再訪も考えている。






カジプロブラックジャック攻略(2) 見せカード毎のディーラーの目期待値

 先ほど初期カードをランダムにして(無限デッキと仮定する)ディーラーの数値分布を行ったが、これの1枚目とその場合の目分布の関係を確認すれば各カード毎の期待値が分かる。

ただしここで注意すべきは、例えば見せカードが1~9と10の数値は明らかに10の方が発生する可能性が高いため、サンプル数では10の方が多く集まるということであるが、1~9を十分な数サンプリングすればおのずと10も十分な数になるのでそれでいく。

その結果、それぞれ見せカードが1~10それぞれの場合でのディーラーの目分布は以下。

やはりA(1)が見せカードの場合はBJの可能性がずば抜けて高い。というのもブラックジャックになるためには10~13の4/13で成立し、かつそうでなくてもまだ特定のカードでBJの確率が加算されるからである。そしてバーストの可能性も明らかに低い。
他には20になる可能性が高いのはやはりもともと10が見せカードであるというのも理にかなっている。

このグラフを見ても明らかに相手の見せ札がA(1)ならば他のパターンより厳しいことが分かり、見せカードが6のときに最も期待値が高そうな雰囲気があるのもわかる。(17以上で止めるため、6の場合は実際は16の可能性が高くその場合のバースト率は8/13とかなり高率だからである)

ディーラーのカードを引くパターンはプレイヤーの数値にかかわらず(無限デッキを仮定しているので)、最初の見せカードの時点でディーラーの目の確率分布は確定する。
すなわち、あらかじめここの確率をより詳細に計算しておくことで以後の確率計算や統計で正確な値が出やすいということになる。
100000回で6秒かかったので、1億回でおそらく6000秒。現実的な回数としては1億回シミュレーションではないかと思われる。

そしてこれを計算させている間に、プレイヤー側の戦略で結果がどう変わってくるかのプログラムを構成していくことにする。








カジプロブラックジャック攻略(1) ディーラーの目分布

 アニマのマジカルマインのシミュレーションは本稼働まで特に急ぐ必要もないので後回しにする。それより現在はカジプロでチップをRMTで数千万購入しているので、なんとか自力で増やせないかと考える。継続的に売れるのならばおそらく必勝法があるのではないかと思ったためである。

そこで我はブラックジャックに目を付けた。他はルーレットなどはペイアウト率100%未満に収束するのは明らかであるし、リバーシは過疎かつ勝利チップが少なく割に合わない。ポーカーなどはやはり長く見て勝てないようになっている。

しかしブラックジャックはプレイヤーが倍掛けや降りたり、相手の手札が見えたりなどこちらの介入要素が大きく、しかもディーラーは16まではカードを引くが17以上ではカードを引かないことが分かっている

それで攻略サイトを見てみると我の考えていることはすでに実践されていたようで、どのときにどんな行為をとれば期待値を最大化できるかが書かれている。

ただ我としては実際に自分でチェックしてみないと気が済まないうえ、手作業でやるのは考えられないのでもしペイアウト率が100%を超えるならば自動化も組む。

しかし自動化前にペイアウト率がどうなるのかを判定しなければならないので、やはりmathematicaでこれを行う。アニマロッタに比べてかなり簡単なプログラムで出来るとみている。

というわけでまずディーラーが例えば初期カード{1,4}でどのような最終結果になるかを確率分布で表記してみた。



16以下は起こらない、というのは16以下なら引くというディーラーの特性による。27以上が起こらないのは16でどれだけ大きい数を引いても最大10なので26以下で、また17以上ではそれ以上ひかないためやはり27にはならないからである。

例えばこの状態だとディーラーは32.7%の確率でバーストすることもわかる。

またちょうど21になる確率は13.5%と案外高め。


ここから、最初に配られるカードをランダム化すればディーラーのカード数値の分布が得られる。

この中でブラックジャックの確率を最大化するカットオフ値は21ではあるものの、その分バーストする確率は最も高くなる。すると一見どれが最適かはわかりづらい。

そこでバーストする確率で見てみると(試行10000なのでそこまで正確ではない)

12以上で終了…0%

13以上で終了…3%

14以上で終了…8%

15以上で終了…13%

16以上で終了…21%

17以上で終了…28%

18以上で終了…38%

19以上で終了…48%

20以上で終了…62%

21以上で終了…82%

となり、まだ17が最適とする理由が不明。

なのでどういう基準をもって17とカットオフ値としているかは不明だが、この話は本質的ではないので流すとして、次にプレイヤーの戦略とディーラーのカードの大小を比較する話にうつる。








2024年6月17日月曜日

アニマロッタ8 マジカルマインのシミュレーション(2)

しょしん氏が提供する以下の動画によりルールを修正。

https://www.youtube.com/watch?v=YO7E7RdXzwE

まさかのブロックまとまりが1個で出現する場合もあるらしい。


①基本赤青緑紫の4色のブロックで構成される(3色の場合もある)

②それぞれのブロックの個数に規定はない(多いと20個、少ないと4個など)

③各まとまりのブロックの個数は最小1個、最大6個

⑤オッズアップテーブルは同時に消えたクリスタルの数で決まりまだ確定ではないがほぼ以下の規則に従う可能性が高い

7個 +0.5倍

8個 +1.5倍

9個 +4倍

10個 +4倍

11個 +9倍

12個 +11.5倍

13個 +14倍

n個(n>=14) 5*n-51倍 例えばn=14ならば+19倍、n=21ならば54倍

オッズアップ対象はすでにオッズアップ済の宝箱にも、獲得済みの宝箱にもランダムに付与されるものとする。ここでは例として、2WINの宝箱で9個クリスタルによるオッズアップでは2WIN→2+8WIN=10WINとなり、さらに11個消えて同一個所にオッズアップした場合10WIN+(2*9)WIN=28WINになるとする。動画で書かれていた黄色オッズアップ(10個以上すなわち+4倍以上)でも5倍にならないというのはこのことを言っているのではないかと思われる。ただし確定情報ではないので注意。

上記の仮定を満たせば、各配置のペイアウト率はかなり正確に計算できることになる。ただしオッズアップ位置が不明なので数字入賞と配当が1対1対応するわけではなく理論値は出てこない点に留意。

さてここまで仮定が進めばいよいよプログラミングに取り掛かることができる。

分かりやすいようにまずは各ブロックの状況を視覚化できるプログラムなどから作成していき、このゲームの真の特性を暴こうと思う。





なんばOIOIにあるクレーンコーナー「PALO」

 いつの間にかなんばのOIOIにクレーンゲームコーナーができていた。

そしてどれくらいとれるかと両替をしてスウィートランドをプレイしたり確率機をやってみると…。

まさかのスウィートランドではなん百円使っても何一つつかめず(シャベルの角度がかなり反時計回りにしめられているので滑り落ちる)、しかも手前には反り返った透明のシールド、確率機に至ってはつかむ云々の話ではなくほぼ1mmも持ち上がらない。要するに景品をやさしくなでるのを見つけるゲームである。

700円使ったがあまりのカオスさに笑いすら出てしまうレベルで、即座に退散した。当たり前だがもう二度と行くことはない。

そもそもPALO自体がモーリー系列なのでこういう結果になるのは想像に難くないが…。

それにしてもここまでひどいゲームコーナーはなかなかない。350店舗くらいで景品を取っているがここはあのナムコやGIGOより渋く悪質である。ただし、絶対に取れないというイメージがつかみやすいので無駄な散財は防げる。その点ではある意味いい店舗。

そういえば阿倍野の地下にも同じPALOが最近できたとのことだが、なんばのこの惨状を見て察した。

鳥取のPALOなどはまだちゃんと取れる設定のものがあったのだが…。さすが都会。そのためか土曜日なのに閑散としていた。倉庫系などは東北の田舎でも大盛況で景品を袋いっぱいに持つ人ばかり。逆に景品が取れない方が珍しいのにこの差。

結論: PALOは金を捨てる場所


直近に行ったわくわくアミーゴ尾崎と合わせて、やはり府内で設定の良いゲームセンターはもはや結屋、わくわくアミーゴ尾崎の結屋系列しかない。トップランも取りにくくなったし、アミパラ大東もヨッシーが青天井と信じられない(松山や光明池は定価とほぼ同じ設定だった)。日本橋やなんばのタイトーも渋いが、さすがにナムコやGIGOほどではない。

なおOIOIに行った目的はPCの購入であり、例のアレを行うためのPCは15台から17台へとパワーアップ。同級生の時給4000円や半月19万のアルバイトごときに負けないためにさらなるパワーアップを行っている。




2024年6月16日日曜日

わくわくアミーゴ尾崎とハピピランドピタゴラス和歌山

 それぞれクソガキサラリーマンともっかいちゃんねるが行っていたのでついに行った。

わくわくアミーゴ尾崎はオークワ内にある結屋と関連していると思われるゲームセンター。結屋系列なのでショッピングセンターにありがちなニコパだのモーリーだのソユーとは違い、明らかに取りやすい。個人的なイメージとしては、昔の簡単な時代のベネクスという感じ。倉庫系に比べると少々古びている感がベネクスを彷彿とさせるが、取りやすさでは現在のベネクスよりもよく、倉庫系に匹敵するレベル。フック設定に至っては神ゴリフィギュア金銀が2つ合わせて500円以内に取れるという設定の良さで、確率機のぬいぐるみもパワーが若干保持されるので確率無視しやすい。動画でやはり取れやすいのが強調されていたが、確かに昔のベネクス並みに取れやすかった。ただ難点としてはやはり規模が小さいので景品のラインナップが豊富ではない。その点では倉庫系にどうしても劣ってしまうが…。10000円足らずで大きな袋2ついっぱいになったのは予想外で、まさかの荷物発想を最初からかますという事態に(1階の旅行会社で発送サービスを承っている)なる。もし5種類くらいあるほしい景品があれば候補にここを選ぶのもあり。近くの激渋タイトーGIGOに行くくらいなら往復5000~10000円かけても取れやすい店舗に行くのは我にとっては当たり前の話である。例えばビッグクリアフィギュアが1200円で取れる倉庫系と3600円くらいかかるナムコやタイトー(渋い店舗)では5種類とるのにそれぞれ6000円、18000円となり交通費を入れても遠征する方が得だからである。

よく動画で出ているがまだ行ったことのない店舗として回遊館洲本とお宝発見一宮があり、これらも近日中に行くことが予想される。以前は貯金や小遣い(月数万円)でやりくりしていたが、例のアレのおかげでお小遣いは月x万(金額公表してチクられても困るので伏せておくがおそらく計算が得意でどういう手法でやっているか知っているならある程度把握はできるはず)になったし、遠征頻度と行動範囲が一気に増えた。もはや上位3名が毎年選ばれる年60万の奨学金よりはるかにコスパええわこれ。(惜しくも4位となり60万を逃した我のひそかな恨み。上位3名には絶対この稼ぎ方法は教えない。入学時首席で入ったからといってずっとトップなわけではない。一応上位10%にはほぼ入っているが)

その後はナムコパームシティ和歌山に行きコンテナを1個確保した後(ミルキーのやつで、アミパラ橿原で以前入手したことがある。なおその後だぶるあっぷ氏が動画でだしていたブック245に行った)ハピピランドピタゴラス和歌山に行った。

ハピピランドピタゴラス和歌山は全体的に見てあまり我好みの景品はないが、コストコのような箱設定が多く、動画で出ていたアポロのやつもあったがあれは取れなかった。動画を見たのが行った後なので遅かった模様。手前を狙って3000円沼ったとshortsであったが、まさに我も完全にそれと同じ状態に陥った。ただ見切ってすぐやめたが…。何が言いたいかというと、1か月たっても設定や景品がそのままという点。そして取れないから残っているというわけでもない。おそらく人気なのだと思われる。

ここにねるねるねるねのコンテナがあったが、我はコンテナの覇者()なので500円かかるかかからないくらいで入手。コンテナはゆうぷら二本松でえらい目にあってゆうぷら系列を嫌うようになったきっかけであるが、あれ以降コンテナは完全に得意分野となった。ただしラウンドワン松山のように移動制限がちがち、下降制限もあり途中停止不可などの激渋設定だと無理だが、普通の店舗ではすでにレジャラン呉羽(富山)や回遊館長浜(滋賀)などで乱獲しまくっている。そのため相当の種類のコンテナが倉庫にある。

他はブラックサンダーの車も入手。うまい棒バージョンは先日秋田の湯沢ビフレでBCで入手したがブラックサンダーの方はあそこでは難しい設定だったのでついに確保。おそらく阿倍野のGIGOにもありそうな気はするが、GIGOなどあてにしていないので関係ない。

あとはネイルステージのような筐体があったはこれは取れない。アミュージアム枚方やスマイルパーク多度津や、それこそわくわくクレーンゲーム王国新横浜でこれを見たことがあるがそちらのほうがまし。この筐体は開閉度がすさまじく大きいので注意。

いちごみるくの素もあったので確保。たこ焼き台だが台が傾いており、明らかにしたから埋めて行って徐々に穴まで埋めて行って物量で押すという方法でしか取れないと簡単に判断できたが欲しい(食べたい)ので継続し、2100円で入手。お得かどうかは知らないがその後百貨店で似たようなものが500円くらいで売っておりおそらく赤字と知る。それなら2週前の千葉鑑定団にもあった気がしたのでそっちでやっとけばよかった。

総合評価として、ハピピランドの系列によくある、可もなく不可もなくという感じで、近場にこういう店舗があったら少なくとも都会のゲームセンターよりははるかに良いので通ってもよい、というレベル。南海東松江(島根ではない)から徒歩か和歌山大学前あたりからバスで延時下車。倉庫系に比べればまだ立地はましな方。


今回は3店舗しか行っていないのと日帰りなのでクレーン金額は15000円と少な目。ただい来週から重い試験が連発してくるので余裕はない。なので日帰りなら遠征はできるが試験前はさすがに行けないし行く気も起きない。東京に再度行くのは7月中旬以降となると思われる。

またPCの増台も考えている。すでに業務用PC15台と学校用1台、ほか3台程度を所有しているがさらに拡大する可能性あり。


夏休みは北海道にの札幌以降にもいき、ついでにハウステンボスなども行こうと考えている。近場ではそろそろ最近行ってないナガシマとスペイン村、とれとれ市場あたりが候補にあがってくる。ナガシマはジェットコースターは今はまあそこまで興味もないのでご当地ベア目的で行く予定。スペイン村は最近とあるVtuber(さんご)や謎のTシャツ販売者?のライブかなにかのせいで大混雑しておりとてもではないが行けなかったが、ようやく静かになってきたので我の時代が来た。とれとれ市場はそもそも客が大量にはいない立地なのでいつでも狙える。もちろんお盆などは絶対に避けるが。

那須どうぶつ王国なども我の気に入っているほうのVtuber(名取さな)とコラボしていたが、こちらはさすがに空いていることが期待できる…が我はドラクエやカービィとコラボしない限り一個人のイベントのためにはわざわざ行かない。あの非常に気に入っているもっかいちゃんねるやユウヤ師のイベントがあったとしても混雑が予想されるために行く気が起きない。結局のところイベントなく激すきの場所で一人静かで優雅なときを過ごすことこそが至高。

ディズニーは北海道や九州よりはるかに行きやすいが興味がそもそもない。ディズニーに行くくらいなら隣の千葉鑑定団湾岸習志野一択。

北海道ではロイズタウン、ハピピランド旭川、ラウワン旭川、白い恋人パーク、ノーザンホースパーク、登別温泉、ルスツリゾートあたりに行こうと考えている。税金で半分近く我のRMT収入が持っていかれるとはいえど夏休みになれば相応の金がたまっていることが期待されている。しかし夏休み前半は研究発表のための準備が必要で、後半はCBTに向けての相当な勉強が要求される。明らかに成績ではクラス上位といえど、油断したらやられるので気を抜くわけにはいかないのである。日々の友達との会話の多さで言うとワーストレベルに入るが前のおとなしい女子もほぼしゃべらない(しかし我もお互い意見を言うときはいうし必要に応じて会話、協力し楽しくやっていけてはいる)

2024年6月4日火曜日

東京遠征(n回目)

 やはり東京に行き、ディズニーに行く…わけもなく、以前言っていた店舗と観光名所に突撃。もちろん1泊しかできないので当然ながら始発の新幹線である。

行った店舗および観光地は以下

1日目

シルクハット川崎→ベネクス川崎→タイトー川崎ラチッタデッラ→ルイーダ→イオン幕張新都心→千葉鑑定団湾岸習志野→宇都宮宿泊

2日目

おたちゅう日立南→日立オリジンパーク(小平記念館)→国営ひたち海浜公園→ダイレクト帰宅


では各店舗の印象および紹介。

シルクハット川崎…谷尾年が渋すぎて5000円でも取れない。結局サポートしてもらうことになるが店員の好意で2個取らせてもらえた。ここは設定が近くのモアーズと同様ありえないほど渋いが、実は店員の声は店内にあえて漏らしており、サポートなどが行き届いているということを店中にアピールする効果がある。すなわち我にかなり良いサポートをしてくれた=この店では積極的にサポートをしているというアピールになり、まさに店も客も我もwin-win-winなのである。これに関して文句はない。まあそれでも1個景品2500円なので相当食われているが、取れればもう別に何でもよい。

で肝心のアニマはどうかというと、朝イチにいけばさすがの土曜日でも普通にあいていた。そして我はJPCに一度も行かなかったが他の人は何回か行っていたのでネタには尽きなかった。ロケテストなので自分がJPを取るかというよりもJPCの動画を収めることに意味があるのである。3000円で3時間弱プレイできたので、少なくともコナステよりは設定はよい。

ベネクス川崎…東京えの遠征での入試前日にあそびツナガビンゴトレジャーオールラインというすさまじい運を使ったが入試も当然受かった伝説の店舗。ベネクス系列よろしく取れないというとちゃんと店員はプレイしてくれるし、取れなさそうならサポートもかなりはやい段階でしてくれるのは系列共通。ただやはり最近どこのベネクスでも感じるが、詰みの形になることが多く自力GETはかなり難しい印象。どの景品もサポートありで基本2000円くらいかかり、安く取れたものはほぼない。こういうことが何回も多発するので最近ベネクスには行かなくなったが、それでもサポート体制が良いのでそこらでプレイするよりはよほどまし。あと一番うれしいのは景品の配送サービスを行っているところ。段ボールはプライズのロットの梱包箱のあまりを使うので段ボール代がかからないのが良い。ただし着払いだけだが。これでぬいぐるみなどの大きいぬいぐるみや大きなお菓子セットを配送できる。この点とサポート体制に関してはベネクスが最高。取れやすさ単体で言うなら微妙ではあるが。なおユウヤ師が取ろうとしていたいぶりがっこチーズタルタル(秋田で非常によくみかけるチーズディップとは異なる)はここで見かけたので取った。

タイトー川崎ラチッタデッラ…川崎のラチッタデッラという商業施設でどでかくあるタイトーなので絶対あかんやつやと思ったがそうではなく、タイトーにしてはパワーが入っており昔のベネクスのようなやさしさを感じた。ただ徳島のGIGO、岩手のマッハランドの前例があるのでこの1回だけで野放しに取れる店舗、と断定はできない。何しろ大手なので。

千葉鑑定団湾岸習志野…ユウヤ師のジュースやいぶりがっこチーズタルタルの店。しかしベネクスでいぶりがっこを取っていたのでここではとらなかった。あおさバターはさすがになんかあまりおいしそうな気がしないような。ここはやはり景品が取れやすく、橋渡しも優しい。やはり安心の倉庫系の雰囲気で非常に楽しんだ。なお楽しく遊びすぎて宇都宮に行くための最終新幹線がもう間に合わないことに気づき、在来線最終に乗ることになる…がそれも人身事故で90分遅延して宇都宮着が2時半になるという異例の事態発生。

おたちゅう日立南…JINstudioで紹介されていたので行った。残念ながらほしい景品が少なかった。フルーチェ6個はフック設定で1700円で取れたが原価以上。ただ平均的にはもうちょっと安く取れそう。これは朝食のためにとったが6個で1.2kgなのでそれをもって600km移動するのは重かった。ほかの確率機はまあそれなりの設定で、普通に倉庫系としてまあいい感じの印象を受けた。都会のGIGOやナムコは立地の恩恵があってもかなり閑散としているがこのあたりは田舎なのに大盛況。客はみんな袋いっぱいの景品を持っていることが多い。自宅周辺にもこのような倉庫系があればどれだけうれしいか…。しかし最寄りで北神戸、加古川や長浜となり行くのに2時間はかかるのが残念過ぎる。

国営ひたち海浜公園…ここのゲームコーナーは想像に反してちゃんと取れる設定。基本遊園地のクレーンは渋い印象だが、マリーナシティも生駒山上も、あしかがフラワーパークも東武動物公園もここも案外そこらのゲームセンターよりはちゃんと取れる。ただラインナップは期待してはいけないが。ひよこのようなぬいぐるみを3個GET。去年あたりにドミー知立(愛知)やアピタ蒲郡、ハピピランド日向で手に入れたやつとたぶん同じタイプのもの。スウィートランドもちゃんとおもりは動き、どこぞの落とし口付近に姑息にも滑り止めをつけたりして延々動かない店舗に比べると良心的。

今回のクレーン使用金額は40000円弱。まあ使ってないこともないし使いすぎたわけでもない。なんか毎週試験前以外は遠征している気がするが、それもこれもアレのおかげである。

景品を獲得した店舗もついに340店舗となり、もはや遠征レベルで言うとユウヤ師に並んでいるレベル。技能と知名度はお察しだが…。


来週はディズニー新エリア発生なので東京は混雑が見込まれて危険。というよりまた試験前になるので来週はおとなしくしており、またその後1泊で博多やハウステンボスあたりの西側や日立再訪および千葉東側開拓なども順次行っていく。カービィカフェもそろそろ行きたいが東京のカービィカフェがあかなさすぎる。まあ博多に行けばいいだけの話なのであまり気にしてない。


小平記念館もついでに行き、ここは日立製作所の歴史が見られる場所。個人的にはエスカレーターやエレベーター、医療機器(僧帽弁逆流症などでよく出てくるやつすなわちカラードプラ、重粒子線治療などの機械)、券売機システムMALS、アナログ計算機などとやはりすばらしい発明品ばかりであった。埼玉で展示されていたお召列車も「日立」とあったのでやはり日立の名はだてではない。

2024年5月31日金曜日

たくとりチャンネルの中国四国遠征最終回

 ついに遠征の最終回の動画を見ることができてうれしい。

1店舗目は倉敷市役所が近くのバス停ということもあり、また基本撮影禁止というのでアミパラ倉敷となる。ここは行ったことがない。

2店舗目は倉敷駅南口(美観地区方面。天満屋があるのでわかりやすい。昨年秋に行った)から北口に抜けたのと、あの因縁の両備バス(小学校の頃いやでたまらなかった小豆島合宿にこのバスで連行されて激しい悲しみとともに嘔吐したため)とその後のバス乗り場で非常にぴんと来る。これは我が大嫌いなユーズランド倉敷や。

みにっちゃでガチャガチャの景品やドラクエのミニメタルキングソフビを取るのに2個で10000円くらいかかったような記憶が。何千円かけてもこんなミニサイズのフィギュアに確率すら来ず、店員にサポートをお願いしても渋られてそもそもしてくれない。カービィのアクリルフィギュア(大)を取るのも3000円くらいかかった記憶が。正直サポートも設定も最悪の店舗といえる。

カービィのアクリルフィギュアなら倉庫系(おたちゅう長岡など)で600~800円で取らせてくれるし、タイヨー枕崎でも1000円程度で確率が来ていたし、指宿でもその程度でとれる実力設定。それくらいの価値があるのかと思われたが、この店舗が異常なだけだった。

口コミを見てもユーズランドは特にひどいとの口コミが多く、我も350店舗ほどのゲームセンターで景品を獲得しているがワースト5に入るくらいひどい。そういう店舗なのでもうあれ以降ユーズランドに立ち入ることはおそらくなくなった。ここの口コミは我の思った感想の通りであり、常にこのようなひどい状態らしい。

なのでほかの目的で倉敷に立ち寄った際もこの記憶がよみがえって倉敷=激渋の観念が定着してしまった。岡山県で取れやすい店舗はおそらくお宝発見津山、ついでアミパラ系列。アミパラは撮影禁止ばかりだがぬいぐるみなどはまあそれなりに取れるようにはなっている。


その後イオン倉敷からバスがなかなか発車しなかったというのはGWにありがちで、大型連休にはショッピングモールに郊外在住の人が密集するからである。あと老人が運賃支払いにちんたらして…というのは我も往々にして経験あり。特に秋田県とかになるとほとんど老人しかいないので乗車や降車に時間がかかることが多い。ただ我は混雑した時間帯や日程を避けるので、バスの乗り降りにすさまじく時間がかかるという事態には幸いあったことはない。どこぞのバスは平気で15分遅延した結果電車に乗り遅れて2,3時間待ちを食らった日向市の思い出はまだ新しいが…。

ちなみに最近はバスの到着時刻はもはやあてにならず、特に終着点の場合は遅れの積み重ねが生じてほぼ定刻に到着しないことが分かってきたので、駅への乗り換え時間は最低10分以上はみるようにしている。我も過去バスの遅れで目的の電車に乗れず…というのがそこそこあった。ただ平塚などの首都圏なので次の電車はまだすぐに来るのが救いだが、岡山エリアは少し少ないのかもしれない。

余談だが電車ダッシュで、FT4のレジェンドモードのBGMが流れているのはBGMにあいすぎて笑った。ラウンドワンのシャトルバスはたぶん30分に1本かそこらであまり来ない印象。ただシャトルバスは遠征先でのラウンドワンでもあまり見たことがない。秋田くらいしかシャトルバスをみたイメージがない。なお秋田のラウワンも最寄り駅が羽越本線羽後牛島であるが2時間に1本と使い物にならない。過去2回行ったが実は秋田ラウワンは設定がかなり良かった。最近半年でまた2回秋田に行ったがラウワンにはいかず横手ばかり行くようになった。時代は横手焼きそば(or十文字中華そばor比内地鶏親子丼orとんぶりサラダor稲庭うどん)

3店舗目はラウンドワン岡山妹尾。備中呉妹と合わせて妹を「せ」と読む珍しい駅の地名を持つ。備前西市が最寄りだがここの香川とをつなぐ電車はあまり来ないイメージ。あと駅から遠すぎ。なのでシャトルバスを利用しなければならないのはわかる。なおここは遠いので我もまだ行ったことがない。

その後の新幹線切符購入しようとするも長蛇の列はGWにありがちな事象。我もこの混雑のせいで福山駅で切符をまともに変えなかったり、鹿児島中央で指宿のたまて箱に乗れなかったりしている。混雑など百害あって一利なし。目的の電車に乗れないし延々人生の無駄遣いという待ち時間を生成するしサービスは悪いしと最低最悪である。

あとGWなどは券売機を買うのに手間取る初心者がかなり増えるため、そもそもの人数増加と相まって相乗的に待ち列が長くなるのが問題なのである。100km以上の遠距離きっぷは通常の券売機では買えないので、ネット予約でもない限り窓口か券売機にならぶしかないのだが、大概窓口の方が混雑している印象だが連休ともなると券売機もおそろしいことになるはず。特に姫路、岡山、鹿児島中央などののぞみが止まることが多くかつ外国人が来そうな駅は注意した方がいい。

我が最も嫌うものは混雑なので、それを避けるために全力を投じている。すでに通学などもどの時間の電車がすいているかはチェックしているし、遠征時もラッシュなどを避けるように動いているし大型連休は絶対遠征しない。

そして帰りは新幹線で長野方面へ帰宅…ということらしい。あらためてGWの不便さとその恐ろしさの片鱗を味わわせてもらった。やはり我がGWを避けたのは正解だった。もし同じ状態になっていたら内心超大激怒していたかもしれない。


最後に乗った電車はJR東海(オレンジ色や装甲の帯パターンから判別)のものなので新大阪終着ではなく東京まで行くタイプのものと推測され、長野なので名古屋から特急しなので帰宅…であろう。

この遠征動画を最後まで見せてもらって非常に面白いと感じたが、実はアニマロッタ8のロケテストということでその新幹線に明日乗ることになっている。長野は1月にスタンプラリー完全制覇のために2泊目にまたメトロポリタン長野に宿泊したが、それ以来行っていない。

今週末は東京遠征(ロケテスト目的)+ついでに茨城や群馬、秩父観光およびユウヤ師の行った千葉鑑定団松戸、習志野に行くのが目的。


2024年5月30日木曜日

ユウヤ師の千葉遠征

 アニマ8のロケテストに行くついでにやはり関東を回るので、候補としてはネモフィラや草津温泉、あしかがフラワーパーク、道の駅ちちぶがあげられるが、ユウヤ師が千葉に遠征していたのでそれら店舗の中で行きやすいものはないか模索する。

千葉遠征の動画をさっそく見ると、

「東京に実質タダで行く方法」→フィギュア100個売り

クレーンゲーム中級者程度の我がそんなんで稼げるはずがなく、そもそも近くに景品が取れやすい店はないし車で行かないので荷物ぱんぱんですぐゲームオーバー。稼げるどころか都会のぼったくりゲームセンターのいいカモになるのがオチ。ちなみに秋葉原は物価があほみたいに高いので、フィギュアもおそらくそれなりの値段で売れる。山形など地方のお宝中古市場と秋葉原の中古ショップでは物価が3倍違うと思っておいて損はない。

その後秋葉原のゲームセンターで散財、とあるがやはりみんな同じで、秋葉原のゲームセンターでたくさん景品が取れるなどありえない話である。どこぞのタイトーでは1プレイ500円のクレーンゲームがあり、それでいてアームパワーが府中くるるのタイトーの100円台とほぼ変わらないという。あそこでプレイするのは何も知らない外国人か、富豪くらいである。

ユウヤ師はフィギュア100個で10万手に入れたらしいが、確かに我も東京の遠征なら運賃、宿泊含めてそれくらい使うことが多い。東北となると15~25万は見た方がいい。我はアレをやっているので10万はその方法で1週間以内にすぐに手に入るので遠征費はそれでまかなう。

①千葉鑑定団 松戸

松戸駅からバスが多く出ているので行きやすい。運箱があればとりたいがもって帰るにはなかなかハードなので難しい。

②千葉鑑定団 習志野

湾岸習志野にご当地ベアがありそうだが徒歩で侵入できないので悲しい。南船橋が最寄り、そのまま新習志野駅に入るとよさそう。新習志野は今年1月にスタンプラリー60駅+東北全県巡りを7泊8日で敢行したときに初日にスタンプのために成田、土浦、千葉方面からの帰りに津田沼から新習志野にバスで移動していたので実は行ったことがある。ここはジュースがあるようなのでそれを飲み物にしながら歩くのもよいが、見たところ2リットル以上ある瓶なのでさすがに遠征で持ち歩くにはあまりに厳しい…。いぶりがっこチーズディップ?もここに景品としてあったが、3週間前横手駅で買った本場秋田のチーズディップが非常においしかったので、これはとりたいところ。なお今回は秋田山形方面にはいかない。ポスターが貼られているところに景品をおいて撮影もしたい。

③サープラ沼津

クレーンゲーム商店街、などと書かれているのは絶賛リニューアル中のサードプラネットとしか考えられないのでサープラ沼津と予想できる。

④ラウンドワン富士

先に行っておくがこの店舗は許さない。というのもカービィの三角ほおばりマスコットが4000円でも確率が来なかったからである。通常の大きなぬいぐるみより一回り小さいぬいぐるみで4000円で確率が来ないなどあのGIGOでもせんわ。10円キャッチャーもかなり渋かったので、この店舗だけ動画内では行ったことがあるがもう行かない。一応最寄り駅は確か吉原だった気がするが、帰りは東京から新幹線で一気に帰らないと次の日の講義に間に合わないので寄っている暇はない。なお富士で最も取れる店舗はどう考えてもおたちゅう富士である。ここは真の神店舗。我が行った300店舗以上のゲームセンターのうちトップ5に入るといってもよい。ただここも時間の関係上パス。


実は千葉県ではまだクレーンで景品を獲得したことがほぼない(アドアーズ柏には行ったような)ので、①②のいずれかは行く可能性が高い。また群馬県も何度も行っているがクレーンはしていないので、万代書店高崎あたりを狙っている。栃木はタイトーVAL小山(閉店)、ナムコロブレ小山、ゲームれいんぼー、ラウワン宇都宮などいろいろ行っている。埼玉もラウワン大宮に行っている。茨城県はおたちゅう日立南がよさそうなので行く可能性あり。おたちゅう日立南はJINstudioがすでに来店済みなのでよさそう。ゆうぷら二本松は許さんが。


ご当地ベアは道の駅ちちぶ、草津温泉、国営ひたち海浜公園、偕楽園あたりを狙っている。東京のご当地ベアはさしてレアでもないので買わないことにした。昔は東京でお土産を買うことが多かったが最近は何も買わないようである。

ディズニーランド…に行きたがっており始発の新幹線がどうのこうの言うていたり、新潟まで北陸新幹線でいくだの言う同級生がいるが、始発の新幹線に友達同士で集合など普通できるはずもなく(待ち合わせが現地としても5時50分頃となり始発でもおそらく住んでいる場所の関係上いけないと思われる)また北陸新幹線は新潟を通らず上越妙高くらいしか行かないことを知らないらしく、知識に差があるようである。

が初めて関東に行った時のことを懐かしく思う。富士急に行くために新横浜についたとき興奮したし、JRアナウンスステーションできいていたあの接近BGMが実際に流れているときはうおーとなった。

同級生は横浜に行ったり広島、金沢に行った後仲の良い友達にお菓子を配っているが、我はそんなことはしない。というのも横浜広島金沢は近すぎてほぼ買う気が起こらず、買うならその日の総菜としてしゅうまいなり蠣なりオイルサーディンを買うくらいである。

ただしおたちゅうなどで得た景品の中でお菓子類は自治会によく寄付している。山形や福島、宮崎で取った景品(コンテナの中身など)は友達にあげており喜ばれている。