Dreamdancer

モバマスイベント走行記、攻略情報(?)、あるいはモバマスについて思うことなど

モバマス最適フロント計算機を作りたいという話 Episode.4(とりあえず完成した)

これまでの流れ:
Episode.1 … とりあえず計算機作ってみたいと思った
Episode.2 … こんな感じでやればプログラムができるのではと思った
Episode.3 … 愚痴とめんどくさくなって仕様変更したことの報告

少し前から進めていた「モバマス最適フロント計算機」ですが、このほど完成いたしました。

コード等

本当はGitHubにコードを上げるとかしたかったんですけど、やり方がよくわかんなかったのでやめました。近いうちにGitHubの使い方を勉強してそちらにも上げておきたいです。

コード:https://dl.dropboxusercontent.com/u/64955106/imcgcalc.cc
入力ファイル:https://dl.dropboxusercontent.com/u/64955106/list.txt
入力ファイル内のアイドル名称と実際のカードの対応表:https://dl.dropboxusercontent.com/u/64955106/taiouhyou.txt

使い方

コードをダウンロードしてコンパイルし、入力ファイルを入力として実行してください。1億回ぐらい計算をやらせるプログラムなので2分~5分程度待ってください。計算が終わると結果が出力されます。

結論

以上のコードを実行してみると、以下のような結果が出ました。

The most valuable unit is:
idol number 1: haruna_03
idol number 2: rumi_01
idol number 3: ai_01
idol number 4: chie_02
idol number 5: tomo_01
enadori drunk: 3232
Attack : 586198
seien pt : 28418976

この結果に現れたアイドルの名称を対応表を見て確かめると、「フロント用に5000本スタドリを用意してフェスを走った時に、常に理想的な特技発揮がなされたと仮定した時の理想フロント」は以下の5人になります。

  1. [メモリアル・ブルー]上条春菜
  2. [貴婦人のたしなみ]和久井留美
  3. [ドライブトゥネクスト]東郷あい
  4. [マーチング☆メジャー]佐々木千枝
  5. [フォーチュン★スター]藤居朋

そして、このフロントで飲めるエナドリは3232本、1回のLIVEバトルあたりの発揮値は586198、3232本のエナドリを全て飲みきった時に稼げる声援ptは28418976ptということになりました。

ちなみにですが、第22回PMFの200位ボーダーは26125127pt、第21回PMFの200位ボーダーは23164550ptでした。

感想

具体的なフロントの面子を予想していたわけではありませんが、「20コス恒常の春菜はコスパが非常に良いのでフロントに入るだろう」とぼんやり考えていました。結果、20コス春菜についてはその通りになり、また他の面子も全て恒常Sレアという形になりました。やはり「安くて、よく働く」という観点から恒常Sレアが多くなることは納得できましたが、片面でバクメンにも特技効果が及ぶ恒常晴を差し置いて20コス留美が入るのはやや意外だったかもしれません。

課題

このフロントでフェスを走る人はいない

当たり前だと思いますが、このフロントが「常に理想的な特技発揮がなされた場合の最良フロントである」と分かったところで、このフロントでフェスを走る人はいないのではないでしょうか。なぜなら4番目・5番目に入る、片面極大特技のカードの特技が発揮されれば、全てのカードが絶大特技のフロントよりも発揮値が劣るからです。これは今回のプログラムで「特技が(リーダー以外)ランダムに発揮される」という仕様を完全に無視したことに起因する問題で、なおかつこのプログラムを実用的でないものたらしめている最大の要因です。

したがって、各フロントは理想的な発揮値のみを考えるのではなく、全ての特技発揮の場合を考え、期待される発揮値を代表値として考える必要があります。これは特技を発揮するアイドルの組み合わせについてもそうですが、ランダム特技の発揮のなされ方についても言える問題です。

「5000本スタドリを用意して……」と言いながら、バクメンを考慮していない

これはこの記事を書いている時に思い当たった問題ですが、よく考えるとこの計算ではバクメンを迎えるのに必要な費用を考えていませんでした。全てのフロントについてほぼ同一条件のバクメンを用意しているので、バクメンの相場を考えていないことによる大きな差は出ないと思われますが、より実用的なプログラムを目指すならここは改良するべき点になると思います。

本当にこれで発揮値の計算は合ってるんだろうか……?

実は発揮値を計算する関数についてはあまりテストをしていないので、場合によっては実際の発揮値とやや異なる値(多分1000未満レベルの誤差)が出ているかもしれません。ここについてももう少し詳しくテストをする必要があります。

とりあえず夏コミに向けては今回完成したプログラムで一つ区切りとして発表の準備をしたいと思いますが、引き続き以上の課題については検討の上で改良を重ねていきたいと思っています。

何か質問やツッコミがあればコメント欄にどうぞ。