DPtコイントス初期シード検索ツール

作ってみた。
http://www1.axfc.net/u/3209269?key=cointoss
追加データ(CoinTossData.bin):Googleドライブ

Microsoft .NET Framework 4をインストールする必要あり。
追加データは1.5GBあるのでそのつもりで。


●仕組み
第4世代ID調整用初期シード検索ツールみたいのをやってみたかっただけ。
CoinTossData.binに65535Fまでの初期シードをコイントスの結果が昇順になるように並べ替えたデータを入れて、あとは似たような感じ。
ついでに条件により参照しない検索方法も付けてみた。
でも絶対後者のが使われる。


●機能
画像は面倒なので省略。

起動後からコイントス以外でコイントス完了までにMTを消費していない場合のみに対応。
フレーム数も65535Fまで。それより先はコイントス出来る状況でやる人いないでしょ。
そのままでも使えるが、オプションとしてCoinTossData.binを.exeと同じフォルダに置けば、検索範囲がある程度広いコイントス8回以上のものに対しCoinTossData.binを参照して検索するようになる。
8回とかの基準はだいたい適当。

・検索列:コイントスの結果をスペース等を入れずに入力
表:o、O、o、O、○
裏:x、X、x、X、×
に対応。
64文字まで。

・他
見りゃ分かる。分からん奴とかおらんやろ。
条件が緩すぎるまま検索しようとするとアラートが出るようにしてある。
検索結果は初期シードだけですが今後もフレーム数等を表示する予定は全くありません。


~おまけ~


DPtコイントスの結果はMTの最下位1bitだけを取ってるということで、不要な部分の計算省けそうだなーとか考えてた時のメモ。
更新後のテーブルの値の各bitに適当な文字を割り当てて、それらで最下位bitがどう表せるのか計算した結果、見ての通りの6箇所のbitのxorを取れば良いという結論になった。
で、これを.bin作成時にもツール内部にも組み込んでみた。

という訳で、正解は「MT最下位bitの計算」でした。

乱数調整用ツール計算高速化の工夫

LCGとMTの性質によるものをば。


◆LCG
最初知った時は目から鱗だったり。

●あるシードからあるシードまでの消費数の計算
1つずつ進めて一致するまででも計算できるが、これ使えば消費数が多くなっても高速に計算できる。
リンク先いけば実際に使ってる例も分かるかと。
消費数の多いXD乱数にも使えるのかしら。(やったことないけど)

●n個先のシードの計算
消費数が多くなると1つずつ進めるのは時間がかかるが、これを使うと消費数が多くなっても計算量はさほど増えない。
あるいはnを特定の値で使うのなら、r[k+n]=An*r[k]+BnなるAn、Bnを予め求めておけば以降シードを1つ進めるのと同様の計算量で計算できる。
後者はBW2孵化乱数用ツールで実装済み。


◆MT
テーブルの計算減らす以外の方法あったら教えて。

●必要部分のテーブルのみ計算
参照する部分がn、n+1、n+397とかなので、例えばMTの最初6つだけ必要ならn=0~5で必要になる部分、すなわち第0テーブルの0~6、397~402の部分だけ計算できればよい。
第0テーブルの決定方法から実質的に0~402だが(いい方法あるのかもしれんが)それでも全部計算するよりこの場合でも計算量402/624くらいにはなるんでなかろうか。
まあ、必要になったときにテーブル更新するようにしてれば勝手に実現できてるはず。
BW2孵化乱数用ツールで実装済み。

●テーブル自体計算しない
32bitの初期シードを設定すれば乱数列が決まるので、欲しい乱数列が出る初期シードを予め計算しておく。
初期シードは2^32通りしかないので変なことしてなければ1日あればまあ「準備として」初期シード計算できるんじゃないのかなー。
第5世代の消費数個体値指定(1/2^30)とか、対応する初期シードがあまり多くならずになおかつ良く使う奴に。
第5世代個体値乱数列初期シードリストにいくつか載せてある。


とりあえず知ってるのとか適当に挙げるとこんな感じ。
他なんか良さげなのあるかしら。

性別決定の有無で性格値決定箇所が変わらない確率

なんか気になったのであかいいと所持時に性別決定の有無で性格値決定箇所が変わらない確率を計算してみた。
本当に某箇所が性格値なのかどうかは知らんのでそもそも意味なさないものかもしれんが。
性格値ではないそうで。まあ、意味無い訳じゃなさそう。
パワー系アイテムは持たせていない場合のみ考える。


性別決定の有無で最初の遺伝箇所決定が1つずれる。
詳しくはこちら→XY孵化仕組み検証


で、正確な確率計算しようと思ってたのだがいろいろ面倒そうだったので適当にちょちょいとシミュレーション的なことをしてやってみた。
ちゃんとした計算もそのうちやる、のかなぁ。
暇な人暇つぶしに計算してみて。

まあ適当にざっと10,000,000の試行を何十回かしてみると全部26.2...%的な結果が出た。
まーよーするにそれくらいの確率なんでしょう。
プログラム間違えてたら知らない。


あ、これだけです、はい。

近況らしきもの

年末です。


●ポケモン
ムーバーが出たので検証で出たパッチールの模様を特定できれば乱数列がLCGかどうか確かめられそうとか考えつつもまだ全然やってない。
模様と性格値が従来どおりに対応してるとかいう前提の下で、だが。
まあそのうちやる、のかなぁ。

XD乱数やってる方がいろいろと公開していたのでとりあえずざっと眺めてみたり。
でもXDは持ってません、はい。


●艦これ
4ヶ月連続で500位以内入るくらいにはやってる。
大和新艦娘以外は揃ってるけどその大和新艦娘が全く出ません(白目
大型建造用の資材を集めつつ伊19を探す日々。



XY孵化仕組み検証

大分情報出てきてる気もするが検証してみたのでそれについてだらだらと調べたこと書き連ねてみた。
予想を仮定して更に予想したりしているので、反例があったら是非コメントしてくださいな。
ほぼ調べた順に書いてるだけなので読み辛いのは仕様です。

パッチールの模様は性格値とは別のものと対応しているそうで、以下文中の性格値はそれに置き換えて読んでください。


・再現性
前のタマゴを受け取る/拒否した時に次のタマゴに使う乱数列が決定するという通説。
預け直し等では変わらず、受け取り/拒否からやると変わったのでこの時に決まると考えるのが妥当。
BW2みたいな感じかと。
ただ、パッチールの模様はぱっと見変わらなかったのでそこはBW2とは異なっているよう。

・先親後親
再現性があるということで、預ける順番を変えてみたら遺伝箇所の個体値は同じ親から引き継がれた。
よって預ける順番でなく雌雄(性別不明とかの場合もあるけどまあ)で決まっていると考えるのが妥当。
矛盾がなかったので検証の都合上第5世代の仕様と同じとして進める。

・かわらずのいし
片親のみにかわらずのいしを持たせたところ、どちらに持たせても持たせた側の性格になり、他個体値等に変化はなかった。


と、ここまでは確認みたいなもの。
以下いろいろ調べたこととか。
特筆しない限りすべて同じ乱数列を使用しているものとする。
一応、パッチールの特性1はマイペース、特性2はちどりあし、夢特性はあまのじゃくである。


1.パッチール♂(ひかえめ、特性1)×パッチール♀(しんちょう、夢特性)
双方持ち物なし。
先親(♂):3-18-23-7-0-1
後親(♀):28-29-21-29-8-0
生まれた個体:うっかりや♂特性2、3-24-23-19-0-18
遺伝箇所が3箇所であると考えると、先-24-先-19-先-18以外の候補はない。
かわらずのいしを持たせていない状態で親の性格が子に影響するとは考えにくいので、以降親の性格は省略する。

2.パッチール♂(特性1)×パッチール♀(特性1)
双方持ち物なし。
先親:3-18-23-7-0-1
後親:0-6-3-0-15-17
生まれた個体:うっかりや♂特性1、3-24-23-19-0-18
1と同じで先-24-先-19-先-18、特性は異なる。

3.パッチール♂(特性1)×パッチール♀(特性2)
双方持ち物なし。
先親:3-18-23-7-0-1
後親:30-16-10-23-9-2
生まれた個体:うっかりや♂特性2、3-24-23-19-0-18
1と同じで先-24-先-19-先-18、特性は2と異なる。

4.パッチール♂(夢特性)×メタモン(通常特性)
双方持ち物なし。
先親:26-6-0-29-18-7
後親:5-24-17-25-19-15
生まれた個体:うっかりや♂特性2、26-24-0-19-18-18
これだけだと遺伝箇所がいくつか考えられるが、1~3と同じで矛盾ない。
また、後述(大分後だが)によりその遺伝箇所でよいだろうことが分かるはず。


1~3より、BW2同様特性遺伝があると考えられる。
また、BW2と同様に特性が決められているとして矛盾がない。
♂夢特性×メタモンで夢特性が遺伝することを既知とすると、4はメタモンなしの場合と同様の処理をしていると考えて矛盾がない。
とりあえずその裏付けはまた後で。やるかどうか知らんが。
パッチールの模様比較もしようかと考えたが、静止して見える場所がなさそうでしかもぬるぬる動くので、比較用にきっちり撮るのは無理そうだと考えひとまず断念。
いい方法あったら誰か教えて。
とくせいカプセルのこともあるし後述の性別のこともあるので、性格値と特性の対応はないような気もしはするけれどちゃんと調べてみたいところ。
ちなみに1~4はすべて模様がぱっと見同じ。
この模様をパターン1とする。

pattern1パターン1


引き続いてパワー系アイテムを持たせた時を見てみる。
1と同じ組み合わせでメタモンを用いていないので、特性表記は省略する。
先親後親の個体値、生まれた個体の個体値も遺伝箇所3箇所とすると一意に定まったので省略。
パワー系アイテム持たせる側を変えると云々もあるけど省略。


5.パッチール♂(パワーウエイト)×パッチール♀(持ち物なし)
うっかりや♂特性2、先-25-先-2-先-24
明らかにパターン1と異なる模様となったので、この模様をパターン2とする。

pattern2パターン2


6.パッチール♂(パワーリスト)×パッチール♀(持ち物なし)
うっかりや♂特性2、先-先-13-2-先-24
模様はぱっと見パターン2と同じ。

7.パッチール♂(パワーベルト)×パッチール♀(持ち物なし)
うっかりや♂特性2、先-25-先-2-先-24
模様はぱっと見パターン2と同じ。

8.パッチール♂(パワーレンズ)×パッチール♀(持ち物なし)
うっかりや♂特性2、先-25-13-先-先-24
模様はぱっと見パターン2と同じ。

9.パッチール♂(パワーバンド)×パッチール♀(持ち物なし)
うっかりや♂特性2、先-13-先-31-先-3
パターン1、パターン2とは明らかに異なる模様となったので、この模様をパターン3とする。

pattern3パターン3


10.パッチール♂(パワーアンクル)×パッチール♀(持ち物なし)
うっかりや♂特性2、先-25-13-2-先-先
模様はぱっと見パターン2と同じ。


9のみ5~10の中で模様パターンが異なるので、模様決定の元となる性格値(さすがに変わってないよね)は個体値遺伝決定に影響されると考えられ、個体値遺伝決定以後に決定されると考えるのが妥当。
模様パターンが同じ5~8、10を見るとBW2とは異なり、HABCDSを各々決めているように見える。
HDは見えないが、x-25-13-2-x-24という感じか。
遺伝箇所の変わり方から見て個体値と個体値遺伝は別で決めていそう。
このx-25-13-2-x-24と8のとを見比べてみると、13がAの部分にあり、1つずれたものとして見ると個体値列がx-25-13-2-31-24-3となり矛盾がない。
とすると、遺伝箇所決定にて1つずれた結果個体値決定箇所がずれたと考えられ、そのずれる要因としては再決定手続きが最有力。
個体値遺伝決定は今まで通り遺伝箇所と遺伝元を別で決めていると考えると(同シードで決定しているとは少し考え辛い。あり得はするが)、ずれる要因たり得るのは遺伝箇所決定のみ。
ここでこの実例に矛盾しない決定方法を作ってみる。
個体値列x-25-13-2-31-24-3に1(~3)の結果を合わせると、x-25-13-2-31-24-3-19-x-18。
1~10はいずれも個体値遺伝決定開始シードが同じだと考えられるのでそこから考える。
BW2における遺伝箇所、遺伝元の計算方法を考え(桁数自体違うかもしれないが似た方法を取っているとして)、同シードを用いた場合にHABと先、CDSと後が対応すると考えても、以下のようなもので矛盾がない。
ついでに個体値ともBW2と同様の計算方法と考えて整合性がとれたので表に入れた。
1~4は同じだろうから纏めた。

シード遺伝箇所遺伝親個体値15678910
r[n]H
H破棄HHHHH
r[n+1]B
B
r[n+2]H
破棄破棄破棄破棄破棄破棄
r[n+3]D
DDDDD破棄D
r[n+4]B
B
r[n+5]H
破棄-----
r[n+6]D25破棄25-2525-25
r[n+7]B13B-13-131313
r[n+8]H2222--2
r[n+9]S31-----31-
r[n+10]D242424242424--
r[n+11]H3-



3
r[n+12]C1919





r[n+13]


-





r[n+14]C1818







こんな感じかな。
一応これだけだとr[n+2]とr[n+3]の間に遺伝箇所Hのものが入っている可能性もあるけれど、後述の実例も合わせるとその可能性はなくなる。

ここで性格値について考えてみる。
パッチールの4つの模様のうち右下のものは性格値の上位4bitであり、シードの上位32bitが性格値決定に使われるとしたとき、これと同じシードを使った場合に計算される個体値とを対応させることを考えて性格値がどこで決まっているかわからないか調べてみる。
個体値3は上位4bitが0x18~0x1F、個体値19は上位4bitが0x98~0x9Fのものに対応する。
パッチールペインタDPt版を見てやってみるとパターン2が個体値3、パターン3が個体値19に対応するものとして矛盾がなさそう。
とすると、性格値は個体値決定のすぐ次で決めていると見るのが良さそう。


以上を踏まえて、また別のことをしてみよう。
再び両親の持ち物を変えただけである。


11.パッチール♂(かわらずのいし)×パッチール♀(かわらずのいし)
ひかえめ(先親性格)♂特性1、後-2-先-24-先-19
パターン1~3とは明らかに異なる模様となったので、この模様をパターン4とする。

pattern4パターン4


12.パッチール♂(パワーバンド)×パッチール♀(パワーアンクル)
うっかりや♂特性2、後-2-先-24-先-19
模様はぱっと見パターン4と同じ。


11から先の表に関してr[n+2]とr[n+3]の間に云々の可能性が消えることが分かる。

11と12は両親とも同じでありかつ個体値、模様から性格値決定箇所も同じだと考えられるが、特性は異なる。
となると、特性決定箇所は個体値遺伝から性格値決定までに間がないことからそれ以前に行われているものと考えられる。
また、片親にかわらずのいしを持たせても個体値が変わらず、両親に持たせると変わることからBW2同様性格と性格遺伝親決定の両方に乱数を使用することになると考えられる。
12からは、パワー系アイテムを両親に持たせても片方しか反映されることがないだろうことが分かる。
どちらの親のが反映されるかは遺伝箇所決定前に入るが、少なくともこの実例だと直前として矛盾がなかったし、そう考えるのが良さそう。

シード遺伝箇所遺伝親個体値1112
r[n]H
?????パワー系先親
r[n+1]B
BB
r[n+2]H
r[n+3]D
D破棄
r[n+4]B
破棄
r[n+5]H
HH
r[n+6]D25
r[n+7]B13--
r[n+8]H222
r[n+9]S31--
r[n+10]D242424
r[n+11]H3--
r[n+12]C191919


特性決定箇所についてはこの事象だけでは明らかに不足しているのでまた後で検証する。

次は赤い糸について。
パッチールの模様はもう必要なさそうなので以降省略する。


13.パッチール♂(あかいいと)×パッチール♀(持ち物なし)
うっかりや♂特性2、先-6-先-後-先-後

14.パッチール♂(あかいいと)×パッチール♀(パワーウエイト)
うっかりや♂特性2、後-6-先-後-先-後

15.パッチール♂(あかいいと)×パッチール♀(パワーリスト)
うっかりや♂特性2、先-後-先-18-先-後


そんなに実例はいらないでしょう。
遺伝箇所が5箇所になるとのこと、表に纏めると以下のような感じか。

シード遺伝箇所遺伝親個体値131415
r[n]H
H破棄H
r[n+1]B
B
r[n+2]H
破棄破棄
r[n+3]D
DDD
r[n+4]B
r[n+5]H
破棄破棄破棄
r[n+6]D25破棄破棄破棄
r[n+7]B13B破棄B
r[n+8]H2破棄
r[n+9]S31SS
r[n+10]D24
r[n+11]H3破棄破棄-
r[n+12]C19CC-
r[n+13]

-
r[n+14]C18--18
r[n+15]A666-
r[n+16]


---
r[n+17]


--
r[n+18]


--
r[n+19]


--


ここまでで遺伝・個体値・性格値に使用する乱数の位置についてはだいたい予想が立った。
というわけで次は性格、特性あたりについて重点的に見ようと思ったのだが、その前に少し気になったことがあったので調べた。


16.パッチール♂(特性1)×メタモン(通常特性)
双方持ち物なし。
生まれた個体の特性:特性1

17.パッチール♂(特性2)×メタモン(通常特性)
双方持ち物なし。
生まれた個体の特性:特性2


4、16、17から♂親×メタモンでも特性遺伝があると考えられる。


18.レアコイル(特性1)×メタモン(通常特性)
双方持ち物なし。
なまいき特性1、3-先-先-2-先-24
先親はレアコイル。
ちなみに特性1はじりょく、特性2はがんじょう。

19.レアコイル(特性2)×メタモン(通常特性)
双方持ち物なし。
なまいき特性2


18、19からこちらも特性遺伝ありそう。

で、18で1と異なるものが出てきた。
とすると、遺伝箇所決定以降で異なるルーチンをとるとは考え辛いので遺伝開始箇所が1とは異なると見るのが良さそう。
差があまりないものとして見てみると、1つ前から決まっていると見るのが良さそうだった。

シード遺伝箇所遺伝親個体値118
r[m]A

A  
r[m+1]H
H
r[m+2]B
B
r[m+3]H
破棄
r[m+4]D
DD
r[m+5]B
r[m+6]H3破棄3
r[m+7]D25破棄-
r[m+8]B13B-
r[m+9]H22
r[m+10]S31--
r[m+11]D242424
r[m+12]H3-
r[m+13]C1919
r[m+14]

-
r[m+15]C1818


この例でも1において特性決定箇所が遺伝箇所決定の直前として矛盾は生じない。

さて、このずれの原因を探そう。
パッチールの時は片親をメタモンにしても変わらなかった。
とすると、メタモンはその原因ではない、ということでまたちょっと調べてみた。


20.ケンタロス♂(特性2)×メタモン(通常特性)
双方持ち物なし。
なまいき特性2、3-先-先-2-先-24
先親はケンタロス。

21.ミルタンク♀(特性1)×メタモン(通常特性)
双方持ち物なし。
なまいき♀特性1、3-先-先-2-先-24
先親はメタモン。

22.ケンタロス♂(特性2)×ミルタンク♀(特性1)
双方持ち物なし。
なまいき♀特性1、3-先-先-2-先-24


♂♀片方の性別しかないポケモンを孵化したら無性別のレアコイルの場合と同じような結果となった。
とすると、この差が性別決定の有無に起因すると考えるのが妥当。
しかしながらパッチールの模様パターン1~4を見ると、過去作で性別値に該当した左上の模様が一定ではない。
とするとそこでは直接性別値そのものが決まっているわけではなさそう。
あるいは性格値と性別値が別になった、というのも考えられるけれど。

と、ここで少し気になったので野生のパッチールの模様をいくつか見てみることに。
そこでこんな模様のパッチール♀を見つけてしまった。

spindafe性別:♀

パターン1~4はすべて♂であり、それらと比較してみるとパッチールの模様と性別との関係が従来通りではなさそうに見える。
パターン3も従来通りと見ると模様からは♂であるかが少し怪しかったけれど。
とすると、性格値と性別との関係がなくなったと見るのがいいのかもしれない。
性別決定が性格値決定と別の場所で決定していることとも整合性がとれるし。
ちゃんとは調べられてないけれど特性も性格値との関係がなくなったと見るのがいいかしら。
一応、これを仮定するとXYでは今までのような性別値が存在せず、ただ単に性別の値をそのまま保持していると考えられる。

さて、ではこの性別決定に使われている乱数がどこら辺の値をとっているのかを推定してみた。


23.メタモン×プリン♀
双方持ち物なし。
うっかりや♂、先-24-先-19-先-18


ププリンの♂♀比が1:3であることから、従来通りであれば性別値191~255に対応。
あるいは偏りが修正されたとするとちょうど上1/4に相当かな。
ここで性格について見てみると、0~24の番号のうちうっかりやが19、なまいきが22に対応していた。
そして1~4の特性は0~4の1に対応していて、性別決定がない18の最初の遺伝箇所がHであった。
これらに対し各シードの対応を考えると、特性・性格・必要な場合性別の決定の3つがそれぞれ乱数1つで決定され、その後の遺伝箇所決定以降と連続したシードで決定される仮定した場合、性別(必要ない場合は無し)→性格→特性→遺伝箇所以降の順に決定していると考える以外ない。

さて、ここで飛ばしていた11の両親かわらずのいしの時の処理について考えると、先親性格遺伝に対応するのが0と考えると性格決定の後、特性決定前に入っていると考えるのが良さそう。
本当はもうちょっと例見るべきだろうがまあきっとそのうち。


以上から処理を簡単にまとめるとこんな感じかね。

性別決定(必要ない場合は無し)
 ↓
性格決定(かわらずのいし使用でも)
 ↓
性格遺伝決定(両親かわらずのいしの場合のみ)
 ↓
特性決定(基本的に特性遺伝あり)
 ↓
パワー系遺伝決定(両親パワー系の場合のみ)
 ↓
遺伝決定(BW2と少し異なる)
 ↓
基礎個体値決定(遺伝上書き箇所も)
 ↓
性格値決定



別の乱数列での検証は反例が出るか気が向いたらする、かも。
まあ本当はしておくべきなんだろうが何かあった時の検証用に暫くは同じ乱数列を残しておく。


少し不足している箇所があったのでコメントで補足しています。


プロフィール
さき

ポケモンの乱数調整とかツールとか。サンムーン乱数調整できました。
Twitter→@water_blow

広告
最新コメント
記事検索