wiztoolsのブログwiztoolsのブログwiztoolsの更新情報と中の人の雑記。魔道杯arikaお久しぶりです。タイトルはカッコつけで英語になりました。先日、wiztoolsにこんなツールを実装いたしました。http://wiztools.net/tools/adjust_pt/魔道杯でポイント調整をうまいことラクチンにこなすための計算を勝手にやってくれます。これの技術的な背景とかについて書いていこうと思います。結果そもそも、なにこれ?ボード上には、ゾロ目調整をしたがるプレイヤーが極稀に生息しています。2017しかし、冷静に考えてみてください。どこで何ポイントもらえるか知ってますか?もちろん、知らないと調整できません。なんたって、1位は6000Ptとか6800Ptで、キリがいい数字だからです。みなさんわかりましたか?わかりませんよね。僕もカンニングしないとわからないです。(ちなみに紹介した青北さんは、以前はフィーリングで調整してたとか...こわっ)ポイントを把握してもそこで終わりではありません。ポイント調整のために計算をやらなければいけません。意外かもしれませんが、72時間弱ずっとゲームをやってきた人間にはただの算数も厳しいのです。イメージ図...と言いたいところだが、本当にこれぐらい知能が低下している...という事情があり、長らくポイント調整は敷居が高いものでした。それを改善するためのツールがこれ!というわけです。揃えようね!簡単に作れそうだけど...結論から言いましょう。何も知らないと厳しいかと思います。似たようなツールを作りたい人向けに情報を書き残しておきますので、暇ならお読みください。理論から簡単なケースから考えていきましょう。イベ覇が1回6000Ptだった時、18000Pt稼ぐにはどうしたらいいでしょう?簡単ですね。いうことで、イベ覇を3回クリアすればいいわけです。先ほどの例を踏まえてもう1個考えましょう。イベ絶が1回3900Ptだった時、21900Pt稼ぐにはどうしたらいいでしょうか?...これも難しくはありません。このように、目標ポイントは「どこを」「何回」クリアしたかの合計を取ればいいことになります。調整するにしてもクエストに挑戦する回数を多くしたくはありませんよね。$$にしたい、という制約条件が課されます。めんどそうですね!偉い人は難題を解決する方法を見つけました。Programming)」です。「整数計画法」となります。Programming」です。この記事のタイトルは「整数線型計画法を使ってポイント調整」です!最初から日本語で書けで、具体的にどういう方法?Wikipediaに丸投げします。僕は途中で読む気力がなくなりました。理論を知らなくてもどうにかできちまう方法があります。他人の作ったものをパクればいいんです。ここで、glpk.jsというJavascriptライブラリを使っていきましょう。どこかの紹介サイトにぶんなげたいところですが、素晴らしいことにドキュメントサンプルといったものが一切ないのでここで紹介します。本当にもったいない...概要どういった計算を行うかを記した文字列を投げると、最適化された変数結果がObjectで返ってきます。Demoのサンプルを元に。ここで色々試すといいでしょう。*\Maximizeなら最大化、Minimizeなら最小化。x14x1とかx2は操作する変数。今回の例で言えばCi(クエストクリア回数)に該当する。係数を弄ることができるのがわかりやすいよう1を書いたが、これは省略できる。その後ろに推移条件を書く。88888883900とか2200は言うまでもなく1回あたりの獲得ポイント数(Pi)である。最後の8888888は取得したいポイント。ここでは等式(=)だが、不等式ももちろんできる。b推移条件のところに書いてもいい気がするが、ここに書いたほうがわかりやすい。今回の場合は、クリア回数が負数になることはありえないので全て0以上になるよう指定。*\ここに書いた変数は整数しかとれなくなる。クリア回数は整数しかとれないので全変数を記載。ENDを入れて、計算ジョブ文章は完成。x14ENDこれは、8888888Pt取得する最小のx1~x14を返す計算ジョブとなります。実行方法まず、Workerサイドの動作を記述した以下のjsを保存して、参照できる範囲で置いておきます。以下のリンクを右クリックすれば保存できるはずです。これは公式のサンプルを少し書き換え、CDN化してあるものです。glpk_worker.jsあとは、こんな感じで実行すればOK。true});結果obj.resultはこんな感じで返ってきます。}12345678910111213141516{"x1":2,"x2":0,"x3":0,"x4":0,"x5":0,"x6":0,"x7":0,"x8":0,"x9":0,"x10":0,"x11":0,"x12":0,"x13":2,"x14":1480}あとはこれを加工すれば終わりです。コメントをキャンセルコメントを投稿するにはログインしてください。]TwitterGithubお問い合わせwiztoolsのブログwiztoolsの更新情報と中の人の雑記。