前回の結果、目的の関数まで出せました。
第一回のときの話に戻すと、以下の「関数」、「条件」が分かった、ということです。

【関数】
「スキルポイントをx、そのスキルポイントを得るために必要なレベルの経験値をyとしたとき、y=px」となる関数(実際は3次方程式)

【条件】
①xは正の整数
②xは必要となるスキルポイント以上の値

【求めたいもの】
条件を全て満たすxのうち、最小のもの



ということで、必要なパーツは揃いました。
今度はそのパーツを使って、答えを導く必要が有ります。

で、じゃあどのようにしてその答えを求めるのかというと……、手動ではこれまた難しいです。



一回目で使用した例、職業は戦士と僧侶のみ、盾スキル100、ゆうかんスキル88、しんこうスキル100にする場合を考えてみます。

全ての条件を書き出すと以下の通りです。
①盾スキル100以上
②ゆうかんスキル88以上
③しんこうスキル100以上
④戦士で必要なスキルポイント=戦士で振った盾スキルのポイント+ゆうかんスキルのポイント
⑤僧侶で必要なスキルポイント=僧侶で振った盾スキルのポイント+しんこうスキルのポイント

求めたい解は以下の通りです。
・上記の条件を満たす戦士、僧侶それぞれの最低レベル。


分かりやすいように置き換えます。また、経験値を求める関数を(職業)f(x)とします。
■変数1
戦士で取得するスキルポイント=盾スキルのポイント(戦士)+ゆうかん
■変数2
僧侶で取得するスキルポイント=盾スキルのポイント(僧侶)+しんこうしん
■関数
戦士f(変数1)+僧侶f(変数2)
■求める解
条件①②③を満たすもののうち、関数が最小値をとる変数1、2


……とりあえず、手計算で解いてみます。

仮に、戦士側でできるだけスキルを振るとすると、現在(2014/04/25)時点で最高レベルは80、そのときのスキルポイントが170なので、
■戦士…「盾:82」「ゆうかん:88」=スキルポイント170=レベル80=必要経験値4,686,477

一方、僧侶は
■僧侶…「盾:18」「しんこう:100」=スキルポイント118=レベル56=必要経験値1,239,919
というかたちになり、合計必要経験値は5,926,396です。
(※今回の計画において基本職の必要経験値を求める際は、関数y=f(x)にスキルポイント170を代入して計算するのですが、今回はより正確な値を出すためにゲーム内データから拾って計算しています。)


次に、戦士側のレベルを1つ下げるとどうなるかを考えます。
レベル79となり、得られるスキルポイントが167ポイントとなるため、
■戦士…「盾:79」「ゆうかん:88」=スキルポイント177=レベル79=必要経験値4,487,131

一方、僧侶では戦士側で減った3ポイントのスキルポイントを補うにはレベル58にする必要があるので(スキルポイント余り1)
■僧侶…「盾:21」「しんこう:100」=スキルポイント121=レベル58=必要経験値1,418,364
というかたちになり、必要経験値は5,905,495です。前者に比べると減りました

……というように続けていけば、結局、必要なトータルスキルポイント288を戦士・僧侶で均等に144スキルポイントずつ分けるレベル68において、合計必要経験値が5,168,352と最も少なくなります。



答えはでました。出ましたが、現時点では戦士と僧侶に話を限っているため手計算で出せてます。
しかし、これを全ての職業・全てのスキルを考えて手で計算するのは不可能です。





そこで、この手の数学的問題を解いてくれるエクセルの「ソルバー(solver)」という機能を使います。

続きはまた次回。