ばばあと反物質とラグランジュの未定乗数法

あいも変わらずクッキー焼きゲームの話です。
http://orteil.dashnet.org/cookieclicker/

終盤は最も高性能の反物質凝集クッキー製造機を何個買うかだけが重要になって、他の物はオマケ以下になってしまいます。ただし、ばばあの性能はばばあの人数に比例してわずかずつですが上昇していきます。果たして、ばばあが反物質に勝つ日は来るのでしょうか。

手持ちに一定のクッキーがあるとき、それぞれの施設を何個買えば最適かという問題を考えます。数学的には、

  • それぞれの施設の数がx1, x2, x3, ...、クッキー焼き性能がP1, P2, P3, ... として、
  • それを全部買うためのコストが一定、という条件のもとで
  • 合計パフォーマンス x1 P1 + x2 P2 + x3 P3 + ... を最大化する

という問題となります。よく出てくるタイプの問題で、こういう一定コストの元でパフォーマンスを最大化する、という問題は最も典型的な例でしょう。この種の問題を解く方法としてラグランジュの未定乗数法があります。数学的な定義を習って知ってる人は多いでしょうが、具体的なイメージを持っている人は少ないでしょう。じつはこのクッキーの問題は具体的にイメージするのに最適な問題となっています。
ラグランジュの未定乗数法の処方箋に基づいてこの問題を解くと、

  • 各施設を1つ買い足すときのコストの施設間の比率が、
  • 各施設を1つ買い足した場合のパフォーマンス増加(この問題では一台あたりの性能)の施設間の比率に等しい

となります。これをどう解釈すればいいでしょうか。
金に糸目を付けなければ、性能のいいものをがんがん買えばよくて、性能に比例した台数を買い増せばOKです。しかしコスト一定という条件があると、あっちを減らしてこっちを増やし、性能が増える方法をうまくやりくりして探すということになります。そういうやりくりを可能な限りやり尽くした状態というのが最適な状態です。
もう小手先のやりくりでこれ以上改善はできない、という状態だと、改善の方向はもう使えるコストを増やすしかない、という状態になります。すなわちパフォーマンスの増える方向と、コストの増える方向が一致する、という状態。これがコスト増加の比率とパフォーマンス増加の比率が一致するという条件の意味です。
これで数学の話は終わり。以下では実際に計算します。

各施設を1つ買い足すときのコストは

  • 初期コスト*(1.15の台数乗)

初期コストは上から

  • 15, 100, 500, 3000, 10000, 40000, 2e5, 1.66e6, 123e6, 4e9

一台あたりの性能は最大強化の状態で上から

  • 2000~20000, 150000~250000, 80, 224, 800, 2080, 8000, 133312, 1.7e6, 17.6e6

(台数は100~1000程度を想定)

施設間のコストの比率がパフォーマンス比率に一致するということは、各施設のパフォーマンス/コスト比が全ての施設で同じ、となる。計算すると

  • パフォーマンス/(初期コスト*1.15^台数)

比較基準として反物質の値を使うと
パフォーマンス/(初期コスト*1.15^台数) 
 = 反物質のパフォーマンス/(反物質の初期コスト*1.15^反物質の台数)
両辺の対数を取ると

  • log(パフォーマンス/初期コスト) - log(1.15)*台数 = Log(17.6e6/4e9) -log(1.15)* 反物質の台数

整理すると

  • 台数 = 反物質の台数 +( log(パフォーマンス/初期コスト) - log(17.6e6/4e9) )/log(1.15)

右辺のプラスなんたらは、ばああとカーソルを除いてずっと一定なので、各施設の台数は常に反物質の台数+一定値、となる。たとえば反物質が100なら、ばああとカーソルの性能増加を考えなければ上から

  • 213, 190, 125, 120, 121, 118, 115, 120, 108, 100

となり、反物質を一台買い足すごとに各施設も全て一台ずつ買えばいい。ばばあとカーソルはパフォーマンスが微増していくけど、たとえ微増でなく100倍1000倍に激増したとしてもlogの中に入っているので影響は小さく、上記の台数の差は数十台程度変化するだけ。
施設の数が増えて反物質1000とかになると、施設の数の差の10程度は無視できるくらいになるので、各施設が全パフォーマンスに寄与する割合は単純に一台当たりのパフォーマンスの比率になり、結局ほとんど反物質だけの寄与になってしまう。このバランスが崩れるのはばばあの単体性能が反物質と並ぶようになる時になる。
ばああの単体性能÷反物質の単体性能 = 0.0015 + 0.000074*ばばあ人数+0.000093*ポータル台数
ポータル台数=ばばあ人数-70程度なので、上式が1になるのはばばあ6018人の時。またカーソルが反物質に並ぶのはトータル建物数が75000の時。

結論:無理。

厳密な計算

ばばあ人数をNとすると、ばばあのパフォーマンスはNに依存するので、

  • N = 反物質の台数 +( log(パフォーマンス(N) /初期コスト) - log(17.6e/4e9) )/log(1.15)

という、両辺にNの入った方程式を解く必要がある。他にポータル台数にも依存するけど、こちらは普通に計算できてNには依存しないので、あらかじめ計算しておいて定数として入れればいい。
上の式を解くには、とりあえずNに適当な値、たとえば反物質と同じ数を入れて右辺を計算し、出てきた新しいNを使ってまたそれを右辺に入れて、ということを何回か繰り返せば計算できる。
カーソルに関してはパフォーマンスにそれ自身の台数が入ってないんで、他の台数をすべて計算した後でパフォーマンスを計算し普通にNを計算すればいい。
もっと厳密なことを言えばNは0以上の整数という制約があるので、これをきちんと求めようと思ったらちょっと大変なことになるけど、まあNが大きければ答えはそんなに違わない。

訂正

カーソル以外のを買うとその装置によるCpS増加の他に、カーソルのパフォーマンスが微増する効果もある。
またポータルはばばあのパフォーマンスを微増させ、ばばあはばばあ自身のパフォーマンスを増加させる。
カーソルのパフォーマンスは

  • 0.8+ 232.6*建物数

ばばあは

  • 26214.4 + 1310.72*ばばあ数+ 1638.4*ポータル数

カーソルの数をNc, ばばあをNb, ポータルをNp, 反物質をNa, カーソル以外の建物合計をNdとする。
解くべき方程式は

  • Nc = Na + log(0.8+ 232.6*Nd)/0.0607 + 19.4
  • Nb = Na + log(1 + 0.05*Nb+ 0.0625*Np + Nc*0.0089)/0.0607 + 78.7
  • Farm = Na + log(1+Nc*2.91)/0.0607 +25.7
  • Fctr = Na + log(1+Nc*1.04)/0.0607 +20.2
  • Mine = Na + log(1+Nc*0.29)/0.0607 +20.8
  • Ship = Na + log(1+Nc*0.11)/0.0607 +17.7
  • Alch = Na + log(1+Nc*0.029)/0.0607 +15.8
  • Np = Na + log(1+Nc*0.0017 +0.012*Nb)/0.0607 +20.8
  • TM = Na + log(1+Nc*0.00013)/0.0607 +8.3

具体例

<-カーソル                                反物質->
  C    GM   FM   FC   MN   SP   AL   PT   TM   AM
 194  171  156  143  135  125  114  108   93   80
 204  181  166  154  145  135  125  118  103   90
 210  186  172  159  150  141  130  123  109  100
 反物質アップグレード購入
 215  191  177  164  155  146  135  128  114  105
 220  196  182  169  161  151  140  133  119  110
 カーソル240+アップグレード購入
 240  199  185  172  164  154  143  134  119  110
 240  204  190  177  169  159  148  139  124  115
 240  209  195  182  174  164  153  144  129  120
 244  219  205  192  184  174  163  154  139  130
 254  229  215  203  194  184  173  164  149  140
 264  239  226  213  204  195  184  174  159  150