[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
昨日、自国内のお話で、槍成分(力、知力、速さ)は、どう配分されれば理想系なのか
という議論に至りました。
自国内ではダメージ計算シミュレータなるものを開発しております(自国宣伝だよ!)。
ベースのソースはあるので。そこで最適配分問題に取り組みました。
具体的には、力+知力+速さを100刻みで固定(1600~2100)して、すべてのパターンについて
ダメージシミュレートします。
MPは効いてくるので、ここでは十分にあるものとして仮定しました。
すると結果は、結構興味深いものになりました。
国外秘ですが笑
という、ただの自国宣伝です。
ですが、上記の最適配分問題を逆に利用すると、(現、壁である)私のステに対して、
いったいどんなステで攻撃されると一番効果があるのかも分かったりします。
いい戦争ができますように・・・
数字が1ターンに与えられる平均ダメージ、()内が標準偏差となります。
1ターンに与えられるダメージはどうやら正規分布に従うようなので、
平均と標準偏差さえ分かれば、勝率も逆算できたりします。
1σとか2σとかをぐぐって少し考えるだけでよし。
配布用に入力アシスト作るのがすごい大変でした。
図の青色の部分が、召喚獣をセットした方が安定する場合です(≠平均ダメージが大きい)
召喚獣とエンペラーマインドの関係ですが、
知力が高いステになればなるほど召喚獣の方が有利
相手が堅ければ堅い方がエンペの方が有利
ちなみに前者の方が効果が大きいので、基本はやっぱり召喚獣のままセットしておくのが無難と思います。
上記ツールの欲しい方は自国のホームページからどうぞ
他国には今のところ配布予定はありません。
0ダメージが多く、50区切りでも25区切りでもよくわからない分布しかでなかったので
1ターンに与えられるダメージの分布を見てみることにしました。
例の如く、現在の私 vs 生命/精神500イージス思い出さんです
1万回のイタレーション、ダメージ200区切りでこんな分布になりました。
なんという綺麗な正規分布!!
青点が解析値、赤線が解析の平均と偏差で書いた正規分布曲線です。
最大値を1として規格化してます。
というわけで1ターンで累計与えられるダメージはどうやら正規分布らしいという結果になりました。
1ヒットごとの分布はグラフにしましたが意味不明すぎたためデータを残してないです。すみません。
正規分布になるということは、勝率を出さなくても平均と偏差さえ分かれば
おのずと勝率も出せそうですね。
わざわざそんな面倒なプロセスは踏みませんけども。
この鶴、今現在は自国オンリー公開ですが、
国が滅亡した際には管理してるホームページとともに一般公開しようかななんて考えています。
何か他に考察しておくことあるかなぁ…
ちなみに起動するとこんな画面です
結果としては、勝ち数と平均ダメージ(倒した場合のも倒してないと仮定した場合の平均)、
標準偏差、最大ダメージ、最小ダメージの計5項目出力します。
私はいちいち自分のステを入力する必要がないので
ソースにそのまま値入力して使っていますけども。
さて、ITERATIONですが
現在の私のステと、HP4000生命/精神500、イージス思い出の仮想相手と戦わせて検証してみます。
勝ち数よりも、平均と偏差見ればいいような気がしますが、一応三項目チェックします。
書くのが面倒なので5回計算させます
まずはデフォのITERATION=1万から
# 勝ち 平均 偏差 1 7187 4618 1025 2 7057 4585 1032 3 7045 4594 1027 4 7070 4587 1017 5 7141 4600 1000
それぞれの平均と偏差を計算してみます
平均 偏差 誤差(%) 勝ち 7100 61 0.86 平均 4597 13 0.28 偏差 1020 13 1.27
わずか1%以内に68%、2σを考えても2%以内に95%含まれることになるので
ほぼ収束してると言っていいのではないでしょうか?
まあ一応試しにITERATION=10万も同様にやってみます。
# 勝ち 平均 偏差 1 71305 4600 1012 2 70991 4594 1020 3 70957 4596 1019 4 71090 4599 1018 5 70949 4599 1023
平均 偏差 誤差(%) 勝ち 71058 149 0.21 平均 4598 3 0.07 偏差 1018 4 0.39あたり前ですが、かなり精度上がりますね。
ただし、10万回計算させると1秒間くらい計算時間が増します
続いて、ITERATION=1000回と少なくしてみます。
# 勝ち 平均 偏差 1 704 4594 1033 2 724 4632 990 3 719 4569 989 4 713 4597 1010 5 724 4611 1003
平均 偏差 誤差(%) 勝ち 717 8 1.12 平均 4601 23 0.50 偏差 1005 18 1.79許容誤差3%と考えるなら1000回の計算でも十分かもしれませんね
まあでも1万回がミリセカンドのオーダーで計算終了するので、暫定1万回が
やはりいいのかなという印象です。
以上が召喚獣をセットした場合ですが、一応発動率の低いエンペセットした場合の
ITERATION=1万回についても検証しておきます。
# 勝ち 平均 偏差 1 8035 5022 1177 2 7994 5006 1175 3 7980 4997 1187 4 7940 5000 1180 5 7982 5014 1178
平均 偏差 誤差(%) 勝ち 7986 34 0.43 平均 5008 10 0.20 偏差 1179 5 0.42こちらの方が収束早いでしょうかね?
わかってはいましたが、やはり今のステだとエンペの方が強いですね
以上でITERATION回数の考察終わりますが、現状の1万回で計算も速いですし特に問題ないように
思われます。
ただご覧頂いて分かるように、平均ダメージに対する偏差の割合が20-25%なので
いくら計算結果が収束していようが、与えられるダメージにかなりバラツキがあることが
わかると思います。
次回は1hit毎のダメージの分布でも描いてみようかな、なんて思ってます
言語はFORTRAN77です。
コード自体そんな難しくなかったので、計算部分だけは数時間で作り終えました。
配布用に入力アシスト部分作るのが面倒でしたけども…
どういうシミュレータかというと、
あるステータスであるステータスの先手取った時に
1ターンで与えられるダメージ計算のシミュレータです。
乱数は実行する度に違うものを生成するように組んでるので
計算結果は毎回変わります。
かっこよく言えばモンテカルロシミュレーションです。
まあ前置きはここまでにしておいて、実際どうなのか
というところを書こうと思います。
まずは精度です。
現在私のステータスですと、伝説英雄1位の枇杷さんに
15先手12勝という結果が残っています。
勝率に直せば8割ですね
でシミュレータの方はどうかというと
勝率に直せば78.8%前後をさまよう感じです。
クリティカルやMP不足等も考慮しています。
どうでしょう?私には良い制度に見えます。
ただし実際のサンプルはたった15戦しかないので
何とも言えない部分もありますね
ということで、以前の私のステで自国の対リズさんと
戦ったデータも残っています。
こちらは34先手25勝です。勝率は68.6%
シミュレータの方はどうかと言えば74.6%あたりです。
もし次に戦って勝てば、35戦26勝=74%にあるので良い線いってると思います。
というわけで今回は作ったよという紹介だけでした。
欲しい人はあげます。あ、自国民に限ります。
今はイタレーション1万回に固定していますが、
次回はイタレーションの考察でもします。
名前:るーじゅ
国:王下七武海 → ブルーローズ
継承回数:6回