エクセルを利用したドラクエ10のスキルシミュレータを作成してみました。
既存のツールと異なるのは、そのスキル振り分けに最も効率的=必要な経験値が最も少ない必要職業レベルを算出する点です。
DQ10 スキルシミュレーター: ピリオドの彼方に

実際のツールはピリオドの彼方にの方に置きましたので、こちらではそのツールの技術的解説をしてみます。

まず、あるスキルセットを修得するための最も効率的な各職業のレベルをどのようにしてを算出するのか、その方法について。
例えば、「盾スキル:100」と「ゆうかんスキル:100」を取得するためには、どの職業のレベルをそれぞれどれだけ上げるのが最も経験値が少なくて済むのか=効率的なのか、を求めるということです。

ここが悩んだ点その1でした。どうすれば機械的に求められるのか、と。
機械的に求める、つまり、計算ができるようにしないとコンピュータで解決することができないためです。


複雑な話で悩んだときは単純化です。

ということで、職業は戦士と僧侶のみ、盾スキル100、ゆうかんスキル88、しんこうスキル100にする場合を考えてみました。他は今のところ無視です。

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

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


何か数学の時間にやったことあるなぁ、という感じで、色々インターネットを調べたところ……

はい、最適化問題というやつでした。こういうのです(Wikipedia)
中学か高校の数学の時間にやった記憶がよみがえってきました。苦手な問題だった…。


太郎君は製品Aを30分、Bを50分で作るが1日8時間までしか働けない。一方、次郎君はAを50分、Bを20分で作るが1日6時間までしか働けない。また、それぞれ1個あたりAは200円儲かって、Bは180円儲かる。このとき、最も儲かる1日あたりの製品A、製品Bの製造台数は何台か。



最適化問題では変数(上記の例ではそれぞれの製品の個数)を使って条件の関数をつくるところが最大のポイント……と思います。

話は元のドラクエに戻って、じゃあ、何が必要かというと、特定のスキルポイントを取得するにあたり必要な経験値を算出する関数が必要です。
つまり、スキルポイントをx、経験値をyとしたとき、「y=ax」(一次関数と仮定した場合)となるような関数f(x)を求める必要があります。


長くなったので、まとめ。

■分かったこと
・最適化問題と呼ばれるものだった

■必要なこと
・条件式


続きます。
DQ10 エクセルのソルバーでスキルシミュレーター「関数作成」