きほんはまる?

DQRTAについていろいろ書いていきます。こっちでは最低限のアウトプットには書かれない細かい話がメインです。

PS版DQ4 3章前掛け転売についてちょっと本気出して考えてみた

きっかけはこれharapan.exblog.jp

1年以上前、DQ3のReTAの調べものだかなんだかしてた時に偶然見つけた記事。
僕がPS4RTA始めたときには、前掛け転売のボーダーは1750Gみたいなのが通説になっていたけど、
この記事を見て「あ、実はボーダー下げて仕入れ増やしちゃってもいい感じなの?」と思ったのを覚えているが、それ以来しばらく詳しい調査はしていなかった。

1. じじいのあたまのめかにずむ

3章のボンモールにいる防具じじいの買い取り金額決定は以下のようになっている。

  1. [0,16)の一様整数乱数を引く。
  2. 乱数=0だったらボケ処理、それ以外だったら通常の処理になる。(つまりボケる確率は1/16)
  3. ボケ処理の場合はSR$0x80117e7c(買値*1.5, 買値*2)がcallされ、[買値*1.5, 買値*2]のほぼ一様な整数乱数が返ってくる。
  4. 通常処理の場合はSR$0x80117e7c(買値*0.75 買値*1.25)がcallされ、[買値*0.75, 買値*1.25]のほぼ一様な整数乱数が返ってくる。
  5. 返ってきた乱数を売却額とする。

2. しみゅれ~とけっか

仕組みが分かればシミュレータが組める。
早速実装して、試行回数5万回で調査

ボーダーを1500G~1800Gの50G刻み、必要収入金額(最初の前掛け9個売却スタートの時点の金額から稼がなければいけない金額)を15000G~17500Gの500G刻みでシミュレートし、最初の前掛け9個売却スタートから必要金額稼ぐまでにかかった平均時間を取った。
各パラメータはパンダさんの記事通り、以下のようにしている。

  • 売却キャンセル1回分の時間: 3.2s
  • 仕入れ1回分の時間: 49s

結果は以下の通りであった。

f:id:Maru0137:20150525211041p:plain

ボーダー[G]\必要収入[G] 15000 15500 16000 16500 17000 17500
1500 63.726652s 83.671864s 102.999864s 126.046892s 144.760364s 163.968864s
1550 63.516972s 80.639696s 99.095764s 122.060024s 142.025012s 160.519688s
1600 70.8178s 78.45748s 98.012348s 118.291296s 142.37878s 160.922388s
1650 83.6912s 84.438796s 100.29976s 115.452392s 143.56992s 165.102504s
1700 102.133312s 102.133312s 106.7654s 119.600952s 142.54478s 168.9146s
1750 131.272768s 131.272768s 131.284732s 139.797064s 150.668804s 174.821684s
1800 183.177472s 183.177472s 183.177472s 183.837488s 186.639508s 197.06948s

各必要収入額における平均時間の最小値を赤字にしてある。

3. まとめ

3章の前掛け転売では、必要収入が15000G,17000G,17500G付近のときはボーダー1550Gで、15500G,16000G付近の時はボーダー1600Gで、16500G付近のときはボーダー1650Gで売却するのが最適である。
めでたしめでたし。


そんなわけはない。

4. ばいきゃくじかんのぶんぷ

平均時間だけ見ていたのでは、平均こそ速いかもしれないがその実売却時間はブレブレで安定しないみたいなものが分からない。
また、3章は運要素の強い2章終了直後の章であるため、対戦などではタイム差などに応じて取るべき選択肢が変わってくる。
平均時間の最小だけを見てボーダーを選んだものの実はタイムがブレブレだったりする場合には、せっかく2章終了時でリードしていても「じじいツン引いたから遅れて後ろに追いつかれたじゃねえかよクソが」とか言って、挙句の果てにはコントローラーが投げつけれらたりROMが責任を押し付けられたりしてしまう。おおかわいそうに、コントローラーやROMはわるくないのだ・・・

ということで売却図の分布を見てみよう。
全ての分布図を全て載せるわけにもいかないので、抜粋してみてみることにする。

まずは必要金額17500G時の売却時間の確率密度と累積分布。
上の図が確率密度、下の図が累積分布になる。
f:id:Maru0137:20150525213648p:plain
f:id:Maru0137:20150525213652p:plain

確率密度を見ると「ある売却時間で終わる確率は何%か」が、累積分布をみると「ある売却時間以下で終わる確率は上位何%か」がわかる。

また、平均だけでなく標準偏差も出してみよう。
標準偏差の値が高いほど、売却時間がぶれやすいことを表す。

ボーダー[G] 標準偏差
1500 56.15782287
1550 55.21510188
1600 59.86279681
1650 70.60325696
1700 82.75208663
1750 88.75131105
1800 79.92613876

なんと必要収入17500Gの場合は、通説となっているボーダー1750Gが一番標準偏差が高く、売却時間がぶれやすいという驚きの結果が得られた。
実際確率密度の図を見てみると、分布がブレブレなのが良くわかる。
一番平均時間が小さいボーダー1550Gは標準偏差も最小となっている。
つまり仕入れを1回増やす覚悟でボーダー下げてどんどん売った方が速くなるということが分かったと思う。
ボーダー1600Gも売却時間150s以内の速い時間が出やすいうえ、極端に遅れることはなさそうなので選択肢に入れられそうだ。


続いて、必要金額16000Gの場合も見てみる。
鋼鎧がボケたりするとこの辺になってくるだろうか。

f:id:Maru0137:20150525215129p:plain
f:id:Maru0137:20150525215136p:plain

標準偏差は以下の通り。

ボーダー[G] 標準偏差
1500 54.23222707
1550 55.13257586
1600 54.12659886
1650 50.08340547
1700 39.0092605
1750 38.53368925
1800 56.27160925

平均時間が最小なのはボーダー1600Gであるが、ボーダー1500G~1650Gあたりではボーダー1700G以上に比べて標準偏差が高い。
これは分布図を見ればわかると思うが、仕入れが必要な可能性が増えるために、その場合のタイムロスが足を引っ張っているためだと思う。
ボーダーが1700Gでは平均時間がボーダー1600Gに比べて8sほど上がるが、標準偏差が一気に下がりタイムの安定性が期待できる。
また通説となっているボーダー1750Gは、標準偏差こそ最小値だが平均売却時間が非常に大きくなり、実際はボーダー1700Gに対してほぼ劣っていることが分かる。鋼鎧がボケたらまずボーダーは下げていいだろう。


載せられなかったデータは以下のURLにアップロードしておく。
PSDQ4_resale.xlsx(PSDQ4_resale.xlsx) ダウンロード | DQRTA | uploader.jp


5. はがねのよろいぼけのかそくど

もう一つ、2節の平均売却時間からわかることがある。
最小平均時間周辺のボーダー周辺においては、必要な収入金額が500G下がるごとに平均売却時間が約20sほど下がることが分かる。

3章の序盤に化けキツネからもらった鋼の鎧を転売するのだが、これがボケるかボケないかで約1725Gの収入差が出てくる。(実際にはボケない場合は金額を吟味しているのでもう少し下がるが)
そうすると、鋼の鎧が運よくスムーズにボケると(なんだこの表現)約1分ほどの加速になることがわかる。

またこれも平均値だけでの話になるが、鋼の鎧がボケるまでにかかる時間は約51.2sであるため、鋼の鎧はボケ待ちした方が期待値としてはタイムが速くなる可能性もある。
これについても詳しく調査したいが今回は面倒なのでしない。


6. こんくる~じょん

各必要金額に応じて売却時間の分布と標準偏差を求めた。
欲しいタイムに応じて、各プレイヤーが柔軟にボーダーラインを選択してあげるとよい。
また、鋼の鎧がボケると約1分の加速になることも分かった。



終わりたい。


7. にんげんはかしこい

今回の調査では売却金額に関わらずボーダーラインはずっと一定のままという条件で行っているが、
実際の場合には前半の売却金額を見て以降のボーダーラインを変動させられるはずである。
その場合、「仕入れ挟むつもりだったけど予想外にボケたからボーダー上げて仕入れせずに終わらそう」とか、「予想外にボケたからボーダー下げて早く終わらそう」とかいう知恵が活用できそうなことが予想される。人間は賢い。

さて、このような場合の最適な売り方を求めたいときにはどうするべきだろうか。

詳細はめんどくさいので省略するが、平均売却時間の最小化という観点で見れば、おそらくこれはDPで解けると思われる。というわけで求めてみたいが、やっぱりめんどくさいのと、そもそも求められたとして実際のRTAプレイ中に残りの必要金額と前掛け数に応じてボーダーを変えられそうかというと疑問な点ではある。人間は賢いのか賢くないのかよくわからない。


ということで、モチベーションがあったらやってみるかも。